Try to do something if st_size, st_uid, st_gid are too big for an IV;
[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 Thu Nov 11 21:36:00 EET 1999 [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_fs_data_s=''
358 d_fseeko=''
359 d_fsetpos=''
360 d_fstatfs=''
361 d_ftello=''
362 d_ftime=''
363 d_gettimeod=''
364 d_Gconvert=''
365 d_getgrent=''
366 d_getgrps=''
367 d_gethbyaddr=''
368 d_gethbyname=''
369 d_gethent=''
370 aphostname=''
371 d_gethname=''
372 d_phostname=''
373 d_uname=''
374 d_gethostprotos=''
375 d_getlogin=''
376 d_getmnt=''
377 d_getmntent=''
378 d_getnbyaddr=''
379 d_getnbyname=''
380 d_getnent=''
381 d_getnetprotos=''
382 d_getpent=''
383 d_getpgid=''
384 d_getpgrp2=''
385 d_bsdgetpgrp=''
386 d_getpgrp=''
387 d_getppid=''
388 d_getprior=''
389 d_getpbyname=''
390 d_getpbynumber=''
391 d_getprotoprotos=''
392 d_getpwent=''
393 d_getsent=''
394 d_getservprotos=''
395 d_getspent=''
396 d_getspnam=''
397 d_getsbyname=''
398 d_getsbyport=''
399 d_gnulibc=''
400 d_hasmntopt=''
401 d_htonl=''
402 d_inetaton=''
403 d_isascii=''
404 d_killpg=''
405 d_lchown=''
406 d_ldbl_dig=''
407 d_link=''
408 d_locconv=''
409 d_lockf=''
410 d_longdbl=''
411 longdblsize=''
412 d_longlong=''
413 longlongsize=''
414 d_lstat=''
415 d_mblen=''
416 d_mbstowcs=''
417 d_mbtowc=''
418 d_memchr=''
419 d_memcmp=''
420 d_memcpy=''
421 d_memmove=''
422 d_memset=''
423 d_mkdir=''
424 d_mkfifo=''
425 d_mktime=''
426 d_msg=''
427 d_msgctl=''
428 d_msgget=''
429 d_msgrcv=''
430 d_msgsnd=''
431 d_nice=''
432 d_open3=''
433 d_fpathconf=''
434 d_pathconf=''
435 d_pause=''
436 d_pipe=''
437 d_poll=''
438 d_portable=''
439 d_old_pthread_create_joinable=''
440 old_pthread_create_joinable=''
441 d_pthread_yield=''
442 d_sched_yield=''
443 sched_yield=''
444 d_readdir=''
445 d_rewinddir=''
446 d_seekdir=''
447 d_telldir=''
448 d_readlink=''
449 d_rename=''
450 d_rmdir=''
451 d_safebcpy=''
452 d_safemcpy=''
453 d_sanemcmp=''
454 d_select=''
455 d_sem=''
456 d_semctl=''
457 d_semget=''
458 d_semop=''
459 d_setegid=''
460 d_seteuid=''
461 d_setgrent=''
462 d_setgrps=''
463 d_sethent=''
464 d_setlinebuf=''
465 d_setlocale=''
466 d_setnent=''
467 d_setpent=''
468 d_setpgid=''
469 d_setpgrp2=''
470 d_bsdsetpgrp=''
471 d_setpgrp=''
472 d_setprior=''
473 d_setpwent=''
474 d_setregid=''
475 d_setresgid=''
476 d_setresuid=''
477 d_setreuid=''
478 d_setrgid=''
479 d_setruid=''
480 d_setsent=''
481 d_setsid=''
482 d_setspent=''
483 d_setvbuf=''
484 d_sfio=''
485 usesfio=''
486 d_shm=''
487 d_shmat=''
488 d_shmatprototype=''
489 shmattype=''
490 d_shmctl=''
491 d_shmdt=''
492 d_shmget=''
493 d_sigaction=''
494 d_sigsetjmp=''
495 d_msg_ctrunc=''
496 d_msg_dontroute=''
497 d_msg_oob=''
498 d_msg_peek=''
499 d_msg_proxy=''
500 d_oldsock=''
501 d_scm_rights=''
502 d_socket=''
503 d_sockpair=''
504 sockethdr=''
505 socketlib=''
506 d_sqrtl=''
507 d_statblks=''
508 d_statfs_f_flags=''
509 d_statfs_s=''
510 d_fstatvfs=''
511 d_statvfs=''
512 d_stdio_cnt_lval=''
513 d_stdio_ptr_lval=''
514 d_stdiobase=''
515 d_stdstdio=''
516 stdio_base=''
517 stdio_bufsiz=''
518 stdio_cnt=''
519 stdio_filbuf=''
520 stdio_ptr=''
521 d_index=''
522 d_strchr=''
523 d_strcoll=''
524 d_strctcpy=''
525 d_strerrm=''
526 d_strerror=''
527 d_sysernlst=''
528 d_syserrlst=''
529 d_strtod=''
530 d_strtol=''
531 d_strtoul=''
532 d_strxfrm=''
533 d_symlink=''
534 d_syscall=''
535 d_sysconf=''
536 d_system=''
537 d_tcgetpgrp=''
538 d_tcsetpgrp=''
539 d_telldirproto=''
540 d_time=''
541 timetype=''
542 clocktype=''
543 d_times=''
544 d_truncate=''
545 d_tzname=''
546 d_umask=''
547 d_semctl_semid_ds=''
548 d_semctl_semun=''
549 d_union_semun=''
550 d_ustat=''
551 d_vfork=''
552 usevfork=''
553 d_voidsig=''
554 signal_t=''
555 d_volatile=''
556 d_charvspr=''
557 d_vprintf=''
558 d_wait4=''
559 d_waitpid=''
560 d_wcstombs=''
561 d_wctomb=''
562 dlext=''
563 cccdlflags=''
564 ccdlflags=''
565 dlsrc=''
566 ld=''
567 lddlflags=''
568 usedl=''
569 doublesize=''
570 ebcdic=''
571 fflushNULL=''
572 fflushall=''
573 fpossize=''
574 fpostype=''
575 gidformat=''
576 gidsign=''
577 gidsize=''
578 gidtype=''
579 groupstype=''
580 h_fcntl=''
581 h_sysfile=''
582 i_arpainet=''
583 db_hashtype=''
584 db_prefixtype=''
585 i_db=''
586 i_dbm=''
587 i_rpcsvcdbm=''
588 d_dirnamlen=''
589 direntrytype=''
590 i_dirent=''
591 i_dld=''
592 i_dlfcn=''
593 i_fcntl=''
594 i_float=''
595 i_gdbm=''
596 d_grpasswd=''
597 i_grp=''
598 d_int64t=''
599 i_inttypes=''
600 i_limits=''
601 i_locale=''
602 i_machcthr=''
603 i_malloc=''
604 i_math=''
605 i_memory=''
606 i_mntent=''
607 i_ndbm=''
608 i_netdb=''
609 i_neterrno=''
610 i_netinettcp=''
611 i_niin=''
612 i_sysin=''
613 i_poll=''
614 i_pthread=''
615 d_pwage=''
616 d_pwchange=''
617 d_pwclass=''
618 d_pwcomment=''
619 d_pwexpire=''
620 d_pwgecos=''
621 d_pwpasswd=''
622 d_pwquota=''
623 i_pwd=''
624 i_sfio=''
625 i_shadow=''
626 i_socks=''
627 i_stddef=''
628 i_stdlib=''
629 i_string=''
630 strings=''
631 i_sysaccess=''
632 i_sysdir=''
633 i_sysfile=''
634 d_voidtty=''
635 i_bsdioctl=''
636 i_sysfilio=''
637 i_sysioctl=''
638 i_syssockio=''
639 i_sysmount=''
640 i_sysndir=''
641 i_sysparam=''
642 i_sysresrc=''
643 i_syssecrt=''
644 i_sysselct=''
645 i_sysstat=''
646 i_sysstatfs=''
647 i_sysstatvfs=''
648 i_systimes=''
649 i_systypes=''
650 i_sysuio=''
651 i_sysun=''
652 i_sysvfs=''
653 i_syswait=''
654 i_sgtty=''
655 i_termio=''
656 i_termios=''
657 i_systime=''
658 i_systimek=''
659 i_time=''
660 timeincl=''
661 i_unistd=''
662 i_ustat=''
663 i_utime=''
664 i_values=''
665 i_stdarg=''
666 i_varargs=''
667 i_varhdr=''
668 i_vfork=''
669 installprefix=''
670 installprefixexp=''
671 installstyle=''
672 installusrbinperl=''
673 intsize=''
674 longsize=''
675 shortsize=''
676 d_fpos64_t=''
677 d_off64_t=''
678 libc=''
679 ldlibpthname=''
680 libperl=''
681 shrpenv=''
682 useshrplib=''
683 glibpth=''
684 libpth=''
685 loclibpth=''
686 plibpth=''
687 xlibpth=''
688 ignore_versioned_solibs=''
689 libs=''
690 lns=''
691 d_PRIEldbl=''
692 d_PRIFldbl=''
693 d_PRIGldbl=''
694 d_PRIeldbl=''
695 d_PRIfldbl=''
696 d_PRIgldbl=''
697 sPRIEldbl=''
698 sPRIFldbl=''
699 sPRIGldbl=''
700 sPRIeldbl=''
701 sPRIfldbl=''
702 sPRIgldbl=''
703 lseeksize=''
704 lseektype=''
705 make_set_make=''
706 d_mymalloc=''
707 freetype=''
708 mallocobj=''
709 mallocsrc=''
710 malloctype=''
711 usemymalloc=''
712 installman1dir=''
713 man1dir=''
714 man1direxp=''
715 man1ext=''
716 installman3dir=''
717 man3dir=''
718 man3direxp=''
719 man3ext=''
720 huge=''
721 large=''
722 medium=''
723 models=''
724 small=''
725 split=''
726 modetype=''
727 multiarch=''
728 mydomain=''
729 myhostname=''
730 phostname=''
731 c=''
732 n=''
733 d_eofnblk=''
734 eagain=''
735 o_nonblock=''
736 rd_nodata=''
737 netdb_hlen_type=''
738 netdb_host_type=''
739 netdb_name_type=''
740 netdb_net_type=''
741 groupcat=''
742 hostcat=''
743 passcat=''
744 orderlib=''
745 ranlib=''
746 package=''
747 spackage=''
748 pager=''
749 apiversion=''
750 patchlevel=''
751 subversion=''
752 version=''
753 perladmin=''
754 perlpath=''
755 i16size=''
756 i16type=''
757 i32size=''
758 i32type=''
759 i64size=''
760 i64type=''
761 i8size=''
762 i8type=''
763 ivsize=''
764 ivtype=''
765 nvsize=''
766 nvtype=''
767 u16size=''
768 u16type=''
769 u32size=''
770 u32type=''
771 u64size=''
772 u64type=''
773 u8size=''
774 u8type=''
775 uvsize=''
776 uvtype=''
777 ivdformat=''
778 uvoformat=''
779 uvuformat=''
780 uvxformat=''
781 pidtype=''
782 prefix=''
783 prefixexp=''
784 installprivlib=''
785 privlib=''
786 privlibexp=''
787 prototype=''
788 ptrsize=''
789 d_PRIX64=''
790 d_PRId64=''
791 d_PRIi64=''
792 d_PRIo64=''
793 d_PRIu64=''
794 d_PRIx64=''
795 sPRIX64=''
796 sPRId64=''
797 sPRIi64=''
798 sPRIo64=''
799 sPRIu64=''
800 sPRIx64=''
801 d_quad=''
802 quadcase=''
803 quadtype=''
804 uquadtype=''
805 drand01=''
806 randbits=''
807 randfunc=''
808 randseedtype=''
809 seedfunc=''
810 installscript=''
811 scriptdir=''
812 scriptdirexp=''
813 selectminbits=''
814 selecttype=''
815 sh=''
816 sig_count=''
817 sig_name=''
818 sig_name_init=''
819 sig_num=''
820 sig_num_init=''
821 installsitearch=''
822 sitearch=''
823 sitearchexp=''
824 installsitebin=''
825 sitebin=''
826 sitebinexp=''
827 installsitelib=''
828 sitelib=''
829 sitelibexp=''
830 siteprefix=''
831 siteprefixexp=''
832 sizesize=''
833 sizetype=''
834 so=''
835 sharpbang=''
836 shsharp=''
837 spitshell=''
838 src=''
839 ssizetype=''
840 startperl=''
841 startsh=''
842 stdchar=''
843 d_stdio_stream_array=''
844 stdio_stream_array=''
845 d_strtoull=''
846 sysman=''
847 trnl=''
848 uidformat=''
849 uidsign=''
850 uidsize=''
851 uidtype=''
852 archname64=''
853 use64bits=''
854 uselargefiles=''
855 uselongdouble=''
856 uselonglong=''
857 usemorebits=''
858 usemultiplicity=''
859 nm_opt=''
860 nm_so_opt=''
861 runnm=''
862 usenm=''
863 useperlio=''
864 usesocks=''
865 d_oldpthreads=''
866 usethreads=''
867 incpath=''
868 mips_type=''
869 usrinc=''
870 d_vendorbin=''
871 installvendorbin=''
872 vendorbin=''
873 vendorbinexp=''
874 d_vendorlib=''
875 installvendorlib=''
876 vendorlib=''
877 vendorlibexp=''
878 usevendorprefix=''
879 vendorprefix=''
880 vendorprefixexp=''
881 defvoidused=''
882 voidflags=''
883 pm_apiversion=''
884 xs_apiversion=''
885 CONFIG=''
886
887 define='define'
888 undef='undef'
889 smallmach='pdp11 i8086 z8000 i80286 iAPX286'
890 rmlist=''
891
892 : We must find out about Eunice early
893 eunicefix=':'
894 if test -f /etc/unixtovms; then
895         eunicefix=/etc/unixtovms
896 fi
897 if test -f /etc/unixtovms.exe; then
898         eunicefix=/etc/unixtovms.exe
899 fi
900
901 i_whoami=''
902 : Possible local include directories to search.
903 : Set locincpth to "" in a hint file to defeat local include searches.
904 locincpth="/usr/local/include /opt/local/include /usr/gnu/include"
905 locincpth="$locincpth /opt/gnu/include /usr/GNU/include /opt/GNU/include"
906 :
907 : no include file wanted by default
908 inclwanted=''
909
910 : list of known cpp symbols, sorted alphabetically
911 al="AMIX BIT_MSF BSD BSD4_3 BSD_NET2 CMU CRAY DGUX DOLPHIN DPX2"
912 al="$al GO32 GOULD_PN HP700 I386 I80960 I960 Lynx M68000 M68K MACH"
913 al="$al MIPSEB MIPSEL MSDOS MTXINU MULTIMAX MVS"
914 al="$al M_COFF M_I186 M_I286 M_I386 M_I8086 M_I86 M_I86SM"
915 al="$al M_SYS3 M_SYS5 M_SYSIII M_SYSV M_UNIX M_XENIX"
916 al="$al NeXT OCS88 OSF1 PARISC PC532 PORTAR POSIX"
917 al="$al PWB R3000 RES RISC6000 RT Sun386i SVR3 SVR4 SVR5"
918 al="$al SYSTYPE_BSD SYSTYPE_SVR4 SYSTYPE_SYSV Tek4132 Tek4300"
919 al="$al UMAXV USGr4 USGr4_2 UTEK UTS UTek UnicomPBB UnicomPBD Utek"
920 al="$al VMS Xenix286"
921 al="$al _AIX _AIX32 _AIX370 _AIX41 _AM29000 _COFF _CRAY _CX_UX _EPI"
922 al="$al _IBMESA _IBMR2 _M88K _M88KBCS_TARGET _POWER"
923 al="$al _MIPSEB _MIPSEL _M_COFF _M_I86 _M_I86SM _M_SYS3"
924 al="$al _M_SYS5 _M_SYSIII _M_SYSV _M_UNIX _M_XENIX _NLS _PGC_ _R3000"
925 al="$al _SYSTYPE_BSD _SYSTYPE_BSD43 _SYSTYPE_SVR4"
926 al="$al _SYSTYPE_SYSV _SYSV3 _U370 _UNICOS"
927 al="$al __386BSD__ __BIG_ENDIAN __BIG_ENDIAN__ __BSD_4_4__"
928 al="$al __DGUX__ __DPX2__ __H3050R __H3050RX"
929 al="$al __LITTLE_ENDIAN __LITTLE_ENDIAN__ __MACH__"
930 al="$al __MIPSEB __MIPSEB__ __MIPSEL __MIPSEL__"
931 al="$al __Next__ __OSF1__ __PARAGON__ __PGC__ __PWB __STDC__"
932 al="$al __SVR4_2__ __UMAXV__"
933 al="$al ____386BSD____ __alpha __alpha__ __amiga"
934 al="$al __bsd4_2 __bsd4_2__ __bsdi__ __convex__"
935 al="$al __host_mips__"
936 al="$al __hp9000s200 __hp9000s300 __hp9000s400 __hp9000s500"
937 al="$al __hp9000s500 __hp9000s700 __hp9000s800"
938 al="$al __hppa __hpux __hp_osf __i286 __i286__ __i386 __i386__"
939 al="$al __i486 __i486__ __i860 __i860__ __ibmesa __ksr1__ __linux__"
940 al="$al __m68k __m68k__ __m88100__ __m88k __m88k__"
941 al="$al __mc68000 __mc68000__ __mc68020 __mc68020__"
942 al="$al __mc68030 __mc68030__ __mc68040 __mc68040__"
943 al="$al __mc88100 __mc88100__ __mips __mips__"
944 al="$al __motorola__ __osf__ __pa_risc __sparc__ __stdc__"
945 al="$al __sun __sun__ __svr3__ __svr4__ __ultrix __ultrix__"
946 al="$al __unix __unix__ __uxpm__ __uxps__ __vax __vax__"
947 al="$al _host_mips _mips _unix"
948 al="$al a29k aegis aix aixpc alliant alpha am29000 amiga ansi ardent"
949 al="$al apollo ardent att386 att3b"
950 al="$al bsd bsd43 bsd4_2 bsd4_3 bsd4_4 bsdi bull"
951 al="$al cadmus clipper concurrent convex cray ctix"
952 al="$al dmert encore gcos gcx gimpel gould"
953 al="$al hbullx20 hcx host_mips hp200 hp300 hp700 hp800"
954 al="$al hp9000 hp9000s300 hp9000s400 hp9000s500"
955 al="$al hp9000s700 hp9000s800 hp9k8 hppa hpux"
956 al="$al i186 i286 i386 i486 i8086"
957 al="$al i80960 i860 iAPX286 ibm ibm032 ibmrt interdata is68k"
958 al="$al ksr1 linux luna luna88k m68k m88100 m88k"
959 al="$al mc300 mc500 mc68000 mc68010 mc68020 mc68030"
960 al="$al mc68040 mc68060 mc68k mc68k32 mc700"
961 al="$al mc88000 mc88100 merlin mert mips mvs n16"
962 al="$al ncl_el ncl_mr"
963 al="$al news1500 news1700 news1800 news1900 news3700"
964 al="$al news700 news800 news900 ns16000 ns32000"
965 al="$al ns32016 ns32332 ns32k nsc32000 os osf"
966 al="$al parisc pc532 pdp11 plexus posix pyr"
967 al="$al riscix riscos scs sequent sgi sinix sony sony_news"
968 al="$al sonyrisc sparc sparclite spectrum stardent stratos"
969 al="$al sun sun3 sun386 svr4 sysV68 sysV88"
970 al="$al titan tower tower32 tower32_200 tower32_600 tower32_700"
971 al="$al tower32_800 tower32_850 tss u370 u3b u3b2 u3b20 u3b200"
972 al="$al u3b20d u3b5 ultrix unix unixpc unos vax venix vms"
973 al="$al xenix z8000"
974
975 : Trailing extension.  Override this in a hint file, if needed.
976 _exe=''
977 : Extra object files, if any, needed on this platform.
978 archobjs=''
979 groupstype=''
980 : change the next line if compiling for Xenix/286 on Xenix/386
981 xlibpth='/usr/lib/386 /lib/386'
982
983 : Possible local library directories to search.
984 loclibpth="/usr/local/lib /opt/local/lib /usr/gnu/lib"
985 loclibpth="$loclibpth /opt/gnu/lib /usr/GNU/lib /opt/GNU/lib"
986
987 : general looking path for locating libraries
988 glibpth="/shlib /usr/shlib /lib/pa1.1 /usr/lib/large"
989 glibpth="$glibpth /lib /usr/lib $xlibpth"
990 glibpth="$glibpth /lib/large /usr/lib/small /lib/small"
991 glibpth="$glibpth /usr/ccs/lib /usr/ucblib /usr/local/lib"
992
993 : Private path used by Configure to find libraries.  Its value
994 : is prepended to libpth. This variable takes care of special
995 : machines, like the mips.  Usually, it should be empty.
996 plibpth=''
997
998 : default library list
999 libswanted=''
1000 : some systems want to use only the non-versioned libso:s
1001 ignore_versioned_solibs=''
1002 : full support for void wanted by default
1003 defvoidused=15
1004
1005 : set useposix=false in your hint file to disable the POSIX extension.
1006 useposix=true
1007 : set useopcode=false in your hint file to disable the Opcode extension.
1008 useopcode=true
1009 : set usemultiplicity on the Configure command line to enable multiplicity.
1010 : set usesocks on the Configure command line to enable socks.
1011 : set usethreads on the Configure command line to enable threads.
1012 : List of libraries we want.
1013 : If anyone needs -lnet, put it in a hint file.
1014 libswanted='sfio socket inet nsl nm ndbm gdbm dbm db malloc dl'
1015 libswanted="$libswanted dld ld sun m c cposix posix"
1016 libswanted="$libswanted ndir dir crypt sec"
1017 libswanted="$libswanted ucb bsd BSD PW x"
1018 : We probably want to search /usr/shlib before most other libraries.
1019 : This is only used by the lib/ExtUtils/MakeMaker.pm routine extliblist.
1020 glibpth=`echo " $glibpth " | sed -e 's! /usr/shlib ! !'`
1021 glibpth="/usr/shlib $glibpth"
1022 : Do not use vfork unless overridden by a hint file.
1023 usevfork=false
1024
1025 : Find the basic shell for Bourne shell scripts
1026 case "$sh" in
1027 '')
1028         case "$SYSTYPE" in
1029         *bsd*|sys5*) xxx="/$SYSTYPE/bin/sh";;
1030         *) xxx='/bin/sh';;
1031         esac
1032         if test -f "$xxx"; then
1033                 sh="$xxx"
1034         else
1035                 : Build up a list and do a single loop so we can 'break' out.
1036                 pth=`echo $PATH | sed -e "s/$p_/ /g"`
1037                 for xxx in sh bash ksh pdksh ash; do
1038                         for p in $pth; do
1039                                 try="$try ${p}/${xxx}"
1040                         done
1041                 done
1042                 for xxx in $try; do
1043                         if test -f "$xxx"; then
1044                                 sh="$xxx";
1045                                 break
1046                         elif test -f "$xxx.exe"; then
1047                                 sh="$xxx";
1048                                 break
1049                         fi
1050                 done
1051         fi
1052         ;;
1053 esac
1054
1055 case "$sh" in
1056 '')     cat <<EOM >&2
1057 $me:  Fatal Error:  I can't find a Bourne Shell anywhere.  
1058
1059 Usually it's in /bin/sh.  How did you even get this far?
1060 Please contact me (Perl Maintainers) at perlbug@perl.com and 
1061 we'll try to straighten this all out.
1062 EOM
1063         exit 1
1064         ;;
1065 esac
1066
1067 : see if sh knows # comments
1068 if `$sh -c '#' >/dev/null 2>&1`; then
1069         shsharp=true
1070         spitshell=cat
1071         xcat=/bin/cat
1072         test -f $xcat || xcat=/usr/bin/cat
1073         echo "#!$xcat" >try
1074         $eunicefix try
1075         chmod +x try
1076         ./try > today
1077         if test -s today; then
1078                 sharpbang='#!'
1079         else
1080                 echo "#! $xcat" > try
1081                 $eunicefix try
1082                 chmod +x try
1083                 ./try > today
1084                 if test -s today; then
1085                         sharpbang='#! '
1086                 else
1087                         sharpbang=': use '
1088                 fi
1089         fi
1090 else
1091         echo " "
1092         echo "Your $sh doesn't grok # comments--I will strip them later on."
1093         shsharp=false
1094         cd ..
1095         echo "exec grep -v '^[  ]*#'" >spitshell
1096         chmod +x spitshell
1097         $eunicefix spitshell
1098         spitshell=`pwd`/spitshell
1099         cd UU
1100         echo "I presume that if # doesn't work, #! won't work either!"
1101         sharpbang=': use '
1102 fi
1103 rm -f try today
1104
1105 : figure out how to guarantee sh startup
1106 case "$startsh" in
1107 '') startsh=${sharpbang}${sh} ;;
1108 *)
1109 esac
1110 cat >try <<EOSS
1111 $startsh
1112 set abc
1113 test "$?abc" != 1
1114 EOSS
1115
1116 chmod +x try
1117 $eunicefix try
1118 if ./try; then
1119         : echo "Yup, it does."
1120 else
1121         echo "Hmm... '$startsh' does not guarantee sh startup..."
1122         echo "You may have to fix up the shell scripts to make sure $sh runs them."
1123 fi
1124 rm -f try
1125
1126
1127 : Save command line options in file UU/cmdline.opt for later use in
1128 : generating config.sh.
1129 cat > cmdline.opt <<EOSH
1130 # Configure command line arguments.
1131 config_arg0='$0'
1132 config_args='$*'
1133 config_argc=$#
1134 EOSH
1135 argn=1
1136 for arg in "$@"; do
1137         cat >>cmdline.opt <<EOSH
1138 config_arg$argn='$arg'
1139 EOSH
1140         argn=`expr $argn + 1`
1141 done
1142
1143 : produce awk script to parse command line options
1144 cat >options.awk <<'EOF'
1145 BEGIN {
1146         optstr = "A:dD:eEf:hKOrsSU:V";  # getopt-style specification
1147
1148         len = length(optstr);
1149         for (i = 1; i <= len; i++) {
1150                 c = substr(optstr, i, 1);
1151                 if (i < len) a = substr(optstr, i + 1, 1); else a = "";
1152                 if (a == ":") {
1153                         arg[c] = 1;
1154                         i++;
1155                 }
1156                 opt[c] = 1;
1157         }
1158 }
1159 {
1160         expect = 0;
1161         str = $0;
1162         if (substr(str, 1, 1) != "-") {
1163                 printf("'%s'\n", str);
1164                 next;
1165         }
1166         len = length($0);
1167         for (i = 2; i <= len; i++) {
1168                 c = substr(str, i, 1);
1169                 if (!opt[c]) {
1170                         printf("-%s\n", substr(str, i));
1171                         next;
1172                 }
1173                 printf("-%s\n", c);
1174                 if (arg[c]) {
1175                         if (i < len)
1176                                 printf("'%s'\n", substr(str, i + 1));
1177                         else
1178                                 expect = 1;
1179                         next;
1180                 }
1181         }
1182 }
1183 END {
1184         if (expect)
1185                 print "?";
1186 }
1187 EOF
1188
1189 : process the command line options
1190 set X `for arg in "$@"; do echo "X$arg"; done |
1191         sed -e s/X// | awk -f options.awk`
1192 eval "set $*"
1193 shift
1194 rm -f options.awk
1195
1196 : set up default values
1197 fastread=''
1198 reuseval=false
1199 config_sh=''
1200 alldone=''
1201 error=''
1202 silent=''
1203 extractsh=''
1204 override=''
1205 knowitall=''
1206 rm -f optdef.sh posthint.sh
1207 cat >optdef.sh <<EOS
1208 $startsh
1209 EOS
1210
1211
1212 : option parsing
1213 while test $# -gt 0; do
1214         case "$1" in
1215         -d) shift; fastread=yes;;
1216         -e) shift; alldone=cont;;
1217         -f)
1218                 shift
1219                 cd ..
1220                 if test -r "$1"; then
1221                         config_sh="$1"
1222                 else
1223                         echo "$me: cannot read config file $1." >&2
1224                         error=true
1225                 fi
1226                 cd UU
1227                 shift;;
1228         -h) shift; error=true;;
1229         -r) shift; reuseval=true;;
1230         -s) shift; silent=true; realsilent=true;;
1231         -E) shift; alldone=exit;;
1232         -K) shift; knowitall=true;;
1233         -O) shift; override=true;;
1234         -S) shift; silent=true; extractsh=true;;
1235         -D)
1236                 shift
1237                 case "$1" in
1238                 *=)
1239                         echo "$me: use '-U symbol=', not '-D symbol='." >&2
1240                         echo "$me: ignoring -D $1" >&2
1241                         ;;
1242                 *=*) echo "$1" | \
1243                                 sed -e "s/'/'\"'\"'/g" -e "s/=\(.*\)/='\1'/" >> optdef.sh;;
1244                 *) echo "$1='define'" >> optdef.sh;;
1245                 esac
1246                 shift
1247                 ;;
1248         -U)
1249                 shift
1250                 case "$1" in
1251                 *=) echo "$1" >> optdef.sh;;
1252                 *=*)
1253                         echo "$me: use '-D symbol=val', not '-U symbol=val'." >&2
1254                         echo "$me: ignoring -U $1" >&2
1255                         ;;
1256                 *) echo "$1='undef'" >> optdef.sh;;
1257                 esac
1258                 shift
1259                 ;;
1260         -A)
1261             shift
1262             xxx=''
1263             yyy="$1"
1264             zzz=''
1265             uuu=undef
1266             case "$yyy" in
1267             *=*) zzz=`echo $yyy|sed 's!=.*!!'`
1268                  case "$zzz" in
1269                  *:*) zzz='' ;;
1270                  *)   xxx=append
1271                       zzz=" "`echo $yyy|sed 's!^[^=]*=!!'` 
1272                       yyy=`echo $yyy|sed 's!=.*!!'` ;;
1273                  esac
1274                  ;;
1275             esac
1276             case "$xxx" in
1277             '')  case "$yyy" in
1278                  *:*) xxx=`echo $yyy|sed 's!:.*!!'`
1279                       yyy=`echo $yyy|sed 's!^[^:]*:!!'`
1280                       zzz=`echo $yyy|sed 's!^[^=]*=!!'`
1281                       yyy=`echo $yyy|sed 's!=.*!!'` ;;
1282                  *)   xxx=`echo $yyy|sed 's!:.*!!'`
1283                       yyy=`echo $yyy|sed 's!^[^:]*:!!'` ;;
1284                  esac
1285                  ;;       
1286             esac
1287             case "$xxx" in
1288             append)
1289                 echo "$yyy=\"\${$yyy}$zzz\""    >> posthint.sh ;;
1290             clear)
1291                 echo "$yyy=''"                  >> posthint.sh ;;
1292             define)
1293                 case "$zzz" in
1294                 '') zzz=define ;;
1295                 esac
1296                 echo "$yyy='$zzz'"              >> posthint.sh ;;
1297             eval)
1298                 echo "eval \"$yyy=$zzz\""       >> posthint.sh ;;
1299             prepend)
1300                 echo "$yyy=\"$zzz\${$yyy}\""    >> posthint.sh ;;
1301             undef)
1302                 case "$zzz" in
1303                 '') zzz="$uuu" ;;
1304                 esac
1305                 echo "$yyy=$zzz"                >> posthint.sh ;;
1306             *)  echo "$me: unknown -A command '$xxx', ignoring -A $1" >&2 ;;
1307             esac
1308             ;;
1309         -V) echo "$me generated by metaconfig 3.0 PL70." >&2
1310             exit 0;;
1311         --) break;;
1312         -*) echo "$me: unknown option $1" >&2; shift; error=true;;
1313         *) break;;
1314         esac
1315 done
1316
1317 case "$error" in
1318 true)
1319         cat >&2 <<EOM
1320 Usage: $me [-dehrsEKOSV] [-f config.sh] [-D symbol] [-D symbol=value]
1321                  [-U symbol] [-U symbol=] [-A command:symbol...]
1322   -d : use defaults for all answers.
1323   -e : go on without questioning past the production of config.sh.
1324   -f : specify an alternate default configuration file.
1325   -h : print this help message and exit (with an error status).
1326   -r : reuse C symbols value if possible (skips costly nm extraction).
1327   -s : silent mode, only echoes questions and essential information.
1328   -D : define symbol to have some value:
1329          -D symbol         symbol gets the value 'define'
1330          -D symbol=value   symbol gets the value 'value'
1331   -E : stop at the end of questions, after having produced config.sh.
1332   -K : do not use unless you know what you are doing.
1333   -O : let -D and -U override definitions from loaded configuration file.
1334   -S : perform variable substitutions on all .SH files (can mix with -f)
1335   -U : undefine symbol:
1336          -U symbol    symbol gets the value 'undef'
1337          -U symbol=   symbol gets completely empty
1338   -A : manipulate symbol after the platform specific hints have been applied:
1339          -A symbol=value                append " "value to symbol
1340          -A append:symbol=value         append value to symbol
1341          -A define:symbol=value         define symbol to have value
1342          -A clear:symbol                define symbol to be ''
1343          -A define:symbol               define symbol to be 'define'
1344          -A eval:symbol=value           define symbol to be eval of value
1345          -A prepend:symbol=value        prepend value to symbol
1346          -A undef:symbol                define symbol to be 'undef'
1347          -A undef:symbol=               define symbol to be ''
1348   -V : print version number and exit (with a zero status).
1349 EOM
1350         exit 1
1351         ;;
1352 esac
1353
1354 : Sanity checks
1355 case "$fastread$alldone" in
1356 yescont|yesexit) ;;
1357 *)
1358         if test ! -t 0; then
1359                 echo "Say 'sh Configure', not 'sh <Configure'"
1360                 exit 1
1361         fi
1362         ;;
1363 esac
1364
1365 exec 4>&1
1366 case "$silent" in
1367 true) exec 1>/dev/null;;
1368 esac
1369
1370 : run the defines and the undefines, if any, but leave the file out there...
1371 touch optdef.sh
1372 . ./optdef.sh
1373 : create the posthint manipulation script and leave the file out there...
1374 touch posthint.sh
1375
1376 : set package name
1377 package=perl5
1378 first=`echo $package | sed -e 's/^\(.\).*/\1/'`
1379 last=`echo $package | sed -e 's/^.\(.*\)/\1/'`
1380 case "`echo AbyZ | tr '[:lower:]' '[:upper:]' 2>/dev/null`" in
1381 ABYZ) spackage=`echo $first | tr '[:lower:]' '[:upper:]'`$last;;
1382 *) spackage=`echo $first | tr '[a-z]' '[A-Z]'`$last;;
1383 esac
1384
1385 : Some greps do not return status, grrr.
1386 echo "grimblepritz" >grimble
1387 if grep blurfldyick grimble >/dev/null 2>&1 ; then
1388         contains=contains
1389 elif grep grimblepritz grimble >/dev/null 2>&1 ; then
1390         contains=grep
1391 else
1392         contains=contains
1393 fi
1394 rm -f grimble
1395 : the following should work in any shell
1396 case "$contains" in
1397 contains*)
1398         echo " "
1399         echo "AGH!  Grep doesn't return a status.  Attempting remedial action."
1400         cat >contains <<'EOSS'
1401 grep "$1" "$2" >.greptmp && cat .greptmp && test -s .greptmp
1402 EOSS
1403 chmod +x contains
1404 esac
1405
1406 : Find the path to the source tree
1407 case "$src" in
1408 '') case "$0" in
1409     */*) src=`echo $0 | sed -e 's%/[^/][^/]*$%%'`
1410          case "$src" in
1411          /*)    ;;
1412          *)     src=`cd ../$src && pwd` ;;
1413          esac
1414          ;;
1415     *)   src='.';;
1416     esac;;
1417 esac
1418 case "$src" in
1419 '')     src=/
1420         rsrc=/
1421         ;;
1422 /*) rsrc="$src";;
1423 *) rsrc="../$src";;
1424 esac
1425 if test -f $rsrc/Configure && \
1426         $contains "^package=$package$" $rsrc/Configure >/dev/null 2>&1
1427 then
1428    : found it, so we are ok.
1429 else
1430         rsrc=''
1431         for src in . .. ../.. ../../.. ../../../..; do
1432                 if test -f ../$src/Configure && \
1433                         $contains "^package=$package$" ../$src/Configure >/dev/null 2>&1
1434                 then
1435                         rsrc=../$src
1436                         break
1437                 fi
1438         done
1439 fi
1440 case "$rsrc" in
1441 '')
1442         cat <<EOM >&4
1443
1444 Sorry, I can't seem to locate the source dir for $package.  Please start
1445 Configure with an explicit path -- i.e. /some/path/Configure.
1446
1447 EOM
1448         exit 1
1449         ;;
1450 ../.)   rsrc='..';;
1451 *)
1452         echo " "
1453         echo "Sources for $package found in \"$src\"." >&4
1454         ;;
1455 esac
1456
1457 : script used to extract .SH files with variable substitutions
1458 cat >extract <<'EOS'
1459 CONFIGDOTSH=true
1460 echo "Doing variable substitutions on .SH files..."
1461 if test -f $src/MANIFEST; then
1462         set x `awk '{print $1}' <$src/MANIFEST | grep '\.SH$'`
1463 else
1464         echo "(Looking for .SH files under the source directory.)"
1465         set x `(cd $src; find . -name "*.SH" -print)`
1466 fi
1467 shift
1468 case $# in
1469 0) set x `(cd $src; echo *.SH)`; shift;;
1470 esac
1471 if test ! -f $src/$1; then
1472         shift
1473 fi
1474 mkdir_p='
1475 name=$1;
1476 create="";
1477 while test $name; do
1478         if test ! -d "$name"; then
1479                 create="$name $create";
1480                 name=`echo $name | sed -e "s|^[^/]*$||"`;
1481                 name=`echo $name | sed -e "s|\(.*\)/.*|\1|"`;
1482         else
1483                 name="";
1484         fi;
1485 done;
1486 for file in $create; do
1487         mkdir $file;
1488 done
1489 '
1490 for file in $*; do
1491         case "$src" in
1492         ".")
1493                 case "$file" in
1494                 */*)
1495                         dir=`expr X$file : 'X\(.*\)/'`
1496                         file=`expr X$file : 'X.*/\(.*\)'`
1497                         (cd $dir && . ./$file)
1498                         ;;
1499                 *)
1500                         . ./$file
1501                         ;;
1502                 esac
1503                 ;;
1504         *)
1505                 case "$file" in
1506                 */*)
1507                         dir=`expr X$file : 'X\(.*\)/'`
1508                         file=`expr X$file : 'X.*/\(.*\)'`
1509                         (set x $dir; shift; eval $mkdir_p)
1510                         sh <$src/$dir/$file
1511                         ;;
1512                 *)
1513                         sh <$src/$file
1514                         ;;
1515                 esac
1516                 ;;
1517         esac
1518 done
1519 if test -f $src/config_h.SH; then
1520         if test ! -f config.h; then
1521         : oops, they left it out of MANIFEST, probably, so do it anyway.
1522         . $src/config_h.SH
1523         fi
1524 fi
1525 EOS
1526
1527 : extract files and exit if asked to do so
1528 case "$extractsh" in
1529 true)
1530         case "$realsilent" in
1531         true) ;;
1532         *) exec 1>&4;;
1533         esac
1534         case "$config_sh" in
1535         '') config_sh='config.sh';;
1536         esac
1537         echo " "
1538         echo "Fetching answers from $config_sh..."
1539         cd ..
1540         . $config_sh
1541         test "$override" && . ./optdef.sh
1542         echo " "
1543         . UU/extract
1544         rm -rf UU
1545         echo "Done."
1546         exit 0
1547         ;;
1548 esac
1549
1550 : Eunice requires " " instead of "", can you believe it
1551 echo " "
1552 : Here we go...
1553 echo "Beginning of configuration questions for $package."
1554
1555 trap 'echo " "; test -d ../UU && rm -rf X $rmlist; exit 1' 1 2 3 15
1556
1557 : first determine how to suppress newline on echo command
1558 echo " "
1559 echo "Checking echo to see how to suppress newlines..."
1560 (echo "hi there\c" ; echo " ") >.echotmp
1561 if $contains c .echotmp >/dev/null 2>&1 ; then
1562         echo "...using -n."
1563         n='-n'
1564         c=''
1565 else
1566         cat <<'EOM'
1567 ...using \c
1568 EOM
1569         n=''
1570         c='\c'
1571 fi
1572 echo $n "The star should be here-->$c"
1573 echo '*'
1574 rm -f .echotmp
1575
1576 : Now test for existence of everything in MANIFEST
1577 echo " "
1578 if test -f $rsrc/MANIFEST; then
1579         echo "First let's make sure your kit is complete.  Checking..." >&4
1580         awk '$1 !~ /PACK[A-Z]+/ {print $1}' $rsrc/MANIFEST | split -50
1581         rm -f missing
1582         tmppwd=`pwd`
1583         for filelist in x??; do
1584                 (cd $rsrc; ls `cat $tmppwd/$filelist` >/dev/null 2>>$tmppwd/missing)
1585         done
1586         if test -s missing; then
1587                 cat missing >&4
1588                 cat >&4 <<'EOM'
1589
1590 THIS PACKAGE SEEMS TO BE INCOMPLETE.
1591
1592 You have the option of continuing the configuration process, despite the
1593 distinct possibility that your kit is damaged, by typing 'y'es.  If you
1594 do, don't blame me if something goes wrong.  I advise you to type 'n'o
1595 and contact the author (perlbug@perl.com).
1596
1597 EOM
1598                 echo $n "Continue? [n] $c" >&4
1599                 read ans
1600                 case "$ans" in
1601                 y*)
1602                         echo "Continuing..." >&4
1603                         rm -f missing
1604                         ;;
1605                 *)
1606                         echo "ABORTING..." >&4
1607                         kill $$
1608                         ;;
1609                 esac
1610         else
1611                 echo "Looks good..."
1612         fi
1613 else
1614         echo "There is no MANIFEST file.  I hope your kit is complete !"
1615 fi
1616 rm -f missing x??
1617
1618 echo " "
1619 : Find the appropriate value for a newline for tr
1620 if test -n "$DJGPP"; then
1621        trnl='\012'
1622 fi
1623 if test X"$trnl" = X; then
1624         case "`echo foo|tr '\n' x 2>/dev/null`" in
1625         foox) trnl='\n' ;;
1626         esac
1627 fi
1628 if test X"$trnl" = X; then
1629         case "`echo foo|tr '\012' x 2>/dev/null`" in
1630         foox) trnl='\012' ;;
1631         esac
1632 fi
1633 if test X"$trnl" = X; then
1634         cat <<EOM >&2
1635
1636 $me: Fatal Error: cannot figure out how to translate newlines with 'tr'.
1637
1638 EOM
1639         exit 1
1640 fi
1641
1642 : compute the number of columns on the terminal for proper question formatting
1643 case "$COLUMNS" in
1644 '') COLUMNS='80';;
1645 esac
1646
1647 : set up the echo used in my read
1648 myecho="case \"\$xxxm\" in
1649 '') echo $n \"\$rp $c\" >&4;;
1650 *) case \"\$rp\" in
1651         '') echo $n \"[\$xxxm] $c\";;
1652         *)
1653                 if test \`echo \"\$rp [\$xxxm]  \" | wc -c\` -ge $COLUMNS; then
1654                         echo \"\$rp\" >&4
1655                         echo $n \"[\$xxxm] $c\" >&4
1656                 else
1657                         echo $n \"\$rp [\$xxxm] $c\" >&4
1658                 fi
1659                 ;;
1660         esac;;
1661 esac"
1662
1663 : now set up to do reads with possible shell escape and default assignment
1664 cat <<EOSC >myread
1665 $startsh
1666 xxxm=\$dflt
1667 $myecho
1668 ans='!'
1669 case "\$fastread" in
1670 yes) case "\$dflt" in
1671         '') ;;
1672         *) ans='';
1673                 case "\$silent-\$rp" in
1674                 true-) ;;
1675                 *) echo " " >&4;;
1676                 esac;;
1677         esac;;
1678 *) case "\$silent" in
1679         true) case "\$rp" in
1680                 '') ans='';;
1681                 esac;;
1682         esac;;
1683 esac
1684 while expr "X\$ans" : "X!" >/dev/null; do
1685         read answ
1686         set x \$xxxm
1687         shift
1688         aok=''; eval "ans=\\"\$answ\\"" && aok=y
1689         case  "\$answ" in
1690         "!")
1691                 sh 1>&4
1692                 echo " "
1693                 $myecho
1694                 ;;
1695         !*)
1696                 set x \`expr "X\$ans" : "X!\(.*\)\$"\`
1697                 shift
1698                 sh 1>&4 -c "\$*"
1699                 echo " "
1700                 $myecho
1701                 ;;
1702         "\$ans")
1703                 case "\$ans" in
1704                 \\&*)
1705                         set x \`expr "X\$ans" : "X&\(.*\)\$"\`
1706                         shift
1707                         case "\$1" in
1708                         -d)
1709                                 fastread=yes
1710                                 echo "(OK, I'll run with -d after this question.)" >&4
1711                                 ;;
1712                         -*)
1713                                 echo "*** Sorry, \$1 not supported yet." >&4
1714                                 ;;
1715                         esac
1716                         $myecho
1717                         ans=!
1718                         ;;
1719                 esac;;
1720         *)
1721                 case "\$aok" in
1722                 y)
1723                         echo "*** Substitution done -- please confirm."
1724                         xxxm="\$ans"
1725                         ans=\`echo $n "\$ans$c" | tr '$trnl' ' '\`
1726                         xxxm="\$ans"
1727                         ans=!
1728                         ;;
1729                 *)
1730                         echo "*** Error -- try again."
1731                         ans=!
1732                         ;;
1733                 esac
1734                 $myecho
1735                 ;;
1736         esac
1737         case "\$ans\$xxxm\$nostick" in
1738         '')
1739                 ans=!
1740                 $myecho
1741                 ;;
1742         esac
1743 done
1744 case "\$ans" in
1745 '') ans="\$xxxm";;
1746 esac
1747 EOSC
1748
1749 : create .config dir to save info across Configure sessions
1750 test -d ../.config || mkdir ../.config
1751 cat >../.config/README <<EOF
1752 This directory created by Configure to save information that should
1753 persist across sessions for $package.
1754
1755 You may safely delete it if you wish.
1756 EOF
1757
1758 : general instructions
1759 needman=true
1760 firsttime=true
1761 user=`(logname) 2>/dev/null`
1762 case "$user" in
1763 '') user=`whoami 2>&1`;;
1764 esac
1765 if $contains "^$user\$" ../.config/instruct >/dev/null 2>&1; then
1766         firsttime=false
1767         echo " "
1768         rp='Would you like to see the instructions?'
1769         dflt=n
1770         . ./myread
1771         case "$ans" in
1772         [yY]*) ;;
1773         *) needman=false;;
1774         esac
1775 fi
1776 if $needman; then
1777         cat <<EOH
1778
1779 This installation shell script will examine your system and ask you questions
1780 to determine how the perl5 package should be installed. If you get
1781 stuck on a question, you may use a ! shell escape to start a subshell or
1782 execute a command.  Many of the questions will have default answers in square
1783 brackets; typing carriage return will give you the default.
1784
1785 On some of the questions which ask for file or directory names you are allowed
1786 to use the ~name construct to specify the login directory belonging to "name",
1787 even if you don't have a shell which knows about that.  Questions where this is
1788 allowed will be marked "(~name ok)".
1789
1790 EOH
1791         rp=''
1792         dflt='Type carriage return to continue'
1793         . ./myread
1794         cat <<'EOH'
1795
1796 The prompter used in this script allows you to use shell variables and
1797 backticks in your answers.  You may use $1, $2, etc...  to refer to the words
1798 in the default answer, as if the default line was a set of arguments given to a
1799 script shell.  This means you may also use $* to repeat the whole default line,
1800 so you do not have to re-type everything to add something to the default.
1801
1802 Everytime there is a substitution, you will have to confirm.  If there is an
1803 error (e.g. an unmatched backtick), the default answer will remain unchanged
1804 and you will be prompted again.
1805
1806 If you are in a hurry, you may run 'Configure -d'.  This will bypass nearly all
1807 the questions and use the computed defaults (or the previous answers if there
1808 was already a config.sh file). Type 'Configure -h' for a list of options.
1809 You may also start interactively and then answer '& -d' at any prompt to turn
1810 on the non-interactive behaviour for the remainder of the execution.
1811
1812 EOH
1813         . ./myread
1814         cat <<EOH
1815
1816 Much effort has been expended to ensure that this shell script will run on any
1817 Unix system.  If despite that it blows up on yours, your best bet is to edit
1818 Configure and run it again.  If you can't run Configure for some reason,
1819 you'll have to generate a config.sh file by hand.  Whatever problems you
1820 have, let me (perlbug@perl.com) know how I blew it.
1821
1822 This installation script affects things in two ways:
1823
1824 1) it may do direct variable substitutions on some of the files included
1825    in this kit.
1826 2) it builds a config.h file for inclusion in C programs.  You may edit
1827    any of these files as the need arises after running this script.
1828
1829 If you make a mistake on a question, there is no easy way to back up to it
1830 currently.  The easiest thing to do is to edit config.sh and rerun all the SH
1831 files.  Configure will offer to let you do this before it runs the SH files.
1832
1833 EOH
1834         dflt='Type carriage return to continue'
1835         . ./myread
1836         case "$firsttime" in
1837         true) echo $user >>../.config/instruct;;
1838         esac
1839 fi
1840
1841 : find out where common programs are
1842 echo " "
1843 echo "Locating common programs..." >&4
1844 cat <<EOSC >loc
1845 $startsh
1846 case \$# in
1847 0) exit 1;;
1848 esac
1849 thing=\$1
1850 shift
1851 dflt=\$1
1852 shift
1853 for dir in \$*; do
1854         case "\$thing" in
1855         .)
1856         if test -d \$dir/\$thing; then
1857                 echo \$dir
1858                 exit 0
1859         fi
1860         ;;
1861         *)
1862         for thisthing in \$dir/\$thing; do
1863                 : just loop through to pick last item
1864         done
1865         if test -f \$thisthing; then
1866                 echo \$thisthing
1867                 exit 0
1868         elif test -f \$dir/\$thing.exe; then
1869                 if test -n "$DJGPP"; then
1870                         echo \$dir/\$thing.exe
1871                 else
1872                         : on Eunice apparently
1873                         echo \$dir/\$thing
1874                 fi
1875                 exit 0
1876         fi
1877         ;;
1878         esac
1879 done
1880 echo \$dflt
1881 exit 1
1882 EOSC
1883 chmod +x loc
1884 $eunicefix loc
1885 loclist="
1886 awk
1887 cat
1888 comm
1889 cp
1890 echo
1891 expr
1892 grep
1893 ls
1894 make
1895 mkdir
1896 rm
1897 sed
1898 sort
1899 touch
1900 tr
1901 uniq
1902 "
1903 trylist="
1904 Mcc
1905 ar
1906 byacc
1907 cpp
1908 csh
1909 date
1910 egrep
1911 gzip
1912 less
1913 ln
1914 more
1915 nm
1916 nroff
1917 pg
1918 test
1919 uname
1920 zip
1921 "
1922 pth=`echo $PATH | sed -e "s/$p_/ /g"`
1923 pth="$pth /lib /usr/lib"
1924 for file in $loclist; do
1925         eval xxx=\$$file
1926         case "$xxx" in
1927         /*|?:[\\/]*)
1928                 if test -f "$xxx"; then
1929                         : ok
1930                 else
1931                         echo "WARNING: no $xxx -- ignoring your setting for $file." >&4
1932                         xxx=`./loc $file $file $pth`
1933                 fi
1934                 ;;
1935         '') xxx=`./loc $file $file $pth`;;
1936         *) xxx=`./loc $xxx $xxx $pth`;;
1937         esac
1938         eval $file=$xxx
1939         eval _$file=$xxx
1940         case "$xxx" in
1941         /*)
1942                 echo $file is in $xxx.
1943                 ;;
1944         ?:[\\/]*)
1945                 echo $file is in $xxx.
1946                 ;;
1947         *)
1948                 echo "I don't know where '$file' is, and my life depends on it." >&4
1949                 echo "Go find a public domain implementation or fix your PATH setting!" >&4
1950                 exit 1
1951                 ;;
1952         esac
1953 done
1954 echo " "
1955 echo "Don't worry if any of the following aren't found..."
1956 say=offhand
1957 for file in $trylist; do
1958         eval xxx=\$$file
1959         case "$xxx" in
1960         /*|?:[\\/]*)
1961                 if test -f "$xxx"; then
1962                         : ok
1963                 else
1964                         echo "WARNING: no $xxx -- ignoring your setting for $file." >&4
1965                         xxx=`./loc $file $file $pth`
1966                 fi
1967                 ;;
1968         '') xxx=`./loc $file $file $pth`;;
1969         *) xxx=`./loc $xxx $xxx $pth`;;
1970         esac
1971         eval $file=$xxx
1972         eval _$file=$xxx
1973         case "$xxx" in
1974         /*)
1975                 echo $file is in $xxx.
1976                 ;;
1977         ?:[\\/]*)
1978                 echo $file is in $xxx.
1979                 ;;
1980         *)
1981                 echo "I don't see $file out there, $say."
1982                 say=either
1983                 ;;
1984         esac
1985 done
1986 case "$egrep" in
1987 egrep)
1988         echo "Substituting grep for egrep."
1989         egrep=$grep
1990         ;;
1991 esac
1992 case "$ln" in
1993 ln)
1994         echo "Substituting cp for ln."
1995         ln=$cp
1996         ;;
1997 esac
1998 case "$test" in
1999 test)
2000         echo "Hopefully test is built into your sh."
2001         ;;
2002 *)
2003         if `sh -c "PATH= test true" >/dev/null 2>&1`; then
2004                 echo "Using the test built into your sh."
2005                 test=test
2006                 _test=test
2007         fi
2008         ;;
2009 esac
2010 case "$echo" in
2011 echo)
2012         echo "Hopefully echo is built into your sh."
2013         ;;
2014 '') ;;
2015 *)
2016         echo " "
2017 echo "Checking compatibility between $echo and builtin echo (if any)..." >&4
2018         $echo $n "hi there$c" >foo1
2019         echo $n "hi there$c" >foo2
2020         if cmp foo1 foo2 >/dev/null 2>&1; then
2021                 echo "They are compatible.  In fact, they may be identical."
2022         else
2023                 case "$n" in
2024                 '-n') n='' c='\c';;
2025                 *) n='-n' c='';;
2026                 esac
2027                 cat <<FOO
2028 They are not compatible!  You are probably running ksh on a non-USG system.
2029 I'll have to use $echo instead of the builtin, since Bourne shell doesn't
2030 have echo built in and we may have to run some Bourne shell scripts.  That
2031 means I'll have to use '$n$c' to suppress newlines now.  Life is ridiculous.
2032
2033 FOO
2034                 $echo $n "The star should be here-->$c"
2035                 $echo "*"
2036         fi
2037         $rm -f foo1 foo2
2038         ;;
2039 esac
2040
2041 : determine whether symbolic links are supported
2042 echo " "
2043 $touch blurfl
2044 if $ln -s blurfl sym > /dev/null 2>&1 ; then
2045         echo "Symbolic links are supported." >&4
2046         lns="$ln -s"
2047 else
2048         echo "Symbolic links are NOT supported." >&4
2049         lns="$ln"
2050 fi
2051 $rm -f blurfl sym
2052
2053 : see whether [:lower:] and [:upper:] are supported character classes
2054 echo " "
2055 case "`echo AbyZ | $tr '[:lower:]' '[:upper:]' 2>/dev/null`" in
2056 ABYZ)
2057         echo "Good, your tr supports [:lower:] and [:upper:] to convert case." >&4
2058         up='[:upper:]'
2059         low='[:lower:]'
2060         ;;
2061 *)      # There is a discontinuity in EBCDIC between 'I' and 'J'
2062         # (0xc9 and 0xd1), therefore that is a nice testing point.
2063         if test "X$up" = X -o "X$low" = X; then
2064             case "`echo IJ | $tr '[I-J]' '[i-j]' 2>/dev/null`" in
2065             ij) up='[A-Z]'
2066                 low='[a-z]'
2067                 ;;
2068             esac
2069         fi
2070         if test "X$up" = X -o "X$low" = X; then
2071             case "`echo IJ | $tr I-J i-j 2>/dev/null`" in
2072             ij) up='A-Z'
2073                 low='a-z'
2074                 ;;
2075             esac
2076         fi
2077         if test "X$up" = X -o "X$low" = X; then
2078             case "`echo IJ | od -x 2>/dev/null`" in
2079             *C9D1*|*c9d1*)
2080                 echo "Hey, this might be EBCDIC." >&4
2081                 if test "X$up" = X -o "X$low" = X; then
2082                     case "`echo IJ | $tr '[A-IJ-RS-Z]' '[a-ij-rs-z]' 2>/dev/null`" in
2083                     ij) up='[A-IJ-RS-Z]'
2084                         low='[a-ij-rs-z]'
2085                         ;;
2086                     esac
2087                 fi
2088                 if test "X$up" = X -o "X$low" = X; then
2089                     case "`echo IJ | $tr A-IJ-RS-Z a-ij-rs-z 2>/dev/null`" in
2090                     ij) up='A-IJ-RS-Z'
2091                         low='a-ij-rs-z'
2092                         ;;
2093                     esac
2094                 fi
2095                 ;;
2096             esac
2097         fi
2098 esac
2099 case "`echo IJ | $tr \"$up\" \"$low\" 2>/dev/null`" in
2100 ij)
2101     echo "Using $up and $low to convert case." >&4
2102     ;;
2103 *)
2104     echo "I don't know how to translate letters from upper to lower case." >&4
2105     echo "Your tr is not acting any way I know of." >&4
2106     exit 1
2107     ;;
2108 esac
2109 : set up the translation script tr, must be called with ./tr of course
2110 cat >tr <<EOSC
2111 $startsh
2112 case "\$1\$2" in
2113 '[A-Z][a-z]') exec $tr '$up' '$low';;
2114 '[a-z][A-Z]') exec $tr '$low' '$up';;
2115 esac
2116 exec $tr "\$@"
2117 EOSC
2118 chmod +x tr
2119 $eunicefix tr
2120
2121 : Try to determine whether config.sh was made on this system
2122 case "$config_sh" in
2123 '')
2124 myuname=`( ($uname -a) 2>/dev/null || hostname) 2>&1`
2125 # tr '[A-Z]' '[a-z]' would not work in EBCDIC
2126 # because the A-Z/a-z are not consecutive.
2127 myuname=`echo $myuname | $sed -e 's/^[^=]*=//' -e 's/\///g' | \
2128         ./tr '[A-Z]' '[a-z]' | $tr $trnl ' '`
2129 newmyuname="$myuname"
2130 dflt=n
2131 case "$knowitall" in
2132 '')
2133         if test -f ../config.sh; then
2134                 if $contains myuname= ../config.sh >/dev/null 2>&1; then
2135                         eval "`grep myuname= ../config.sh`"
2136                 fi
2137                 if test "X$myuname" = "X$newmyuname"; then
2138                         dflt=y
2139                 fi
2140         fi
2141         ;;
2142 *) dflt=y;;
2143 esac
2144
2145 : Get old answers from old config file if Configure was run on the
2146 : same system, otherwise use the hints.
2147 hint=default
2148 cd ..
2149 if test -f config.sh; then
2150         echo " "
2151         rp="I see a config.sh file.  Shall I use it to set the defaults?"
2152         . UU/myread
2153         case "$ans" in
2154         n*|N*) echo "OK, I'll ignore it."; mv config.sh config.sh.old;;
2155         *)  echo "Fetching default answers from your old config.sh file..." >&4
2156                 tmp_n="$n"
2157                 tmp_c="$c"
2158                 tmp_sh="$sh"
2159                 . ./config.sh
2160                 cp config.sh UU
2161                 n="$tmp_n"
2162                 c="$tmp_c"
2163                 : Older versions did not always set $sh.  Catch re-use of such
2164                 : an old config.sh.
2165                 case "$sh" in
2166                 '') sh="$tmp_sh" ;;
2167                 esac
2168                 hint=previous
2169                 ;;
2170         esac
2171 fi
2172 if test ! -f config.sh; then
2173         $cat <<EOM
2174
2175 First time through, eh?  I have some defaults handy for some systems
2176 that need some extra help getting the Configure answers right:
2177
2178 EOM
2179         (cd $src/hints; ls -C *.sh) | $sed 's/\.sh/   /g' >&4
2180         dflt=''
2181         : Half the following guesses are probably wrong... If you have better
2182         : tests or hints, please send them to perlbug@perl.com
2183         : The metaconfig authors would also appreciate a copy...
2184         $test -f /irix && osname=irix
2185         $test -f /xenix && osname=sco_xenix
2186         $test -f /dynix && osname=dynix
2187         $test -f /dnix && osname=dnix
2188         $test -f /lynx.os && osname=lynxos
2189         $test -f /unicos && osname=unicos && osvers=`$uname -r`
2190         $test -f /unicosmk.ar && osname=unicosmk && osvers=`$uname -r`
2191         $test -f /bin/mips && /bin/mips && osname=mips
2192         $test -d /NextApps && set X `hostinfo | grep 'NeXT Mach.*:' | \
2193                 $sed -e 's/://' -e 's/\./_/'` && osname=next && osvers=$4
2194         $test -d /usr/apollo/bin && osname=apollo
2195         $test -f /etc/saf/_sactab && osname=svr4
2196         $test -d /usr/include/minix && osname=minix
2197         if $test -d /MachTen -o -d /MachTen_Folder; then
2198                 osname=machten
2199                 if $test -x /sbin/version; then
2200                         osvers=`/sbin/version | $awk '{print $2}' |
2201                         $sed -e 's/[A-Za-z]$//'`
2202                 elif $test -x /usr/etc/version; then
2203                         osvers=`/usr/etc/version | $awk '{print $2}' |
2204                         $sed -e 's/[A-Za-z]$//'`
2205                 else
2206                         osvers="$2.$3"
2207                 fi
2208         fi
2209        $test -f /sys/posix.dll &&
2210                $test -f /usr/bin/what &&
2211                set X `/usr/bin/what /sys/posix.dll` &&
2212                $test "$3" = UWIN &&
2213                osname=uwin &&
2214                osvers="$5"
2215         if $test -f $uname; then
2216                 set X $myuname
2217                 shift
2218
2219                 case "$5" in
2220                 fps*) osname=fps ;;
2221                 mips*)
2222                         case "$4" in
2223                         umips) osname=umips ;;
2224                         *) osname=mips ;;
2225                         esac;;
2226                 [23]100) osname=mips ;;
2227                 next*) osname=next ;;
2228                 i386*)
2229                         tmp=`/bin/uname -X 2>/dev/null|awk '/3\.2v[45]/{ print $(NF) }'`
2230                         if $test "$tmp" != "" -a "$3" = "3.2" -a -f '/etc/systemid'; then
2231                                 osname='sco'
2232                                 osvers=$tmp
2233                         elif $test -f /etc/kconfig; then
2234                                 osname=isc
2235                                 if test "$lns" = "$ln -s"; then
2236                                         osvers=4
2237                                 elif $contains _SYSV3 /usr/include/stdio.h > /dev/null 2>&1 ; then
2238                                         osvers=3
2239                                 elif $contains _POSIX_SOURCE /usr/include/stdio.h > /dev/null 2>&1 ; then
2240                                         osvers=2
2241                                 fi
2242                         fi
2243                         tmp=''
2244                         ;;
2245                 pc*)
2246                         if test -n "$DJGPP"; then
2247                                 osname=dos
2248                                 osvers=djgpp
2249                         fi
2250                         ;;
2251                 esac
2252
2253                 case "$1" in
2254                 aix) osname=aix
2255                         tmp=`( (oslevel) 2>/dev/null || echo "not found") 2>&1`
2256                         case "$tmp" in
2257                         'not found') osvers="$4"."$3" ;;
2258                         '<3240'|'<>3240') osvers=3.2.0 ;;
2259                         '=3240'|'>3240'|'<3250'|'<>3250') osvers=3.2.4 ;;
2260                         '=3250'|'>3250') osvers=3.2.5 ;;
2261                         *) osvers=$tmp;;
2262                         esac
2263                         ;;
2264                 *dc.osx) osname=dcosx
2265                         osvers="$3"
2266                         ;;
2267                 dnix) osname=dnix
2268                         osvers="$3"
2269                         ;;
2270                 domainos) osname=apollo
2271                         osvers="$3"
2272                         ;;
2273                 dgux) osname=dgux 
2274                         osvers="$3"
2275                         ;;
2276                 dynixptx*) osname=dynixptx
2277                         osvers=`echo "$4"|sed 's/^v//'`
2278                         ;;
2279                 freebsd) osname=freebsd 
2280                         osvers="$3" ;;
2281                 genix) osname=genix ;;
2282                 hp*) osname=hpux 
2283                         osvers=`echo "$3" | $sed 's,.*\.\([0-9]*\.[0-9]*\),\1,'`
2284                         ;;
2285                 irix*) osname=irix
2286                         case "$3" in
2287                         4*) osvers=4 ;;
2288                         5*) osvers=5 ;;
2289                         *)      osvers="$3" ;;
2290                         esac
2291                         ;;
2292                 linux) osname=linux
2293                         case "$3" in
2294                         *)      osvers="$3" ;;
2295                         esac
2296                         ;;
2297                 MiNT) osname=mint
2298                         ;;
2299                 netbsd*) osname=netbsd
2300                         osvers="$3"
2301                         ;;
2302                 news-os) osvers="$3"
2303                         case "$3" in
2304                         4*) osname=newsos4 ;;
2305                         *) osname=newsos ;;
2306                         esac
2307                         ;;
2308                 bsd386) osname=bsd386
2309                         osvers=`$uname -r`
2310                         ;;
2311                 POSIX-BC | posix-bc ) osname=posix-bc
2312                         osvers="$3"
2313                         ;;
2314                 powerux | power_ux | powermax_os | powermaxos | \
2315                 powerunix | power_unix) osname=powerux
2316                         osvers="$3"
2317                         ;;
2318                 next*) osname=next ;;
2319                 solaris) osname=solaris
2320                         case "$3" in
2321                         5*) osvers=`echo $3 | $sed 's/^5/2/g'` ;;
2322                         *)      osvers="$3" ;;
2323                         esac
2324                         ;;
2325                 sunos) osname=sunos
2326                         case "$3" in
2327                         5*) osname=solaris
2328                                 osvers=`echo $3 | $sed 's/^5/2/g'` ;;
2329                         *)      osvers="$3" ;;
2330                         esac
2331                         ;;
2332                 titanos) osname=titanos
2333                         case "$3" in
2334                         1*) osvers=1 ;;
2335                         2*) osvers=2 ;;
2336                         3*) osvers=3 ;;
2337                         4*) osvers=4 ;;
2338                         *)      osvers="$3" ;;
2339                         esac
2340                         ;;
2341                 ultrix) osname=ultrix
2342                         osvers="$3"
2343                         ;;
2344                 osf1|mls+)      case "$5" in
2345                                 alpha)
2346                                         osname=dec_osf
2347                                         osvers=`echo "$3" | sed 's/^[xvt]//'`
2348                                         ;;
2349                         hp*)    osname=hp_osf1  ;;
2350                         mips)   osname=mips_osf1 ;;
2351                         esac
2352                         ;;
2353                 unixware) osname=svr5
2354                         osvers="$4"
2355                         ;;
2356                 uts) osname=uts
2357                         osvers="$3"
2358                         ;;
2359                 qnx) osname=qnx
2360                         osvers="$4"
2361                         ;;
2362                 $2) case "$osname" in
2363                         *isc*) ;;
2364                         *freebsd*) ;;
2365                         svr*)
2366                                 : svr4.x or possibly later
2367                                 case "svr$3" in 
2368                                 ${osname}*)
2369                                         osname=svr$3
2370                                         osvers=$4
2371                                         ;;
2372                                 esac
2373                                 case "$osname" in
2374                                 svr4.0)
2375                                         : Check for ESIX
2376                                         if test -f /stand/boot ; then
2377                                                 eval `grep '^INITPROG=[a-z/0-9]*$' /stand/boot`
2378                                                 if test -n "$INITPROG" -a -f "$INITPROG"; then
2379                         isesix=`strings -a $INITPROG|grep 'ESIX SYSTEM V/386 Release 4.0'`
2380                                                         if test -n "$isesix"; then
2381                                                                 osname=esix4
2382                                                         fi
2383                                                 fi
2384                                         fi
2385                                         ;;
2386                                 esac
2387                                 ;;
2388                         *)      if test -f /etc/systemid; then
2389                                         osname=sco
2390                                         set `echo $3 | $sed 's/\./ /g'` $4
2391                                         if $test -f $src/hints/sco_$1_$2_$3.sh; then
2392                                                 osvers=$1.$2.$3
2393                                         elif $test -f $src/hints/sco_$1_$2.sh; then
2394                                                 osvers=$1.$2
2395                                         elif $test -f $src/hints/sco_$1.sh; then
2396                                                 osvers=$1
2397                                         fi
2398                                 else
2399                                         case "$osname" in
2400                                         '') : Still unknown.  Probably a generic Sys V.
2401                                                 osname="sysv"
2402                                                 osvers="$3"
2403                                                 ;;
2404                                         esac
2405                                 fi
2406                                 ;;
2407                         esac
2408                         ;;
2409                 *)      case "$osname" in
2410                         '') : Still unknown.  Probably a generic BSD.
2411                                 osname="$1"
2412                                 osvers="$3"
2413                                 ;;
2414                         esac
2415                         ;;
2416                 esac
2417         else
2418                 if test -f /vmunix -a -f $src/hints/news_os.sh; then
2419                         (what /vmunix | UU/tr '[A-Z]' '[a-z]') > UU/kernel.what 2>&1
2420                         if $contains news-os UU/kernel.what >/dev/null 2>&1; then
2421                                 osname=news_os
2422                         fi
2423                         $rm -f UU/kernel.what
2424                 elif test -d c:/.; then
2425                         set X $myuname
2426                         osname=os2
2427                         osvers="$5"
2428                 fi
2429         fi
2430         
2431         : Now look for a hint file osname_osvers, unless one has been
2432         : specified already.
2433         case "$hintfile" in
2434         ''|' ')
2435                 file=`echo "${osname}_${osvers}" | $sed -e 's@\.@_@g' -e 's@_$@@'`
2436                 : Also try without trailing minor version numbers.
2437                 xfile=`echo $file | $sed -e 's@_[^_]*$@@'`
2438                 xxfile=`echo $xfile | $sed -e 's@_[^_]*$@@'`
2439                 xxxfile=`echo $xxfile | $sed -e 's@_[^_]*$@@'`
2440                 xxxxfile=`echo $xxxfile | $sed -e 's@_[^_]*$@@'`
2441                 case "$file" in
2442                 '') dflt=none ;;
2443                 *)  case "$osvers" in
2444                         '') dflt=$file
2445                                 ;;
2446                         *)  if $test -f $src/hints/$file.sh ; then
2447                                         dflt=$file
2448                                 elif $test -f $src/hints/$xfile.sh ; then
2449                                         dflt=$xfile
2450                                 elif $test -f $src/hints/$xxfile.sh ; then
2451                                         dflt=$xxfile
2452                                 elif $test -f $src/hints/$xxxfile.sh ; then
2453                                         dflt=$xxxfile
2454                                 elif $test -f $src/hints/$xxxxfile.sh ; then
2455                                         dflt=$xxxxfile
2456                                 elif $test -f "$src/hints/${osname}.sh" ; then
2457                                         dflt="${osname}"
2458                                 else
2459                                         dflt=none
2460                                 fi
2461                                 ;;
2462                         esac
2463                         ;;
2464                 esac
2465                 if $test -f Policy.sh ; then
2466                         case "$dflt" in
2467                         *Policy*) ;;
2468                         none) dflt="Policy" ;;
2469                         *) dflt="Policy $dflt" ;;
2470                         esac
2471                 fi
2472                 ;;
2473         *)
2474                 dflt=`echo $hintfile | $sed 's/\.sh$//'`
2475                 ;;
2476         esac
2477
2478         if $test -f Policy.sh ; then
2479                 $cat <<EOM
2480
2481 There's also a Policy hint file available, which should make the
2482 site-specific (policy) questions easier to answer.
2483 EOM
2484
2485         fi
2486
2487         $cat <<EOM
2488
2489 You may give one or more space-separated answers, or "none" if appropriate.
2490 A well-behaved OS will have no hints, so answering "none" or just "Policy"
2491 is a good thing.  DO NOT give a wrong version or a wrong OS.
2492
2493 EOM
2494
2495         rp="Which of these apply, if any?"
2496         . UU/myread
2497         tans=$ans
2498         for file in $tans; do
2499                 if $test X$file = XPolicy -a -f Policy.sh; then
2500                         . Policy.sh
2501                         $cat Policy.sh >> UU/config.sh
2502                 elif $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$tans = X -o X$tans = Xnone ; then
2506                         : nothing
2507                 else
2508                         : Give one chance to correct a possible typo.
2509                         echo "$file.sh does not exist"
2510                         dflt=$file
2511                         rp="hint to use instead?"
2512                         . UU/myread
2513                         for file in $ans; do
2514                                 if $test -f "$src/hints/$file.sh"; then
2515                                         . $src/hints/$file.sh
2516                                         $cat $src/hints/$file.sh >> UU/config.sh
2517                                 elif $test X$ans = X -o X$ans = Xnone ; then
2518                                         : nothing
2519                                 else
2520                                         echo "$file.sh does not exist -- ignored."
2521                                 fi
2522                         done
2523                 fi
2524         done
2525
2526         hint=recommended
2527         : Remember our hint file for later.
2528         if $test -f "$src/hints/$file.sh" ; then
2529                 hintfile="$file"
2530         else
2531                 hintfile=''
2532         fi
2533 fi
2534 cd UU
2535 ;;
2536 *)
2537         echo " "
2538         echo "Fetching default answers from $config_sh..." >&4
2539         tmp_n="$n"
2540         tmp_c="$c"
2541         cd ..
2542         cp $config_sh config.sh 2>/dev/null
2543         chmod +w config.sh
2544         . ./config.sh
2545         cd UU
2546         cp ../config.sh .
2547         n="$tmp_n"
2548         c="$tmp_c"
2549         hint=previous
2550         ;;
2551 esac
2552 test "$override" && . ./optdef.sh
2553 myuname="$newmyuname"
2554
2555 : Restore computed paths
2556 for file in $loclist $trylist; do
2557         eval $file="\$_$file"
2558 done
2559
2560 cat << EOM
2561
2562 Configure uses the operating system name and version to set some defaults.
2563 The default value is probably right if the name rings a bell. Otherwise,
2564 since spelling matters for me, either accept the default or answer "none"
2565 to leave it blank.
2566
2567 EOM
2568 case "$osname" in
2569         ''|' ')
2570                 case "$hintfile" in
2571                 ''|' '|none) dflt=none ;;
2572                 *)  dflt=`echo $hintfile | $sed -e 's/\.sh$//' -e 's/_.*$//'` ;;
2573                 esac
2574                 ;;
2575         *) dflt="$osname" ;;
2576 esac
2577 rp="Operating system name?"
2578 . ./myread
2579 case "$ans" in
2580 none)  osname='' ;;
2581 *) osname=`echo "$ans" | $sed -e 's/[   ][      ]*/_/g' | ./tr '[A-Z]' '[a-z]'`;;
2582 esac
2583 echo " "
2584 case "$osvers" in
2585         ''|' ')
2586                 case "$hintfile" in
2587                 ''|' '|none) dflt=none ;;
2588                 *)      dflt=`echo $hintfile | $sed -e 's/\.sh$//' -e 's/^[^_]*//'`
2589                         dflt=`echo $dflt | $sed -e 's/^_//' -e 's/_/./g'`
2590                         case "$dflt" in
2591                         ''|' ') dflt=none ;;
2592                         esac
2593                         ;;
2594                 esac
2595                 ;;
2596         *) dflt="$osvers" ;;
2597 esac
2598 rp="Operating system version?"
2599 . ./myread
2600 case "$ans" in
2601 none)  osvers='' ;;
2602 *) osvers="$ans" ;;
2603 esac
2604
2605
2606 . ./posthint.sh
2607
2608 : who configured the system
2609 cf_time=`LC_ALL=C; LANGUAGE=C; export LC_ALL; export LANGUAGE; $date 2>&1`
2610 cf_by=`(logname) 2>/dev/null`
2611 case "$cf_by" in
2612 "")
2613         cf_by=`(whoami) 2>/dev/null`
2614         case "$cf_by" in
2615         "") cf_by=unknown ;;
2616         esac ;;
2617 esac
2618
2619 : set up the script used to warn in case of inconsistency
2620 cat <<EOS >whoa
2621 $startsh
2622 EOS
2623 cat <<'EOSC' >>whoa
2624 dflt=y
2625 echo " "
2626 echo "*** WHOA THERE!!! ***" >&4
2627 echo "    The $hint value for \$$var on this machine was \"$was\"!" >&4
2628 rp="    Keep the $hint value?"
2629 . ./myread
2630 case "$ans" in
2631 y) td=$was; tu=$was;;
2632 esac
2633 EOSC
2634
2635 : function used to set $1 to $val
2636 setvar='var=$1; eval "was=\$$1"; td=$define; tu=$undef;
2637 case "$val$was" in
2638 $define$undef) . ./whoa; eval "$var=\$td";;
2639 $undef$define) . ./whoa; eval "$var=\$tu";;
2640 *) eval "$var=$val";;
2641 esac'
2642
2643 cat <<EOM
2644
2645 Perl can be built to take advantage of threads, on some systems.
2646 To do so, Configure must be run with -Dusethreads.
2647
2648 Note that threading is a highly experimental feature, and
2649 some known race conditions still remain.  If you choose to try
2650 it, be very sure to not actually deploy it for production
2651 purposes.  README.threads has more details, and is required
2652 reading if you enable threads.
2653 EOM
2654 case "$usethreads" in
2655 $define|true|[yY]*)     dflt='y';;
2656 *) dflt='n';;
2657 esac
2658 rp='Build a threading Perl?'
2659 . ./myread
2660 case "$ans" in
2661 y|Y)    val="$define" ;;     
2662 *)      val="$undef" ;;
2663 esac
2664 set usethreads
2665 eval $setvar 
2666
2667 case "$d_oldpthreads" in
2668 '')     : Configure tests would be welcome here.  For now, assume undef.
2669         val="$undef" ;;
2670 *)      val="$d_oldpthreads" ;;
2671 esac
2672 set d_oldpthreads
2673 eval $setvar
2674
2675
2676 case "$usethreads" in
2677 "$define"|true|[yY]*)
2678 : Look for a hint-file generated 'call-back-unit'.  If the
2679 : user has specified that a threading perl is to be built,
2680 : we may need to set or change some other defaults.
2681         if $test -f usethreads.cbu; then
2682                 echo "Your platform has some specific hints for threaded builds, using them..."
2683                 . ./usethreads.cbu
2684         else
2685                 $cat <<EOM
2686 (Your platform doesn't have any specific hints for threaded builds.
2687  Assuming POSIX threads, then.)
2688 EOM
2689         fi
2690     ;;
2691 esac
2692
2693 cat <<EOM
2694
2695 Perl can be built so that multiple Perl interpreters can coexist
2696 within the same Perl executable.  To do so, Configure must be run with
2697 -Dusemultiplicity.
2698
2699 Normally you do not need this and you should answer no.
2700
2701 EOM
2702 case "$usemultiplicity" in
2703 $define|true|[yY]*)     dflt='y';;
2704 *) dflt='n';;
2705 esac
2706 rp='Build Perl for multiplicity?'
2707 . ./myread
2708 case "$ans" in
2709 y|Y)    val="$define" ;;     
2710 *)      val="$undef" ;;
2711 esac
2712 set usemultiplicity
2713 eval $setvar 
2714
2715 : determine where manual pages are on this system
2716 echo " "
2717 case "$sysman" in
2718 '') 
2719         syspath='/usr/man/man1 /usr/man/mann /usr/man/manl /usr/man/local/man1'
2720         syspath="$syspath /usr/man/u_man/man1 /usr/share/man/man1"
2721         syspath="$syspath /usr/catman/u_man/man1 /usr/man/l_man/man1"
2722         syspath="$syspath /usr/local/man/u_man/man1 /usr/local/man/l_man/man1"
2723         syspath="$syspath /usr/man/man.L /local/man/man1 /usr/local/man/man1"
2724         sysman=`./loc . /usr/man/man1 $syspath`
2725         ;;
2726 esac
2727 if $test -d "$sysman"; then
2728         echo "System manual is in $sysman." >&4
2729 else
2730         echo "Could not find manual pages in source form." >&4
2731 fi
2732
2733 : see what memory models we can support
2734 case "$models" in
2735 '')
2736         $cat >pdp11.c <<'EOP'
2737 int main() {
2738 #ifdef pdp11
2739         exit(0);
2740 #else
2741         exit(1);
2742 #endif
2743 }
2744 EOP
2745         ( cc -o pdp11 pdp11.c ) >/dev/null 2>&1
2746         if $test -f pdp11 && ./pdp11 2>/dev/null; then
2747                 dflt='unsplit split'
2748         else
2749                 tans=`./loc . X /lib/small /lib/large /usr/lib/small /usr/lib/large /lib/medium /usr/lib/medium /lib/huge`
2750                 case "$tans" in
2751                 X) dflt='none';;
2752                 *) if $test -d /lib/small || $test -d /usr/lib/small; then
2753                                 dflt='small'
2754                         else
2755                                 dflt=''
2756                         fi
2757                         if $test -d /lib/medium || $test -d /usr/lib/medium; then
2758                                 dflt="$dflt medium"
2759                         fi
2760                         if $test -d /lib/large || $test -d /usr/lib/large; then
2761                                 dflt="$dflt large"
2762                         fi
2763                         if $test -d /lib/huge || $test -d /usr/lib/huge; then
2764                                 dflt="$dflt huge"
2765                         fi
2766                 esac
2767         fi;;
2768 *) dflt="$models";;
2769 esac
2770 $cat <<EOM
2771  
2772 Some systems have different model sizes.  On most systems they are called
2773 small, medium, large, and huge.  On the PDP11 they are called unsplit and
2774 split.  If your system doesn't support different memory models, say "none".
2775 If you wish to force everything to one memory model, say "none" here and
2776 put the appropriate flags later when it asks you for other cc and ld flags.
2777 Venix systems may wish to put "none" and let the compiler figure things out.
2778 (In the following question multiple model names should be space separated.)
2779
2780 The default for most systems is "none".
2781
2782 EOM
2783 rp="Which memory models are supported?"
2784 . ./myread
2785 models="$ans"
2786
2787 case "$models" in
2788 none)
2789         small=''
2790         medium=''
2791         large=''
2792         huge=''
2793         unsplit=''
2794         split=''
2795         ;;
2796 *split)
2797         case "$split" in
2798         '') if $contains '\-i' $sysman/ld.1 >/dev/null 2>&1 || \
2799                          $contains '\-i' $sysman/cc.1 >/dev/null 2>&1; then
2800                         dflt='-i'
2801                 else
2802                         dflt='none'
2803                 fi;;
2804         *) dflt="$split";;
2805         esac
2806         rp="What flag indicates separate I and D space?"
2807         . ./myread
2808         tans="$ans"
2809         case "$tans" in
2810         none) tans='';;
2811         esac
2812         split="$tans"
2813         unsplit='';;
2814 *large*|*small*|*medium*|*huge*)
2815         case "$models" in
2816         *large*)
2817                 case "$large" in
2818                 '') dflt='-Ml';;
2819                 *) dflt="$large";;
2820                 esac
2821         rp="What flag indicates large model?"
2822         . ./myread
2823         tans="$ans"
2824         case "$tans" in
2825         none) tans='';
2826         esac
2827         large="$tans";;
2828         *) large='';;
2829         esac
2830         case "$models" in
2831         *huge*) case "$huge" in
2832                 '') dflt='-Mh';;
2833                 *) dflt="$huge";;
2834                 esac
2835                 rp="What flag indicates huge model?"
2836                 . ./myread
2837                 tans="$ans"
2838                 case "$tans" in
2839                 none) tans='';
2840                 esac
2841                 huge="$tans";;
2842         *) huge="$large";;
2843         esac
2844         case "$models" in
2845         *medium*) case "$medium" in
2846                 '') dflt='-Mm';;
2847                 *) dflt="$medium";;
2848                 esac
2849                 rp="What flag indicates medium model?"
2850                 . ./myread
2851                 tans="$ans"
2852                 case "$tans" in
2853                 none) tans='';
2854                 esac
2855                 medium="$tans";;
2856         *) medium="$large";;
2857         esac
2858         case "$models" in
2859         *small*) case "$small" in
2860                 '') dflt='none';;
2861                 *) dflt="$small";;
2862                 esac
2863                 rp="What flag indicates small model?"
2864                 . ./myread
2865                 tans="$ans"
2866                 case "$tans" in
2867                 none) tans='';
2868                 esac
2869                 small="$tans";;
2870         *) small='';;
2871         esac
2872         ;;
2873 *)
2874         echo "Unrecognized memory models--you may have to edit Makefile.SH" >&4
2875         ;;
2876 esac
2877 $rm -f pdp11.* pdp11
2878
2879 : make some quick guesses about what we are up against
2880 echo " "
2881 $echo $n "Hmm...  $c"
2882 echo exit 1 >bsd
2883 echo exit 1 >usg
2884 echo exit 1 >v7
2885 echo exit 1 >osf1
2886 echo exit 1 >eunice
2887 echo exit 1 >xenix
2888 echo exit 1 >venix
2889 echo exit 1 >os2
2890 d_bsd="$undef"
2891 $cat /usr/include/signal.h /usr/include/sys/signal.h >foo 2>/dev/null
2892 if test -f /osf_boot || $contains 'OSF/1' /usr/include/ctype.h >/dev/null 2>&1
2893 then
2894         echo "Looks kind of like an OSF/1 system, but we'll see..."
2895         echo exit 0 >osf1
2896 elif test `echo abc | tr a-z A-Z` = Abc ; then
2897         xxx=`./loc addbib blurfl $pth`
2898         if $test -f $xxx; then
2899         echo "Looks kind of like a USG system with BSD features, but we'll see..."
2900                 echo exit 0 >bsd
2901                 echo exit 0 >usg
2902         else
2903                 if $contains SIGTSTP foo >/dev/null 2>&1 ; then
2904                         echo "Looks kind of like an extended USG system, but we'll see..."
2905                 else
2906                         echo "Looks kind of like a USG system, but we'll see..."
2907                 fi
2908                 echo exit 0 >usg
2909         fi
2910 elif $contains SIGTSTP foo >/dev/null 2>&1 ; then
2911         echo "Looks kind of like a BSD system, but we'll see..."
2912         d_bsd="$define"
2913         echo exit 0 >bsd
2914 else
2915         echo "Looks kind of like a Version 7 system, but we'll see..."
2916         echo exit 0 >v7
2917 fi
2918 case "$eunicefix" in
2919 *unixtovms*)
2920         $cat <<'EOI'
2921 There is, however, a strange, musty smell in the air that reminds me of
2922 something...hmm...yes...I've got it...there's a VMS nearby, or I'm a Blit.
2923 EOI
2924         echo exit 0 >eunice
2925         d_eunice="$define"
2926 : it so happens the Eunice I know will not run shell scripts in Unix format
2927         ;;
2928 *)
2929         echo " "
2930         echo "Congratulations.  You aren't running Eunice."
2931         d_eunice="$undef"
2932         ;;
2933 esac
2934 : Detect OS2.  The p_ variable is set above in the Head.U unit.
2935 case "$p_" in
2936 :) ;;
2937 *)
2938         $cat <<'EOI'
2939 I have the feeling something is not exactly right, however...don't tell me...
2940 lemme think...does HAL ring a bell?...no, of course, you're only running OS/2!
2941 EOI
2942         echo exit 0 >os2
2943         ;;
2944 esac
2945 if test -f /xenix; then
2946         echo "Actually, this looks more like a XENIX system..."
2947         echo exit 0 >xenix
2948         d_xenix="$define"
2949 else
2950         echo " "
2951         echo "It's not Xenix..."
2952         d_xenix="$undef"
2953 fi
2954 chmod +x xenix
2955 $eunicefix xenix
2956 if test -f /venix; then
2957         echo "Actually, this looks more like a VENIX system..."
2958         echo exit 0 >venix
2959 else
2960         echo " "
2961         if ./xenix; then
2962                 : null
2963         else
2964                 echo "Nor is it Venix..."
2965         fi
2966 fi
2967 chmod +x bsd usg v7 osf1 eunice xenix venix os2
2968 $eunicefix bsd usg v7 osf1 eunice xenix venix os2
2969 $rm -f foo
2970
2971 : see if we need a special compiler
2972 echo " "
2973 if ./usg; then
2974         case "$cc" in
2975         '') case "$Mcc" in
2976                 /*) dflt='Mcc';;
2977                 *) case "$large" in
2978                         -M*) dflt='cc';;
2979                         *)      if $contains '\-M' $sysman/cc.1 >/dev/null 2>&1 ; then
2980                                         if $contains '\-M' $sysman/cpp.1 >/dev/null 2>&1; then
2981                                                 dflt='cc'
2982                                         else
2983                                                 dflt='cc -M'
2984                                         fi
2985                                 else
2986                                         dflt='cc'
2987                                 fi;;
2988                         esac;;
2989                 esac;;
2990         *)  dflt="$cc";;
2991         esac
2992         case "$dflt" in
2993         *M*)    $cat <<'EOM'
2994 On some older systems the default C compiler will not resolve multiple global
2995 references that happen to have the same name.  On some such systems the "Mcc"
2996 command may be used to force these to be resolved.  On other systems a "cc -M"
2997 command is required.  (Note that the -M flag on other systems indicates a
2998 memory model to use!) If you have the Gnu C compiler, you might wish to use
2999 that instead.
3000
3001 EOM
3002         ;;
3003         esac
3004         rp="Use which C compiler?"
3005         . ./myread
3006         cc="$ans"
3007 else
3008         case "$cc" in
3009         '') dflt=cc;;
3010         *) dflt="$cc";;
3011         esac
3012         rp="Use which C compiler?"
3013         . ./myread
3014         cc="$ans"
3015 fi
3016 : Look for a hint-file generated 'call-back-unit'.  Now that the
3017 : user has specified the compiler, we may need to set or change some
3018 : other defaults.
3019 if $test -f cc.cbu; then
3020     . ./cc.cbu
3021 fi
3022 echo " "
3023 echo "Checking for GNU cc in disguise and/or its version number..." >&4
3024 $cat >gccvers.c <<EOM
3025 #include <stdio.h>
3026 int main() {
3027 #ifdef __GNUC__
3028 #ifdef __VERSION__
3029         printf("%s\n", __VERSION__);
3030 #else
3031         printf("%s\n", "1");
3032 #endif
3033 #endif
3034         exit(0);
3035 }
3036 EOM
3037 if $cc -o gccvers gccvers.c; then
3038         gccversion=`./gccvers`
3039         case "$gccversion" in
3040         '') echo "You are not using GNU cc." ;;
3041         *)  echo "You are using GNU cc $gccversion." ;;
3042         esac
3043 else
3044         echo " "
3045         echo "*** WHOA THERE!!! ***" >&4
3046         echo "    Your C compiler \"$cc\" doesn't seem to be working!" >&4
3047         case "$knowitall" in
3048         '')
3049         echo "    You'd better start hunting for one and let me know about it." >&4
3050                 exit 1
3051                 ;;
3052         esac
3053 fi
3054 $rm -f gccvers*
3055 case "$gccversion" in
3056 1*) cpp=`./loc gcc-cpp $cpp $pth` ;;
3057 esac
3058
3059
3060 case "$usemorebits" in
3061 "$define"|true|[yY]*)
3062         use64bits="$define"
3063         uselongdouble="$define"
3064         usemorebits="$define"
3065         ;;
3066 *)      usemorebits="$undef"
3067         ;;
3068 esac
3069
3070
3071 cat <<EOM
3072
3073 Perl can be built to understand large files (files larger than 2 gigabytes)
3074 on some systems.  To do so, Configure must be run with -Duselargefiles.
3075
3076 If this doesn't make any sense to you, just accept the default.
3077 EOM
3078 case "$uselargefiles" in
3079 "$define"|true|[yY]*) dflt='y' ;;
3080 *)      dflt='n' ;;
3081 esac
3082 rp='Try to understand large files?'
3083 . ./myread
3084 case "$ans" in
3085 y|Y)    val="$define" ;;
3086 *)      val="$undef"  ;;
3087 esac
3088 set uselargefiles
3089 eval $setvar
3090 case "$uselargefiles" in
3091 "$define") use64bits="$define" ;;
3092 esac
3093
3094 cat <<EOM
3095
3096 Perl can be built to take advantage of explicit 64-bit interfaces,
3097 on some systems.  To do so, Configure must be run with -Duse64bits.
3098
3099 If this doesn't make any sense to you, just accept the default.
3100 EOM
3101 case "$use64bits" in
3102 $define|true|[yY]*)     dflt='y';;
3103 *) dflt='n';;
3104 esac
3105 rp='Try to use explicit 64-bit interfaces, if available?'
3106 . ./myread
3107 case "$ans" in
3108 y|Y) 
3109         val="$define"
3110         ;;     
3111 *)      
3112         val="$undef"
3113         ;;
3114 esac
3115 set use64bits
3116 eval $setvar
3117
3118 case "$archname64" in
3119 '') archname64='' ;;    # not a typo
3120 esac
3121
3122 case "$use64bits" in
3123 "$define"|true|[yY]*)
3124 : Look for a hint-file generated 'call-back-unit'.  If the
3125 : user has specified that a 64 bit perl is to be built,
3126 : we may need to set or change some other defaults.
3127         if $test -f use64bits.cbu; then
3128                 echo "Your platform has some specific hints for 64-bit builds, using them..."
3129                 . ./use64bits.cbu
3130         else
3131                 $cat <<EOM
3132 (Your platform doesn't have any specific hints for 64-bit builds.
3133  This is probably okay, especially if your system is a true 64-bit system.)
3134 EOM
3135                 case "$gccversion" in
3136                 '')     ;;
3137                 *)      $cat <<EOM
3138 But since you seem to be using gcc,
3139 I will now add -DUSE_LONG_LONG to the compilation flags.
3140 EOM
3141                         ccflags="$ccflags -DUSE_LONG_LONG"
3142                         ;;
3143                 esac
3144         fi
3145         ;;
3146 esac
3147
3148 : determine the architecture name
3149 echo " "
3150 if xxx=`./loc arch blurfl $pth`; $test -f "$xxx"; then
3151         tarch=`arch`"-$osname"
3152 elif xxx=`./loc uname blurfl $pth`; $test -f "$xxx" ; then
3153         if uname -m > tmparch 2>&1 ; then
3154                 tarch=`$sed -e 's/ *$//' -e 's/ /_/g' \
3155                         -e 's/$/'"-$osname/" tmparch`
3156         else
3157                 tarch="$osname"
3158         fi
3159         $rm -f tmparch
3160 else
3161         tarch="$osname"
3162 fi
3163 case "$myarchname" in
3164 ''|"$tarch") ;;
3165 *)
3166         echo "(Your architecture name used to be $myarchname.)"
3167         archname=''
3168         ;;
3169 esac
3170 myarchname="$tarch"
3171 case "$archname" in
3172 '') dflt="$tarch";;
3173 *) dflt="$archname";;
3174 esac
3175 rp='What is your architecture name'
3176 . ./myread
3177 archname="$ans"
3178 case "$usethreads" in
3179 $define)
3180         echo "Threads selected." >&4
3181         case "$archname" in
3182         *-thread*) echo "...and architecture name already has -thread." >&4
3183                 ;;
3184         *)      archname="$archname-thread"
3185                 echo "...setting architecture name to $archname." >&4
3186                 ;;
3187         esac
3188         ;;
3189 esac
3190 case "$usemultiplicity" in
3191 $define)
3192         echo "Multiplicity selected." >&4
3193         case "$archname" in
3194         *-multi*) echo "...and architecture name already has -multi." >&4
3195                 ;;
3196         *)      archname="$archname-multi"
3197                 echo "...setting architecture name to $archname." >&4
3198                 ;;
3199         esac
3200         ;;
3201 esac
3202 case "$use64bits" in
3203 $define)
3204         echo "Explicit 64-bitness selected." >&4
3205         case "$archname64" in
3206         '')
3207                 ;;
3208         *)
3209                 case "$archname" in
3210                 *-$archname64*) echo "...and architecture name already has $archname64." >&4
3211                         ;;
3212                 *)      archname="$archname-$archname64"
3213                         echo "...setting architecture name to $archname." >&4
3214                         ;;
3215                 esac
3216                 ;;
3217         esac
3218 esac
3219
3220 : decide how portable to be.  Allow command line overrides.
3221 case "$d_portable" in
3222 "$undef") ;;
3223 *)      d_portable="$define" ;;
3224 esac
3225
3226 : set up shell script to do ~ expansion
3227 cat >filexp <<EOSS
3228 $startsh
3229 : expand filename
3230 case "\$1" in
3231  ~/*|~)
3232         echo \$1 | $sed "s|~|\${HOME-\$LOGDIR}|"
3233         ;;
3234  ~*)
3235         if $test -f /bin/csh; then
3236                 /bin/csh -f -c "glob \$1"
3237                 failed=\$?
3238                 echo ""
3239                 exit \$failed
3240         else
3241                 name=\`$expr x\$1 : '..\([^/]*\)'\`
3242                 dir=\`$sed -n -e "/^\${name}:/{s/^[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:\([^:]*\).*"'\$'"/\1/" -e p -e q -e '}' </etc/passwd\`
3243                 if $test ! -d "\$dir"; then
3244                         me=\`basename \$0\`
3245                         echo "\$me: can't locate home directory for: \$name" >&2
3246                         exit 1
3247                 fi
3248                 case "\$1" in
3249                 */*)
3250                         echo \$dir/\`$expr x\$1 : '..[^/]*/\(.*\)'\`
3251                         ;;
3252                 *)
3253                         echo \$dir
3254                         ;;
3255                 esac
3256         fi
3257         ;;
3258 *)
3259         echo \$1
3260         ;;
3261 esac
3262 EOSS
3263 chmod +x filexp
3264 $eunicefix filexp
3265
3266 : now set up to get a file name
3267 cat <<EOS >getfile
3268 $startsh
3269 EOS
3270 cat <<'EOSC' >>getfile
3271 tilde=''
3272 fullpath=''
3273 already=''
3274 skip=''
3275 none_ok=''
3276 exp_file=''
3277 nopath_ok=''
3278 orig_rp="$rp"
3279 orig_dflt="$dflt"
3280 case "$gfpth" in
3281 '') gfpth='.' ;;
3282 esac
3283
3284 case "$fn" in
3285 *\(*)
3286         expr $fn : '.*(\(.*\)).*' | tr ',' $trnl >getfile.ok
3287         fn=`echo $fn | sed 's/(.*)//'`
3288         ;;
3289 esac
3290
3291 case "$fn" in
3292 *:*)
3293         loc_file=`expr $fn : '.*:\(.*\)'`
3294         fn=`expr $fn : '\(.*\):.*'`
3295         ;;
3296 esac
3297
3298 case "$fn" in
3299 *~*) tilde=true;;
3300 esac
3301 case "$fn" in
3302 */*) fullpath=true;;
3303 esac
3304 case "$fn" in
3305 *+*) skip=true;;
3306 esac
3307 case "$fn" in
3308 *n*) none_ok=true;;
3309 esac
3310 case "$fn" in
3311 *e*) exp_file=true;;
3312 esac
3313 case "$fn" in
3314 *p*) nopath_ok=true;;
3315 esac
3316
3317 case "$fn" in
3318 *f*) type='File';;
3319 *d*) type='Directory';;
3320 *l*) type='Locate';;
3321 esac
3322
3323 what="$type"
3324 case "$what" in
3325 Locate) what='File';;
3326 esac
3327
3328 case "$exp_file" in
3329 '')
3330         case "$d_portable" in
3331         "$define") ;;
3332         *) exp_file=true;;
3333         esac
3334         ;;
3335 esac
3336
3337 cd ..
3338 while test "$type"; do
3339         redo=''
3340         rp="$orig_rp"
3341         dflt="$orig_dflt"
3342         case "$tilde" in
3343         true) rp="$rp (~name ok)";;
3344         esac
3345         . UU/myread
3346         if test -f UU/getfile.ok && \
3347                 $contains "^$ans\$" UU/getfile.ok >/dev/null 2>&1
3348         then
3349                 value="$ans"
3350                 ansexp="$ans"
3351                 break
3352         fi
3353         case "$ans" in
3354         none)
3355                 value=''
3356                 ansexp=''
3357                 case "$none_ok" in
3358                 true) type='';;
3359                 esac
3360                 ;;
3361         *)
3362                 case "$tilde" in
3363                 '') value="$ans"
3364                         ansexp="$ans";;
3365                 *)
3366                         value=`UU/filexp $ans`
3367                         case $? in
3368                         0)
3369                                 if test "$ans" != "$value"; then
3370                                         echo "(That expands to $value on this system.)"
3371                                 fi
3372                                 ;;
3373                         *) value="$ans";;
3374                         esac
3375                         ansexp="$value"
3376                         case "$exp_file" in
3377                         '') value="$ans";;
3378                         esac
3379                         ;;
3380                 esac
3381                 case "$fullpath" in
3382                 true)
3383                         case "$ansexp" in
3384                         /*) value="$ansexp" ;;
3385                         *)
3386                                 redo=true
3387                                 case "$already" in
3388                                 true)
3389                                 echo "I shall only accept a full path name, as in /bin/ls." >&4
3390                                 echo "Use a ! shell escape if you wish to check pathnames." >&4
3391                                         ;;
3392                                 *)
3393                                 echo "Please give a full path name, starting with slash." >&4
3394                                         case "$tilde" in
3395                                         true)
3396                                 echo "Note that using ~name is ok provided it expands well." >&4
3397                                                 already=true
3398                                                 ;;
3399                                         esac
3400                                 esac
3401                                 ;;
3402                         esac
3403                         ;;
3404                 esac
3405                 case "$redo" in
3406                 '')
3407                         case "$type" in
3408                         File)
3409                                 for fp in $gfpth; do
3410                                         if test "X$fp" = X.; then
3411                                             pf="$ansexp"
3412                                         else    
3413                                             pf="$fp/$ansexp"
3414                                         fi
3415                                         if test -f "$pf"; then
3416                                                 type=''
3417                                         elif test -r "$pf" || (test -h "$pf") >/dev/null 2>&1
3418                                         then
3419                                                 echo "($value is not a plain file, but that's ok.)"
3420                                                 type=''
3421                                         fi
3422                                         if test X"$type" = X; then
3423                                             value="$pf"
3424                                             break
3425                                         fi
3426                                 done
3427                                 ;;
3428                         Directory)
3429                                 for fp in $gfpth; do
3430                                         if test "X$fp" = X.; then
3431                                             pf="$ansexp"
3432                                         else    
3433                                             pf="$fp/$ansexp"
3434                                         fi
3435                                         if test -d "$pf"; then
3436                                                 type=''
3437                                                 value="$pf"
3438                                                 break
3439                                         fi
3440                                 done
3441                                 ;;
3442                         Locate)
3443                                 if test -d "$ansexp"; then
3444                                         echo "(Looking for $loc_file in directory $value.)"
3445                                         value="$value/$loc_file"
3446                                         ansexp="$ansexp/$loc_file"
3447                                 fi
3448                                 if test -f "$ansexp"; then
3449                                         type=''
3450                                 fi
3451                                 case "$nopath_ok" in
3452                                 true)   case "$value" in
3453                                         */*) ;;
3454                                         *)      echo "Assuming $value will be in people's path."
3455                                                 type=''
3456                                                 ;;
3457                                         esac
3458                                         ;;
3459                                 esac
3460                                 ;;
3461                         esac
3462
3463                         case "$skip" in
3464                         true) type='';
3465                         esac
3466
3467                         case "$type" in
3468                         '') ;;
3469                         *)
3470                                 if test "$fastread" = yes; then
3471                                         dflt=y
3472                                 else
3473                                         dflt=n
3474                                 fi
3475                                 rp="$what $value doesn't exist.  Use that name anyway?"
3476                                 . UU/myread
3477                                 dflt=''
3478                                 case "$ans" in
3479                                 y*) type='';;
3480                                 *) echo " ";;
3481                                 esac
3482                                 ;;
3483                         esac
3484                         ;;
3485                 esac
3486                 ;;
3487         esac
3488 done
3489 cd UU
3490 ans="$value"
3491 rp="$orig_rp"
3492 dflt="$orig_dflt"
3493 rm -f getfile.ok
3494 test "X$gfpthkeep" != Xy && gfpth=""
3495 EOSC
3496
3497 : determine root of directory hierarchy where package will be installed.
3498 case "$prefix" in
3499 '')
3500         dflt=`./loc . /usr/local /usr/local /local /opt /usr`
3501         ;;
3502 *)
3503         dflt="$prefix"
3504         ;;
3505 esac
3506 $cat <<EOM
3507
3508 By default, $package will be installed in $dflt/bin, manual pages
3509 under $dflt/man, etc..., i.e. with $dflt as prefix for all
3510 installation directories. Typically this is something like /usr/local.
3511 If you wish to have binaries under /usr/bin but other parts of the
3512 installation under /usr/local, that's ok: you will be prompted
3513 separately for each of the installation directories, the prefix being
3514 only used to set the defaults.
3515
3516 EOM
3517 fn=d~
3518 rp='Installation prefix to use?'
3519 . ./getfile
3520 oldprefix=''
3521 case "$prefix" in
3522 '') ;;
3523 *)
3524         case "$ans" in
3525         "$prefix") ;;
3526         *) oldprefix="$prefix";;
3527         esac
3528         ;;
3529 esac
3530 prefix="$ans"
3531 prefixexp="$ansexp"
3532
3533 : is AFS running?
3534 echo " "
3535 case "$afs" in
3536 $define|true)   afs=true ;;
3537 $undef|false)   afs=false ;;
3538 *)      if test -d /afs; then
3539                 afs=true
3540         else
3541                 afs=false
3542         fi
3543         ;;
3544 esac
3545 if $afs; then
3546         echo "AFS may be running... I'll be extra cautious then..." >&4
3547 else
3548         echo "AFS does not seem to be running..." >&4
3549 fi
3550
3551 : determine installation prefix for where package is to be installed.
3552 if $afs; then 
3553 $cat <<EOM
3554
3555 Since you are running AFS, I need to distinguish the directory in which
3556 files will reside from the directory in which they are installed (and from
3557 which they are presumably copied to the former directory by occult means).
3558
3559 EOM
3560         case "$installprefix" in
3561         '') dflt=`echo $prefix | sed 's#^/afs/#/afs/.#'`;;
3562         *) dflt="$installprefix";;
3563         esac
3564 else
3565 $cat <<EOM
3566
3567 In some special cases, particularly when building $package for distribution,
3568 it is convenient to distinguish between the directory in which files should 
3569 be installed from the directory ($prefix) in which they 
3570 will eventually reside.  For most users, these two directories are the same.
3571
3572 EOM
3573         case "$installprefix" in
3574         '') dflt=$prefix ;;
3575         *) dflt=$installprefix;;
3576         esac
3577 fi
3578 fn=d~
3579 rp='What installation prefix should I use for installing files?'
3580 . ./getfile
3581 installprefix="$ans"
3582 installprefixexp="$ansexp"
3583
3584 : set the prefixit variable, to compute a suitable default value
3585 prefixit='case "$3" in
3586 ""|none)
3587         case "$oldprefix" in
3588         "") eval "$1=\"\$$2\"";;
3589         *)
3590                 case "$3" in
3591                 "") eval "$1=";;
3592                 none)
3593                         eval "tp=\"\$$2\"";
3594                         case "$tp" in
3595                         ""|" ") eval "$1=\"\$$2\"";;
3596                         *) eval "$1=";;
3597                         esac;;
3598                 esac;;
3599         esac;;
3600 *)
3601         eval "tp=\"$oldprefix-\$$2-\""; eval "tp=\"$tp\"";
3602         case "$tp" in
3603         --|/*--|\~*--) eval "$1=\"$prefix/$3\"";;
3604         /*-$oldprefix/*|\~*-$oldprefix/*)
3605                 eval "$1=\`echo \$$2 | sed \"s,^$oldprefix,$prefix,\"\`";;
3606         *) eval "$1=\"\$$2\"";;
3607         esac;;
3608 esac'
3609
3610 : set the base revision
3611 baserev=5.0
3612
3613 : get the patchlevel
3614 echo " "
3615 echo "Getting the current patchlevel..." >&4
3616 if $test -r $rsrc/patchlevel.h;then
3617         patchlevel=`awk '/define[       ]+PERL_VERSION/ {print $3}' $rsrc/patchlevel.h`
3618         subversion=`awk '/define[       ]+PERL_SUBVERSION/ {print $3}' $rsrc/patchlevel.h`
3619         apiversion=`awk '/define[       ]+PERL_APIVERSION/ {print $3}' $rsrc/patchlevel.h`
3620 else
3621         patchlevel=0
3622         subversion=0
3623         apiversion=0
3624 fi
3625 $echo $n "(You have $package" $c
3626 case "$package" in
3627 "*$baserev")    ;;
3628 *)              $echo $n " $baserev" $c ;;
3629 esac
3630 $echo $n " patchlevel $patchlevel" $c
3631 test 0 -eq "$subversion" || $echo $n " subversion $subversion" $c
3632 echo ".)"
3633
3634 if test 0 -eq "$subversion"; then
3635         version=`LC_ALL=C; export LC_ALL; \
3636                  echo $baserev $patchlevel | \
3637                  $awk '{ printf "%.3f\n", $1 + $2/1000.0 }'`
3638 else
3639         version=`LC_ALL=C; export LC_ALL; \
3640                  echo $baserev $patchlevel $subversion | \
3641                  $awk '{ printf "%.5f\n", $1 + $2/1000.0 + $3/100000.0 }'`
3642 fi
3643
3644 : determine installation style
3645 : For now, try to deduce it from prefix unless it is already set.
3646 : Reproduce behavior of 5.005 and earlier, maybe drop that in 5.7.
3647 case "$installstyle" in
3648 '')     case "$prefix" in
3649                 *perl*) dflt='lib';;
3650                 *) dflt='lib/perl5' ;;
3651         esac
3652         ;;
3653 *)      dflt='lib/perl5' ;;
3654 esac
3655 : Probably not worth prompting for this since we prompt for all
3656 : the directories individually, and the prompt would be too long and
3657 : confusing anyway.
3658 installstyle=$dflt
3659
3660 : determine where private library files go
3661 : Usual default is /usr/local/lib/perl5/$version.
3662 : Also allow things like /opt/perl/lib/$version, since 
3663 : /opt/perl/lib/perl5... would be redundant.
3664 : The default "style" setting is made in installstyle.U
3665 case "$installstyle" in
3666 *lib/perl5*) set dflt privlib lib/$package/$version ;;
3667 *)       set dflt privlib lib/$version ;;
3668 esac
3669 eval $prefixit
3670 $cat <<EOM
3671
3672 There are some auxiliary files for $package that need to be put into a
3673 private library directory that is accessible by everyone.
3674
3675 EOM
3676 fn=d~+
3677 rp='Pathname where the private library files will reside?'
3678 . ./getfile
3679 privlib="$ans"
3680 privlibexp="$ansexp"
3681 : Change installation prefix, if necessary.
3682 if $test X"$prefix" != X"$installprefix"; then
3683         installprivlib=`echo $privlibexp | sed "s#^$prefix#$installprefix#"`
3684 else
3685         installprivlib="$privlibexp"
3686 fi
3687
3688 : set the prefixup variable, to restore leading tilda escape
3689 prefixup='case "$prefixexp" in
3690 "$prefix") ;;
3691 *) eval "$1=\`echo \$$1 | sed \"s,^$prefixexp,$prefix,\"\`";;
3692 esac'
3693
3694 : determine where public architecture dependent libraries go
3695 set archlib archlib
3696 eval $prefixit
3697 : privlib default is /usr/local/lib/$package/$version
3698 : archlib default is /usr/local/lib/$package/$version/$archname
3699 : privlib may have an optional trailing /share.
3700 tdflt=`echo $privlib | $sed 's,/share$,,'`
3701 tdflt=$tdflt/$archname
3702 case "$archlib" in
3703 '')     dflt=$tdflt
3704         ;;
3705 *)      dflt="$archlib"
3706     ;;
3707 esac
3708 $cat <<EOM
3709
3710 $spackage contains architecture-dependent library files.  If you are
3711 sharing libraries in a heterogeneous environment, you might store
3712 these files in a separate location.  Otherwise, you can just include
3713 them with the rest of the public library files.
3714
3715 EOM
3716 fn=d+~
3717 rp='Where do you want to put the public architecture-dependent libraries?'
3718 . ./getfile
3719 archlib="$ans"
3720 archlibexp="$ansexp"
3721 if $test X"$archlib" = X"$privlib"; then
3722         d_archlib="$undef"
3723 else
3724         d_archlib="$define"
3725 fi
3726 : Change installation prefix, if necessary.
3727 if $test X"$prefix" != X"$installprefix"; then
3728         installarchlib=`echo $archlibexp | sed "s#^$prefix#$installprefix#"`
3729 else
3730         installarchlib="$archlibexp"
3731 fi
3732
3733
3734 : Binary compatibility with 5.005 is not possible for builds
3735 : with advanced features
3736 case "$usethreads$usemultiplicity" in
3737 *define*)
3738         bincompat5005="$undef"
3739         d_bincompat5005="$undef"
3740         ;;
3741 *)      $cat <<EOM
3742
3743 Perl 5.006 can be compiled for binary compatibility with 5.005.
3744 If you decide to do so, you will be able to continue using most
3745 of the extensions that were compiled for Perl 5.005.
3746
3747 EOM
3748         case "$bincompat5005$d_bincompat5005" in
3749         *"$undef"*) dflt=n ;;
3750         *) dflt=y ;;
3751         esac
3752         rp='Binary compatibility with Perl 5.005?'
3753         . ./myread
3754         case "$ans" in
3755         y*) val="$define" ;;
3756         *)  val="$undef" ;;
3757         esac
3758         set d_bincompat5005
3759         eval $setvar
3760         case "$d_bincompat5005" in
3761         "$define")
3762                 bincompat5005="$define"
3763                 ;;
3764         *)      bincompat5005="$undef"
3765                 d_bincompat5005="$undef"
3766                 ;;
3767         esac
3768         ;;
3769 esac
3770
3771
3772 : see if setuid scripts can be secure
3773 $cat <<EOM
3774
3775 Some kernels have a bug that prevents setuid #! scripts from being
3776 secure.  Some sites have disabled setuid #! scripts because of this.
3777
3778 First let's decide if your kernel supports secure setuid #! scripts.
3779 (If setuid #! scripts would be secure but have been disabled anyway,
3780 don't say that they are secure if asked.)
3781
3782 EOM
3783
3784 val="$undef"
3785 if $test -d /dev/fd; then
3786         echo "#!$ls" >reflect
3787         chmod +x,u+s reflect
3788         ./reflect >flect 2>&1
3789         if $contains "/dev/fd" flect >/dev/null; then
3790                 echo "Congratulations, your kernel has secure setuid scripts!" >&4
3791                 val="$define"
3792         else
3793                 $cat <<EOM
3794 If you are not sure if they are secure, I can check but I'll need a
3795 username and password different from the one you are using right now.
3796 If you don't have such a username or don't want me to test, simply
3797 enter 'none'.
3798
3799 EOM
3800                 rp='Other username to test security of setuid scripts with?'
3801                 dflt='none'
3802                 . ./myread
3803                 case "$ans" in
3804                 n|none)
3805                         case "$d_suidsafe" in
3806                         '')     echo "I'll assume setuid scripts are *not* secure." >&4
3807                                 dflt=n;;
3808                         "$undef")
3809                                 echo "Well, the $hint value is *not* secure." >&4
3810                                 dflt=n;;
3811                         *)      echo "Well, the $hint value *is* secure." >&4
3812                                 dflt=y;;
3813                         esac
3814                         ;;
3815                 *)
3816                         $rm -f reflect flect
3817                         echo "#!$ls" >reflect
3818                         chmod +x,u+s reflect
3819                         echo >flect
3820                         chmod a+w flect
3821                         echo '"su" will (probably) prompt you for '"$ans's password."
3822                         su $ans -c './reflect >flect'
3823                         if $contains "/dev/fd" flect >/dev/null; then
3824                                 echo "Okay, it looks like setuid scripts are secure." >&4
3825                                 dflt=y
3826                         else
3827                                 echo "I don't think setuid scripts are secure." >&4
3828                                 dflt=n
3829                         fi
3830                         ;;
3831                 esac
3832                 rp='Does your kernel have *secure* setuid scripts?'
3833                 . ./myread
3834                 case "$ans" in
3835                 [yY]*)  val="$define";;
3836                 *)      val="$undef";;
3837                 esac
3838         fi
3839 else
3840         echo "I don't think setuid scripts are secure (no /dev/fd directory)." >&4
3841         echo "(That's for file descriptors, not floppy disks.)"
3842         val="$undef"
3843 fi
3844 set d_suidsafe
3845 eval $setvar
3846
3847 $rm -f reflect flect
3848
3849 : now see if they want to do setuid emulation
3850 echo " "
3851 val="$undef"
3852 case "$d_suidsafe" in
3853 "$define")
3854         val="$undef"
3855         echo "No need to emulate SUID scripts since they are secure here." >& 4
3856         ;;
3857 *)
3858         $cat <<EOM
3859 Some systems have disabled setuid scripts, especially systems where
3860 setuid scripts cannot be secure.  On systems where setuid scripts have
3861 been disabled, the setuid/setgid bits on scripts are currently
3862 useless.  It is possible for $package to detect those bits and emulate
3863 setuid/setgid in a secure fashion.  This emulation will only work if
3864 setuid scripts have been disabled in your kernel.
3865
3866 EOM
3867         case "$d_dosuid" in
3868         "$define") dflt=y ;;
3869         *) dflt=n ;;
3870         esac
3871         rp="Do you want to do setuid/setgid emulation?"
3872         . ./myread
3873         case "$ans" in
3874         [yY]*)  val="$define";;
3875         *)      val="$undef";;
3876         esac
3877         ;;
3878 esac
3879 set d_dosuid
3880 eval $setvar
3881
3882 : What should the include directory be ?
3883 echo " "
3884 $echo $n "Hmm...  $c"
3885 dflt='/usr/include'
3886 incpath=''
3887 mips_type=''
3888 if $test -f /bin/mips && /bin/mips; then
3889         echo "Looks like a MIPS system..."
3890         $cat >usr.c <<'EOCP'
3891 #ifdef SYSTYPE_BSD43
3892 /bsd43
3893 #endif
3894 EOCP
3895         if $cc -E usr.c > usr.out && $contains / usr.out >/dev/null 2>&1; then
3896                 dflt='/bsd43/usr/include'
3897                 incpath='/bsd43'
3898                 mips_type='BSD 4.3'
3899         else
3900                 mips_type='System V'
3901         fi
3902         $rm -f usr.c usr.out
3903         echo "and you're compiling with the $mips_type compiler and libraries."
3904         xxx_prompt=y
3905         echo "exit 0" >mips
3906 else
3907         echo "Doesn't look like a MIPS system."
3908         xxx_prompt=n
3909         echo "exit 1" >mips
3910 fi
3911 chmod +x mips
3912 $eunicefix mips
3913 case "$usrinc" in
3914 '') ;;
3915 *) dflt="$usrinc";;
3916 esac
3917 case "$xxx_prompt" in
3918 y)      fn=d/
3919         echo " "
3920         rp='Where are the include files you want to use?'
3921         . ./getfile
3922         usrinc="$ans"
3923         ;;
3924 *)      usrinc="$dflt"
3925         ;;
3926 esac
3927
3928 : see how we invoke the C preprocessor
3929 echo " "
3930 echo "Now, how can we feed standard input to your C preprocessor..." >&4
3931 cat <<'EOT' >testcpp.c
3932 #define ABC abc
3933 #define XYZ xyz
3934 ABC.XYZ
3935 EOT
3936 cd ..
3937 if test ! -f cppstdin; then
3938         if test "X$osname" = "Xaix" -a "X$gccversion" = X; then
3939                 # AIX cc -E doesn't show the absolute headerfile
3940                 # locations but we'll cheat by using the -M flag.
3941                 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
3942         else
3943                 echo 'cat >.$$.c; '"$cc"' -E ${1+"$@"} .$$.c; rm .$$.c' >cppstdin
3944         fi
3945 else
3946         echo "Keeping your $hint cppstdin wrapper."
3947 fi
3948 chmod 755 cppstdin
3949 wrapper=`pwd`/cppstdin
3950 ok='false'
3951 cd UU
3952
3953 if $test "X$cppstdin" != "X" && \
3954         $cppstdin $cppminus <testcpp.c >testcpp.out 2>&1 && \
3955         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
3956 then
3957         echo "You used to use $cppstdin $cppminus so we'll use that again."
3958         case "$cpprun" in
3959         '') echo "But let's see if we can live without a wrapper..." ;;
3960         *)
3961                 if $cpprun $cpplast <testcpp.c >testcpp.out 2>&1 && \
3962                         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
3963                 then
3964                         echo "(And we'll use $cpprun $cpplast to preprocess directly.)"
3965                         ok='true'
3966                 else
3967                         echo "(However, $cpprun $cpplast does not work, let's see...)"
3968                 fi
3969                 ;;
3970         esac
3971 else
3972         case "$cppstdin" in
3973         '') ;;
3974         *)
3975                 echo "Good old $cppstdin $cppminus does not seem to be of any help..."
3976                 ;;
3977         esac
3978 fi
3979
3980 if $ok; then
3981         : nothing
3982 elif echo 'Maybe "'"$cc"' -E" will work...'; \
3983         $cc -E <testcpp.c >testcpp.out 2>&1; \
3984         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3985         echo "Yup, it does."
3986         x_cpp="$cc -E"
3987         x_minus='';
3988 elif echo 'Nope...maybe "'"$cc"' -E -" will work...'; \
3989         $cc -E - <testcpp.c >testcpp.out 2>&1; \
3990         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3991         echo "Yup, it does."
3992         x_cpp="$cc -E"
3993         x_minus='-';
3994 elif echo 'Nope...maybe "'"$cc"' -P" will work...'; \
3995         $cc -P <testcpp.c >testcpp.out 2>&1; \
3996         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3997         echo "Yipee, that works!"
3998         x_cpp="$cc -P"
3999         x_minus='';
4000 elif echo 'Nope...maybe "'"$cc"' -P -" will work...'; \
4001         $cc -P - <testcpp.c >testcpp.out 2>&1; \
4002         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
4003         echo "At long last!"
4004         x_cpp="$cc -P"
4005         x_minus='-';
4006 elif echo 'No such luck, maybe "'$cpp'" will work...'; \
4007         $cpp <testcpp.c >testcpp.out 2>&1; \
4008         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
4009         echo "It works!"
4010         x_cpp="$cpp"
4011         x_minus='';
4012 elif echo 'Nixed again...maybe "'$cpp' -" will work...'; \
4013         $cpp - <testcpp.c >testcpp.out 2>&1; \
4014         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
4015         echo "Hooray, it works!  I was beginning to wonder."
4016         x_cpp="$cpp"
4017         x_minus='-';
4018 elif echo 'Uh-uh.  Time to get fancy.  Trying a wrapper...'; \
4019         $wrapper <testcpp.c >testcpp.out 2>&1; \
4020         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
4021         x_cpp="$wrapper"
4022         x_minus=''
4023         echo "Eureka!"
4024 else
4025         dflt=''
4026         rp="No dice.  I can't find a C preprocessor.  Name one:"
4027         . ./myread
4028         x_cpp="$ans"
4029         x_minus=''
4030         $x_cpp <testcpp.c >testcpp.out 2>&1
4031         if $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
4032                 echo "OK, that will do." >&4
4033         else
4034 echo "Sorry, I can't get that to work.  Go find one and rerun Configure." >&4
4035                 exit 1
4036         fi
4037 fi
4038
4039 case "$ok" in
4040 false)
4041         cppstdin="$x_cpp"
4042         cppminus="$x_minus"
4043         cpprun="$x_cpp"
4044         cpplast="$x_minus"
4045         set X $x_cpp
4046         shift
4047         case "$1" in
4048         "$cpp")
4049                 echo "Perhaps can we force $cc -E using a wrapper..."
4050                 if $wrapper <testcpp.c >testcpp.out 2>&1; \
4051                         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
4052                 then
4053                         echo "Yup, we can."
4054                         cppstdin="$wrapper"
4055                         cppminus='';
4056                 else
4057                         echo "Nope, we'll have to live without it..."
4058                 fi
4059                 ;;
4060         esac
4061         case "$cpprun" in
4062         "$wrapper")
4063                 cpprun=''
4064                 cpplast=''
4065                 ;;
4066         esac
4067         ;;
4068 esac
4069
4070 case "$cppstdin" in
4071 "$wrapper"|'cppstdin') ;;
4072 *) $rm -f $wrapper;;
4073 esac
4074 $rm -f testcpp.c testcpp.out
4075
4076 : Set private lib path
4077 case "$plibpth" in
4078 '') if ./mips; then
4079                 plibpth="$incpath/usr/lib /usr/local/lib /usr/ccs/lib"
4080         fi;;
4081 esac
4082 case "$libpth" in
4083 ' ') dlist='';;
4084 '') dlist="$loclibpth $plibpth $glibpth";;
4085 *) dlist="$libpth";;
4086 esac
4087
4088 : Now check and see which directories actually exist, avoiding duplicates
4089 libpth=''
4090 for xxx in $dlist
4091 do
4092     if $test -d $xxx; then
4093                 case " $libpth " in
4094                 *" $xxx "*) ;;
4095                 *) libpth="$libpth $xxx";;
4096                 esac
4097     fi
4098 done
4099 $cat <<'EOM'
4100
4101 Some systems have incompatible or broken versions of libraries.  Among
4102 the directories listed in the question below, please remove any you
4103 know not to be holding relevant libraries, and add any that are needed.
4104 Say "none" for none.
4105
4106 EOM
4107 case "$libpth" in
4108 '') dflt='none';;
4109 *)
4110         set X $libpth
4111         shift
4112         dflt=${1+"$@"}
4113         ;;
4114 esac
4115 rp="Directories to use for library searches?"
4116 . ./myread
4117 case "$ans" in
4118 none) libpth=' ';;
4119 *) libpth="$ans";;
4120 esac
4121
4122 : compute shared library extension
4123 case "$so" in
4124 '')
4125         if xxx=`./loc libc.sl X $libpth`; $test -f "$xxx"; then
4126                 dflt='sl'
4127         else
4128                 dflt='so'
4129         fi
4130         ;;
4131 *) dflt="$so";;
4132 esac
4133 $cat <<EOM
4134
4135 On some systems, shared libraries may be available.  Answer 'none' if
4136 you want to suppress searching of shared libraries for the remaining
4137 of this configuration.
4138
4139 EOM
4140 rp='What is the file extension used for shared libraries?'
4141 . ./myread
4142 so="$ans"
4143
4144 : Define several unixisms.
4145 : Hints files or command line option can be used to override them.
4146 : The convoluted testing is in case hints files set either the old
4147 : or the new name.
4148 case "$_exe" in
4149 '')     case "$exe_ext" in
4150     '') ;;
4151         *)      _exe="$exe_ext" ;;
4152         esac
4153         ;;
4154 esac
4155 case "$_a" in
4156 '')     case "$lib_ext" in
4157     '') _a='.a';;
4158         *)      _a="$lib_ext" ;;
4159         esac
4160         ;;
4161 esac
4162 case "$_o" in
4163 '') case "$obj_ext" in
4164         '')     _o='.o';;
4165         *)      _o="$obj_ext";;
4166         esac
4167         ;;
4168 esac
4169 case "$p_" in
4170 '') case "$path_sep" in
4171         '')     p_=':';;
4172         *)      p_="$path_sep";;
4173         esac
4174         ;;
4175 esac
4176 exe_ext=$_exe
4177 lib_ext=$_a
4178 obj_ext=$_o
4179 path_sep=$p_
4180
4181 : Which makefile gets called first.  This is used by make depend.
4182 case "$firstmakefile" in
4183 '') firstmakefile='makefile';;
4184 esac
4185
4186 cat <<EOM
4187
4188 Perl can be built to use the SOCKS proxy protocol library.  To do so,
4189 Configure must be run with -Dusesocks.
4190
4191 Normally you do not need this and you should answer no.
4192
4193 EOM
4194 case "$usesocks" in
4195 $define|true|[yY]*)     dflt='y';;
4196 *) dflt='n';;
4197 esac
4198 rp='Build Perl for SOCKS?'
4199 . ./myread
4200 case "$ans" in
4201 y|Y)    val="$define" ;;     
4202 *)      val="$undef" ;;
4203 esac
4204 set usesocks
4205 eval $setvar
4206
4207 : Looking for optional libraries
4208 echo " "
4209 echo "Checking for optional libraries..." >&4
4210 case "$libs" in
4211 ' '|'') dflt='';;
4212 *) dflt="$libs";;
4213 esac
4214 case "$libswanted" in
4215 '') libswanted='c_s';;
4216 esac
4217 case "$usesocks" in
4218 $define)
4219         libswanted="$libswanted socks5 socks5_sh"
4220         ;;
4221 esac
4222 for thislib in $libswanted; do
4223         
4224         if xxx=`./loc lib$thislib.$so.[0-9]'*' X $libpth`;
4225                 $test -f "$xxx" -a "X$ignore_versioned_solibs" = "X"; then
4226                 echo "Found -l$thislib (shared)."
4227                 case " $dflt " in
4228                 *"-l$thislib "*);;
4229                 *) dflt="$dflt -l$thislib";;
4230                 esac
4231         elif xxx=`./loc lib$thislib.$so X $libpth` ; $test -f "$xxx"; then
4232                 echo "Found -l$thislib (shared)."
4233                 case " $dflt " in
4234                 *"-l$thislib "*);;
4235                 *) dflt="$dflt -l$thislib";;
4236                 esac
4237         elif xxx=`./loc lib$thislib$_a X $libpth`; $test -f "$xxx"; then
4238                 echo "Found -l$thislib."
4239                 case " $dflt " in
4240                 *"-l$thislib "*);;
4241                 *) dflt="$dflt -l$thislib";;
4242                 esac
4243         elif xxx=`./loc $thislib$_a X $libpth`; $test -f "$xxx"; then
4244                 echo "Found -l$thislib."
4245                 case " $dflt " in
4246                 *"-l$thislib "*);;
4247                 *) dflt="$dflt -l$thislib";;
4248                 esac
4249         elif xxx=`./loc lib${thislib}_s$_a X $libpth`; $test -f "$xxx"; then
4250                 echo "Found -l${thislib}_s."
4251                 case " $dflt " in
4252                 *"-l$thislib "*);;
4253                 *) dflt="$dflt -l${thislib}_s";;
4254                 esac
4255         elif xxx=`./loc Slib$thislib$_a X $xlibpth`; $test -f "$xxx"; then
4256                 echo "Found -l$thislib."
4257                 case " $dflt " in
4258                 *"-l$thislib "*);;
4259                 *) dflt="$dflt -l$thislib";;
4260                 esac
4261         else
4262                 echo "No -l$thislib."
4263         fi
4264 done
4265 set X $dflt
4266 shift
4267 dflt="$*"
4268 case "$libs" in
4269 '') dflt="$dflt";;
4270 *) dflt="$libs";;
4271 esac
4272 case "$dflt" in
4273 ' '|'') dflt='none';;
4274 esac
4275
4276 $cat <<EOM
4277
4278 In order to compile $package on your machine, a number of libraries
4279 are usually needed.  Include any other special libraries here as well.
4280 Say "none" for none.  The default list is almost always right.
4281 EOM
4282
4283 echo " "
4284 rp="What libraries to use?"
4285 . ./myread
4286 case "$ans" in
4287 none) libs=' ';;
4288 *) libs="$ans";;
4289 esac
4290
4291 : determine optimization, if desired, or use for debug flag also
4292 case "$optimize" in
4293 ' '|$undef) dflt='none';;
4294 '') dflt='-O';;
4295 *) dflt="$optimize";;
4296 esac
4297 $cat <<EOH
4298
4299 By default, $package compiles with the -O flag to use the optimizer.
4300 Alternately, you might want to use the symbolic debugger, which uses
4301 the -g flag (on traditional Unix systems).  Either flag can be
4302 specified here.  To use neither flag, specify the word "none".
4303
4304 EOH
4305 rp="What optimizer/debugger flag should be used?"
4306 . ./myread
4307 optimize="$ans"
4308 case "$optimize" in
4309 'none') optimize=" ";;
4310 esac
4311
4312 dflt=''
4313 : We will not override a previous value, but we might want to
4314 : augment a hint file
4315 case "$hint" in
4316 default|recommended)
4317         case "$gccversion" in
4318         1*) dflt='-fpcc-struct-return' ;;
4319         esac
4320         case "$optimize" in
4321         *-g*) dflt="$dflt -DDEBUGGING";;
4322         esac
4323         case "$gccversion" in
4324         2*) if test -d /etc/conf/kconfig.d &&
4325                         $contains _POSIX_VERSION $usrinc/sys/unistd.h >/dev/null 2>&1
4326                 then
4327                         dflt="$dflt -posix"
4328                 fi
4329                 ;;
4330         esac
4331         case "$gccversion" in
4332         1*) ;;
4333         2.[0-8]*) ;;
4334         ?*)     echo " "
4335                 echo "Checking if your compiler accepts -fno-strict-aliasing" 2>&1
4336                 echo 'int main(void) { return 0; }' > gcctest.c
4337                 if $cc -O2 -fno-strict-aliasing -o gcctest gcctest.c; then
4338                         echo "Yes, it does." 2>&1
4339                         case "$ccflags" in
4340                         *strict-aliasing*) 
4341                                 echo "Leaving current flags $ccflags alone." 2>&1
4342                                 ;;
4343                         *) dflt="$dflt -fno-strict-aliasing" ;;
4344                         esac
4345                 else
4346                         echo "Nope, it doesn't, but that's ok." 2>&1
4347                 fi
4348                 ;;
4349         esac
4350         ;;
4351 esac
4352
4353 case "$mips_type" in
4354 *BSD*|'') inclwanted="$locincpth $usrinc";;
4355 *) inclwanted="$locincpth $inclwanted $usrinc/bsd";;
4356 esac
4357 for thisincl in $inclwanted; do
4358         if $test -d $thisincl; then
4359                 if $test x$thisincl != x$usrinc; then
4360                         case "$dflt" in
4361                         *$thisincl*);;
4362                         *) dflt="$dflt -I$thisincl";;
4363                         esac
4364                 fi
4365         fi
4366 done
4367
4368 inctest='if $contains $2 $usrinc/$1 >/dev/null 2>&1; then
4369         xxx=true;
4370 elif $contains $2 $usrinc/sys/$1 >/dev/null 2>&1; then
4371         xxx=true;
4372 else
4373         xxx=false;
4374 fi;
4375 if $xxx; then
4376         case "$dflt" in
4377         *$2*);;
4378         *) dflt="$dflt -D$2";;
4379         esac;
4380 fi'
4381
4382 set signal.h LANGUAGE_C; eval $inctest
4383
4384 case "$usesocks" in
4385 $define)
4386         ccflags="$ccflags -DSOCKS"
4387         ;;
4388 esac
4389
4390 case "$hint" in
4391 default|recommended) dflt="$ccflags $dflt" ;;
4392 *) dflt="$ccflags";;
4393 esac
4394
4395 case "$dflt" in
4396 ''|' ') dflt=none;;
4397 esac
4398 $cat <<EOH
4399
4400 Your C compiler may want other flags.  For this question you should include
4401 -I/whatever and -DWHATEVER flags and any other flags used by the C compiler,
4402 but you should NOT include libraries or ld flags like -lwhatever.  If you
4403 want $package to honor its debug switch, you should include -DDEBUGGING here.
4404 Your C compiler might also need additional flags, such as -D_POSIX_SOURCE.
4405
4406 To use no flags, specify the word "none".
4407
4408 EOH
4409 set X $dflt
4410 shift
4411 dflt=${1+"$@"}
4412 rp="Any additional cc flags?"
4413 . ./myread
4414 case "$ans" in
4415 none) ccflags='';;
4416 *) ccflags="$ans";;
4417 esac
4418
4419 : the following weeds options from ccflags that are of no interest to cpp
4420 cppflags="$ccflags"
4421 case "$gccversion" in
4422 1*) cppflags="$cppflags -D__GNUC__"
4423 esac
4424 case "$mips_type" in
4425 '');;
4426 *BSD*) cppflags="$cppflags -DSYSTYPE_BSD43";;
4427 esac
4428 case "$cppflags" in
4429 '');;
4430 *)
4431         echo " "
4432         echo "Let me guess what the preprocessor flags are..." >&4
4433         set X $cppflags
4434         shift
4435         cppflags=''
4436         $cat >cpp.c <<'EOM'
4437 #define BLURFL foo
4438
4439 BLURFL xx LFRULB
4440 EOM
4441         previous=''
4442         for flag in $*
4443         do
4444                 case "$flag" in
4445                 -*) ftry="$flag";;
4446                 *) ftry="$previous $flag";;
4447                 esac
4448                 if $cppstdin -DLFRULB=bar $cppflags $ftry $cppminus <cpp.c \
4449                         >cpp1.out 2>/dev/null && \
4450                         $cpprun -DLFRULB=bar $cppflags $ftry $cpplast <cpp.c \
4451                         >cpp2.out 2>/dev/null && \
4452                         $contains 'foo.*xx.*bar' cpp1.out >/dev/null 2>&1 && \
4453                         $contains 'foo.*xx.*bar' cpp2.out >/dev/null 2>&1
4454                 then
4455                         cppflags="$cppflags $ftry"
4456                         previous=''
4457                 else
4458                         previous="$flag"
4459                 fi
4460         done
4461         set X $cppflags
4462         shift
4463         cppflags=${1+"$@"}
4464         case "$cppflags" in
4465         *-*)  echo "They appear to be: $cppflags";;
4466         esac
4467         $rm -f cpp.c cpp?.out
4468         ;;
4469 esac
4470
4471 : flags used in final linking phase
4472 case "$ldflags" in
4473 '') if ./venix; then
4474                 dflt='-i -z'
4475         else
4476                 dflt=''
4477         fi
4478         case "$ccflags" in
4479         *-posix*) dflt="$dflt -posix" ;;
4480         esac
4481         ;;
4482 *) dflt="$ldflags";;
4483 esac
4484
4485 : Try to guess additional flags to pick up local libraries.
4486 for thislibdir in $libpth; do
4487         case " $loclibpth " in
4488         *" $thislibdir "*)
4489                 case "$dflt " in 
4490                 *"-L$thislibdir "*) ;;
4491                 *)  dflt="$dflt -L$thislibdir" ;;
4492                 esac
4493                 ;;
4494         esac
4495 done
4496
4497 case "$dflt" in
4498 '') dflt='none' ;;
4499 esac
4500
4501 $cat <<EOH
4502
4503 Your C linker may need flags.  For this question you should
4504 include -L/whatever and any other flags used by the C linker, but you
4505 should NOT include libraries like -lwhatever.
4506
4507 Make sure you include the appropriate -L/path flags if your C linker
4508 does not normally search all of the directories you specified above,
4509 namely
4510         $libpth
4511 To use no flags, specify the word "none".
4512
4513 EOH
4514
4515 rp="Any additional ld flags (NOT including libraries)?"
4516 . ./myread
4517 case "$ans" in
4518 none) ldflags='';;
4519 *) ldflags="$ans";;
4520 esac
4521 rmlist="$rmlist pdp11"
4522
4523 : coherency check
4524 echo " "
4525 echo "Checking your choice of C compiler and flags for coherency..." >&4
4526 $cat > try.c <<'EOF'
4527 #include <stdio.h>
4528 int main() { printf("Ok\n"); exit(0); }
4529 EOF
4530 set X $cc $optimize $ccflags -o try $ldflags try.c $libs
4531 shift
4532 $cat >try.msg <<'EOM'
4533 I've tried to compile and run the following simple program:
4534
4535 EOM
4536 $cat try.c >> try.msg
4537
4538 $cat >> try.msg <<EOM
4539
4540 I used the command:
4541
4542         $*
4543         ./try
4544
4545 and I got the following output:
4546
4547 EOM
4548 dflt=y
4549 if sh -c "$cc $optimize $ccflags -o try $ldflags try.c $libs" >>try.msg 2>&1; then
4550         if sh -c './try' >>try.msg 2>&1; then
4551                 xxx=`./try`
4552                 case "$xxx" in
4553                 "Ok") dflt=n ;;
4554                 *)      echo 'The program compiled OK, but produced no output.' >> try.msg
4555                         case " $libs " in
4556                         *" -lsfio "*)
4557                                 cat >> try.msg <<'EOQS'
4558 If $libs contains -lsfio, and sfio is mis-configured, then it
4559 sometimes (apparently) runs and exits with a 0 status, but with no
4560 output!  It may have to do with sfio's use of _exit vs. exit.
4561
4562 EOQS
4563                                 rp="You have a big problem.  Shall I abort Configure"
4564                                 dflt=y
4565                                 ;;
4566                         esac
4567                         ;;
4568                 esac
4569         else
4570                 echo "The program compiled OK, but exited with status $?." >>try.msg
4571                 rp="You have a problem.  Shall I abort Configure"
4572                 dflt=y
4573         fi
4574 else
4575         echo "I can't compile the test program." >>try.msg
4576         rp="You have a BIG problem.  Shall I abort Configure"
4577         dflt=y
4578 fi
4579 case "$dflt" in
4580 y)
4581         $cat try.msg >&4
4582         case "$knowitall" in
4583         '')
4584                 echo "(The supplied flags or libraries might be incorrect.)"
4585                 ;;
4586         *) dflt=n;;
4587         esac
4588         echo " "
4589         . ./myread
4590         case "$ans" in
4591         n*|N*) ;;
4592         *)      echo "Ok.  Stopping Configure." >&4
4593                 exit 1
4594                 ;;
4595         esac
4596         ;;
4597 n) echo "OK, that should do.";;
4598 esac
4599 $rm -f try try.* core
4600
4601 : determine filename position in cpp output
4602 echo " "
4603 echo "Computing filename position in cpp output for #include directives..." >&4
4604 echo '#include <stdio.h>' > foo.c
4605 $cat >fieldn <<EOF
4606 $startsh
4607 $cppstdin $cppflags $cppminus <foo.c 2>/dev/null | \
4608 $grep '^[       ]*#.*stdio\.h' | \
4609 while read cline; do
4610         pos=1
4611         set \$cline
4612         while $test \$# -gt 0; do
4613                 if $test -r \`echo \$1 | $tr -d '"'\`; then
4614                         echo "\$pos"
4615                         exit 0
4616                 fi
4617                 shift
4618                 pos=\`expr \$pos + 1\`
4619         done
4620 done
4621 EOF
4622 chmod +x fieldn
4623 fieldn=`./fieldn`
4624 $rm -f foo.c fieldn
4625 case $fieldn in
4626 '') pos='???';;
4627 1) pos=first;;
4628 2) pos=second;;
4629 3) pos=third;;
4630 *) pos="${fieldn}th";;
4631 esac
4632 echo "Your cpp writes the filename in the $pos field of the line."
4633
4634 : locate header file
4635 $cat >findhdr <<EOF
4636 $startsh
4637 wanted=\$1
4638 name=''
4639 for usrincdir in $usrinc
4640 do
4641         if test -f \$usrincdir/\$wanted; then
4642                 echo "\$usrincdir/\$wanted"
4643                 exit 0
4644         fi
4645 done
4646 awkprg='{ print \$$fieldn }'
4647 echo "#include <\$wanted>" > foo\$\$.c
4648 $cppstdin $cppminus $cppflags < foo\$\$.c 2>/dev/null | \
4649 $grep "^[       ]*#.*\$wanted" | \
4650 while read cline; do
4651         name=\`echo \$cline | $awk "\$awkprg" | $tr -d '"'\`
4652         case "\$name" in
4653         *[/\\\\]\$wanted) echo "\$name"; exit 1;;
4654         *[\\\\/]\$wanted) echo "\$name"; exit 1;;
4655         *) exit 2;;
4656         esac;
4657 done;
4658 #
4659 # status = 0: grep returned 0 lines, case statement not executed
4660 # status = 1: headerfile found
4661 # status = 2: while loop executed, no headerfile found
4662 #
4663 status=\$?
4664 $rm -f foo\$\$.c;
4665 if test \$status -eq 1; then
4666         exit 0;
4667 fi
4668 exit 1
4669 EOF
4670 chmod +x findhdr
4671
4672 : define an alternate in-header-list? function
4673 inhdr='echo " "; td=$define; tu=$undef; yyy=$@;
4674 cont=true; xxf="echo \"<\$1> found.\" >&4";
4675 case $# in 2) xxnf="echo \"<\$1> NOT found.\" >&4";;
4676 *) xxnf="echo \"<\$1> NOT found, ...\" >&4";;
4677 esac;
4678 case $# in 4) instead=instead;; *) instead="at last";; esac;
4679 while $test "$cont"; do
4680         xxx=`./findhdr $1`
4681         var=$2; eval "was=\$$2";
4682         if $test "$xxx" && $test -r "$xxx";
4683         then eval $xxf;
4684         eval "case \"\$$var\" in $undef) . ./whoa; esac"; eval "$var=\$td";
4685                 cont="";
4686         else eval $xxnf;
4687         eval "case \"\$$var\" in $define) . ./whoa; esac"; eval "$var=\$tu"; fi;
4688         set $yyy; shift; shift; yyy=$@;
4689         case $# in 0) cont="";;
4690         2) xxf="echo \"but I found <\$1> $instead.\" >&4";
4691                 xxnf="echo \"and I did not find <\$1> either.\" >&4";;
4692         *) xxf="echo \"but I found <\$1\> instead.\" >&4";
4693                 xxnf="echo \"there is no <\$1>, ...\" >&4";;
4694         esac;
4695 done;
4696 while $test "$yyy";
4697 do set $yyy; var=$2; eval "was=\$$2";
4698         eval "case \"\$$var\" in $define) . ./whoa; esac"; eval "$var=\$tu";
4699         set $yyy; shift; shift; yyy=$@;
4700 done'
4701
4702 : see if this is a malloc.h system
4703 set malloc.h i_malloc
4704 eval $inhdr
4705
4706 : see if stdlib is available
4707 set stdlib.h i_stdlib
4708 eval $inhdr
4709
4710 : determine which malloc to compile in
4711 echo " "
4712 case "$usemymalloc" in
4713 ''|[yY]*|true|$define)  dflt='y' ;;
4714 *)      dflt='n' ;;
4715 esac
4716 rp="Do you wish to attempt to use the malloc that comes with $package?"
4717 . ./myread
4718 usemymalloc="$ans"
4719 case "$ans" in
4720 y*|true)
4721         usemymalloc='y'
4722         mallocsrc='malloc.c'
4723         mallocobj="malloc$_o"
4724         d_mymalloc="$define"
4725         case "$libs" in
4726         *-lmalloc*)
4727                 : Remove malloc from list of libraries to use
4728                 echo "Removing unneeded -lmalloc from library list" >&4
4729                 set `echo X $libs | $sed -e 's/-lmalloc / /' -e 's/-lmalloc$//'`
4730                 shift
4731                 libs="$*"
4732                 echo "libs = $libs" >&4
4733                 ;;
4734         esac
4735         ;;
4736 *)
4737         usemymalloc='n'
4738         mallocsrc=''
4739         mallocobj=''
4740         d_mymalloc="$undef"
4741         ;;
4742 esac
4743
4744 : compute the return types of malloc and free
4745 echo " "
4746 $cat >malloc.c <<END
4747 #$i_malloc I_MALLOC
4748 #$i_stdlib I_STDLIB
4749 #include <stdio.h>
4750 #include <sys/types.h>
4751 #ifdef I_MALLOC
4752 #include <malloc.h>
4753 #endif
4754 #ifdef I_STDLIB
4755 #include <stdlib.h>
4756 #endif
4757 #ifdef TRY_MALLOC
4758 void *malloc();
4759 #endif
4760 #ifdef TRY_FREE
4761 void free();
4762 #endif
4763 END
4764 case "$malloctype" in
4765 '')
4766         if $cc $ccflags -c -DTRY_MALLOC malloc.c >/dev/null 2>&1; then
4767                 malloctype='void *'
4768         else
4769                 malloctype='char *'
4770         fi
4771         ;;
4772 esac
4773 echo "Your system wants malloc to return '$malloctype', it would seem." >&4
4774
4775 case "$freetype" in
4776 '')
4777         if $cc $ccflags -c -DTRY_FREE malloc.c >/dev/null 2>&1; then
4778                 freetype='void'
4779         else
4780                 freetype='int'
4781         fi
4782         ;;
4783 esac
4784 echo "Your system uses $freetype free(), it would seem." >&4
4785 $rm -f malloc.[co]
4786 $cat <<EOM
4787
4788 The installation process will also create a directory for
4789 vendor-supplied add-ons.  Vendors who supply perl with their system
4790 may find it convenient to place all vendor-supplied files in this
4791 directory rather than in the main distribution directory.  This will
4792 ease upgrades between binary-compatible maintenance versions of perl.
4793
4794 Of course you may also use these directories in whatever way you see
4795 fit.  For example, you might use them to access modules shared over a
4796 company-wide network.
4797
4798 The default answer should be fine for most people.
4799 This causes further questions about vendor add-ons to be skipped
4800 and no vendor-specific directories will be configured for perl.
4801
4802 EOM
4803 rp='Do you want to configure vendor-specific add-on directories?'
4804 case "$usevendorprefix" in
4805 define|true|[yY]*) dflt=y ;;
4806 *) dflt=n ;;
4807 esac
4808 . ./myread
4809 case "$ans" in
4810 [yY]*)  fn=d~+
4811         rp='Installation prefix to use for vendor-supplied add-ons?'
4812         case "$vendorprefix" in
4813         '') dflt='' ;;
4814         *)  dflt=$vendorprefix ;;
4815         esac
4816         . ./getfile
4817         oldvendorprefix=''
4818         case "$vendorprefix" in
4819         '') ;;
4820         *)      case "$ans" in
4821                 "$prefix") ;;
4822                 *) oldvendorprefix="$prefix";;
4823                 esac
4824                 ;;
4825         esac
4826         usevendorprefix="$define"
4827         vendorprefix="$ans"
4828         vendorprefixexp="$ansexp"
4829         ;;
4830 *)      usevendorprefix="$undef"
4831         vendorprefix=''
4832         vendorprefixexp=''
4833         ;;
4834 esac
4835
4836 case "$vendorprefix" in
4837 '')     d_vendorlib="$undef"
4838         vendorlib=''
4839         vendorlibexp=''
4840         ;;
4841 *)      d_vendorlib="$define"
4842         : determine where vendor-supplied modules go.
4843         : Usual default is /usr/local/lib/perl5/vendor_perl
4844         prog=`echo $package | $sed 's/-*[0-9.]*$//'`
4845         case "$installstyle" in
4846         *lib/perl5*) dflt=$vendorprefix/lib/$package/vendor_$prog ;;
4847         *)           dflt=$vendorprefix/lib/vendor_$prog ;;
4848         esac
4849         fn=d~+
4850         rp='Pathname for the vendor-supplied library files?'
4851         . ./getfile
4852         vendorlib="$ans"
4853         vendorlibexp="$ansexp"
4854         : Change installation prefix, if necessary.
4855         if $test X"$prefix" != X"$installprefix"; then
4856                 installvendorlib=`echo $vendorlibexp | $sed "s#^$prefix#$installprefix#"`
4857         else
4858                 installvendorlib="$vendorlibexp"
4859         fi
4860         ;;
4861 esac
4862
4863 : Cruising for prototypes
4864 echo " "
4865 echo "Checking out function prototypes..." >&4
4866 $cat >prototype.c <<'EOCP'
4867 int main(int argc, char *argv[]) {
4868         exit(0);}
4869 EOCP
4870 if $cc $ccflags -c prototype.c >prototype.out 2>&1 ; then
4871         echo "Your C compiler appears to support function prototypes."
4872         val="$define"
4873 else
4874         echo "Your C compiler doesn't seem to understand function prototypes."
4875         val="$undef"
4876 fi
4877 set prototype
4878 eval $setvar
4879 $rm -f prototype*
4880
4881 case "$prototype" in
4882 "$define") ;;
4883 *)      ansi2knr='ansi2knr'
4884         echo " "
4885         cat <<EOM >&4
4886
4887 $me:  FATAL ERROR:
4888 This version of $package can only be compiled by a compiler that 
4889 understands function prototypes.  Unfortunately, your C compiler 
4890         $cc $ccflags
4891 doesn't seem to understand them.  Sorry about that.
4892
4893 If GNU cc is available for your system, perhaps you could try that instead.  
4894
4895 Eventually, we hope to support building Perl with pre-ANSI compilers.
4896 If you would like to help in that effort, please contact <perlbug@perl.org>.
4897
4898 Aborting Configure now.
4899 EOM
4900         exit 2
4901         ;;
4902 esac
4903
4904 : determine where public executables go
4905 echo " "
4906 set dflt bin bin
4907 eval $prefixit
4908 fn=d~
4909 rp='Pathname where the public executables will reside?'
4910 . ./getfile
4911 if $test "X$ansexp" != "X$binexp"; then
4912         installbin=''
4913 fi
4914 bin="$ans"
4915 binexp="$ansexp"
4916 : Change installation prefix, if necessary.
4917 : XXX Bug? -- ignores Configure -Dinstallprefix setting.
4918 if $test X"$prefix" != X"$installprefix"; then
4919         installbin=`echo $binexp | sed "s#^$prefix#$installprefix#"`
4920 else
4921         installbin="$binexp"
4922 fi
4923
4924 : determine whether to install perl also as /usr/bin/perl
4925
4926 echo " "
4927 if $test -d /usr/bin -a "X$installbin" != X/usr/bin; then
4928         $cat <<EOM
4929 Many scripts expect to perl to be installed as /usr/bin/perl.
4930 I can install the perl you are about to compile also as /usr/bin/perl
4931 (in addition to $installbin/perl).
4932 EOM
4933         case "$installusrbinperl" in
4934         "$undef"|[nN]*) dflt='n';;
4935         *)              dflt='y';;
4936         esac
4937         rp="Do you want to install perl as /usr/bin/perl?"
4938         . ./myread
4939         case "$ans" in
4940         [yY]*)  val="$define";;
4941         *)      val="$undef" ;;
4942         esac
4943 else
4944         val="$undef"
4945 fi
4946 set installusrbinperl
4947 eval $setvar
4948
4949 : define a shorthand compile call
4950 compile='
4951 mc_file=$1;
4952 shift;
4953 $cc $optimize $ccflags $ldflags -o ${mc_file} $* ${mc_file}.c $libs > /dev/null 2>&1;'
4954 : define a shorthand compile call for compilations that should be ok.
4955 compile_ok='
4956 mc_file=$1;
4957 shift;
4958 $cc $optimize $ccflags $ldflags -o ${mc_file} $* ${mc_file}.c $libs;'
4959
4960 echo " "
4961 echo "Checking for GNU C Library..." >&4
4962 cat >gnulibc.c <<EOM
4963 #include <stdio.h>
4964 int main()
4965 {
4966 #ifdef __GLIBC__
4967     exit(0);
4968 #else
4969     exit(1);
4970 #endif
4971 }
4972 EOM
4973 set gnulibc
4974 if eval $compile_ok && ./gnulibc; then
4975         val="$define"
4976         echo "You are using the GNU C Library"
4977 else
4978         val="$undef"
4979         echo "You are not using the GNU C Library"
4980 fi
4981 $rm -f gnulibc*
4982 set d_gnulibc
4983 eval $setvar
4984
4985 : see if nm is to be used to determine whether a symbol is defined or not
4986 case "$usenm" in
4987 '')
4988         dflt=''
4989         case "$d_gnulibc" in
4990         "$define")
4991                 echo " "
4992                 echo "nm probably won't work on the GNU C Library." >&4
4993                 dflt=n
4994                 ;;
4995         esac
4996         case "$dflt" in
4997         '') 
4998                 if $test "$osname" = aix -a ! -f /lib/syscalls.exp; then
4999                         echo " "
5000                         echo "Whoops!  This is an AIX system without /lib/syscalls.exp!" >&4
5001                         echo "'nm' won't be sufficient on this sytem." >&4
5002                         dflt=n
5003                 fi
5004                 ;;
5005         esac
5006         case "$dflt" in
5007         '') dflt=`$egrep 'inlibc|csym' $rsrc/Configure | wc -l 2>/dev/null`
5008                 if $test $dflt -gt 20; then
5009                         dflt=y
5010                 else
5011                         dflt=n
5012                 fi
5013                 ;;
5014         esac
5015         ;;
5016 *)
5017         case "$usenm" in
5018         true|$define) dflt=y;;
5019         *) dflt=n;;
5020         esac
5021         ;;
5022 esac
5023 $cat <<EOM
5024
5025 I can use $nm to extract the symbols from your C libraries. This
5026 is a time consuming task which may generate huge output on the disk (up
5027 to 3 megabytes) but that should make the symbols extraction faster. The
5028 alternative is to skip the 'nm' extraction part and to compile a small
5029 test program instead to determine whether each symbol is present. If
5030 you have a fast C compiler and/or if your 'nm' output cannot be parsed,
5031 this may be the best solution.
5032
5033 You probably shouldn't let me use 'nm' if you are using the GNU C Library.
5034
5035 EOM
5036 rp="Shall I use $nm to extract C symbols from the libraries?"
5037 . ./myread
5038 case "$ans" in
5039 [Nn]*) usenm=false;;
5040 *) usenm=true;;
5041 esac
5042
5043 runnm=$usenm
5044 case "$reuseval" in
5045 true) runnm=false;;
5046 esac
5047
5048 : nm options which may be necessary
5049 case "$nm_opt" in
5050 '') if $test -f /mach_boot; then
5051                 nm_opt=''       # Mach
5052         elif $test -d /usr/ccs/lib; then
5053                 nm_opt='-p'     # Solaris (and SunOS?)
5054         elif $test -f /dgux; then
5055                 nm_opt='-p'     # DG-UX
5056         elif $test -f /lib64/rld; then
5057                 nm_opt='-p'     # 64-bit Irix
5058         else
5059                 nm_opt=''
5060         fi;;
5061 esac
5062
5063 : nm options which may be necessary for shared libraries but illegal
5064 : for archive libraries.  Thank you, Linux.
5065 case "$nm_so_opt" in
5066 '')     case "$myuname" in
5067         *linux*)
5068                 if $nm --help | $grep 'dynamic' > /dev/null 2>&1; then
5069                         nm_so_opt='--dynamic'
5070                 fi
5071                 ;;
5072         esac
5073         ;;
5074 esac
5075
5076 case "$runnm" in
5077 true)
5078 : get list of predefined functions in a handy place
5079 echo " "
5080 case "$libc" in
5081 '') libc=unknown
5082         case "$libs" in
5083         *-lc_s*) libc=`./loc libc_s$_a $libc $libpth`
5084         esac
5085         ;;
5086 esac
5087 libnames='';
5088 case "$libs" in
5089 '') ;;
5090 *)  for thislib in $libs; do
5091         case "$thislib" in
5092         -lc|-lc_s)
5093                 : Handle C library specially below.
5094                 ;;
5095         -l*)
5096                 thislib=`echo $thislib | $sed -e 's/^-l//'`
5097                 if try=`./loc lib$thislib.$so.'*' X $libpth`; $test -f "$try"; then
5098                         :
5099                 elif try=`./loc lib$thislib.$so X $libpth`; $test -f "$try"; then
5100                         :
5101                 elif try=`./loc lib$thislib$_a X $libpth`; $test -f "$try"; then
5102                         :
5103                 elif try=`./loc $thislib$_a X $libpth`; $test -f "$try"; then
5104                         :
5105                 elif try=`./loc lib$thislib X $libpth`; $test -f "$try"; then
5106                         :
5107                 elif try=`./loc $thislib X $libpth`; $test -f "$try"; then
5108                         :
5109                 elif try=`./loc Slib$thislib$_a X $xlibpth`; $test -f "$try"; then
5110                         :
5111                 else
5112                         try=''
5113                 fi
5114                 libnames="$libnames $try"
5115                 ;;
5116         *) libnames="$libnames $thislib" ;;
5117         esac
5118         done
5119         ;;
5120 esac
5121 xxx=normal
5122 case "$libc" in
5123 unknown)
5124         set /lib/libc.$so
5125         for xxx in $libpth; do
5126                 $test -r $1 || set $xxx/libc.$so
5127                 : The messy sed command sorts on library version numbers.
5128                 $test -r $1 || \
5129                         set `echo blurfl; echo $xxx/libc.$so.[0-9]* | \
5130                         tr ' ' $trnl | egrep -v '\.[A-Za-z]*$' | $sed -e '
5131                                 h
5132                                 s/[0-9][0-9]*/0000&/g
5133                                 s/0*\([0-9][0-9][0-9][0-9][0-9]\)/\1/g
5134                                 G
5135                                 s/\n/ /' | \
5136                          sort | $sed -e 's/^.* //'`
5137                 eval set \$$#
5138         done
5139         $test -r $1 || set /usr/ccs/lib/libc.$so
5140         $test -r $1 || set /lib/libsys_s$_a
5141         ;;
5142 *)
5143         set blurfl
5144         ;;
5145 esac
5146 if $test -r "$1"; then
5147         echo "Your (shared) C library seems to be in $1."
5148         libc="$1"
5149 elif $test -r /lib/libc && $test -r /lib/clib; then
5150         echo "Your C library seems to be in both /lib/clib and /lib/libc."
5151         xxx=apollo
5152         libc='/lib/clib /lib/libc'
5153         if $test -r /lib/syslib; then
5154                 echo "(Your math library is in /lib/syslib.)"
5155                 libc="$libc /lib/syslib"
5156         fi
5157 elif $test -r "$libc" || (test -h "$libc") >/dev/null 2>&1; then
5158         echo "Your C library seems to be in $libc, as you said before."
5159 elif $test -r $incpath/usr/lib/libc$_a; then
5160         libc=$incpath/usr/lib/libc$_a;
5161         echo "Your C library seems to be in $libc.  That's fine."
5162 elif $test -r /lib/libc$_a; then
5163         libc=/lib/libc$_a;
5164         echo "Your C library seems to be in $libc.  You're normal."
5165 else
5166         if tans=`./loc libc$_a blurfl/dyick $libpth`; $test -r "$tans"; then
5167                 :
5168         elif tans=`./loc libc blurfl/dyick $libpth`; $test -r "$tans"; then
5169                 libnames="$libnames "`./loc clib blurfl/dyick $libpth`
5170         elif tans=`./loc clib blurfl/dyick $libpth`; $test -r "$tans"; then
5171                 :
5172         elif tans=`./loc Slibc$_a blurfl/dyick $xlibpth`; $test -r "$tans"; then
5173                 :
5174         elif tans=`./loc Mlibc$_a blurfl/dyick $xlibpth`; $test -r "$tans"; then
5175                 :
5176         else
5177                 tans=`./loc Llibc$_a blurfl/dyick $xlibpth`
5178         fi
5179         if $test -r "$tans"; then
5180                 echo "Your C library seems to be in $tans, of all places."
5181                 libc=$tans
5182         else
5183                 libc='blurfl'
5184         fi
5185 fi
5186 if $test $xxx = apollo -o -r "$libc" || (test -h "$libc") >/dev/null 2>&1; then
5187         dflt="$libc"
5188         cat <<EOM
5189
5190 If the guess above is wrong (which it might be if you're using a strange
5191 compiler, or your machine supports multiple models), you can override it here.
5192
5193 EOM
5194 else
5195         dflt=''
5196         echo $libpth | tr ' ' $trnl | sort | uniq > libpath
5197         cat >&4 <<EOM
5198 I can't seem to find your C library.  I've looked in the following places:
5199
5200 EOM
5201         $sed 's/^/      /' libpath
5202         cat <<EOM
5203
5204 None of these seems to contain your C library. I need to get its name...
5205
5206 EOM
5207 fi
5208 fn=f
5209 rp='Where is your C library?'
5210 . ./getfile
5211 libc="$ans"
5212
5213 echo " "
5214 echo $libc $libnames | tr ' ' $trnl | sort | uniq > libnames
5215 set X `cat libnames`
5216 shift
5217 xxx=files
5218 case $# in 1) xxx=file; esac
5219 echo "Extracting names from the following $xxx for later perusal:" >&4
5220 echo " "
5221 $sed 's/^/      /' libnames >&4
5222 echo " "
5223 $echo $n "This may take a while...$c" >&4
5224
5225 for file in $*; do
5226         case $file in
5227         *$so*) $nm $nm_so_opt $nm_opt $file 2>/dev/null;;
5228         *) $nm $nm_opt $file 2>/dev/null;;
5229         esac
5230 done >libc.tmp
5231
5232 $echo $n ".$c"
5233 $grep fprintf libc.tmp > libc.ptf
5234 xscan='eval "<libc.ptf $com >libc.list"; $echo $n ".$c" >&4'
5235 xrun='eval "<libc.tmp $com >libc.list"; echo "done" >&4'
5236 xxx='[ADTSIW]'
5237 if com="$sed -n -e 's/__IO//' -e 's/^.* $xxx  *_[_.]*//p' -e 's/^.* $xxx  *//p'";\
5238         eval $xscan;\
5239         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5240                 eval $xrun
5241 elif com="$sed -n -e 's/^__*//' -e 's/^\([a-zA-Z_0-9$]*\).*xtern.*/\1/p'";\
5242         eval $xscan;\
5243         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5244                 eval $xrun
5245 elif com="$sed -n -e '/|UNDEF/d' -e '/FUNC..GL/s/^.*|__*//p'";\
5246         eval $xscan;\
5247         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5248                 eval $xrun
5249 elif com="$sed -n -e 's/^.* D __*//p' -e 's/^.* D //p'";\
5250         eval $xscan;\
5251         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5252                 eval $xrun
5253 elif com="$sed -n -e 's/^_//' -e 's/^\([a-zA-Z_0-9]*\).*xtern.*text.*/\1/p'";\
5254         eval $xscan;\
5255         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5256                 eval $xrun
5257 elif com="$sed -n -e 's/^.*|FUNC |GLOB .*|//p'";\
5258         eval $xscan;\
5259         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5260                 eval $xrun
5261 elif com="$grep '|' | $sed -n -e '/|COMMON/d' -e '/|DATA/d' \
5262                                 -e '/ file/d' -e 's/^\([^       ]*\).*/\1/p'";\
5263         eval $xscan;\
5264         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5265                 eval $xrun
5266 elif com="$sed -n -e 's/^.*|FUNC |GLOB .*|//p' -e 's/^.*|FUNC |WEAK .*|//p'";\
5267         eval $xscan;\
5268         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5269                 eval $xrun
5270 elif com="$sed -n -e 's/^__//' -e '/|Undef/d' -e '/|Proc/s/ .*//p'";\
5271         eval $xscan;\
5272         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5273                 eval $xrun
5274 elif com="$sed -n -e 's/^.*|Proc .*|Text *| *//p'";\
5275         eval $xscan;\
5276         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5277                 eval $xrun
5278 elif com="$sed -n -e '/Def. Text/s/.* \([^ ]*\)\$/\1/p'";\
5279         eval $xscan;\
5280         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5281                 eval $xrun
5282 elif com="$sed -n -e 's/^[-0-9a-f ]*_\(.*\)=.*/\1/p'";\
5283         eval $xscan;\
5284         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5285                 eval $xrun
5286 elif com="$sed -n -e 's/.*\.text n\ \ \ \.//p'";\
5287         eval $xscan;\
5288         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5289                 eval $xrun
5290 elif com="sed -n -e 's/^__.*//' -e 's/[       ]*D[    ]*[0-9]*.*//p'";\
5291         eval $xscan;\
5292         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5293                 eval $xrun
5294 else
5295         $nm -p $* 2>/dev/null >libc.tmp
5296         $grep fprintf libc.tmp > libc.ptf
5297         if com="$sed -n -e 's/^.* [ADTSIW]  *_[_.]*//p' -e 's/^.* [ADTSIW] //p'";\
5298                 eval $xscan; $contains '^fprintf$' libc.list >/dev/null 2>&1
5299         then
5300                 nm_opt='-p'
5301                 eval $xrun
5302         else
5303                 echo " "
5304                 echo "$nm didn't seem to work right. Trying $ar instead..." >&4
5305                 com=''
5306                 if $ar t $libc > libc.tmp && $contains '^fprintf$' libc.tmp >/dev/null 2>&1; then
5307                         for thisname in $libnames $libc; do
5308                                 $ar t $thisname >>libc.tmp
5309                         done
5310                         $sed -e "s/\\$_o\$//" < libc.tmp > libc.list
5311                         echo "Ok." >&4
5312                 elif test "X$osname" = "Xos2" && $ar tv $libc > libc.tmp; then
5313                         # Repeat libc to extract forwarders to DLL entries too
5314                         for thisname in $libnames $libc; do
5315                                 $ar tv $thisname >>libc.tmp
5316                                 # Revision 50 of EMX has bug in $ar.
5317                                 # it will not extract forwarders to DLL entries
5318                                 # Use emximp which will extract exactly them.
5319                                 emximp -o tmp.imp $thisname \
5320                                     2>/dev/null && \
5321                                     $sed -e 's/^\([_a-zA-Z0-9]*\) .*$/\1/p' \
5322                                     < tmp.imp >>libc.tmp
5323                                 $rm tmp.imp
5324                         done
5325                         $sed -e "s/\\$_o\$//" -e 's/^ \+//' < libc.tmp > libc.list
5326                         echo "Ok." >&4
5327                 else
5328                         echo "$ar didn't seem to work right." >&4
5329                         echo "Maybe this is a Cray...trying bld instead..." >&4
5330                         if bld t $libc | $sed -e 's/.*\///' -e "s/\\$_o:.*\$//" > libc.list
5331                         then
5332                                 for thisname in $libnames; do
5333                                         bld t $libnames | \
5334                                         $sed -e 's/.*\///' -e "s/\\$_o:.*\$//" >>libc.list
5335                                         $ar t $thisname >>libc.tmp
5336                                 done
5337                                 echo "Ok." >&4
5338                         else
5339                                 echo "That didn't work either.  Giving up." >&4
5340                                 exit 1
5341                         fi
5342                 fi
5343         fi
5344 fi
5345 nm_extract="$com"
5346 if $test -f /lib/syscalls.exp; then
5347         echo " "
5348         echo "Also extracting names from /lib/syscalls.exp for good ole AIX..." >&4
5349         $sed -n 's/^\([^        ]*\)[   ]*syscall[0-9]*$/\1/p' /lib/syscalls.exp >>libc.list
5350 fi
5351 ;;
5352 esac
5353 $rm -f libnames libpath
5354
5355 : see if dld is available
5356 set dld.h i_dld
5357 eval $inhdr
5358
5359 : is a C symbol defined?
5360 csym='tlook=$1;
5361 case "$3" in
5362 -v) tf=libc.tmp; tc=""; tdc="";;
5363 -a) tf=libc.tmp; tc="[0]"; tdc="[]";;
5364 *) tlook="^$1\$"; tf=libc.list; tc="()"; tdc="()";;
5365 esac;
5366 tx=yes;
5367 case "$reuseval-$4" in
5368 true-) ;;
5369 true-*) tx=no; eval "tval=\$$4"; case "$tval" in "") tx=yes;; esac;;
5370 esac;
5371 case "$tx" in
5372 yes)
5373         case "$runnm" in
5374         true)
5375                 if $contains $tlook $tf >/dev/null 2>&1;
5376                 then tval=true;
5377                 else tval=false;
5378                 fi;;
5379         *)
5380                 echo "int main() { extern short $1$tdc; printf(\"%hd\", $1$tc); }" > t.c;
5381                 if $cc $optimize $ccflags $ldflags -o t t.c $libs >/dev/null 2>&1;
5382                 then tval=true;
5383                 else tval=false;
5384                 fi;
5385                 $rm -f t t.c;;
5386         esac;;
5387 *)
5388         case "$tval" in
5389         $define) tval=true;;
5390         *) tval=false;;
5391         esac;;
5392 esac;
5393 eval "$2=$tval"'
5394
5395 : define an is-in-libc? function
5396 inlibc='echo " "; td=$define; tu=$undef;
5397 sym=$1; var=$2; eval "was=\$$2";
5398 tx=yes;
5399 case "$reuseval$was" in
5400 true) ;;
5401 true*) tx=no;;
5402 esac;
5403 case "$tx" in
5404 yes)
5405         set $sym tres -f;
5406         eval $csym;
5407         case "$tres" in
5408         true)
5409                 echo "$sym() found." >&4;
5410                 case "$was" in $undef) . ./whoa; esac; eval "$var=\$td";;
5411         *)
5412                 echo "$sym() NOT found." >&4;
5413                 case "$was" in $define) . ./whoa; esac; eval "$var=\$tu";;
5414         esac;;
5415 *)
5416         case "$was" in
5417         $define) echo "$sym() found." >&4;;
5418         *) echo "$sym() NOT found." >&4;;
5419         esac;;
5420 esac'
5421
5422 : see if dlopen exists
5423 xxx_runnm="$runnm"
5424 runnm=false
5425 set dlopen d_dlopen
5426 eval $inlibc
5427 runnm="$xxx_runnm"
5428
5429 : determine which dynamic loading, if any, to compile in
5430 echo " "
5431 dldir="ext/DynaLoader"
5432 case "$usedl" in
5433 $define|y|true)
5434         dflt='y'
5435         usedl="$define"
5436         ;;
5437 $undef|n|false)
5438         dflt='n'
5439         usedl="$undef"
5440         ;;
5441 *) 
5442         dflt='n'
5443         case "$d_dlopen" in
5444             $define) dflt='y' ;;
5445         esac
5446         case "$i_dld" in
5447             $define) dflt='y' ;;
5448         esac
5449         : Does a dl_xxx.xs file exist for this operating system
5450         $test -f $rsrc/$dldir/dl_${osname}.xs && dflt='y'
5451         ;;
5452 esac
5453 rp="Do you wish to use dynamic loading?"
5454 . ./myread
5455 usedl="$ans"
5456 case "$ans" in
5457 y*) usedl="$define"
5458         case "$dlsrc" in
5459         '')
5460                 if $test -f $rsrc/$dldir/dl_${osname}.xs ; then
5461                         dflt="$dldir/dl_${osname}.xs"
5462                 elif $test "$d_dlopen" = "$define" ; then
5463                         dflt="$dldir/dl_dlopen.xs"
5464                 elif $test "$i_dld" = "$define" ; then
5465                         dflt="$dldir/dl_dld.xs"
5466                 else
5467                         dflt=''
5468                 fi
5469                 ;;
5470         *)      dflt="$dldir/$dlsrc"
5471                 ;;
5472         esac
5473     echo "The following dynamic loading files are available:"
5474         : Can not go over to $dldir because getfile has path hard-coded in.
5475         tdir=`pwd`; cd $rsrc; $ls -C $dldir/dl*.xs; cd $tdir
5476         rp="Source file to use for dynamic loading"
5477         fn="fne"
5478         gfpth="$src"
5479         . ./getfile
5480         usedl="$define"
5481         : emulate basename
5482         dlsrc=`echo $ans | $sed -e 's@.*/\([^/]*\)$@\1@'`
5483
5484         $cat << EOM
5485
5486 Some systems may require passing special flags to $cc -c to
5487 compile modules that will be used to create a shared library.
5488 To use no flags, say "none".
5489
5490 EOM
5491     case "$cccdlflags" in
5492     '') case "$gccversion" in
5493                 '') case "$osname" in
5494                         hpux)   dflt='+z' ;;
5495                         next)   dflt='none' ;;
5496                         irix*)  dflt='-KPIC' ;;
5497                         svr4*|esix*|solaris) dflt='-KPIC' ;;
5498                         sunos)  dflt='-pic' ;;
5499                         *)      dflt='none' ;;
5500                     esac
5501                         ;;
5502                 *)  case "$osname" in
5503                         svr4*|esix*|solaris) dflt='-fPIC' ;;
5504                         *)      dflt='-fpic' ;;
5505                     esac ;;
5506             esac ;;
5507         ' ') dflt='none' ;;
5508     *)  dflt="$cccdlflags" ;;
5509     esac
5510     rp="Any special flags to pass to $cc -c to compile shared library modules?"
5511     . ./myread
5512     case "$ans" in
5513     none) cccdlflags=' ' ;;
5514     *) cccdlflags="$ans" ;;
5515     esac
5516
5517     cat << EOM
5518
5519 Some systems use ld to create libraries that can be dynamically loaded,
5520 while other systems (such as those using ELF) use $cc.
5521
5522 EOM
5523         case "$ld" in
5524         '')     $cat >try.c <<'EOM'
5525 /* Test for whether ELF binaries are produced */
5526 #include <fcntl.h>
5527 #include <stdlib.h>
5528 int main() {
5529         char b[4];
5530         int i = open("a.out",O_RDONLY);
5531         if(i == -1) 
5532                 exit(1); /* fail */
5533         if(read(i,b,4)==4 && b[0]==127 && b[1]=='E' && b[2]=='L' && b[3]=='F')
5534                 exit(0); /* succeed (yes, it's ELF) */
5535         else
5536                 exit(1); /* fail */
5537 }
5538 EOM
5539                 if $cc $ccflags try.c >/dev/null 2>&1 && ./a.out; then
5540                         cat <<EOM
5541 You appear to have ELF support.  I'll use $cc to build dynamic libraries.
5542 EOM
5543                         dflt="$cc"
5544                 else
5545                         echo "I'll use ld to build dynamic libraries."
5546                         dflt='ld'
5547                 fi
5548                 rm -f try.c a.out
5549                 ;;
5550         *)      dflt="$ld"
5551                 ;;
5552         esac
5553
5554     rp="What command should be used to create dynamic libraries?"
5555     . ./myread
5556         ld="$ans"
5557
5558     cat << EOM
5559
5560 Some systems may require passing special flags to $ld to create a
5561 library that can be dynamically loaded.  If your ld flags include
5562 -L/other/path options to locate libraries outside your loader's normal
5563 search path, you may need to specify those -L options here as well.  To
5564 use no flags, say "none".
5565
5566 EOM
5567     case "$lddlflags" in
5568     '') case "$osname" in
5569                         beos) dflt='-nostart' ;;
5570                         hpux)  dflt='-b' ;;
5571                         linux|irix*)    dflt='-shared' ;;
5572                         next)  dflt='none' ;;
5573                         solaris) dflt='-G' ;;
5574                         sunos) dflt='-assert nodefinitions' ;;
5575                         svr4*|esix*) dflt="-G $ldflags" ;;
5576                 *)     dflt='none' ;;
5577                         esac
5578                         ;;
5579     *) dflt="$lddlflags" ;;
5580     esac
5581
5582         : Try to guess additional flags to pick up local libraries.
5583         : Be careful not to append to a plain 'none'
5584         case "$dflt" in
5585         none) dflt='' ;;
5586         esac
5587         for thisflag in $ldflags; do
5588                 case "$thisflag" in
5589                 -L*)
5590                         case " $dflt " in
5591                         *" $thisflag "*) ;;
5592                         *) dflt="$dflt $thisflag" ;;
5593                         esac
5594                         ;;
5595                 esac
5596         done
5597
5598         case "$dflt" in
5599         ''|' ') dflt='none' ;;
5600         esac
5601
5602     rp="Any special flags to pass to $ld to create a dynamically loaded library?"
5603     . ./myread
5604     case "$ans" in
5605     none) lddlflags=' ' ;;
5606     *) lddlflags="$ans" ;;
5607     esac
5608
5609         cat <<EOM
5610
5611 Some systems may require passing special flags to $cc to indicate that
5612 the resulting executable will use dynamic linking.  To use no flags,
5613 say "none".
5614
5615 EOM
5616     case "$ccdlflags" in
5617     '') case "$osname" in
5618                 hpux)   dflt='-Wl,-E' ;;
5619                 linux)  dflt='-rdynamic' ;;
5620                 next)   dflt='none' ;;
5621                 sunos)  dflt='none' ;;
5622                 *)      dflt='none' ;;
5623             esac ;;
5624     ' ')  dflt='none' ;;
5625     *)  dflt="$ccdlflags" ;;
5626     esac
5627     rp="Any special flags to pass to $cc to use dynamic loading?"
5628     . ./myread
5629     case "$ans" in
5630     none) ccdlflags=' ' ;;
5631     *) ccdlflags="$ans" ;;
5632     esac
5633     ;;
5634 *)  usedl="$undef"
5635         ld='ld'
5636     dlsrc='dl_none.xs'
5637     lddlflags=''
5638     ccdlflags=''
5639     ;;
5640 esac
5641
5642 also=''
5643 case "$usedl" in
5644 $undef)
5645         # No dynamic loading being used, so don't bother even to prompt.
5646         useshrplib='false'
5647         ;;
5648 *)      case "$useshrplib" in
5649         '')     case "$osname" in
5650                 svr4*|dgux|dynixptx|esix|powerux|beos)
5651                         dflt=y
5652                         also='Building a shared libperl is required for dynamic loading to work on your system.'
5653                         ;;
5654                 next*)
5655                         case "$osvers" in
5656                         4*)     dflt=y
5657                                 also='Building a shared libperl is needed for MAB support.'
5658                                 ;;
5659                         *)      dflt=n
5660                                 ;;
5661                         esac
5662                         ;;
5663                 *)      dflt=n
5664                         ;;
5665                 esac
5666                 ;;
5667         $define|true|[Yy]*)
5668                 dflt=y
5669                 ;;
5670         *)      dflt=n
5671                 ;;
5672         esac
5673         $cat << EOM
5674
5675 The perl executable is normally obtained by linking perlmain.c with
5676 libperl${_a}, any static extensions (usually just DynaLoader), and
5677 any other libraries needed on this system (such as -lm, etc.).  Since
5678 your system supports dynamic loading, it is probably possible to build
5679 a shared libperl.$so.  If you will have more than one executable linked
5680 to libperl.$so, this will significantly reduce the size of each
5681 executable, but it may have a noticeable affect on performance.  The
5682 default is probably sensible for your system.
5683 $also
5684
5685 EOM
5686         rp="Build a shared libperl.$so (y/n)"
5687         . ./myread
5688         case "$ans" in
5689         true|$define|[Yy]*)
5690                 useshrplib='true'  ;;
5691         *)      useshrplib='false' ;;
5692         esac
5693         ;;
5694 esac
5695
5696 case "$useshrplib" in
5697 true)
5698         case "$libperl" in
5699         '')
5700                 # Figure out a good name for libperl.so.  Since it gets stored in
5701                 # a version-specific architecture-dependent library, the version
5702                 # number isn't really that important, except for making cc/ld happy.
5703                 #
5704                 # A name such as libperl.so.3.1
5705                 majmin="libperl.$so.$patchlevel.$subversion"
5706                 # A name such as libperl.so.301
5707                 majonly=`echo $patchlevel $subversion |
5708                         $awk '{printf "%d%02d", $1, $2}'`
5709                 majonly=libperl.$so.$majonly
5710                 # I'd prefer to keep the os-specific stuff here to a minimum, and
5711                 # rely on figuring it out from the naming of libc.
5712                 case "${osname}${osvers}" in
5713                 next4*)
5714                         dflt=libperl.5.$so
5715                         # XXX How handle the --version stuff for MAB?
5716                         ;;
5717                 linux*)  # ld won't link with a bare -lperl otherwise.
5718                         dflt=libperl.$so
5719                         ;;
5720                 *)      # Try to guess based on whether libc has major.minor.
5721                         case "$libc" in
5722                         *libc.$so.[0-9]*.[0-9]*) dflt=$majmin ;;
5723                         *libc.$so.[0-9]*) dflt=$majonly ;;
5724                         *)      dflt=libperl.$so ;;
5725                         esac
5726                         ;;
5727                 esac
5728                 ;;
5729         *)      dflt=$libperl
5730                 ;;
5731         esac
5732         cat << EOM
5733
5734 I need to select a good name for the shared libperl.  If your system uses
5735 library names with major and minor numbers, then you might want something
5736 like $majmin.  Alternatively, if your system uses a single version
5737 number for shared libraries, then you might want to use $majonly.
5738 Or, your system might be quite happy with a simple libperl.$so.
5739
5740 Since the shared libperl will get installed into a version-specific
5741 architecture-dependent directory, the version number of the shared perl
5742 library probably isn't important, so the default should be o.k.
5743
5744 EOM
5745         rp='What name do you want to give to the shared libperl?'
5746         . ./myread
5747         libperl=$ans
5748         echo "Ok, I'll use $libperl"
5749         ;;
5750 *)
5751         libperl="libperl${_a}"
5752         ;;
5753 esac
5754
5755 # Detect old use of shrpdir via undocumented Configure -Dshrpdir
5756 case "$shrpdir" in
5757 '') ;;
5758 *)      $cat >&4 <<EOM
5759 WARNING:  Use of the shrpdir variable for the installation location of
5760 the shared $libperl is not supported.  It was never documented and
5761 will not work in this version.  Let me (perlbug@perl.com)
5762 know of any problems this may cause.
5763
5764 EOM
5765         case "$shrpdir" in
5766         "$archlibexp/CORE")
5767                 $cat >&4 <<EOM
5768 But your current setting of $shrpdir is
5769 the default anyway, so it's harmless.
5770 EOM
5771                 ;;
5772         *)
5773                 $cat >&4 <<EOM
5774 Further, your current attempted setting of $shrpdir
5775 conflicts with the value of $archlibexp/CORE
5776 that installperl will use.
5777 EOM
5778                 ;;
5779         esac
5780         ;;
5781 esac
5782
5783 # How will the perl executable find the installed shared $libperl?
5784 # Add $xxx to ccdlflags.
5785 # If we can't figure out a command-line option, use $shrpenv to
5786 # set env LD_RUN_PATH.  The main perl makefile uses this.
5787 shrpdir=$archlibexp/CORE
5788 xxx=''
5789 tmp_shrpenv=''
5790 if "$useshrplib"; then
5791     case "$osname" in 
5792         aix)
5793                 # We'll set it in Makefile.SH...
5794                 ;;
5795         solaris|netbsd)
5796                 xxx="-R $shrpdir"
5797                 ;;
5798         freebsd)
5799                 xxx="-Wl,-R$shrpdir"
5800                 ;;
5801         linux|irix*|dec_osf)
5802                 xxx="-Wl,-rpath,$shrpdir"
5803                 ;;
5804         next)
5805                 # next doesn't like the default...
5806                 ;;
5807         beos)
5808                 # beos doesn't like the default, either.
5809                 ;;
5810         hpux*)
5811                 # hpux doesn't like the default, either.
5812                 tmp_shrpenv="env LDOPTS=\"+s +b${shrpdir}\""
5813                 ;;
5814         *)
5815                 tmp_shrpenv="env LD_RUN_PATH=$shrpdir"
5816                 ;;
5817         esac
5818         case "$xxx" in
5819         '') ;;
5820         *)      
5821                 # Only add $xxx if it isn't already in ccdlflags.
5822                 case " $ccdlflags " in
5823                 *" $xxx "*)     ;;
5824                 *)      ccdlflags="$ccdlflags $xxx"
5825                         cat <<EOM >&4
5826
5827 Adding $xxx to the flags
5828 passed to $ld so that the perl executable will find the 
5829 installed shared $libperl.
5830
5831 EOM
5832                         ;;
5833                 esac
5834                 ;;
5835         esac
5836 fi
5837 # Fix ccdlflags in AIX for building external extensions.
5838 # (For building Perl itself bare -bE:perl.exp is needed,
5839 #  Makefile.SH takes care of this.)
5840 case "$osname" in
5841 aix) ccdlflags="$ccdlflags -bE:$installarchlib/CORE/perl.exp" ;;
5842 esac
5843 # Respect a hint or command-line value.
5844 case "$shrpenv" in
5845 '') shrpenv="$tmp_shrpenv" ;;
5846 esac
5847 case "$ldlibpthname" in
5848 '')     ldlibpthname=LD_LIBRARY_PATH ;;
5849 none)   ldlibpthname='' ;;
5850 esac
5851
5852 : determine where manual pages go
5853 set man1dir man1dir none
5854 eval $prefixit
5855 $cat <<EOM
5856
5857 $spackage has manual pages available in source form.
5858 EOM
5859 case "$nroff" in
5860 nroff)
5861         echo "However, you don't have nroff, so they're probably useless to you."
5862         case "$man1dir" in
5863         '') man1dir="none";;
5864         esac;;
5865 esac
5866 echo "If you don't want the manual sources installed, answer 'none'."
5867 case "$man1dir" in
5868 ' ') dflt=none
5869         ;;
5870 '')
5871         lookpath="$prefixexp/man/man1 $prefixexp/man/l_man/man1"
5872         lookpath="$lookpath $prefixexp/man/p_man/man1"
5873         lookpath="$lookpath $prefixexp/man/u_man/man1"
5874         lookpath="$lookpath $prefixexp/man/man.1"
5875         case "$sysman" in
5876         */?_man*)       dflt=`./loc . $prefixexp/l_man/man1 $lookpath` ;;
5877         *)      dflt=`./loc . $prefixexp/man/man1 $lookpath` ;;
5878         esac
5879         set dflt
5880         eval $prefixup
5881         ;;
5882 *)  dflt="$man1dir"
5883         ;;
5884 esac
5885 echo " "
5886 fn=dn+~
5887 rp="Where do the main $spackage manual pages (source) go?"
5888 . ./getfile
5889 if $test "X$man1direxp" != "X$ansexp"; then
5890         installman1dir=''
5891 fi
5892 man1dir="$ans"
5893 man1direxp="$ansexp"
5894 case "$man1dir" in
5895 '')     man1dir=' '
5896         installman1dir='';;
5897 esac
5898
5899 : Change installation prefix, if necessary.
5900 if $test X"$prefix" != X"$installprefix"; then
5901         installman1dir=`echo $man1direxp | $sed "s#^$prefix#$installprefix#"`
5902 else
5903         installman1dir="$man1direxp"
5904 fi
5905
5906 : What suffix to use on installed man pages
5907
5908 case "$man1dir" in
5909 ' ')
5910         man1ext='0'
5911         ;;
5912 *)
5913         rp="What suffix should be used for the main $spackage man pages?"
5914         case "$man1ext" in
5915         '')     case "$man1dir" in
5916                 *1)  dflt=1 ;;
5917                 *1p) dflt=1p ;;
5918                 *1pm) dflt=1pm ;;
5919                 *l) dflt=l;;
5920                 *n) dflt=n;;
5921                 *o) dflt=o;;
5922                 *p) dflt=p;;
5923                 *C) dflt=C;;
5924                 *L) dflt=L;;
5925                 *L1) dflt=L1;;
5926                 *) dflt=1;;
5927                 esac
5928                 ;;
5929         *)      dflt="$man1ext";;
5930         esac
5931         . ./myread
5932         man1ext="$ans"
5933         ;;
5934 esac
5935
5936 : see if we can have long filenames
5937 echo " "
5938 rmlist="$rmlist /tmp/cf$$"
5939 $test -d /tmp/cf$$ || mkdir /tmp/cf$$
5940 first=123456789abcdef
5941 second=/tmp/cf$$/$first
5942 $rm -f $first $second
5943 if (echo hi >$first) 2>/dev/null; then
5944         if $test -f 123456789abcde; then
5945                 echo 'You cannot have filenames longer than 14 characters.  Sigh.' >&4
5946                 val="$undef"
5947         else
5948                 if (echo hi >$second) 2>/dev/null; then
5949                         if $test -f /tmp/cf$$/123456789abcde; then
5950                                 $cat <<'EOM'
5951 That's peculiar... You can have filenames longer than 14 characters, but only
5952 on some of the filesystems.  Maybe you are using NFS.  Anyway, to avoid problems
5953 I shall consider your system cannot support long filenames at all.
5954 EOM
5955                                 val="$undef"
5956                         else
5957                                 echo 'You can have filenames longer than 14 characters.' >&4
5958                                 val="$define"
5959                         fi
5960                 else
5961                         $cat <<'EOM'
5962 How confusing! Some of your filesystems are sane enough to allow filenames
5963 longer than 14 characters but some others like /tmp can't even think about them.
5964 So, for now on, I shall assume your kernel does not allow them at all.
5965 EOM
5966                         val="$undef"
5967                 fi
5968         fi
5969 else
5970         $cat <<'EOM'
5971 You can't have filenames longer than 14 chars.  You can't even think about them!
5972 EOM
5973         val="$undef"
5974 fi 
5975 set d_flexfnam
5976 eval $setvar
5977 $rm -rf /tmp/cf$$ 123456789abcde*
5978
5979 : determine where library module manual pages go
5980 set man3dir man3dir none
5981 eval $prefixit
5982 $cat <<EOM
5983
5984 $spackage has manual pages for many of the library modules.
5985 EOM
5986
5987 case "$nroff" in
5988 nroff)
5989         $cat <<'EOM'
5990 However, you don't have nroff, so they're probably useless to you.
5991 EOM
5992         case "$man3dir" in
5993         '') man3dir="none";;
5994         esac;;
5995 esac
5996
5997 case "$d_flexfnam" in
5998 undef)
5999         $cat <<'EOM'
6000 However, your system can't handle the long file names like File::Basename.3. 
6001 EOM
6002         case "$man3dir" in
6003         '') man3dir="none";;
6004         esac;;
6005 esac
6006
6007 echo "If you don't want the manual sources installed, answer 'none'."
6008 prog=`echo $package | $sed 's/-*[0-9.]*$//'`
6009 case "$man3dir" in
6010 '')     dflt=`echo $man1dir | $sed -e 's/man1/man3/g' -e 's/man\.1/man\.3/g'`
6011         if $test -d "$privlib/man/man3"; then
6012                 cat <<EOM >&4
6013
6014 WARNING:  Previous versions of perl installed man3 pages into
6015 $privlib/man/man3.  This version will suggest a 
6016 new default of $dflt.  
6017 EOM
6018                 tdflt=$dflt
6019                 dflt='n'
6020                 rp='Do you wish to preserve the old behavior?(y/n)'
6021                 . ./myread
6022                 case "$ans" in
6023                 y*) dflt="$privlib/man/man3" ;;
6024                 *)  dflt=$tdflt ;;
6025                 esac
6026     fi
6027         ;;
6028 ' ') dflt=none;;
6029 *)      dflt="$man3dir" ;;
6030 esac
6031 echo " "
6032 fn=dn+~
6033 rp="Where do the $package library man pages (source) go?"
6034 . ./getfile
6035 man3dir="$ans"
6036 man3direxp="$ansexp"
6037 case "$man1dir" in
6038 '')     man3dir=' '
6039         installman3dir='';;
6040 esac
6041
6042 : Change installation prefix, if necessary.
6043 if $test X"$prefix" != X"$installprefix"; then
6044         installman3dir=`echo $man3direxp | $sed "s#^$prefix#$installprefix#"`
6045 else
6046         installman3dir="$man3direxp"
6047 fi
6048
6049 : What suffix to use on installed man pages
6050 case "$man3dir" in
6051 ' ')
6052         man3ext='0'
6053         ;;
6054 *)
6055         rp="What suffix should be used for the $package library man pages?"
6056         case "$man3ext" in
6057         '')     case "$man3dir" in
6058                 *3)  dflt=3 ;;
6059                 *3p) dflt=3p ;;
6060                 *3pm) dflt=3pm ;;
6061                 *l) dflt=l;;
6062                 *n) dflt=n;;
6063                 *o) dflt=o;;
6064                 *p) dflt=p;;
6065                 *C) dflt=C;;
6066                 *L) dflt=L;;
6067                 *L3) dflt=L3;;
6068                 *) dflt=3;;
6069                 esac
6070                 ;;
6071         *)      dflt="$man3ext";;
6072         esac
6073         . ./myread
6074         man3ext="$ans"
6075         ;;
6076 esac
6077
6078 : see if we have to deal with yellow pages, now NIS.
6079 if $test -d /usr/etc/yp || $test -d /etc/yp; then
6080         if $test -f /usr/etc/nibindd; then
6081                 echo " "
6082                 echo "I'm fairly confident you're on a NeXT."
6083                 echo " "
6084                 rp='Do you get the hosts file via NetInfo?'
6085                 dflt=y
6086                 case "$hostcat" in
6087                 nidump*) ;;
6088                 '') ;;
6089                 *) dflt=n;;
6090                 esac
6091                 . ./myread
6092                 case "$ans" in
6093                 y*) hostcat='nidump hosts .';;
6094                 *)      case "$hostcat" in
6095                         nidump*) hostcat='';;
6096                         esac
6097                         ;;
6098                 esac
6099         fi
6100         case "$hostcat" in
6101         nidump*) ;;
6102         *)
6103                 case "$hostcat" in
6104                 *ypcat*) dflt=y;;
6105                 '') if $contains '^\+' /etc/passwd >/dev/null 2>&1; then
6106                                 dflt=y
6107                         else
6108                                 dflt=n
6109                         fi;;
6110                 *) dflt=n;;
6111                 esac
6112                 echo " "
6113                 rp='Are you getting the hosts file via yellow pages?'
6114                 . ./myread
6115                 case "$ans" in
6116                 y*) hostcat='ypcat hosts';;
6117                 *) hostcat='cat /etc/hosts';;
6118                 esac
6119                 ;;
6120         esac
6121 fi
6122 case "$hostcat" in
6123 '') hostcat='cat /etc/hosts';;
6124 esac
6125 case "$groupcat" in
6126 '') groupcat='cat /etc/group';;
6127 esac
6128 case "$passcat" in
6129 '') passcat='cat /etc/passwd';;
6130 esac
6131
6132 : now get the host name
6133 echo " "
6134 echo "Figuring out host name..." >&4
6135 case "$myhostname" in
6136 '') cont=true
6137         echo 'Maybe "hostname" will work...'
6138         if tans=`sh -c hostname 2>&1` ; then
6139                 myhostname=$tans
6140                 phostname=hostname
6141                 cont=''
6142         fi
6143         ;;
6144 *) cont='';;
6145 esac
6146 if $test "$cont"; then
6147         if ./xenix; then
6148                 echo 'Oh, dear.  Maybe "/etc/systemid" is the key...'
6149                 if tans=`cat /etc/systemid 2>&1` ; then
6150                         myhostname=$tans
6151                         phostname='cat /etc/systemid'
6152                         echo "Whadyaknow.  Xenix always was a bit strange..."
6153                         cont=''
6154                 fi
6155         elif $test -r /etc/systemid; then
6156                 echo "(What is a non-Xenix system doing with /etc/systemid?)"
6157         fi
6158 fi
6159 if $test "$cont"; then
6160         echo 'No, maybe "uuname -l" will work...'
6161         if tans=`sh -c 'uuname -l' 2>&1` ; then
6162                 myhostname=$tans
6163                 phostname='uuname -l'
6164         else
6165                 echo 'Strange.  Maybe "uname -n" will work...'
6166                 if tans=`sh -c 'uname -n' 2>&1` ; then
6167                         myhostname=$tans
6168                         phostname='uname -n'
6169                 else
6170                         echo 'Oh well, maybe I can mine it out of whoami.h...'
6171                         if tans=`sh -c $contains' sysname $usrinc/whoami.h' 2>&1` ; then
6172                                 myhostname=`echo "$tans" | $sed 's/^.*"\(.*\)"/\1/'`
6173                                 phostname="sed -n -e '"'/sysname/s/^.*\"\\(.*\\)\"/\1/{'"' -e p -e q -e '}' <$usrinc/whoami.h"
6174                         else
6175                                 case "$myhostname" in
6176                                 '') echo "Does this machine have an identity crisis or something?"
6177                                         phostname='';;
6178                                 *)
6179                                         echo "Well, you said $myhostname before..."
6180                                         phostname='echo $myhostname';;
6181                                 esac
6182                         fi
6183                 fi
6184         fi
6185 fi
6186 : you do not want to know about this
6187 set $myhostname
6188 myhostname=$1
6189
6190 : verify guess
6191 if $test "$myhostname" ; then
6192         dflt=y
6193         rp='Your host name appears to be "'$myhostname'".'" Right?"
6194         . ./myread
6195         case "$ans" in
6196         y*) ;;
6197         *) myhostname='';;
6198         esac
6199 fi
6200
6201 : bad guess or no guess
6202 while $test "X$myhostname" = X ; do
6203         dflt=''
6204         rp="Please type the (one word) name of your host:"
6205         . ./myread
6206         myhostname="$ans"
6207 done
6208
6209 : translate upper to lower if necessary
6210 case "$myhostname" in
6211 *[A-Z]*)
6212         echo "(Normalizing case in your host name)"
6213         myhostname=`echo $myhostname | ./tr '[A-Z]' '[a-z]'`
6214         ;;
6215 esac
6216
6217 case "$myhostname" in
6218 *.*)
6219         dflt=`expr "X$myhostname" : "X[^.]*\(\..*\)"`
6220         myhostname=`expr "X$myhostname" : "X\([^.]*\)\."`
6221         echo "(Trimming domain name from host name--host name is now $myhostname)"
6222         ;;
6223 *) case "$mydomain" in
6224         '')
6225                 {
6226                         test "X$hostcat" = "Xypcat hosts" &&
6227                         ypmatch "$myhostname" hosts 2>/dev/null |\
6228                                 $sed -e 's/[     ]*#.*//; s/$/ /' > hosts && \
6229                         $test -s hosts
6230                 } || {
6231                         $hostcat | $sed -n -e "s/[       ]*#.*//; s/\$/ /
6232                                         /[       ]$myhostname[  . ]/p" > hosts
6233                 }
6234                 tmp_re="[       . ]"
6235                 $test x`$awk "/[0-9].*[  ]$myhostname$tmp_re/ { sum++ }
6236                              END { print sum }" hosts` = x1 || tmp_re="[         ]"
6237                 dflt=.`$awk "/[0-9].*[   ]$myhostname$tmp_re/ {for(i=2; i<=NF;i++) print \\\$i}" \
6238                         hosts | $sort | $uniq | \
6239                         $sed -n -e "s/$myhostname\.\([-a-zA-Z0-9_.]\)/\1/p"`
6240                 case `$echo X$dflt` in
6241                 X*\ *)  echo "(Several hosts in /etc/hosts matched hostname)"
6242                         dflt=.
6243                         ;;
6244                 X.) echo "(You do not have fully-qualified names in /etc/hosts)"
6245                         ;;
6246                 esac
6247                 case "$dflt" in
6248                 .)
6249                         tans=`./loc resolv.conf X /etc /usr/etc`
6250                         if $test -f "$tans"; then
6251                                 echo "(Attempting domain name extraction from $tans)"
6252                                 dflt=.`$sed -n -e 's/   / /g' \
6253                                   -e 's/^search  *\([^ ]*\).*/\1/p' $tans \
6254                                   | ./tr '[A-Z]' '[a-z]' 2>/dev/null`
6255                                 case "$dflt" in
6256                                 .) dflt=.`$sed -n -e 's/        / /g' \
6257                                      -e 's/^domain  *\([^ ]*\).*/\1/p' $tans \
6258                                      | ./tr '[A-Z]' '[a-z]' 2>/dev/null`
6259                                         ;;
6260                                 esac
6261                         fi
6262                         ;;
6263                 esac
6264                 case "$dflt" in
6265                 .) echo "(No help from resolv.conf either -- attempting clever guess)"
6266                         dflt=.`sh -c domainname 2>/dev/null`
6267                         case "$dflt" in
6268                         '') dflt='.';;
6269                         .nis.*|.yp.*|.main.*) dflt=`echo $dflt | $sed -e 's/^\.[^.]*//'`;;
6270                         esac
6271                         ;;
6272                 esac
6273                 case "$dflt" in
6274                 .) echo "(Lost all hope -- silly guess then)"
6275                         dflt='.uucp'
6276                         ;;
6277                 esac
6278                 $rm -f hosts
6279                 ;;
6280         *) dflt="$mydomain";;
6281         esac;;
6282 esac
6283 echo " "
6284 rp="What is your domain name?"
6285 . ./myread
6286 tans="$ans"
6287 case "$ans" in
6288 '') ;;
6289 .*) ;;
6290 *) tans=".$tans";;
6291 esac
6292 mydomain="$tans"
6293
6294 : translate upper to lower if necessary
6295 case "$mydomain" in
6296 *[A-Z]*)
6297         echo "(Normalizing case in your domain name)"
6298         mydomain=`echo $mydomain | ./tr '[A-Z]' '[a-z]'`
6299         ;;
6300 esac
6301
6302 : a little sanity check here
6303 case "$phostname" in
6304 '') ;;
6305 *)
6306         case `$phostname | ./tr '[A-Z]' '[a-z]'` in
6307         $myhostname$mydomain|$myhostname) ;;
6308         *)
6309                 case "$phostname" in
6310                 sed*)
6311                         echo "(That doesn't agree with your whoami.h file, by the way.)"
6312                         ;;
6313                 *)
6314                         echo "(That doesn't agree with your $phostname command, by the way.)"
6315                         ;;
6316                 esac
6317         ;;
6318         esac
6319         ;;
6320 esac
6321
6322 $cat <<EOM
6323
6324 I need to get your e-mail address in Internet format if possible, i.e.
6325 something like user@host.domain. Please answer accurately since I have
6326 no easy means to double check it. The default value provided below
6327 is most probably close to the reality but may not be valid from outside
6328 your organization...
6329
6330 EOM
6331 cont=x
6332 while test "$cont"; do
6333         case "$cf_email" in
6334         '') dflt="$cf_by@$myhostname$mydomain";;
6335         *) dflt="$cf_email";;
6336         esac
6337         rp='What is your e-mail address?'
6338         . ./myread
6339         cf_email="$ans"
6340         case "$cf_email" in
6341         *@*.*) cont='' ;;
6342         *)
6343                 rp='Address does not look like an Internet one.  Use it anyway?'
6344                 case "$fastread" in
6345                 yes) dflt=y ;;
6346                 *) dflt=n ;;
6347                 esac
6348                 . ./myread
6349                 case "$ans" in
6350                 y*) cont='' ;;
6351                 *) echo " " ;;
6352                 esac
6353                 ;;
6354         esac
6355 done
6356
6357 $cat <<EOM
6358
6359 If you or somebody else will be maintaining perl at your site, please
6360 fill in the correct e-mail address here so that they may be contacted
6361 if necessary. Currently, the "perlbug" program included with perl
6362 will send mail to this address in addition to perlbug@perl.com. You may
6363 enter "none" for no administrator.
6364
6365 EOM
6366 case "$perladmin" in
6367 '') dflt="$cf_email";;
6368 *) dflt="$perladmin";;
6369 esac
6370 rp='Perl administrator e-mail address'
6371 . ./myread
6372 perladmin="$ans"
6373
6374 : figure out how to guarantee perl startup
6375 case "$startperl" in
6376 '')
6377         case "$sharpbang" in
6378         *!)
6379                 $cat <<EOH
6380
6381 I can use the #! construct to start perl on your system. This will
6382 make startup of perl scripts faster, but may cause problems if you
6383 want to share those scripts and perl is not in a standard place
6384 ($binexp/perl) on all your platforms. The alternative is to force
6385 a shell by starting the script with a single ':' character.
6386
6387 EOH
6388                 dflt="$binexp/perl"
6389                 rp='What shall I put after the #! to start up perl ("none" to not use #!)?'
6390                 . ./myread
6391                 case "$ans" in
6392                 none)   startperl=": # use perl";;
6393                 *)      startperl="#!$ans"
6394                         if $test 30 -lt `echo "$ans" | wc -c`; then
6395                                 $cat >&4 <<EOM
6396
6397 WARNING:  Some systems limit the #! command to 32 characters.
6398 If you experience difficulty running Perl scripts with #!, try
6399 installing Perl in a directory with a shorter pathname.
6400
6401 EOM
6402                         fi ;;
6403                 esac
6404                 ;;
6405         *) startperl=": # use perl"
6406                 ;;
6407         esac
6408         ;;
6409 esac
6410 echo "I'll use $startperl to start perl scripts."
6411
6412 : figure best path for perl in scripts
6413 case "$perlpath" in
6414 '')
6415         perlpath="$binexp/perl"
6416         case "$startperl" in
6417         *!*) ;;
6418         *)
6419                 $cat <<EOH
6420
6421 I will use the "eval 'exec'" idiom to start Perl on your system.
6422 I can use the full path of your Perl binary for this purpose, but
6423 doing so may cause problems if you want to share those scripts and
6424 Perl is not always in a standard place ($binexp/perl).
6425
6426 EOH
6427                 dflt="$binexp/perl"
6428                 rp="What path shall I use in \"eval 'exec'\"?"
6429                 . ./myread
6430                 perlpath="$ans"
6431                 ;;
6432         esac
6433         ;;
6434 esac
6435 case "$startperl" in
6436 *!*)    ;;
6437 *)      echo "I'll use $perlpath in \"eval 'exec'\"" ;;
6438 esac
6439
6440 : determine where public executable scripts go
6441 set scriptdir scriptdir
6442 eval $prefixit
6443 case "$scriptdir" in
6444 '')
6445         dflt="$bin"
6446         : guess some guesses
6447         $test -d /usr/share/scripts && dflt=/usr/share/scripts
6448         $test -d /usr/share/bin     && dflt=/usr/share/bin
6449         $test -d /usr/local/script  && dflt=/usr/local/script
6450         $test -d /usr/local/scripts && dflt=/usr/local/scripts
6451         $test -d $prefixexp/script  && dflt=$prefixexp/script
6452         set dflt
6453         eval $prefixup
6454         ;;
6455 *)  dflt="$scriptdir"
6456         ;;
6457 esac
6458 $cat <<EOM
6459  
6460 Some installations have a separate directory just for executable scripts so
6461 that they can mount it across multiple architectures but keep the scripts in
6462 one spot.  You might, for example, have a subdirectory of /usr/share for this.
6463 Or you might just lump your scripts in with all your other executables.
6464  
6465 EOM
6466 fn=d~
6467 rp='Where do you keep publicly executable scripts?'
6468 . ./getfile
6469 if $test "X$ansexp" != "X$scriptdirexp"; then
6470         installscript=''
6471 fi
6472 scriptdir="$ans"
6473 scriptdirexp="$ansexp"
6474 : Change installation prefix, if necessary.
6475 if $test X"$prefix" != X"$installprefix"; then
6476         installscript=`echo $scriptdirexp | sed "s#^$prefix#$installprefix#"`
6477 else
6478         installscript="$scriptdirexp"
6479 fi
6480
6481 $cat <<EOM
6482
6483 After $package is installed, you may wish to install various
6484 add-on modules and utilities.  Typically, these add-ons will
6485 be installed under $prefix with the rest
6486 of this package.  However, you may wish to install such add-ons
6487 elsewhere under a different prefix.
6488
6489 If you do not wish to put everything under a single prefix, that's
6490 ok.  You will be prompted for the individual locations; this siteprefix
6491 is only used to suggest the defaults.
6492
6493 The default should be fine for most people.
6494
6495 EOM
6496 fn=d~+
6497 rp='Installation prefix to use for add-on modules and utilities?'
6498 : XXX Here might be another good place for an installstyle setting.
6499 case "$siteprefix" in
6500 '') dflt=$prefix ;;
6501 *)  dflt=$siteprefix ;;
6502 esac
6503 . ./getfile
6504 oldsiteprefix=''
6505 case "$siteprefix" in
6506 '') ;;
6507 *)
6508         case "$ans" in
6509         "$prefix") ;;
6510         *) oldsiteprefix="$prefix";;
6511         esac
6512         ;;
6513 esac
6514 siteprefix="$ans"
6515 siteprefixexp="$ansexp"
6516
6517 : determine where site specific libraries go.
6518 : Usual default is /usr/local/lib/perl5/site_perl
6519 : The default "style" setting is made in installstyle.U
6520 : XXX No longer works with Prefixit stuff.
6521 prog=`echo $package | $sed 's/-*[0-9.]*$//'`
6522 case "$installstyle" in
6523 *lib/perl5*) dflt=$siteprefix/lib/site_$prog ;;
6524 *)       dflt=$siteprefix/lib/site_$prog ;;
6525 esac
6526 $cat <<EOM
6527
6528 The installation process will create a directory for
6529 site-specific extensions and modules.  Most users find it convenient
6530 to place all site-specific files in this directory rather than in the
6531 main distribution directory.
6532
6533 EOM
6534 fn=d~+
6535 rp='Pathname for the site-specific library files?'
6536 . ./getfile
6537 sitelib="$ans"
6538 sitelibexp="$ansexp"
6539 : Change installation prefix, if necessary.
6540 if $test X"$prefix" != X"$installprefix"; then
6541         installsitelib=`echo $sitelibexp | sed "s#^$prefix#$installprefix#"`
6542 else
6543         installsitelib="$sitelibexp"
6544 fi
6545
6546 : determine where site specific architecture-dependent libraries go.
6547 : sitelib  default is /usr/local/lib/perl5/site_perl/
6548 : sitearch default is /usr/local/lib/perl5/site_perl/$apiversion/$archname
6549 : sitelib may have an optional trailing /share.
6550 tdflt=`echo $sitelib | $sed 's,/share$,,'`
6551 tdflt="$tdflt/$apiversion/$archname"
6552 set sitearch sitearch none
6553 eval $prefixit
6554 case "$sitearch" in
6555 '')     dflt="$tdflt" ;;
6556 *)      dflt="$sitearch" ;;
6557 esac
6558 $cat <<EOM
6559
6560 The installation process will also create a directory for
6561 architecture-dependent site-specific extensions and modules.
6562
6563 EOM
6564 fn=nd~+
6565 rp='Pathname for the site-specific architecture-dependent library files?'
6566 . ./getfile
6567 sitearch="$ans"
6568 sitearchexp="$ansexp"
6569 : Change installation prefix, if necessary.
6570 if $test X"$prefix" != X"$installprefix"; then
6571         installsitearch=`echo $sitearchexp | sed "s#^$prefix#$installprefix#"`
6572 else
6573         installsitearch="$sitearchexp"
6574 fi
6575
6576 : determine where add-on public executables go
6577 case "$sitebin" in
6578 '')     dflt=$siteprefix/bin ;;
6579 *)      dflt=$sitebin ;;
6580 esac
6581 fn=d~
6582 rp='Pathname where the add-on public executables should be installed?'
6583 . ./getfile
6584 sitebin="$ans"
6585 sitebinexp="$ansexp"
6586 : Change installation prefix, if necessary.
6587 if $test X"$prefix" != X"$installprefix"; then
6588         installsitebin=`echo $sitebinexp | sed "s#^$prefix#$installprefix#"`
6589 else
6590         installsitebin="$sitebinexp"
6591 fi
6592
6593 cat <<EOM
6594
6595 Perl can be built to take advantage of long doubles which
6596 (if available) may give more accuracy and range for floating point numbers.
6597
6598 If this doesn't make any sense to you, just accept the default 'n'.
6599 EOM
6600
6601 case "$ccflags" in
6602 *-DUSE_LONG_DOUBLE*|*-DUSE_MORE_BITS*) uselongdouble="$define" ;;
6603 esac
6604
6605 case "$uselongdouble" in
6606 $define|true|[yY]*)     dflt='y';;
6607 *) dflt='n';;
6608 esac
6609 rp='Try to use long doubles if available?'
6610 . ./myread
6611 case "$ans" in
6612 y|Y)    val="$define"   ;;
6613 *)      val="$undef"    ;;
6614 esac
6615 set uselongdouble
6616 eval $setvar
6617
6618 case "$uselongdouble" in
6619 true|[yY]*) uselongdouble="$define" ;;
6620 esac
6621
6622 case "$uselongdouble" in
6623 $define)
6624 : Look for a hint-file generated 'call-back-unit'.  If the
6625 : user has specified that long doubles should be used,
6626 : we may need to set or change some other defaults.
6627         if $test -f uselongdouble.cbu; then
6628                 echo "Your platform has some specific hints for long doubles, using them..."
6629                 . ./uselongdouble.cbu
6630         else
6631                 $cat <<EOM
6632 (Your platform doesn't have any specific hints for long doubles.)
6633 EOM
6634         fi
6635         ;;
6636 esac
6637
6638 cat <<EOM
6639
6640 Perl can be built to take advantage of long longs which
6641 (if available) may give more range for integer numbers.
6642
6643 If this doesn't make any sense to you, just accept the default 'n'.
6644 EOM
6645
6646 case "$ccflags" in
6647 *-DUSE_LONG_LONG*) uselonglong="$define" ;;
6648 esac
6649
6650 case "$uselonglong" in
6651 $define|true|[yY]*)     dflt='y';;
6652 *) dflt='n';;
6653 esac
6654 rp='Try to use long longs if available?'
6655 . ./myread
6656 case "$ans" in
6657 y|Y)    val="$define"   ;;
6658 *)      val="$undef"    ;;
6659 esac
6660 set uselonglong
6661 eval $setvar
6662
6663 case "$uselonglong" in
6664 true|[yY]*) uselonglong="$define" ;;
6665 esac
6666
6667 case "$uselonglong" in
6668 $define)
6669 : Look for a hint-file generated 'call-back-unit'.  If the
6670 : user has specified that long longs should be used,
6671 : we may need to set or change some other defaults.
6672         if $test -f uselonglong.cbu; then
6673                 echo "Your platform has some specific hints for long longs, using them..."
6674                 . ./uselonglong.cbu
6675         else
6676                 $cat <<EOM
6677 (Your platform doesn't have any specific hints for long longs.)
6678 EOM
6679         fi
6680         ;;
6681 esac
6682
6683 cat <<EOM
6684
6685 Previous version of $package used the standard IO mechanisms as defined
6686 in <stdio.h>.  Versions 5.003_02 and later of perl allow alternate IO
6687 mechanisms via a "PerlIO" abstraction, but the stdio mechanism is still
6688 the default.  This abstraction layer can use AT&T's sfio (if you already
6689 have sfio installed) or regular stdio.  Using PerlIO with sfio may cause
6690 problems with some extension modules.  Using PerlIO with stdio is safe,
6691 but it is slower than plain stdio and therefore is not the default.
6692
6693 If this doesn't make any sense to you, just accept the default 'n'.
6694 EOM
6695 case "$useperlio" in
6696 $define|true|[yY]*)     dflt='y';;
6697 *) dflt='n';;
6698 esac
6699 rp='Use the experimental PerlIO abstraction layer?'
6700 . ./myread
6701 case "$ans" in
6702 y|Y) 
6703         val="$define"
6704         ;;     
6705 *)      
6706         echo "Ok, doing things the stdio way"
6707         val="$undef"
6708         ;;
6709 esac
6710 set useperlio
6711 eval $setvar 
6712
6713 case "$vendorprefix" in
6714 '')     d_vendorbin="$undef"
6715         vendorbin=''
6716         vendorbinexp=''
6717         ;;
6718 *)      d_vendorbin="$define"
6719         : determine where vendor-supplied executables go.
6720         dflt=$vendorprefix/bin
6721         fn=d~+
6722         rp='Pathname for the vendor-supplied executables directory?'
6723         . ./getfile
6724         vendorbin="$ans"
6725         vendorbinexp="$ansexp"
6726         : Change installation prefix, if necessary.
6727         if $test X"$prefix" != X"$installprefix"; then
6728                 installvendorbin=`echo $vendorbinexp | $sed "s#^$prefix#$installprefix#"`
6729         else
6730                 installvendorbin="$vendorbinexp"
6731         fi
6732         ;;
6733 esac
6734
6735 : Check how to convert floats to strings.
6736 if test "X$d_Gconvert" = X; then
6737         echo " "
6738         echo "Checking for an efficient way to convert floats to strings."
6739         $cat >try.c <<'EOP'
6740 #ifdef TRY_gconvert
6741 #define Gconvert(x,n,t,b) gconvert((x),(n),(t),(b))
6742 char *myname = "gconvert";
6743 #endif
6744 #ifdef TRY_gcvt
6745 #define Gconvert(x,n,t,b) gcvt((x),(n),(b))
6746 char *myname = "gcvt";
6747 #endif
6748 #ifdef TRY_sprintf
6749 #define Gconvert(x,n,t,b) sprintf((b),"%.*g",(n),(x))
6750 char *myname = "sprintf";
6751 #endif
6752
6753 #include <stdio.h>
6754
6755 int
6756 checkit(expect, got)
6757 char *expect;
6758 char *got;
6759 {
6760     if (strcmp(expect, got)) {
6761                 printf("%s oddity:  Expected %s, got %s\n",
6762                         myname, expect, got);
6763                 exit(1);
6764         }
6765 }
6766
6767 int main()
6768
6769         char buf[64]; 
6770         buf[63] = '\0';
6771
6772         /* This must be 1st test on (which?) platform */
6773         /* Alan Burlison <AlanBurlsin@unn.unisys.com> */
6774         Gconvert(0.1, 8, 0, buf);
6775         checkit("0.1", buf);
6776
6777         Gconvert(1.0, 8, 0, buf); 
6778         checkit("1", buf);
6779
6780         Gconvert(0.0, 8, 0, buf); 
6781         checkit("0", buf);
6782
6783         Gconvert(-1.0, 8, 0, buf); 
6784         checkit("-1", buf);
6785
6786         /* Some Linux gcvt's give 1.e+5 here. */
6787         Gconvert(100000.0, 8, 0, buf); 
6788         checkit("100000", buf);
6789         
6790         /* Some Linux gcvt's give -1.e+5 here. */
6791         Gconvert(-100000.0, 8, 0, buf); 
6792         checkit("-100000", buf);
6793
6794         exit(0);
6795 }
6796 EOP
6797         case "$d_Gconvert" in
6798         gconvert*) xxx_list='gconvert gcvt sprintf' ;;
6799         gcvt*) xxx_list='gcvt gconvert sprintf' ;;
6800         sprintf*) xxx_list='sprintf gconvert gcvt' ;;
6801         *) xxx_list='gconvert gcvt sprintf' ;;
6802         esac
6803
6804         for xxx_convert in $xxx_list; do
6805                 echo "Trying $xxx_convert"
6806                 $rm -f try try$_o
6807                 set try -DTRY_$xxx_convert
6808                 if eval $compile; then
6809                         echo "$xxx_convert" found. >&4
6810                         if ./try; then
6811                                 echo "I'll use $xxx_convert to convert floats into a string." >&4
6812                                 break;
6813                         else
6814                                 echo "...But $xxx_convert didn't work as I expected."
6815                         fi
6816                 else
6817                         echo "$xxx_convert NOT found." >&4
6818                 fi
6819         done
6820                 
6821         case "$xxx_convert" in
6822         gconvert) d_Gconvert='gconvert((x),(n),(t),(b))' ;;
6823         gcvt) d_Gconvert='gcvt((x),(n),(b))' ;;
6824         *) d_Gconvert='sprintf((b),"%.*g",(n),(x))' ;;
6825         esac
6826 fi
6827
6828 : check for length of double
6829 echo " "
6830 case "$doublesize" in
6831 '')
6832         $echo $n "Checking to see how big your double precision numbers are...$c" >&4
6833         $cat >try.c <<'EOCP'
6834 #include <stdio.h>
6835 int main()
6836 {
6837     printf("%d\n", (int)sizeof(double));
6838     exit(0);
6839 }
6840 EOCP
6841         set try
6842         if eval $compile_ok; then
6843                 doublesize=`./try`
6844                 $echo " $doublesize bytes." >&4
6845         else
6846                 dflt='8'
6847                 echo "(I can't seem to compile the test program.  Guessing...)"
6848                 rp="What is the size of a double precision number (in bytes)?"
6849                 . ./myread
6850                 doublesize="$ans"
6851         fi
6852         ;;
6853 esac
6854 $rm -f try.c try
6855
6856 : check for long doubles
6857 echo " "
6858 $echo $n "Checking to see if your system supports long double..." $c >&4
6859 echo 'int main() { long double x = 7.0; }' > try.c
6860 set try
6861 if eval $compile; then
6862         val="$define"
6863         echo " Yes, it does." >&4
6864 else
6865         val="$undef"
6866         echo " No, it doesn't." >&4
6867 fi
6868 $rm try.*
6869 set d_longdbl
6870 eval $setvar
6871
6872 : check for length of long double
6873 case "${d_longdbl}${longdblsize}" in
6874 $define)
6875         echo " "
6876         $echo $n "Checking to see how big your long doubles are..." $c >&4
6877         $cat >try.c <<'EOCP'
6878 #include <stdio.h>
6879 int main()
6880 {
6881         printf("%d\n", sizeof(long double));
6882 }
6883 EOCP
6884         set try
6885         set try
6886         if eval $compile; then
6887                 longdblsize=`./try$exe_ext`
6888                 $echo " $longdblsize bytes." >&4
6889         else
6890                 dflt='8'
6891                 echo " "
6892                 echo "(I can't seem to compile the test program.  Guessing...)" >&4
6893                 rp="What is the size of a long double (in bytes)?"
6894                 . ./myread
6895                 longdblsize="$ans"
6896         fi
6897         if $test "X$doublesize" = "X$longdblsize"; then
6898                 echo "(That isn't any different from an ordinary double.)"
6899         fi      
6900         ;;
6901 esac
6902 $rm -f try.* try
6903
6904 echo " "
6905
6906 if $test X"$d_longdbl" = X"$define"; then
6907
6908 echo "Checking how to print long doubles..." >&4
6909
6910 if $test X"$sPRIfldbl" = X -a X"$doublesize" = X"$longdblsize"; then
6911         $cat >try.c <<'EOCP'
6912 #include <sys/types.h>
6913 #include <stdio.h>
6914 int main() {
6915   double d = 123.456;
6916   printf("%.3f\n", d);
6917 }
6918 EOCP
6919         set try
6920         if eval $compile; then
6921                 yyy=`./try$exe_ext`
6922                 case "$yyy" in
6923                 123.456)
6924                         sPRIfldbl='"f"'; sPRIgldbl='"g"'; sPRIeldbl='"e"';
6925                         sPRIFldbl='"F"'; sPRIGldbl='"G"'; sPRIEldbl='"E"';
6926                         echo "We will use %f."
6927                         ;;
6928                 esac
6929         fi
6930 fi
6931
6932 if $test X"$sPRIfldbl" = X; then
6933         $cat >try.c <<'EOCP'
6934 #include <sys/types.h>
6935 #include <stdio.h>
6936 int main() {
6937   long double d = 123.456;
6938   printf("%.3llf\n", d);
6939 }
6940 EOCP
6941         set try
6942         if eval $compile; then
6943                 yyy=`./try$exe_ext`
6944                 case "$yyy" in
6945                 123.456)
6946                         sPRIfldbl='"llf"'; sPRIgldbl='"llg"'; sPRIeldbl='"lle"';
6947                         sPRIFldbl='"llF"'; sPRIGldbl='"llG"'; sPRIEldbl='"llE"';
6948                         echo "We will use %llf."
6949                         ;;
6950                 esac
6951         fi
6952 fi
6953
6954 if $test X"$sPRIfldbl" = X; then
6955         $cat >try.c <<'EOCP'
6956 #include <sys/types.h>
6957 #include <stdio.h>
6958 int main() {
6959   long double d = 123.456;
6960   printf("%.3Lf\n", d);
6961 }
6962 EOCP
6963         set try
6964         if eval $compile; then
6965                 yyy=`./try$exe_ext`
6966                 case "$yyy" in
6967                 123.456)
6968                         sPRIfldbl='"Lf"'; sPRIgldbl='"Lg"'; sPRIeldbl='"Le"';
6969                         sPRIFldbl='"LF"'; sPRIGldbl='"LG"'; sPRIEldbl='"LE"';
6970                         echo "We will use %Lf."
6971                         ;;
6972                 esac
6973         fi
6974 fi
6975
6976 if $test X"$sPRIfldbl" = X; then
6977         $cat >try.c <<'EOCP'
6978 #include <sys/types.h>
6979 #include <stdio.h>
6980 int main() {
6981   long double d = 123.456;
6982   printf("%.3lf\n", d);
6983 }
6984 EOCP
6985         set try
6986         if eval $compile; then
6987                 yyy=`./try$exe_ext`
6988                 case "$yyy" in
6989                 123.456)
6990                         sPRIfldbl='"lf"'; sPRIgldbl='"lg"'; sPRIeldbl='"le"';
6991                         sPRIFldbl='"lF"'; sPRIGldbl='"lG"'; sPRIEldbl='"lE"';
6992                         echo "We will use %lf."
6993                         ;;
6994                 esac
6995         fi
6996 fi
6997
6998 if $test X"$sPRIfldbl" = X; then
6999         echo "Cannot figure out how to print long doubles." >&4
7000 fi
7001
7002 $rm -f try try.*
7003
7004 fi # d_longdbl
7005
7006 case "$sPRIfldbl" in
7007 '')     d_PRIfldbl="$undef"; d_PRIgldbl="$undef"; d_PRIeldbl="$undef"; 
7008         d_PRIFldbl="$undef"; d_PRIGldbl="$undef"; d_PRIEldbl="$undef"; 
7009         ;;
7010 *)      d_PRIfldbl="$define"; d_PRIgldbl="$define"; d_PRIeldbl="$define"; 
7011         d_PRIFldbl="$define"; d_PRIGldbl="$define"; d_PRIEldbl="$define"; 
7012         ;;
7013 esac
7014
7015 : Initialize h_fcntl
7016 h_fcntl=false
7017
7018 : Initialize h_sysfile
7019 h_sysfile=false
7020
7021 : access call always available on UNIX
7022 set access d_access
7023 eval $inlibc
7024
7025 : locate the flags for 'access()'
7026 case "$d_access" in
7027 "$define")
7028         echo " "
7029         $cat >access.c <<'EOCP'
7030 #include <sys/types.h>
7031 #ifdef I_FCNTL
7032 #include <fcntl.h>
7033 #endif
7034 #ifdef I_SYS_FILE
7035 #include <sys/file.h>
7036 #endif
7037 #ifdef I_UNISTD
7038 #include <unistd.h>
7039 #endif
7040 int main() {
7041         exit(R_OK);
7042 }
7043 EOCP
7044         : check sys/file.h first, no particular reason here
7045         if $test `./findhdr sys/file.h` && \
7046                 $cc $cppflags -DI_SYS_FILE -o access access.c >/dev/null 2>&1 ; then
7047                 h_sysfile=true;
7048                 echo "<sys/file.h> defines the *_OK access constants." >&4
7049         elif $test `./findhdr fcntl.h` && \
7050                 $cc $cppflags -DI_FCNTL -o access access.c >/dev/null 2>&1 ; then
7051                 h_fcntl=true;
7052                 echo "<fcntl.h> defines the *_OK access constants." >&4
7053         elif $test `./findhdr unistd.h` && \
7054                 $cc $cppflags -DI_UNISTD -o access access.c >/dev/null 2>&1 ; then
7055                 echo "<unistd.h> defines the *_OK access constants." >&4
7056         else
7057                 echo "I can't find the four *_OK access constants--I'll use mine." >&4
7058         fi
7059         ;;
7060 esac
7061 $rm -f access*
7062
7063 : see if accessx exists
7064 set accessx d_accessx
7065 eval $inlibc
7066
7067 : see if alarm exists
7068 set alarm d_alarm
7069 eval $inlibc
7070
7071 : see if atolf exists
7072 set atolf d_atolf
7073 eval $inlibc
7074
7075 : see if atoll exists
7076 set atoll d_atoll
7077 eval $inlibc
7078
7079 : Look for GNU-cc style attribute checking
7080 echo " "
7081 echo "Checking whether your compiler can handle __attribute__ ..." >&4
7082 $cat >attrib.c <<'EOCP'
7083 #include <stdio.h>
7084 void croak (char* pat,...) __attribute__((format(printf,1,2),noreturn));
7085 EOCP
7086 if $cc $ccflags -c attrib.c >attrib.out 2>&1 ; then
7087         if $contains 'warning' attrib.out >/dev/null 2>&1; then
7088                 echo "Your C compiler doesn't fully support __attribute__."
7089                 val="$undef"
7090         else
7091                 echo "Your C compiler supports __attribute__."
7092                 val="$define"
7093         fi
7094 else
7095         echo "Your C compiler doesn't seem to understand __attribute__ at all."
7096         val="$undef"
7097 fi
7098 set d_attribut
7099 eval $setvar
7100 $rm -f attrib*
7101
7102 : see if bcmp exists
7103 set bcmp d_bcmp
7104 eval $inlibc
7105
7106 : see if bcopy exists
7107 set bcopy d_bcopy
7108 eval $inlibc
7109
7110 : see if this is a unistd.h system
7111 set unistd.h i_unistd
7112 eval $inhdr
7113
7114 : see if getpgrp exists
7115 set getpgrp d_getpgrp
7116 eval $inlibc
7117
7118 case "$d_getpgrp" in
7119 "$define")
7120         echo " "
7121         echo "Checking to see which flavor of getpgrp is in use..."
7122         $cat >set.c <<EOP
7123 #$i_unistd I_UNISTD
7124 #include <sys/types.h>
7125 #ifdef I_UNISTD
7126 #  include <unistd.h>
7127 #endif
7128 int main()
7129 {
7130         if (getuid() == 0) {
7131                 printf("(I see you are running Configure as super-user...)\n");
7132                 setuid(1);
7133         }
7134 #ifdef TRY_BSD_PGRP
7135         if (getpgrp(1) == 0)
7136                 exit(0);
7137 #else
7138         if (getpgrp() > 0)
7139                 exit(0);
7140 #endif
7141         exit(1);
7142 }
7143 EOP
7144         if $cc -DTRY_BSD_PGRP $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1 && ./set; then
7145                 echo "You have to use getpgrp(pid) instead of getpgrp()." >&4
7146                 val="$define"
7147         elif $cc $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1 && ./set; then
7148                 echo "You have to use getpgrp() instead of getpgrp(pid)." >&4
7149                 val="$undef"
7150         else
7151                 echo "I can't seem to compile and run the test program."
7152                 if ./usg; then
7153                         xxx="a USG one, i.e. you use getpgrp()."
7154                 else
7155                         # SVR4 systems can appear rather BSD-ish.
7156                         case "$i_unistd" in
7157                         $undef)
7158                                 xxx="a BSD one, i.e. you use getpgrp(pid)."
7159                                 val="$define"
7160                                 ;;
7161                         $define)
7162                                 xxx="probably a USG one, i.e. you use getpgrp()."
7163                                 val="$undef"
7164                                 ;;
7165                         esac
7166                 fi
7167                 echo "Assuming your getpgrp is $xxx" >&4
7168         fi
7169         ;;
7170 *) val="$undef";;
7171 esac
7172 set d_bsdgetpgrp
7173 eval $setvar
7174 $rm -f set set.c
7175
7176 : see if setpgrp exists
7177 set setpgrp d_setpgrp
7178 eval $inlibc
7179
7180 case "$d_setpgrp" in
7181 "$define")
7182         echo " "
7183         echo "Checking to see which flavor of setpgrp is in use..."
7184         $cat >set.c <<EOP
7185 #$i_unistd I_UNISTD
7186 #include <sys/types.h>
7187 #ifdef I_UNISTD
7188 #  include <unistd.h>
7189 #endif
7190 int main()
7191 {
7192         if (getuid() == 0) {
7193                 printf("(I see you are running Configure as super-user...)\n");
7194                 setuid(1);
7195         }
7196 #ifdef TRY_BSD_PGRP
7197         if (-1 == setpgrp(1, 1))
7198                 exit(0);
7199 #else
7200         if (setpgrp() != -1)
7201                 exit(0);
7202 #endif
7203         exit(1);
7204 }
7205 EOP
7206         if $cc -DTRY_BSD_PGRP $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1 && ./set; then
7207                 echo 'You have to use setpgrp(pid,pgrp) instead of setpgrp().' >&4
7208                 val="$define"
7209         elif $cc $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1 && ./set; then
7210                 echo 'You have to use setpgrp() instead of setpgrp(pid,pgrp).' >&4
7211                 val="$undef"
7212         else
7213                 echo "(I can't seem to compile and run the test program.)"
7214                 if ./usg; then
7215                         xxx="a USG one, i.e. you use setpgrp()."
7216                 else
7217                         # SVR4 systems can appear rather BSD-ish.
7218                         case "$i_unistd" in
7219                         $undef)
7220                                 xxx="a BSD one, i.e. you use setpgrp(pid,pgrp)."
7221                                 val="$define"
7222                                 ;;
7223                         $define)
7224                                 xxx="probably a USG one, i.e. you use setpgrp()."
7225                                 val="$undef"
7226                                 ;;
7227                         esac
7228                 fi
7229                 echo "Assuming your setpgrp is $xxx" >&4
7230         fi
7231         ;;
7232 *) val="$undef";;
7233 esac
7234 set d_bsdsetpgrp
7235 eval $setvar
7236 $rm -f set set.c
7237 : see if bzero exists
7238 set bzero d_bzero
7239 eval $inlibc
7240
7241 : check for lengths of integral types
7242 echo " "
7243 case "$intsize" in
7244 '')
7245         echo "Checking to see how big your integers are..." >&4
7246         $cat >intsize.c <<'EOCP'
7247 #include <stdio.h>
7248 int main()
7249 {
7250         printf("intsize=%d;\n", (int)sizeof(int));
7251         printf("longsize=%d;\n", (int)sizeof(long));
7252         printf("shortsize=%d;\n", (int)sizeof(short));
7253         exit(0);
7254 }
7255 EOCP
7256         set intsize
7257         if eval $compile_ok && ./intsize > /dev/null; then
7258                 eval `./intsize`
7259                 echo "Your integers are $intsize bytes long."
7260                 echo "Your long integers are $longsize bytes long."
7261                 echo "Your short integers are $shortsize bytes long."
7262         else
7263                 $cat >&4 <<EOM
7264 !
7265 Help! I can't compile and run the intsize test program: please enlighten me!
7266 (This is probably a misconfiguration in your system or libraries, and
7267 you really ought to fix it.  Still, I'll try anyway.)
7268 !
7269 EOM
7270                 dflt=4
7271                 rp="What is the size of an integer (in bytes)?"
7272                 . ./myread
7273                 intsize="$ans"
7274                 dflt=$intsize
7275                 rp="What is the size of a long integer (in bytes)?"
7276                 . ./myread
7277                 longsize="$ans"
7278                 dflt=2
7279                 rp="What is the size of a short integer (in bytes)?"
7280                 . ./myread
7281                 shortsize="$ans"
7282         fi
7283         ;;
7284 esac
7285 $rm -f intsize intsize.*
7286
7287 : see if signal is declared as pointer to function returning int or void
7288 echo " "
7289 xxx=`./findhdr signal.h`
7290 $test "$xxx" && $cppstdin $cppminus $cppflags < $xxx >$$.tmp 2>/dev/null
7291 if $contains 'int.*\*[  ]*signal' $$.tmp >/dev/null 2>&1 ; then
7292         echo "You have int (*signal())() instead of void." >&4
7293         val="$undef"
7294 elif $contains 'void.*\*[       ]*signal' $$.tmp >/dev/null 2>&1 ; then
7295         echo "You have void (*signal())()." >&4
7296         val="$define"
7297 elif $contains 'extern[         ]*[(\*]*signal' $$.tmp >/dev/null 2>&1 ; then
7298         echo "You have int (*signal())() instead of void." >&4
7299         val="$undef"
7300 elif $contains 'void.*\*.*sig' $$.tmp >/dev/null 2>&1 ; then
7301         echo "You have void (*signal())()." >&4
7302         val="$define"
7303 else
7304         case "$d_voidsig" in
7305         '')
7306         echo "I can't determine whether signal handler returns void or int..." >&4
7307                 dflt=void
7308                 rp="What type does your signal handler return?"
7309                 . ./myread
7310                 case "$ans" in
7311                 v*) val="$define";;
7312                 *) val="$undef";;
7313                 esac;;
7314         "$define")
7315                 echo "As you already told me, signal handler returns void." >&4
7316                 val="$define"
7317                 ;;
7318         *)      echo "As you already told me, signal handler returns int." >&4
7319                 val="$undef"
7320                 ;;
7321         esac
7322 fi
7323 set d_voidsig
7324 eval $setvar
7325 case "$d_voidsig" in
7326 "$define") signal_t="void";;
7327 *) signal_t="int";;
7328 esac
7329 $rm -f $$.tmp
7330
7331 : check for ability to cast large floats to 32-bit ints.
7332 echo " "
7333 echo 'Checking whether your C compiler can cast large floats to int32.' >&4
7334 if $test "$intsize" -ge 4; then
7335         xxx=int
7336 else
7337         xxx=long
7338 fi
7339 $cat >try.c <<EOCP
7340 #include <stdio.h>
7341 #include <sys/types.h>
7342 #include <signal.h>
7343 $signal_t blech(s) int s; { exit(3); }
7344 int main()
7345 {
7346         $xxx i32;
7347         double f, g;
7348         int result = 0;
7349         char str[16];
7350         signal(SIGFPE, blech);
7351
7352         /* Don't let compiler optimize the test away.  Store the number 
7353            in a writable string for gcc to pass to sscanf under HP/UX.
7354         */
7355         sprintf(str, "2147483647");
7356         sscanf(str, "%lf", &f); /* f = (double) 0x7fffffff; */
7357         g = 10 * f;
7358         i32  = ($xxx) g;
7359
7360         /* x86 processors will probably give 0x8000 0000, which is a
7361        sign change.  We don't want that.  We want to mimic SPARC
7362            behavior here, which is to preserve the sign and give
7363            back 0x7fff ffff.
7364         */
7365         if (i32 != ($xxx) f)
7366                 result |= 1;
7367         exit(result);
7368 }
7369 EOCP
7370 set try
7371 if eval $compile_ok; then
7372         ./try
7373         yyy=$?
7374 else
7375         echo "(I can't seem to compile the test program--assuming it can't)"
7376         yyy=1
7377 fi
7378 case "$yyy" in
7379 0)      val="$define"
7380         echo "Yup, it can."
7381         ;;
7382 *)      val="$undef"
7383         echo "Nope, it can't."
7384         ;;
7385 esac
7386 set d_casti32
7387 eval $setvar
7388 $rm -f try try.*
7389
7390 : check for ability to cast negative floats to unsigned
7391 echo " "
7392 echo 'Checking whether your C compiler can cast negative float to unsigned.' >&4
7393 $cat >try.c <<EOCP
7394 #include <stdio.h>
7395 #include <sys/types.h>
7396 #include <signal.h>
7397 $signal_t blech(s) int s; { exit(7); }
7398 $signal_t blech_in_list(s) int s; { exit(4); }
7399 unsigned long dummy_long(p) unsigned long p; { return p; }
7400 unsigned int dummy_int(p) unsigned int p; { return p; }
7401 unsigned short dummy_short(p) unsigned short p; { return p; }
7402 int main()
7403 {
7404         double f;
7405         unsigned long along;
7406         unsigned int aint;
7407         unsigned short ashort;
7408         int result = 0;
7409         char str[16];
7410         
7411         /* Frustrate gcc-2.7.2's optimizer which failed this test with
7412            a direct f = -123. assignment.  gcc-2.8.0 reportedly
7413            optimized the whole file away
7414         */
7415         /* Store the number in a writable string for gcc to pass to 
7416            sscanf under HP/UX.
7417         */
7418         sprintf(str, "-123");
7419         sscanf(str, "%lf", &f);  /* f = -123.; */
7420
7421         signal(SIGFPE, blech);
7422         along = (unsigned long)f;
7423         aint = (unsigned int)f;
7424         ashort = (unsigned short)f;
7425         if (along != (unsigned long)-123)
7426                 result |= 1;
7427         if (aint != (unsigned int)-123)
7428                 result |= 1;
7429         if (ashort != (unsigned short)-123)
7430                 result |= 1;
7431         sprintf(str, "1073741824.");
7432         sscanf(str, "%lf", &f); /* f = (double)0x40000000; */
7433         f = f + f;
7434         along = 0;
7435         along = (unsigned long)f;
7436         if (along != 0x80000000)
7437                 result |= 2;
7438         f -= 1.;
7439         along = 0;
7440         along = (unsigned long)f;
7441         if (along != 0x7fffffff)
7442                 result |= 1;
7443         f += 2.;
7444         along = 0;
7445         along = (unsigned long)f;
7446         if (along != 0x80000001)
7447                 result |= 2;
7448         if (result)
7449                 exit(result);
7450         signal(SIGFPE, blech_in_list);
7451         sprintf(str, "123.");
7452         sscanf(str, "%lf", &f);  /* f = 123.; */
7453         along = dummy_long((unsigned long)f);
7454         aint = dummy_int((unsigned int)f);
7455         ashort = dummy_short((unsigned short)f);
7456         if (along != (unsigned long)123)
7457                 result |= 4;
7458         if (aint != (unsigned int)123)
7459                 result |= 4;
7460         if (ashort != (unsigned short)123)
7461                 result |= 4;
7462         exit(result);
7463
7464 }
7465 EOCP
7466 set try
7467 if eval $compile_ok; then
7468         ./try
7469         castflags=$?
7470 else
7471         echo "(I can't seem to compile the test program--assuming it can't)"
7472         castflags=7
7473 fi
7474 case "$castflags" in
7475 0)      val="$define"
7476         echo "Yup, it can."
7477         ;;
7478 *)      val="$undef"
7479         echo "Nope, it can't."
7480         ;;
7481 esac
7482 set d_castneg
7483 eval $setvar
7484 $rm -f try.*
7485
7486 : see if vprintf exists
7487 echo " "
7488 if set vprintf val -f d_vprintf; eval $csym; $val; then
7489         echo 'vprintf() found.' >&4
7490         val="$define"
7491         $cat >vprintf.c <<'EOF'
7492 #include <varargs.h>
7493
7494 int main() { xxx("foo"); }
7495
7496 xxx(va_alist)
7497 va_dcl
7498 {
7499         va_list args;
7500         char buf[10];
7501
7502         va_start(args);
7503         exit((unsigned long)vsprintf(buf,"%s",args) > 10L);
7504 }
7505 EOF
7506         set vprintf
7507         if eval $compile && ./vprintf; then
7508                 echo "Your vsprintf() returns (int)." >&4
7509                 val2="$undef"
7510         else
7511                 echo "Your vsprintf() returns (char*)." >&4
7512                 val2="$define"
7513         fi
7514 else
7515         echo 'vprintf() NOT found.' >&4
7516                 val="$undef"
7517                 val2="$undef"
7518 fi
7519 set d_vprintf
7520 eval $setvar
7521 val=$val2
7522 set d_charvspr
7523 eval $setvar
7524
7525 : see if chown exists
7526 set chown d_chown
7527 eval $inlibc
7528
7529 : see if chroot exists
7530 set chroot d_chroot
7531 eval $inlibc
7532
7533 : see if chsize exists
7534 set chsize d_chsize
7535 eval $inlibc
7536
7537 : check for const keyword
7538 echo " "
7539 echo 'Checking to see if your C compiler knows about "const"...' >&4
7540 $cat >const.c <<'EOCP'
7541 typedef struct spug { int drokk; } spug;
7542 int main()
7543 {
7544         const char *foo;
7545         const spug y;
7546 }
7547 EOCP
7548 if $cc -c $ccflags const.c >/dev/null 2>&1 ; then
7549         val="$define"
7550         echo "Yup, it does."
7551 else
7552         val="$undef"
7553         echo "Nope, it doesn't."
7554 fi
7555 set d_const
7556 eval $setvar
7557
7558 : see if crypt exists
7559 echo " "
7560 if set crypt val -f d_crypt; eval $csym; $val; then
7561         echo 'crypt() found.' >&4
7562         val="$define"
7563         cryptlib=''
7564 else
7565         cryptlib=`./loc Slibcrypt$_a "" $xlibpth`
7566         if $test -z "$cryptlib"; then
7567                 cryptlib=`./loc Mlibcrypt$_a "" $xlibpth`
7568         else
7569                 cryptlib=-lcrypt
7570         fi
7571         if $test -z "$cryptlib"; then
7572                 cryptlib=`./loc Llibcrypt$_a "" $xlibpth`
7573         else
7574                 cryptlib=-lcrypt
7575         fi
7576         if $test -z "$cryptlib"; then
7577                 cryptlib=`./loc libcrypt$_a "" $libpth`
7578         else
7579                 cryptlib=-lcrypt
7580         fi
7581         if $test -z "$cryptlib"; then
7582                 echo 'crypt() NOT found.' >&4
7583                 val="$undef"
7584         else
7585                 val="$define"
7586         fi
7587 fi
7588 set d_crypt
7589 eval $setvar
7590
7591 : get csh whereabouts
7592 case "$csh" in
7593 'csh') val="$undef" ;;
7594 *) val="$define" ;;
7595 esac
7596 set d_csh
7597 eval $setvar
7598 : Respect a hint or command line value for full_csh.
7599 case "$full_csh" in
7600 '') full_csh=$csh ;;
7601 esac
7602
7603 : see if cuserid exists
7604 set cuserid d_cuserid
7605 eval $inlibc
7606
7607 : see if this is a limits.h system
7608 set limits.h i_limits
7609 eval $inhdr
7610
7611 : see if this is a float.h system
7612 set float.h i_float
7613 eval $inhdr
7614
7615 : See if number of significant digits in a double precision number is known
7616 echo " "
7617 $cat >dbl_dig.c <<EOM
7618 #$i_limits I_LIMITS
7619 #$i_float I_FLOAT
7620 #ifdef I_LIMITS
7621 #include <limits.h>
7622 #endif
7623 #ifdef I_FLOAT
7624 #include <float.h>
7625 #endif
7626 #ifdef DBL_DIG
7627 printf("Contains DBL_DIG");
7628 #endif
7629 EOM
7630 $cppstdin $cppflags $cppminus < dbl_dig.c >dbl_dig.E 2>/dev/null
7631 if $contains 'DBL_DIG' dbl_dig.E >/dev/null 2>&1; then
7632         echo "DBL_DIG found." >&4
7633         val="$define"
7634 else
7635         echo "DBL_DIG NOT found." >&4
7636         val="$undef"
7637 fi
7638 $rm -f dbl_dig.?
7639 set d_dbl_dig
7640 eval $setvar
7641
7642 : see if difftime exists
7643 set difftime d_difftime
7644 eval $inlibc
7645
7646 : see if this is a dirent system
7647 echo " "
7648 if xinc=`./findhdr dirent.h`; $test "$xinc"; then
7649         val="$define"
7650         echo "<dirent.h> found." >&4
7651 else
7652         val="$undef"
7653         if xinc=`./findhdr sys/dir.h`; $test "$xinc"; then
7654                 echo "<sys/dir.h> found." >&4
7655                 echo " "
7656         else
7657                 xinc=`./findhdr sys/ndir.h`
7658         fi
7659         echo "<dirent.h> NOT found." >&4
7660 fi
7661 set i_dirent
7662 eval $setvar
7663
7664 : Look for type of directory structure.
7665 echo " "
7666 $cppstdin $cppflags $cppminus < "$xinc" > try.c
7667
7668 case "$direntrytype" in
7669 ''|' ')
7670         case "$i_dirent" in
7671         $define) guess1='struct dirent' ;;
7672         *) guess1='struct direct'  ;;
7673         esac
7674         ;;
7675 *)      guess1="$direntrytype"
7676         ;;
7677 esac
7678
7679 case "$guess1" in
7680 'struct dirent') guess2='struct direct' ;;
7681 *) guess2='struct dirent' ;;
7682 esac
7683                 
7684 if $contains "$guess1" try.c >/dev/null 2>&1; then
7685         direntrytype="$guess1"
7686         echo "Your directory entries are $direntrytype." >&4
7687 elif $contains "$guess2" try.c >/dev/null 2>&1; then
7688         direntrytype="$guess2"
7689         echo "Your directory entries seem to be $direntrytype." >&4
7690 else
7691         echo "I don't recognize your system's directory entries." >&4
7692         rp="What type is used for directory entries on this system?"
7693         dflt="$guess1"
7694         . ./myread
7695         direntrytype="$ans"
7696 fi
7697 $rm -f try.c
7698
7699
7700 : see if the directory entry stores field length
7701 echo " "
7702 $cppstdin $cppflags $cppminus < "$xinc" > try.c
7703 if $contains 'd_namlen' try.c >/dev/null 2>&1; then
7704         echo "Good, your directory entry keeps length information in d_namlen." >&4
7705         val="$define"
7706 else
7707         echo "Your directory entry does not know about the d_namlen field." >&4
7708         val="$undef"
7709 fi
7710 set d_dirnamlen
7711 eval $setvar
7712 $rm -f try.c
7713
7714 : see if dlerror exists
7715 xxx_runnm="$runnm"
7716 runnm=false
7717 set dlerror d_dlerror
7718 eval $inlibc
7719 runnm="$xxx_runnm"
7720
7721 : see if dlfcn is available
7722 set dlfcn.h i_dlfcn
7723 eval $inhdr
7724
7725 case "$usedl" in
7726 $define|y|true)
7727         $cat << EOM
7728
7729 On a few systems, the dynamically loaded modules that perl generates and uses
7730 will need a different extension than shared libs. The default will probably
7731 be appropriate.
7732
7733 EOM
7734         case "$dlext" in
7735         '')     dflt="$so" ;;
7736         *)      dflt="$dlext" ;;
7737         esac
7738         rp='What is the extension of dynamically loaded modules'
7739         . ./myread
7740         dlext="$ans"
7741         ;;
7742 *)
7743         dlext="none"
7744         ;;
7745 esac
7746
7747 : Check if dlsym need a leading underscore
7748 echo " "
7749 val="$undef"
7750
7751 case "$dlsrc" in
7752 dl_dlopen.xs)
7753         echo "Checking whether your dlsym() needs a leading underscore ..." >&4
7754         $cat >dyna.c <<'EOM'
7755 fred () { }
7756 EOM
7757
7758 $cat >fred.c<<EOM
7759
7760 #include <stdio.h>
7761 #$i_dlfcn I_DLFCN
7762 #ifdef I_DLFCN
7763 #include <dlfcn.h>      /* the dynamic linker include file for Sunos/Solaris */
7764 #else
7765 #include <sys/types.h>
7766 #include <nlist.h>
7767 #include <link.h>
7768 #endif
7769
7770 extern int fred() ;
7771
7772 int main()
7773 {
7774     void * handle ;
7775     void * symbol ;
7776 #ifndef RTLD_LAZY
7777     int mode = 1 ;
7778 #else
7779     int mode = RTLD_LAZY ;
7780 #endif
7781     handle = dlopen("./dyna.$dlext", mode) ;
7782     if (handle == NULL) {
7783         printf ("1\n") ;
7784         fflush (stdout) ;
7785         exit(0);
7786     }
7787     symbol = dlsym(handle, "fred") ;
7788     if (symbol == NULL) {
7789         /* try putting a leading underscore */
7790         symbol = dlsym(handle, "_fred") ;
7791         if (symbol == NULL) {
7792             printf ("2\n") ;
7793             fflush (stdout) ;
7794             exit(0);
7795         }
7796         printf ("3\n") ;
7797     }
7798     else
7799         printf ("4\n") ;
7800     fflush (stdout) ;
7801     exit(0);
7802 }
7803 EOM
7804         : Call the object file tmp-dyna.o in case dlext=o.
7805         if $cc $ccflags $cccdlflags -c dyna.c > /dev/null 2>&1 && 
7806                 mv dyna${_o} tmp-dyna${_o} > /dev/null 2>&1 && 
7807                 $ld $lddlflags -o dyna.$dlext tmp-dyna${_o} > /dev/null 2>&1 && 
7808                 $cc $ccflags -o fred $ldflags $cccdlflags $ccdlflags fred.c $libs > /dev/null 2>&1; then
7809                 xxx=`./fred`
7810                 case $xxx in
7811                 1)      echo "Test program failed using dlopen." >&4
7812                         echo "Perhaps you should not use dynamic loading." >&4;;
7813                 2)      echo "Test program failed using dlsym." >&4
7814                         echo "Perhaps you should not use dynamic loading." >&4;;
7815                 3)      echo "dlsym needs a leading underscore" >&4
7816                         val="$define" ;;
7817                 4)      echo "dlsym doesn't need a leading underscore." >&4;;
7818                 esac
7819         else
7820                 echo "I can't compile and run the test program." >&4
7821                 echo "I'm guessing that dlsym doesn't need a leading underscore." >&4
7822         fi
7823         ;;
7824 esac
7825                 
7826 $rm -f fred fred.? dyna.$dlext dyna.? tmp-dyna.?
7827
7828 set d_dlsymun
7829 eval $setvar
7830
7831 hasproto='varname=$1; func=$2; shift; shift;
7832 while $test $# -ge 2; do
7833         case "$1" in
7834         $define) echo "#include <$2>";;
7835         esac ;
7836     shift 2;
7837 done > try.c;
7838 $cppstdin $cppflags $cppminus < try.c > tryout.c 2>/dev/null;
7839 if $contains "$func.*(" tryout.c >/dev/null 2>&1; then
7840         echo "$func() prototype found.";
7841         val="$define";
7842 else
7843         echo "$func() prototype NOT found.";
7844         val="$undef";
7845 fi;
7846 set $varname;
7847 eval $setvar;
7848 $rm -f try.c tryout.c'
7849
7850 : see if prototype for drand48 is available
7851 echo " "
7852 set d_drand48proto drand48 $i_stdlib stdlib.h $i_unistd unistd.h
7853 eval $hasproto
7854
7855 : see if dup2 exists
7856 set dup2 d_dup2
7857 eval $inlibc
7858
7859 : see if eaccess exists
7860 set eaccess d_eaccess
7861 eval $inlibc
7862
7863 : see if endgrent exists
7864 set endgrent d_endgrent
7865 eval $inlibc
7866
7867 : see if endhostent exists
7868 set endhostent d_endhent
7869 eval $inlibc
7870
7871 : see if endnetent exists
7872 set endnetent d_endnent
7873 eval $inlibc
7874
7875 : see if endprotoent exists
7876 set endprotoent d_endpent
7877 eval $inlibc
7878
7879 : see if endpwent exists
7880 set endpwent d_endpwent
7881 eval $inlibc
7882
7883 : see if endservent exists
7884 set endservent d_endsent
7885 eval $inlibc
7886
7887 : see if endspent exists
7888 set endspent d_endspent
7889 eval $inlibc
7890
7891 : Locate the flags for 'open()'
7892 echo " "
7893 $cat >open3.c <<'EOCP'
7894 #include <sys/types.h>
7895 #ifdef I_FCNTL
7896 #include <fcntl.h>
7897 #endif
7898 #ifdef I_SYS_FILE
7899 #include <sys/file.h>
7900 #endif
7901 int main() {
7902         if(O_RDONLY);
7903 #ifdef O_TRUNC
7904         exit(0);
7905 #else
7906         exit(1);
7907 #endif
7908 }
7909 EOCP
7910 : check sys/file.h first to get FREAD on Sun
7911 if $test `./findhdr sys/file.h` && \
7912                 set open3 -DI_SYS_FILE && eval $compile; then
7913         h_sysfile=true;
7914         echo "<sys/file.h> defines the O_* constants..." >&4
7915         if ./open3; then
7916                 echo "and you have the 3 argument form of open()." >&4
7917                 val="$define"
7918         else
7919                 echo "but not the 3 argument form of open().  Oh, well." >&4
7920                 val="$undef"
7921         fi
7922 elif $test `./findhdr fcntl.h` && \
7923                 set open3 -DI_FCNTL && eval $compile; then
7924         h_fcntl=true;
7925         echo "<fcntl.h> defines the O_* constants..." >&4
7926         if ./open3; then
7927                 echo "and you have the 3 argument form of open()." >&4
7928                 val="$define"
7929         else
7930                 echo "but not the 3 argument form of open().  Oh, well." >&4
7931                 val="$undef"
7932         fi
7933 else
7934         val="$undef"
7935         echo "I can't find the O_* constant definitions!  You got problems." >&4
7936 fi
7937 set d_open3
7938 eval $setvar
7939 $rm -f open3*
7940
7941 : see which of string.h or strings.h is needed
7942 echo " "
7943 strings=`./findhdr string.h`
7944 if $test "$strings" && $test -r "$strings"; then
7945         echo "Using <string.h> instead of <strings.h>." >&4
7946         val="$define"
7947 else
7948         val="$undef"
7949         strings=`./findhdr strings.h`
7950         if $test "$strings" && $test -r "$strings"; then
7951                 echo "Using <strings.h> instead of <string.h>." >&4
7952         else
7953                 echo "No string header found -- You'll surely have problems." >&4
7954         fi
7955 fi
7956 set i_string
7957 eval $setvar
7958 case "$i_string" in
7959 "$undef") strings=`./findhdr strings.h`;;
7960 *)        strings=`./findhdr string.h`;;
7961 esac
7962
7963 : check for non-blocking I/O stuff
7964 case "$h_sysfile" in
7965 true) echo "#include <sys/file.h>" > head.c;;
7966 *)
7967         case "$h_fcntl" in
7968         true) echo "#include <fcntl.h>" > head.c;;
7969         *) echo "#include <sys/fcntl.h>" > head.c;;
7970         esac
7971         ;;
7972 esac
7973 echo " "
7974 echo "Figuring out the flag used by open() for non-blocking I/O..." >&4
7975 case "$o_nonblock" in
7976 '')
7977         $cat head.c > try.c
7978         $cat >>try.c <<'EOCP'
7979 #include <stdio.h>
7980 int main() {
7981 #ifdef O_NONBLOCK
7982         printf("O_NONBLOCK\n");
7983         exit(0);
7984 #endif
7985 #ifdef O_NDELAY
7986         printf("O_NDELAY\n");
7987         exit(0);
7988 #endif
7989 #ifdef FNDELAY
7990         printf("FNDELAY\n");
7991         exit(0);
7992 #endif
7993         exit(0);
7994 }
7995 EOCP
7996         set try
7997         if eval $compile_ok; then
7998                 o_nonblock=`./try`
7999                 case "$o_nonblock" in
8000                 '') echo "I can't figure it out, assuming O_NONBLOCK will do.";;
8001                 *) echo "Seems like we can use $o_nonblock.";;
8002                 esac
8003         else
8004                 echo "(I can't compile the test program; pray O_NONBLOCK is right!)"
8005         fi
8006         ;;
8007 *) echo "Using $hint value $o_nonblock.";;
8008 esac
8009 $rm -f try try.* .out core
8010
8011 echo " "
8012 echo "Let's see what value errno gets from read() on a $o_nonblock file..." >&4
8013 case "$eagain" in
8014 '')
8015         $cat head.c > try.c
8016         $cat >>try.c <<EOCP
8017 #include <errno.h>
8018 #include <sys/types.h>
8019 #include <signal.h>
8020 #include <stdio.h> 
8021 #define MY_O_NONBLOCK $o_nonblock
8022 #ifndef errno  /* XXX need better Configure test */
8023 extern int errno;
8024 #endif
8025 #$i_unistd I_UNISTD
8026 #ifdef I_UNISTD
8027 #include <unistd.h>
8028 #endif
8029 #ifdef $i_string
8030 #include <string.h>
8031 #else
8032 #include <strings.h>
8033 #endif
8034 $signal_t blech(x) int x; { exit(3); }
8035 EOCP
8036         $cat >> try.c <<'EOCP'
8037 int main()
8038 {
8039         int pd[2];
8040         int pu[2];
8041         char buf[1];
8042         char string[100];
8043
8044         pipe(pd);       /* Down: child -> parent */
8045         pipe(pu);       /* Up: parent -> child */
8046         if (0 != fork()) {
8047                 int ret;
8048                 close(pd[1]);   /* Parent reads from pd[0] */
8049                 close(pu[0]);   /* Parent writes (blocking) to pu[1] */
8050                 if (-1 == fcntl(pd[0], F_SETFL, MY_O_NONBLOCK))
8051                         exit(1);
8052                 signal(SIGALRM, blech);
8053                 alarm(5);
8054                 if ((ret = read(pd[0], buf, 1)) > 0)    /* Nothing to read! */
8055                         exit(2);
8056                 sprintf(string, "%d\n", ret);
8057                 write(2, string, strlen(string));
8058                 alarm(0);
8059 #ifdef EAGAIN
8060                 if (errno == EAGAIN) {
8061                         printf("EAGAIN\n");
8062                         goto ok;
8063                 }
8064 #endif
8065 #ifdef EWOULDBLOCK
8066                 if (errno == EWOULDBLOCK)
8067                         printf("EWOULDBLOCK\n");
8068 #endif
8069         ok:
8070                 write(pu[1], buf, 1);   /* Unblocks child, tell it to close our pipe */
8071                 sleep(2);                               /* Give it time to close our pipe */
8072                 alarm(5);
8073                 ret = read(pd[0], buf, 1);      /* Should read EOF */
8074                 alarm(0);
8075                 sprintf(string, "%d\n", ret);
8076                 write(3, string, strlen(string));
8077                 exit(0);
8078         }
8079
8080         close(pd[0]);                   /* We write to pd[1] */
8081         close(pu[1]);                   /* We read from pu[0] */
8082         read(pu[0], buf, 1);    /* Wait for parent to signal us we may continue */
8083         close(pd[1]);                   /* Pipe pd is now fully closed! */
8084         exit(0);                                /* Bye bye, thank you for playing! */
8085 }
8086 EOCP
8087         set try
8088         if eval $compile_ok; then
8089                 echo "$startsh" >mtry
8090                 echo "./try >try.out 2>try.ret 3>try.err || exit 4" >>mtry
8091                 chmod +x mtry
8092                 ./mtry >/dev/null 2>&1
8093                 case $? in
8094                 0) eagain=`$cat try.out`;;
8095                 1) echo "Could not perform non-blocking setting!";;
8096                 2) echo "I did a successful read() for something that was not there!";;
8097                 3) echo "Hmm... non-blocking I/O does not seem to be working!";;
8098                 *) echo "Something terribly wrong happened during testing.";;
8099                 esac
8100                 rd_nodata=`$cat try.ret`
8101                 echo "A read() system call with no data present returns $rd_nodata."
8102                 case "$rd_nodata" in
8103                 0|-1) ;;
8104                 *)
8105                         echo "(That's peculiar, fixing that to be -1.)"
8106                         rd_nodata=-1
8107                         ;;
8108                 esac
8109                 case "$eagain" in
8110                 '')
8111                         echo "Forcing errno EAGAIN on read() with no data available."
8112                         eagain=EAGAIN
8113                         ;;
8114                 *)
8115                         echo "Your read() sets errno to $eagain when no data is available."
8116                         ;;
8117                 esac
8118                 status=`$cat try.err`
8119                 case "$status" in
8120                 0) echo "And it correctly returns 0 to signal EOF.";;
8121                 -1) echo "But it also returns -1 to signal EOF, so be careful!";;
8122                 *) echo "However, your read() returns '$status' on EOF??";;
8123                 esac
8124                 val="$define"
8125                 if test "$status" = "$rd_nodata"; then
8126                         echo "WARNING: you can't distinguish between EOF and no data!"
8127                         val="$undef"
8128                 fi
8129         else
8130                 echo "I can't compile the test program--assuming errno EAGAIN will do."
8131                 eagain=EAGAIN
8132         fi
8133         set d_eofnblk
8134         eval $setvar
8135         ;;
8136 *)
8137         echo "Using $hint value $eagain."
8138         echo "Your read() returns $rd_nodata when no data is present."
8139         case "$d_eofnblk" in
8140         "$define") echo "And you can see EOF because read() returns 0.";;
8141         "$undef") echo "But you can't see EOF status from read() returned value.";;
8142         *)
8143                 echo "(Assuming you can't see EOF status from read anyway.)"
8144                 d_eofnblk=$undef
8145                 ;;
8146         esac
8147         ;;
8148 esac
8149 $rm -f try try.* .out core head.c mtry
8150
8151 : see if fchmod exists
8152 set fchmod d_fchmod
8153 eval $inlibc
8154
8155 : see if fchown exists
8156 set fchown d_fchown
8157 eval $inlibc
8158
8159 : see if this is an fcntl system
8160 set fcntl d_fcntl
8161 eval $inlibc
8162
8163 hasfield='varname=$1; struct=$2; field=$3; shift; shift; shift;
8164 while $test $# -ge 2; do
8165         case "$1" in
8166         $define) echo "#include <$2>";;
8167         esac ;
8168     shift 2;
8169 done > try.c;
8170 echo "int main () { struct $struct foo; char* bar; bar = (char*)foo.$field; }" >> try.c;
8171 set try;
8172 if eval $compile; then
8173         val="$define";
8174 else
8175         val="$undef";
8176 fi;
8177 set $varname;
8178 eval $setvar;
8179 $rm -f try.c try.o'
8180
8181 socketlib=''
8182 sockethdr=''
8183 : see whether socket exists
8184 echo " "
8185 $echo $n "Hmm... $c" >&4
8186 if set socket val -f d_socket; eval $csym; $val; then
8187         echo "Looks like you have Berkeley networking support." >&4
8188         d_socket="$define"
8189         if set setsockopt val -f; eval $csym; $val; then
8190                 d_oldsock="$undef"
8191         else
8192                 echo "...but it uses the old BSD 4.1c interface, rather than 4.2." >&4
8193                 d_oldsock="$define"
8194         fi
8195 else
8196         if $contains socklib libc.list >/dev/null 2>&1; then
8197                 echo "Looks like you have Berkeley networking support." >&4
8198                 d_socket="$define"
8199                 : we will have to assume that it supports the 4.2 BSD interface
8200                 d_oldsock="$undef"
8201         else
8202                 echo "You don't have Berkeley networking in libc$_a..." >&4
8203                 if test "X$d_socket" = "X$define"; then
8204                    echo "...but you seem to believe that you have sockets." >&4
8205                 else
8206                         for net in net socket
8207                         do
8208                                 if test -f /usr/lib/lib$net$_a; then
8209                                         ( ($nm $nm_opt /usr/lib/lib$net$_a | eval $nm_extract) ||  \
8210                                         $ar t /usr/lib/lib$net$_a) 2>/dev/null >> libc.list
8211                                         if $contains socket libc.list >/dev/null 2>&1; then
8212                                                 d_socket="$define"
8213                                                 socketlib="-l$net"
8214                                                 case "$net" in
8215                                                 net)
8216                                                         echo "...but the Wollongong group seems to have hacked it in." >&4
8217                                                         sockethdr="-I/usr/netinclude"
8218                                                         ;;
8219                                                 esac
8220                                                 echo "Found Berkeley sockets interface in lib$net." >& 4 
8221                                                 if $contains setsockopt libc.list >/dev/null 2>&1; then
8222                                                         d_oldsock="$undef"
8223                                                 else
8224                                                         echo "...using the old BSD 4.1c interface, rather than 4.2." >&4
8225                                                         d_oldsock="$define"
8226                                                 fi
8227                                                 break
8228                                         fi
8229                                 fi
8230                         done
8231                         if test "X$d_socket" != "X$define"; then
8232                            echo "or anywhere else I see." >&4
8233                            d_socket="$undef"
8234                            d_oldsock="$undef"
8235                         fi
8236                 fi
8237         fi
8238 fi
8239
8240 : see if socketpair exists
8241 set socketpair d_sockpair
8242 eval $inlibc
8243
8244
8245 echo " "
8246 echo "Checking the availability of certain socket constants..." >& 4
8247 for ENUM in MSG_CTRUNC MSG_DONTROUTE MSG_OOB MSG_PEEK MSG_PROXY SCM_RIGHTS; do
8248         enum=`$echo $ENUM|./tr '[A-Z]' '[a-z]'`
8249         $cat >try.c <<EOF
8250 #include <sys/types.h>
8251 #include <sys/socket.h>
8252 int main() {
8253     int i = $ENUM;
8254 }
8255 EOF
8256         val="$undef"
8257         set try; if eval $compile; then
8258                 val="$define"
8259         fi
8260         set d_${enum}; eval $setvar
8261         $rm -f try.c try
8262 done
8263
8264 : see if sys/select.h has to be included
8265 set sys/select.h i_sysselct
8266 eval $inhdr
8267
8268 : see if we should include time.h, sys/time.h, or both
8269 echo " "
8270 if test "X$timeincl" = X; then
8271         echo "Testing to see if we should include <time.h>, <sys/time.h> or both." >&4
8272         $echo $n "I'm now running the test program...$c"
8273         $cat >try.c <<'EOCP'
8274 #include <sys/types.h>
8275 #ifdef I_TIME
8276 #include <time.h>
8277 #endif
8278 #ifdef I_SYSTIME
8279 #ifdef SYSTIMEKERNEL
8280 #define KERNEL
8281 #endif
8282 #include <sys/time.h>
8283 #endif
8284 #ifdef I_SYSSELECT
8285 #include <sys/select.h>
8286 #endif
8287 int main()
8288 {
8289         struct tm foo;
8290 #ifdef S_TIMEVAL
8291         struct timeval bar;
8292 #endif
8293 #ifdef S_TIMEZONE
8294         struct timezone tzp;
8295 #endif
8296         if (foo.tm_sec == foo.tm_sec)
8297                 exit(0);
8298 #ifdef S_TIMEVAL
8299         if (bar.tv_sec == bar.tv_sec)
8300                 exit(0);
8301 #endif
8302         exit(1);
8303 }
8304 EOCP
8305         flags=''
8306         for s_timezone in '-DS_TIMEZONE' ''; do
8307         sysselect=''
8308         for s_timeval in '-DS_TIMEVAL' ''; do
8309         for i_systimek in '' '-DSYSTIMEKERNEL'; do
8310         for i_time in '' '-DI_TIME'; do
8311         for i_systime in '-DI_SYSTIME' ''; do
8312                 case "$flags" in
8313                 '') $echo $n ".$c"
8314                         set try $i_time $i_systime $i_systimek $sysselect $s_timeval $s_timezone
8315                         if eval $compile; then
8316                                 set X $i_time $i_systime $i_systimek $sysselect $s_timeval
8317                                 shift
8318                                 flags="$*"
8319                                 echo " "
8320                                 $echo $n "Succeeded with $flags$c"
8321                         fi
8322                         ;;
8323                 esac
8324         done
8325         done
8326         done
8327         done
8328         done
8329         timeincl=''
8330         echo " "
8331         case "$flags" in
8332         *SYSTIMEKERNEL*) i_systimek="$define"
8333                 timeincl=`./findhdr sys/time.h`
8334                 echo "We'll include <sys/time.h> with KERNEL defined." >&4;;
8335         *) i_systimek="$undef";;
8336         esac
8337         case "$flags" in
8338         *I_TIME*) i_time="$define"
8339                 timeincl=`./findhdr time.h`" $timeincl"
8340                 echo "We'll include <time.h>." >&4;;
8341         *) i_time="$undef";;
8342         esac
8343         case "$flags" in
8344         *I_SYSTIME*) i_systime="$define"
8345                 timeincl=`./findhdr sys/time.h`" $timeincl"
8346                 echo "We'll include <sys/time.h>." >&4;;
8347         *) i_systime="$undef";;
8348         esac
8349         $rm -f try.c try
8350 fi
8351
8352 : check for fd_set items
8353 $cat <<EOM
8354
8355 Checking to see how well your C compiler handles fd_set and friends ...
8356 EOM
8357 $cat >fd_set.c <<EOCP
8358 #$i_systime I_SYS_TIME
8359 #$i_sysselct I_SYS_SELECT
8360 #$d_socket HAS_SOCKET
8361 #include <sys/types.h>
8362 #ifdef HAS_SOCKET
8363 #include <sys/socket.h> /* Might include <sys/bsdtypes.h> */
8364 #endif
8365 #ifdef I_SYS_TIME
8366 #include <sys/time.h>
8367 #endif
8368 #ifdef I_SYS_SELECT
8369 #include <sys/select.h>
8370 #endif
8371 int main() {
8372         fd_set fds;
8373
8374 #ifdef TRYBITS
8375         if(fds.fds_bits);
8376 #endif
8377
8378 #if defined(FD_SET) && defined(FD_CLR) && defined(FD_ISSET) && defined(FD_ZERO)
8379         exit(0);
8380 #else
8381         exit(1);
8382 #endif
8383 }
8384 EOCP
8385 set fd_set -DTRYBITS
8386 if eval $compile; then
8387         d_fds_bits="$define"
8388         d_fd_set="$define"
8389         echo "Well, your system knows about the normal fd_set typedef..." >&4
8390         if ./fd_set; then
8391                 echo "and you have the normal fd_set macros (just as I'd expect)." >&4
8392                 d_fd_macros="$define"
8393         else
8394                 $cat >&4 <<'EOM'
8395 but not the normal fd_set macros!  Gaaack!  I'll have to cover for you.
8396 EOM
8397                 d_fd_macros="$undef"
8398         fi
8399 else
8400         $cat <<'EOM'
8401 Hmm, your compiler has some difficulty with fd_set.  Checking further...
8402 EOM
8403         set fd_set
8404         if eval $compile; then
8405                 d_fds_bits="$undef"
8406                 d_fd_set="$define"
8407                 echo "Well, your system has some sort of fd_set available..." >&4
8408                 if ./fd_set; then
8409                         echo "and you have the normal fd_set macros." >&4
8410                         d_fd_macros="$define"
8411                 else
8412                         $cat <<'EOM'
8413 but not the normal fd_set macros!  Gross!  More work for me...
8414 EOM
8415                         d_fd_macros="$undef"
8416                 fi
8417         else
8418         echo "Well, you got zip.  That's OK, I can roll my own fd_set stuff." >&4
8419                 d_fd_set="$undef"
8420                 d_fds_bits="$undef"
8421                 d_fd_macros="$undef"
8422         fi
8423 fi
8424 $rm -f fd_set*
8425
8426 : see if fgetpos exists
8427 set fgetpos d_fgetpos
8428 eval $inlibc
8429
8430 : see if flock exists
8431 set flock d_flock
8432 eval $inlibc
8433
8434 : see if fork exists
8435 set fork d_fork
8436 eval $inlibc
8437
8438 : see if pathconf exists
8439 set pathconf d_pathconf
8440 eval $inlibc
8441
8442 : see if fpathconf exists
8443 set fpathconf d_fpathconf
8444 eval $inlibc
8445
8446 : define an is-a-typedef? function
8447 typedef='type=$1; var=$2; def=$3; shift; shift; shift; inclist=$@;
8448 case "$inclist" in
8449 "") inclist="sys/types.h";;
8450 esac;
8451 eval "varval=\$$var";
8452 case "$varval" in
8453 "")
8454         $rm -f temp.c;
8455         for inc in $inclist; do
8456                 echo "#include <$inc>" >>temp.c;
8457         done;
8458         echo "#ifdef $type" >> temp.c;
8459         echo "printf(\"We have $type\");" >> temp.c;
8460         echo "#endif" >> temp.c;
8461         $cppstdin $cppflags $cppminus < temp.c >temp.E 2>/dev/null;
8462         if $contains $type temp.E >/dev/null 2>&1; then
8463                 eval "$var=\$type";
8464         else
8465                 eval "$var=\$def";
8466         fi;
8467         $rm -f temp.?;;
8468 *) eval "$var=\$varval";;
8469 esac'
8470
8471 : define an is-a-typedef? function that prompts if the type is not available.
8472 typedef_ask='type=$1; var=$2; def=$3; shift; shift; shift; inclist=$@;
8473 case "$inclist" in
8474 "") inclist="sys/types.h";;
8475 esac;
8476 eval "varval=\$$var";
8477 case "$varval" in
8478 "")
8479         $rm -f temp.c;
8480         for inc in $inclist; do
8481                 echo "#include <$inc>" >>temp.c;
8482         done;
8483         echo "#ifdef $type" >> temp.c;
8484         echo "printf(\"We have $type\");" >> temp.c;
8485         echo "#endif" >> temp.c;
8486         $cppstdin $cppflags $cppminus < temp.c >temp.E 2>/dev/null;
8487         echo " " ;
8488         echo "$rp" | $sed -e "s/What is/Looking for/" -e "s/?/./";
8489         if $contains $type temp.E >/dev/null 2>&1; then
8490                 echo "$type found." >&4;
8491                 eval "$var=\$type";
8492         else
8493                 echo "$type NOT found." >&4;
8494                 dflt="$def";
8495                 . ./myread ;
8496                 eval "$var=\$ans";
8497         fi;
8498         $rm -f temp.?;;
8499 *) eval "$var=\$varval";;
8500 esac'
8501
8502 : see what type lseek is declared as in the kernel
8503 rp="What is the type used for lseek's offset on this system?"
8504 set off_t lseektype long stdio.h sys/types.h
8505 eval $typedef_ask
8506
8507 echo " "
8508 $echo $n "Checking to see how big your file offsets are...$c" >&4
8509 $cat >try.c <<EOCP
8510 #include <sys/types.h>
8511 #include <stdio.h>
8512 int main()
8513 {
8514     printf("%d\n", (int)sizeof($lseektype));
8515     return(0); 
8516 }
8517 EOCP
8518 set try
8519 if eval $compile_ok; then
8520         lseeksize=`./try`
8521         $echo " $lseeksize bytes." >&4
8522 else
8523         dflt='4'
8524         echo " "
8525         echo "(I can't seem to compile the test program.  Guessing...)"
8526         rp="What is the size of your file offsets (in bytes)?"
8527         . ./myread
8528         lseeksize="$ans"
8529 fi
8530 $rm -f try.c try
8531
8532 : see what type file positions are declared as in the library
8533 rp="What is the type for file position used by fsetpos()?"
8534 set fpos_t fpostype long stdio.h sys/types.h
8535 eval $typedef_ask
8536
8537 echo " "
8538 case "$fpostype" in
8539 *_t) zzz="$fpostype"    ;;
8540 *)   zzz="fpos_t"       ;;
8541 esac
8542 echo "Checking the size of $zzz..." >&4 
8543 cat > try.c <<EOCP
8544 #include <sys/types.h>
8545 #include <stdio.h>
8546 int main() {
8547     printf("%d\n", (int)sizeof($fpostype));
8548     exit(0);
8549 }
8550 EOCP
8551 set try
8552 if eval $compile_ok; then
8553         yyy=`./try`
8554         case "$yyy" in
8555         '')     fpossize=4
8556                 echo "(I can't execute the test program--guessing $fpossize.)" >&4
8557                 ;;
8558         *)      fpossize=$yyy
8559                 echo "Your $zzz size is $fpossize bytes."
8560                 ;;
8561         esac
8562 else
8563         fpossize=4
8564         echo "(I can't compile the test program--guessing $fpossize.)" >&4
8565 fi
8566
8567
8568
8569 : check for off64_t
8570 echo " "
8571 echo "Checking to see if your system supports off64_t..." >&4
8572 $cat >try.c <<EOCP
8573 #include <sys/types.h>
8574 #include <unistd.h>
8575 int main() { off64_t x = 7; }'
8576 EOCP
8577 set try
8578 if eval $compile; then
8579         val="$define"
8580         echo "Yes, it does."
8581 else
8582         val="$undef"
8583         echo "No, it doesn't."
8584         case "$lseeksize" in
8585         8) echo "(This is okay because your off_t is 64 bits wide.)" ;;
8586         esac
8587 fi
8588 $rm -f try.* try
8589 set d_off64_t
8590 eval $setvar
8591
8592 : check for fpos64_t
8593 echo " "
8594 echo "Checking to see if your system supports fpos64_t..." >&4
8595 $cat >try.c <<EOCP
8596 #include <sys/stdio.h>
8597 int main() { fpos64_t x x = 7; }'
8598 EOCP
8599 set try
8600 if eval $compile; then
8601         val="$define"
8602         echo "Yes, it does."
8603 else
8604         val="$undef"
8605         echo "No, it doesn't."
8606         case "$fpossize" in
8607         8) echo "(This is okay because your fpos_t is 64 bits wide.)" ;;
8608         esac
8609 fi
8610 $rm -f try.* try
8611 set d_fpos64_t
8612 eval $setvar
8613
8614 hasstruct='varname=$1; struct=$2; shift; shift;
8615 while $test $# -ge 2; do
8616         case "$1" in
8617         $define) echo "#include <$2>";;
8618         esac ;
8619     shift 2;
8620 done > try.c;
8621 echo "int main () { struct $struct foo; }" >> try.c;
8622 set try;
8623 if eval $compile; then
8624         val="$define";
8625 else
8626         val="$undef";
8627 fi;
8628 set $varname;
8629 eval $setvar;
8630 $rm -f try.c try.o'
8631
8632 : see if this is a sys/param system
8633 set sys/param.h i_sysparam
8634 eval $inhdr
8635
8636 : see if this is a sys/mount.h system
8637 set sys/mount.h i_sysmount
8638 eval $inhdr
8639
8640 : see if sys/types.h has to be included
8641 set sys/types.h i_systypes
8642 eval $inhdr
8643
8644
8645 echo " "
8646 echo "Checking to see if your system supports struct fs_data..." >&4
8647 set d_fs_data_s fs_data $i_systypes sys/types.h $i_sysparam sys/param.h $i_sysmount sys/mount.h
8648 eval $hasstruct
8649 case "$d_fs_data_s" in
8650 "$define")      echo "Yes, it does."   ;;
8651 *)              echo "No, it doesn't." ;;
8652 esac
8653
8654 : see if fseeko exists
8655 set fseeko d_fseeko
8656 eval $inlibc
8657
8658 : see if fsetpos exists
8659 set fsetpos d_fsetpos
8660 eval $inlibc
8661
8662
8663 : see if fstatfs exists
8664 set fstatfs d_fstatfs
8665 eval $inlibc
8666
8667
8668 : see if statvfs exists
8669 set statvfs d_statvfs
8670 eval $inlibc
8671
8672 : see if fstatvfs exists
8673 set fstatvfs d_fstatvfs
8674 eval $inlibc
8675
8676
8677 : see if ftello exists
8678 set ftello d_ftello
8679 eval $inlibc
8680
8681 : see if getgrent exists
8682 set getgrent d_getgrent
8683 eval $inlibc
8684
8685 : see if gethostbyaddr exists
8686 set gethostbyaddr d_gethbyaddr
8687 eval $inlibc
8688
8689 : see if gethostbyname exists
8690 set gethostbyname d_gethbyname
8691 eval $inlibc
8692
8693 : see if gethostent exists
8694 set gethostent d_gethent
8695 eval $inlibc
8696
8697 : see how we will look up host name
8698 echo " "
8699 call=''
8700 if set gethostname val -f d_gethname; eval $csym; $val; then
8701         echo 'gethostname() found.' >&4
8702         d_gethname="$define"
8703         call=gethostname
8704 fi
8705 if set uname val -f d_uname; eval $csym; $val; then
8706         if ./xenix; then
8707                 $cat <<'EOM'
8708 uname() was found, but you're running xenix, and older versions of xenix
8709 have a broken uname(). If you don't really know whether your xenix is old
8710 enough to have a broken system call, use the default answer.
8711
8712 EOM
8713                 dflt=y
8714                 case "$d_uname" in
8715                 "$define") dflt=n;;
8716                 esac
8717                 rp='Is your uname() broken?'
8718                 . ./myread
8719                 case "$ans" in
8720                 n*) d_uname="$define"; call=uname;;
8721                 esac
8722         else
8723                 echo 'uname() found.' >&4
8724                 d_uname="$define"
8725                 case "$call" in
8726                 '') call=uname ;;
8727                 esac
8728         fi
8729 fi
8730 case "$d_gethname" in
8731 '') d_gethname="$undef";;
8732 esac
8733 case "$d_uname" in
8734 '') d_uname="$undef";;
8735 esac
8736 case "$d_uname$d_gethname" in
8737 *define*)
8738         dflt=n
8739         cat <<EOM
8740  
8741 Every now and then someone has a $call() that lies about the hostname
8742 but can't be fixed for political or economic reasons.  If you wish, I can
8743 pretend $call() isn't there and maybe compute hostname at run-time
8744 thanks to the '$phostname' command.
8745
8746 EOM
8747         rp="Shall I ignore $call() from now on?"
8748         . ./myread
8749         case "$ans" in
8750         y*) d_uname="$undef" d_gethname="$undef"; $echo $n "Okay...$c";;
8751         esac;;
8752 esac
8753 case "$phostname" in
8754 '') aphostname='';;
8755 *) case "$aphostname" in
8756         /*) ;;
8757         *) set X $phostname
8758                 shift
8759                 file=$1
8760                 shift
8761                 file=`./loc $file $file $pth`
8762                 aphostname=`echo $file $*`
8763                 ;;
8764         esac
8765         ;;
8766 esac
8767 case "$d_uname$d_gethname" in
8768 *define*) ;;
8769 *)
8770         case "$phostname" in
8771         '')
8772                 echo "There will be no way for $package to get your hostname." >&4;;
8773         *)
8774         echo "I'll use 'popen("'"'$aphostname'", "r")'"' to get your hostname." >&4
8775                 ;;
8776         esac;;
8777 esac
8778 case "$d_phostname" in
8779 '') d_phostname="$undef";;
8780 esac
8781
8782 : see if this is a netdb.h system
8783 set netdb.h i_netdb
8784 eval $inhdr
8785
8786 : see if prototypes for various gethostxxx netdb.h functions are available
8787 echo " "
8788 set d_gethostprotos gethostent $i_netdb netdb.h
8789 eval $hasproto
8790
8791 : see if getlogin exists
8792 set getlogin d_getlogin
8793 eval $inlibc
8794
8795 : see if getmnt exists
8796 set getmnt d_getmnt
8797 eval $inlibc
8798
8799 : see if getmntent exists
8800 set getmntent d_getmntent
8801 eval $inlibc
8802
8803 : see if getnetbyaddr exists
8804 set getnetbyaddr d_getnbyaddr
8805 eval $inlibc
8806
8807 : see if getnetbyname exists
8808 set getnetbyname d_getnbyname
8809 eval $inlibc
8810
8811 : see if getnetent exists
8812 set getnetent d_getnent
8813 eval $inlibc
8814
8815 : see if prototypes for various getnetxxx netdb.h functions are available
8816 echo " "
8817 set d_getnetprotos getnetent $i_netdb netdb.h
8818 eval $hasproto
8819
8820
8821 : see if getprotobyname exists
8822 set getprotobyname d_getpbyname
8823 eval $inlibc
8824
8825 : see if getprotobynumber exists
8826 set getprotobynumber d_getpbynumber
8827 eval $inlibc
8828
8829 : see if getprotoent exists
8830 set getprotoent d_getpent
8831 eval $inlibc
8832
8833 : see if getpgid exists
8834 set getpgid d_getpgid
8835 eval $inlibc
8836
8837 : see if getpgrp2 exists
8838 set getpgrp2 d_getpgrp2
8839 eval $inlibc
8840
8841 : see if getppid exists
8842 set getppid d_getppid
8843 eval $inlibc
8844
8845 : see if getpriority exists
8846 set getpriority d_getprior
8847 eval $inlibc
8848
8849 : see if prototypes for various getprotoxxx netdb.h functions are available
8850 echo " "
8851 set d_getprotoprotos getprotoent $i_netdb netdb.h
8852 eval $hasproto
8853
8854 : see if getpwent exists
8855 set getpwent d_getpwent
8856 eval $inlibc
8857
8858
8859 : see if getservbyname exists
8860 set getservbyname d_getsbyname
8861 eval $inlibc
8862
8863 : see if getservbyport exists
8864 set getservbyport d_getsbyport
8865 eval $inlibc
8866
8867 : see if getservent exists
8868 set getservent d_getsent
8869 eval $inlibc
8870
8871 : see if prototypes for various getservxxx netdb.h functions are available
8872 echo " "
8873 set d_getservprotos getservent $i_netdb netdb.h
8874 eval $hasproto
8875
8876 : see if getspent exists
8877 set getspent d_getspent
8878 eval $inlibc
8879
8880 : see if getspnam exists
8881 set getspnam d_getspnam
8882 eval $inlibc
8883
8884 : see if gettimeofday or ftime exists
8885 set gettimeofday d_gettimeod
8886 eval $inlibc
8887 case "$d_gettimeod" in
8888 "$undef")
8889         set ftime d_ftime 
8890         eval $inlibc
8891         ;;
8892 *)
8893         val="$undef"; set d_ftime; eval $setvar
8894         ;;
8895 esac
8896 case "$d_gettimeod$d_ftime" in
8897 "$undef$undef")
8898         echo " "
8899         echo 'No ftime() nor gettimeofday() -- timing may be less accurate.' >&4
8900         ;;
8901 esac
8902
8903 : see if this is an grp system
8904 set grp.h i_grp
8905 eval $inhdr
8906
8907 case "$i_grp" in
8908 $define)
8909         xxx=`./findhdr grp.h`
8910         $cppstdin $cppflags $cppminus < $xxx >$$.h
8911
8912         if $contains 'gr_passwd' $$.h >/dev/null 2>&1; then
8913                 val="$define"
8914         else
8915                 val="$undef"
8916         fi
8917         set d_grpasswd
8918         eval $setvar
8919
8920         $rm -f $$.h
8921         ;;
8922 *)
8923         val="$undef";
8924         set d_grpasswd; eval $setvar
8925         ;;
8926 esac
8927
8928 : see if hasmntopt exists
8929 set hasmntopt d_hasmntopt
8930 eval $inlibc
8931
8932 : see if this is a netinet/in.h or sys/in.h system
8933 set netinet/in.h i_niin sys/in.h i_sysin
8934 eval $inhdr
8935
8936 : see if arpa/inet.h has to be included
8937 set arpa/inet.h i_arpainet
8938 eval $inhdr
8939
8940 : see if htonl --and friends-- exists
8941 val=''
8942 set htonl val
8943 eval $inlibc
8944
8945 : Maybe they are macros.
8946 case "$val" in
8947 $undef)
8948         $cat >htonl.c <<EOM
8949 #include <stdio.h>
8950 #include <sys/types.h>
8951 #$i_niin I_NETINET_IN
8952 #$i_sysin I_SYS_IN
8953 #$i_arpainet I_ARPA_INET
8954 #ifdef I_NETINET_IN
8955 #include <netinet/in.h>
8956 #endif
8957 #ifdef I_SYS_IN
8958 #include <sys/in.h>
8959 #endif
8960 #ifdef I_ARPA_INET
8961 #include <arpa/inet.h>
8962 #endif
8963 #ifdef htonl
8964 printf("Defined as a macro.");
8965 #endif
8966 EOM
8967         $cppstdin $cppflags $cppminus < htonl.c >htonl.E 2>/dev/null
8968         if $contains 'Defined as a macro' htonl.E >/dev/null 2>&1; then
8969                 val="$define"
8970                 echo "But it seems to be defined as a macro." >&4
8971         fi
8972         $rm -f htonl.?
8973         ;;
8974 esac
8975 set d_htonl
8976 eval $setvar
8977
8978 : index or strchr
8979 echo " "
8980 if set index val -f; eval $csym; $val; then
8981         if set strchr val -f d_strchr; eval $csym; $val; then
8982                 if $contains strchr "$strings" >/dev/null 2>&1 ; then
8983                         val="$define"
8984                         vali="$undef"
8985                         echo "strchr() found." >&4
8986                 else
8987                         val="$undef"
8988                         vali="$define"
8989                         echo "index() found." >&4
8990                 fi
8991         else
8992                 val="$undef"
8993                 vali="$define"
8994                 echo "index() found." >&4
8995         fi
8996 else
8997         if set strchr val -f d_strchr; eval $csym; $val; then
8998                 val="$define"
8999                 vali="$undef"
9000                 echo "strchr() found." >&4
9001         else
9002                 echo "No index() or strchr() found!" >&4
9003                 val="$undef"
9004                 vali="$undef"
9005         fi
9006 fi
9007 set d_strchr; eval $setvar
9008 val="$vali"
9009 set d_index; eval $setvar
9010
9011 : check whether inet_aton exists
9012 set inet_aton d_inetaton
9013 eval $inlibc
9014
9015 : see if inttypes.h is available
9016 : we want a real compile instead of Inhdr because some systems
9017 : have an inttypes.h which includes non-existent headers
9018 echo " "
9019 $cat >try.c <<EOCP
9020 #include <inttypes.h>
9021 int main() {
9022         static int32_t foo32 = 0x12345678;
9023 }
9024 EOCP
9025 set try
9026 if eval $compile; then
9027         echo "<inttypes.h> found." >&4
9028         val="$define"
9029 else
9030         echo "<inttypes.h> NOT found." >&4
9031         val="$undef"
9032 fi
9033 $rm -f try.c try
9034 set i_inttypes
9035 eval $setvar
9036
9037 : check for int64_t
9038 case "$use64bits" in
9039 "$define" )
9040         echo " "
9041         $echo $n "Checking to see if your system supports int64_t...$c" >&4
9042         $cat >try.c <<EOCP
9043 #include <sys/types.h>
9044 #$i_inttypes I_INTTYPES
9045 #ifdef I_INTTYPES
9046 #include <inttypes.h>
9047 #endif
9048 int main() { int64_t x = 7; }
9049 EOCP
9050         set try
9051         if eval $compile; then
9052                 val="$define"
9053                 echo " Yes, it does." >&4
9054         else
9055                 val="$undef"
9056                 echo " No, it doesn't." >&4
9057         fi
9058         $rm -f try try.*
9059         ;;
9060 *)      val="$undef"
9061         ;;
9062 esac
9063 set d_int64t
9064 eval $setvar
9065
9066
9067 : Look for isascii
9068 echo " "
9069 $cat >isascii.c <<'EOCP'
9070 #include <stdio.h>
9071 #include <ctype.h>
9072 int main() {
9073         int c = 'A';
9074         if (isascii(c))
9075                 exit(0);
9076         else
9077                 exit(1);
9078 }
9079 EOCP
9080 set isascii
9081 if eval $compile; then
9082         echo "isascii() found." >&4
9083         val="$define"
9084 else
9085         echo "isascii() NOT found." >&4
9086         val="$undef"
9087 fi
9088 set d_isascii
9089 eval $setvar
9090 $rm -f isascii*
9091
9092 : see if killpg exists
9093 set killpg d_killpg
9094 eval $inlibc
9095
9096 : see if lchown exists
9097 echo " "
9098 $cat > try.c <<'EOCP'
9099 /* System header to define __stub macros and hopefully few prototypes,
9100     which can conflict with char lchown(); below.  */
9101 #include <assert.h>
9102 /* Override any gcc2 internal prototype to avoid an error.  */
9103 /* We use char because int might match the return type of a gcc2
9104    builtin and then its argument prototype would still apply.  */
9105 char lchown();
9106 int main() {
9107     /*  The GNU C library defines this for functions which it implements
9108         to always fail with ENOSYS.  Some functions are actually named
9109         something starting with __ and the normal name is an alias.  */
9110 #if defined (__stub_lchown) || defined (__stub___lchown)
9111 choke me
9112 #else
9113 lchown();
9114 #endif
9115 ; return 0; }
9116 EOCP
9117 set try
9118 if eval $compile; then
9119     $echo "lchown() found." >&4
9120     val="$define"
9121 else
9122     $echo "lchown() NOT found." >&4
9123     val="$undef"
9124 fi
9125 set d_lchown
9126 eval $setvar
9127
9128 : See if number of significant digits in a double precision number is known
9129 echo " "
9130 $cat >ldbl_dig.c <<EOM
9131 #$i_limits I_LIMITS
9132 #$i_float I_FLOAT
9133 #ifdef I_LIMITS
9134 #include <limits.h>
9135 #endif
9136 #ifdef I_FLOAT
9137 #include <float.h>
9138 #endif
9139 #ifdef LDBL_DIG
9140 printf("Contains LDBL_DIG");
9141 #endif
9142 EOM
9143 $cppstdin $cppflags $cppminus < ldbl_dig.c >ldbl_dig.E 2>/dev/null
9144 if $contains 'LDBL_DIG' ldbl_dig.E >/dev/null 2>&1; then
9145         echo "LDBL_DIG found." >&4
9146         val="$define"
9147 else
9148         echo "LDBL_DIG NOT found." >&4
9149         val="$undef"
9150 fi
9151 $rm -f ldbl_dig.?
9152 set d_ldbl_dig
9153 eval $setvar
9154
9155 : see if link exists
9156 set link d_link
9157 eval $inlibc
9158
9159 : see if localeconv exists
9160 set localeconv d_locconv
9161 eval $inlibc
9162
9163 : see if lockf exists
9164 set lockf d_lockf
9165 eval $inlibc
9166
9167 : check for long long
9168 echo " "
9169 $echo $n "Checking to see if your system supports long long..." $c >&4
9170 echo 'int main() { long long x = 7; return 0; }' > try.c
9171 set try
9172 if eval $compile; then
9173         val="$define"
9174         echo " Yes, it does." >&4
9175 else
9176         val="$undef"
9177         echo " No, it doesn't." >&4
9178 fi
9179 $rm try.*
9180 set d_longlong
9181 eval $setvar
9182
9183 : check for length of long long
9184 case "${d_longlong}${longlongsize}" in
9185 $define)
9186         echo " "
9187         $echo $n "Checking to see how big your long longs are..." $c >&4
9188         $cat >try.c <<'EOCP'
9189 #include <stdio.h>
9190 int main()
9191 {
9192     printf("%d\n", (int)sizeof(long long));
9193     return(0);
9194 }
9195 EOCP
9196         set try
9197         if eval $compile_ok; then
9198                 longlongsize=`./try$exe_ext`
9199                 $echo " $longlongsize bytes." >&4
9200         else
9201                 dflt='8'
9202                 echo " "
9203                 echo "(I can't seem to compile the test program.  Guessing...)"
9204                 rp="What is the size of a long long (in bytes)?"
9205                 . ./myread
9206                 longlongsize="$ans"
9207         fi
9208         if $test "X$longsize" = "X$longlongsize"; then
9209                 echo "(That isn't any different from an ordinary long.)"
9210         fi      
9211         ;;
9212 esac
9213 $rm -f try.* try
9214
9215 : see if lstat exists
9216 set lstat d_lstat
9217 eval $inlibc
9218
9219 : see if mblen exists
9220 set mblen d_mblen
9221 eval $inlibc
9222
9223 : see if mbstowcs exists
9224 set mbstowcs d_mbstowcs
9225 eval $inlibc
9226
9227 : see if mbtowc exists
9228 set mbtowc d_mbtowc
9229 eval $inlibc
9230
9231 : see if memchr exists
9232 set memchr d_memchr
9233 eval $inlibc
9234
9235 : see if memcmp exists
9236 set memcmp d_memcmp
9237 eval $inlibc
9238
9239 : see if memcpy exists
9240 set memcpy d_memcpy
9241 eval $inlibc
9242
9243 : see if memmove exists
9244 set memmove d_memmove
9245 eval $inlibc
9246
9247 : see if memset exists
9248 set memset d_memset
9249 eval $inlibc
9250
9251 : see if mkdir exists
9252 set mkdir d_mkdir
9253 eval $inlibc
9254
9255 : see if mkfifo exists
9256 set mkfifo d_mkfifo
9257 eval $inlibc
9258
9259 : see if mktime exists
9260 set mktime d_mktime
9261 eval $inlibc
9262
9263 : see if msgctl exists
9264 set msgctl d_msgctl
9265 eval $inlibc
9266
9267 : see if msgget exists
9268 set msgget d_msgget
9269 eval $inlibc
9270
9271 : see if msgsnd exists
9272 set msgsnd d_msgsnd
9273 eval $inlibc
9274
9275 : see if msgrcv exists
9276 set msgrcv d_msgrcv
9277 eval $inlibc
9278
9279 : see how much of the 'msg*(2)' library is present.
9280 h_msg=true
9281 echo " "
9282 case "$d_msgctl$d_msgget$d_msgsnd$d_msgrcv" in
9283 *"$undef"*) h_msg=false;;
9284 esac
9285 case "$osname" in
9286 freebsd)
9287     case "`ipcs 2>&1`" in
9288     "SVID messages"*"not configured"*)
9289         echo "Your $osname does not have the msg*(2) configured." >&4
9290         h_msg=false
9291         val="$undef"
9292         set msgctl d_msgctl
9293         eval $setvar
9294         set msgget d_msgget
9295         eval $setvar
9296         set msgsnd d_msgsnd
9297         eval $setvar
9298         set msgrcv d_msgrcv
9299         eval $setvar
9300         ;;
9301     esac
9302     ;;
9303 esac
9304 : we could also check for sys/ipc.h ...
9305 if $h_msg && $test `./findhdr sys/msg.h`; then
9306         echo "You have the full msg*(2) library." >&4
9307         val="$define"
9308 else
9309         echo "You don't have the full msg*(2) library." >&4
9310         val="$undef"
9311 fi
9312 set d_msg
9313 eval $setvar
9314
9315 : see if nice exists
9316 set nice d_nice
9317 eval $inlibc
9318
9319 : see if POSIX threads are available
9320 set pthread.h i_pthread
9321 eval $inhdr
9322
9323
9324
9325
9326 : how to create joinable pthreads
9327 if test "X$usethreads" = "X$define" -a "X$i_pthread" = "X$define"; then
9328         echo " "
9329         echo "Checking what constant to use for creating joinable pthreads..." >&4 
9330         $cat >try.c <<'EOCP'
9331 #include <pthread.h>
9332 int main() {
9333     int detachstate = JOINABLE;
9334 }
9335 EOCP
9336         set try -DJOINABLE=PTHREAD_CREATE_JOINABLE
9337         if eval $compile; then
9338                 echo "You seem to use PTHREAD_CREATE_JOINABLE." >&4
9339                 val="$undef" # Yes, undef.
9340                 set d_old_pthread_create_joinable
9341                 eval $setvar
9342                 val=""
9343                 set old_pthread_create_joinable
9344                 eval $setvar
9345         else
9346                 set try -DJOINABLE=PTHREAD_CREATE_UNDETACHED
9347                 if eval $compile; then
9348                         echo "You seem to use PTHREAD_CREATE_UNDETACHED." >&4
9349                         val="$define"
9350                         set d_old_pthread_create_joinable
9351                         eval $setvar
9352                         val=PTHREAD_CREATE_UNDETACHED
9353                         set old_pthread_create_joinable
9354                         eval $setvar
9355                 else            
9356                         set try -DJOINABLE=__UNDETACHED
9357                         if eval $compile; then
9358                                 echo "You seem to use __UNDETACHED." >&4
9359                                 val="$define"
9360                                 set d_old_pthread_create_joinable
9361                                 eval $setvar
9362                                 val=__UNDETACHED
9363                                 set old_pthread_create_joinable
9364                                 eval $setvar
9365                         else
9366                                 echo "Egads, nothing obvious found.  Guessing that you use 0." >&4
9367                                 val="$define"
9368                                 set d_old_pthread_create_joinable
9369                                 eval $setvar
9370                                 val=0
9371                                 set old_pthread_create_joinable
9372                                 eval $setvar
9373                         fi
9374                 fi
9375         fi
9376         $rm -f try try.*
9377 else
9378     d_old_pthread_create_joinable="$undef"
9379     old_pthread_create_joinable=""
9380 fi
9381
9382 : see if pause exists
9383 set pause d_pause
9384 eval $inlibc
9385
9386 : see if pipe exists
9387 set pipe d_pipe
9388 eval $inlibc
9389
9390 : see if poll exists
9391 set poll d_poll
9392 eval $inlibc
9393
9394
9395 : see whether the various POSIXish _yields exist
9396 $cat >try.c <<EOP
9397 #include <pthread.h>
9398 #include <stdio.h>
9399 int main() {
9400 #ifdef SCHED_YIELD
9401         sched_yield();
9402 #else
9403 #ifdef PTHREAD_YIELD
9404         pthread_yield();
9405 #else
9406 #ifdef PTHREAD_YIELD_NULL
9407         pthread_yield(NULL);
9408 #endif
9409 #endif
9410 #endif
9411 }
9412 EOP
9413 : see if sched_yield exists
9414 set try -DSCHED_YIELD
9415 if eval $compile; then
9416     val="$define"
9417     sched_yield='sched_yield()'
9418 else
9419     val="$undef"
9420 fi
9421 case "$usethreads" in
9422 $define)
9423         case "$val" in
9424         $define) echo 'sched_yield() found.' >&4        ;;
9425         *)       echo 'sched_yield() NOT found.' >&4    ;;
9426         esac
9427 esac
9428 set d_sched_yield
9429 eval $setvar
9430
9431 : see if pthread_yield exists
9432 set try -DPTHREAD_YIELD
9433 if eval $compile; then
9434     val="$define"
9435     case "$sched_yield" in
9436     '') sched_yield='pthread_yield()' ;;
9437     esac
9438 else
9439     set try -DPTHREAD_YIELD_NULL
9440     if eval $compile; then
9441         val="$define"
9442         case "$sched_yield" in
9443         '') sched_yield='pthread_yield(NULL)' ;;
9444         esac
9445     else
9446         val="$undef"
9447     fi
9448 fi
9449 case "$usethreads" in
9450 $define)
9451         case "$val" in
9452         $define) echo 'pthread_yield() found.' >&4      ;;
9453         *)       echo 'pthread_yield() NOT found.' >&4  ;;
9454         esac
9455         ;;
9456 esac
9457 set d_pthread_yield
9458 eval $setvar
9459
9460 case "$sched_yield" in
9461 '') sched_yield=undef ;;
9462 esac
9463
9464 $rm -f try try.*
9465
9466 : see if this is a pwd.h system
9467 set pwd.h i_pwd
9468 eval $inhdr
9469
9470 case "$i_pwd" in
9471 $define)
9472         xxx=`./findhdr pwd.h`
9473         $cppstdin $cppflags $cppminus < $xxx >$$.h
9474
9475         if $contains 'pw_quota' $$.h >/dev/null 2>&1; then
9476                 val="$define"
9477         else
9478                 val="$undef"
9479         fi
9480         set d_pwquota
9481         eval $setvar
9482
9483         if $contains 'pw_age' $$.h >/dev/null 2>&1; then
9484                 val="$define"
9485         else
9486                 val="$undef"
9487         fi
9488         set d_pwage
9489         eval $setvar
9490
9491         if $contains 'pw_change' $$.h >/dev/null 2>&1; then
9492                 val="$define"
9493         else
9494                 val="$undef"
9495         fi
9496         set d_pwchange
9497         eval $setvar
9498
9499         if $contains 'pw_class' $$.h >/dev/null 2>&1; then
9500                 val="$define"
9501         else
9502                 val="$undef"
9503         fi
9504         set d_pwclass
9505         eval $setvar
9506
9507         if $contains 'pw_expire' $$.h >/dev/null 2>&1; then
9508                 val="$define"
9509         else
9510                 val="$undef"
9511         fi
9512         set d_pwexpire
9513         eval $setvar
9514
9515         if $contains 'pw_comment' $$.h >/dev/null 2>&1; then
9516                 val="$define"
9517         else
9518                 val="$undef"
9519         fi
9520         set d_pwcomment
9521         eval $setvar
9522
9523         if $contains 'pw_gecos' $$.h >/dev/null 2>&1; then
9524                 val="$define"
9525         else
9526                 val="$undef"
9527         fi
9528         set d_pwgecos
9529         eval $setvar
9530
9531         if $contains 'pw_passwd' $$.h >/dev/null 2>&1; then
9532                 val="$define"
9533         else
9534                 val="$undef"
9535         fi
9536         set d_pwpasswd
9537         eval $setvar
9538
9539         $rm -f $$.h
9540         ;;
9541 *)
9542         val="$undef"; 
9543         set d_pwquota; eval $setvar
9544         set d_pwage; eval $setvar
9545         set d_pwchange; eval $setvar
9546         set d_pwclass; eval $setvar
9547         set d_pwexpire; eval $setvar
9548         set d_pwcomment; eval $setvar
9549         set d_pwgecos; eval $setvar
9550         set d_pwpasswd; eval $setvar
9551         ;;
9552 esac
9553
9554
9555 echo " "
9556 echo "Checking which 64-bit integer type to use..." >&4
9557
9558 case "$intsize" in
9559 8) val=int
9560    set quadtype
9561    eval $setvar
9562    val='"unsigned int"'
9563    set uquadtype
9564    eval $setvar
9565    quadcase=1
9566    ;;
9567 *) case "$longsize" in
9568    8) val=long
9569       set quadtype
9570       eval $setvar
9571       val='"unsigned long"'
9572       set uquadtype
9573       eval $setvar
9574       quadcase=2
9575       ;;
9576    *) case "$uselonglong:$d_longlong:$longlongsize" in
9577       define:define:8)
9578         val='"long long"'
9579         set quadtype
9580         eval $setvar
9581         val='"unsigned long long"'
9582         set uquadtype
9583         eval $setvar
9584         quadcase=3
9585         ;;
9586       *) case "$d_int64t" in
9587          define)
9588            val=int64_t
9589            set quadtype
9590            eval $setvar
9591            val=uint64_t
9592            set uquadtype
9593            eval $setvar
9594            quadcase=4
9595            ;;
9596          esac
9597          ;;
9598       esac
9599       ;;
9600    esac
9601    ;;
9602 esac
9603
9604 case "$quadtype" in
9605 '')     echo "Alas, no 64-bit integer types in sight." >&4
9606         d_quad="$undef"
9607         ;;
9608 *)      echo "Using '$quadtype' for 64-bit integers." >&4
9609         d_quad="$define"
9610         ;;
9611 esac
9612
9613 : see if readdir and friends exist
9614 set readdir d_readdir
9615 eval $inlibc
9616 set seekdir d_seekdir
9617 eval $inlibc
9618 set telldir d_telldir
9619 eval $inlibc
9620 set rewinddir d_rewinddir
9621 eval $inlibc
9622
9623 : see if readlink exists
9624 set readlink d_readlink
9625 eval $inlibc
9626
9627 : see if rename exists
9628 set rename d_rename
9629 eval $inlibc
9630
9631 : see if rmdir exists
9632 set rmdir d_rmdir
9633 eval $inlibc
9634
9635 : see if memory.h is available.
9636 val=''
9637 set memory.h val
9638 eval $inhdr
9639
9640 : See if it conflicts with string.h
9641 case "$val" in
9642 $define)
9643         case "$strings" in
9644         '') ;;
9645         *)
9646                 $cppstdin $cppflags $cppminus < $strings > mem.h
9647                 if $contains 'memcpy' mem.h >/dev/null 2>&1; then
9648                         echo " "
9649                         echo "We won't be including <memory.h>."
9650                         val="$undef"
9651                 fi
9652                 $rm -f mem.h
9653                 ;;
9654         esac
9655 esac
9656 set i_memory
9657 eval $setvar
9658
9659 : can bcopy handle overlapping blocks?
9660 val="$undef"
9661 case "$d_bcopy" in
9662 "$define")
9663         echo " "
9664         echo "Checking to see if your bcopy() can do overlapping copies..." >&4
9665         $cat >try.c <<EOCP
9666 #$i_memory I_MEMORY
9667 #$i_stdlib I_STDLIB
9668 #$i_string I_STRING
9669 #$i_unistd I_UNISTD
9670 EOCP
9671         $cat >>try.c <<'EOCP'
9672 #include <stdio.h>
9673 #ifdef I_MEMORY
9674 #  include <memory.h>
9675 #endif
9676 #ifdef I_STDLIB
9677 #  include <stdlib.h>
9678 #endif
9679 #ifdef I_STRING
9680 #  include <string.h>
9681 #else
9682 #  include <strings.h>
9683 #endif
9684 #ifdef I_UNISTD
9685 #  include <unistd.h>  /* Needed for NetBSD */
9686 #endif
9687 int main()
9688 {
9689 char buf[128], abc[128];
9690 char *b;
9691 int len;
9692 int off;
9693 int align;
9694
9695 bcopy("abcdefghijklmnopqrstuvwxyz0123456789", abc, 36);
9696
9697 for (align = 7; align >= 0; align--) {
9698         for (len = 36; len; len--) {
9699                 b = buf+align;
9700                 bcopy(abc, b, len);
9701                 for (off = 1; off <= len; off++) {
9702                         bcopy(b, b+off, len);
9703                         bcopy(b+off, b, len);
9704                         if (bcmp(b, abc, len))
9705                                 exit(1);
9706                 }
9707         }
9708 }
9709 exit(0);
9710 }
9711 EOCP
9712         set try
9713         if eval $compile_ok; then
9714                 if ./try 2>/dev/null; then
9715                         echo "Yes, it can."
9716                         val="$define"
9717                 else
9718                         echo "It can't, sorry."
9719                         case "$d_memmove" in
9720                         "$define") echo "But that's Ok since you have memmove()." ;;
9721                         esac
9722                 fi
9723         else
9724                 echo "(I can't compile the test program, so we'll assume not...)"
9725                 case "$d_memmove" in
9726                 "$define") echo "But that's Ok since you have memmove()." ;;
9727                 esac
9728         fi
9729         ;;
9730 esac
9731 $rm -f try.* try core
9732 set d_safebcpy
9733 eval $setvar
9734
9735 : can memcpy handle overlapping blocks?
9736 val="$undef"
9737 case "$d_memcpy" in
9738 "$define")
9739         echo " "
9740         echo "Checking to see if your memcpy() can do overlapping copies..." >&4
9741         $cat >try.c <<EOCP
9742 #$i_memory I_MEMORY
9743 #$i_stdlib I_STDLIB
9744 #$i_string I_STRING
9745 #$i_unistd I_UNISTD
9746 EOCP
9747         $cat >>try.c <<'EOCP'
9748 #include <stdio.h>
9749 #ifdef I_MEMORY
9750 #  include <memory.h>
9751 #endif
9752 #ifdef I_STDLIB
9753 #  include <stdlib.h>
9754 #endif
9755 #ifdef I_STRING
9756 #  include <string.h>
9757 #else
9758 #  include <strings.h>
9759 #endif
9760 #ifdef I_UNISTD
9761 #  include <unistd.h>  /* Needed for NetBSD */
9762 #endif
9763 int main()
9764 {
9765 char buf[128], abc[128];
9766 char *b;
9767 int len;
9768 int off;
9769 int align;
9770
9771 /* Copy "abcde..." string to char abc[] so that gcc doesn't
9772    try to store the string in read-only memory. */
9773 memcpy(abc, "abcdefghijklmnopqrstuvwxyz0123456789", 36);
9774
9775 for (align = 7; align >= 0; align--) {
9776         for (len = 36; len; len--) {
9777                 b = buf+align;
9778                 memcpy(b, abc, len);
9779                 for (off = 1; off <= len; off++) {
9780                         memcpy(b+off, b, len);
9781                         memcpy(b, b+off, len);
9782                         if (memcmp(b, abc, len))
9783                                 exit(1);
9784                 }
9785         }
9786 }
9787 exit(0);
9788 }
9789 EOCP
9790         set try
9791         if eval $compile_ok; then
9792                 if ./try 2>/dev/null; then
9793                         echo "Yes, it can."
9794                         val="$define"
9795                 else
9796                         echo "It can't, sorry."
9797                         case "$d_memmove" in
9798                         "$define") echo "But that's Ok since you have memmove()." ;;
9799                         esac
9800                 fi
9801         else
9802                 echo "(I can't compile the test program, so we'll assume not...)"
9803                 case "$d_memmove" in
9804                 "$define") echo "But that's Ok since you have memmove()." ;;
9805                 esac
9806         fi
9807         ;;
9808 esac
9809 $rm -f try.* try core
9810 set d_safemcpy
9811 eval $setvar
9812
9813 : can memcmp be trusted to compare relative magnitude?
9814 val="$undef"
9815 case "$d_memcmp" in
9816 "$define")
9817         echo " "
9818         echo "Checking if your memcmp() can compare relative magnitude..." >&4
9819         $cat >try.c <<EOCP
9820 #$i_memory I_MEMORY
9821 #$i_stdlib I_STDLIB
9822 #$i_string I_STRING
9823 #$i_unistd I_UNISTD
9824 EOCP
9825         $cat >>try.c <<'EOCP'
9826 #include <stdio.h>
9827 #ifdef I_MEMORY
9828 #  include <memory.h>
9829 #endif
9830 #ifdef I_STDLIB
9831 #  include <stdlib.h>
9832 #endif
9833 #ifdef I_STRING
9834 #  include <string.h>
9835 #else
9836 #  include <strings.h>
9837 #endif
9838 #ifdef I_UNISTD
9839 #  include <unistd.h>  /* Needed for NetBSD */
9840 #endif
9841 int main()
9842 {
9843 char a = -1;
9844 char b = 0;
9845 if ((a < b) && memcmp(&a, &b, 1) < 0)
9846         exit(1);
9847 exit(0);
9848 }
9849 EOCP
9850         set try
9851         if eval $compile_ok; then
9852                 if ./try 2>/dev/null; then
9853                         echo "Yes, it can."
9854                         val="$define"
9855                 else
9856                         echo "No, it can't (it uses signed chars)."
9857                 fi
9858         else
9859                 echo "(I can't compile the test program, so we'll assume not...)"
9860         fi
9861         ;;
9862 esac
9863 $rm -f try.* try core
9864 set d_sanemcmp
9865 eval $setvar
9866
9867 : see if select exists
9868 set select d_select
9869 eval $inlibc
9870
9871 : see if semctl exists
9872 set semctl d_semctl
9873 eval $inlibc
9874
9875 : see if semget exists
9876 set semget d_semget
9877 eval $inlibc
9878
9879 : see if semop exists
9880 set semop d_semop
9881 eval $inlibc
9882
9883 : see how much of the 'sem*(2)' library is present.
9884 h_sem=true
9885 echo " "
9886 case "$d_semctl$d_semget$d_semop" in
9887 *"$undef"*) h_sem=false;;
9888 esac
9889 case "$osname" in
9890 freebsd)
9891     case "`ipcs 2>&1`" in
9892     "SVID messages"*"not configured"*)
9893         echo "Your $osname does not have the sem*(2) configured." >&4
9894         h_sem=false
9895         val="$undef"
9896         set semctl d_semctl
9897         eval $setvar
9898         set semget d_semget
9899         eval $setvar
9900         set semop d_semop
9901         eval $setvar
9902         ;;
9903     esac
9904     ;;
9905 esac
9906 : we could also check for sys/ipc.h ...
9907 if $h_sem && $test `./findhdr sys/sem.h`; then
9908         echo "You have the full sem*(2) library." >&4
9909         val="$define"
9910 else
9911         echo "You don't have the full sem*(2) library." >&4
9912         val="$undef"
9913 fi
9914 set d_sem
9915 eval $setvar
9916
9917 : see whether sys/sem.h defines union semun
9918 echo " "
9919 $cat > try.c <<'END'
9920 #include <sys/types.h>
9921 #include <sys/ipc.h>
9922 #include <sys/sem.h>
9923 int main () { union semun semun; semun.buf = 0; }
9924 END
9925 set try
9926 if eval $compile; then
9927     echo "You have union semun in <sys/sem.h>." >&4
9928     val="$define"
9929 else
9930     echo "You do not have union semun in <sys/sem.h>." >&4
9931     val="$undef"
9932 fi
9933 $rm -f try try.c try.h
9934 set d_union_semun
9935 eval $setvar
9936
9937 : see how to do semctl IPC_STAT
9938 case "$d_sem" in
9939 $define)
9940     : see whether semctl IPC_STAT can use union semun
9941     echo " "
9942     $cat > try.h <<END
9943 #ifndef S_IRUSR
9944 #   ifdef S_IREAD
9945 #       define S_IRUSR S_IREAD
9946 #       define S_IWUSR S_IWRITE
9947 #       define S_IXUSR S_IEXEC
9948 #   else
9949 #       define S_IRUSR 0400
9950 #       define S_IWUSR 0200
9951 #       define S_IXUSR 0100
9952 #   endif
9953 #   define S_IRGRP (S_IRUSR>>3)
9954 #   define S_IWGRP (S_IWUSR>>3)
9955 #   define S_IXGRP (S_IXUSR>>3)
9956 #   define S_IROTH (S_IRUSR>>6)
9957 #   define S_IWOTH (S_IWUSR>>6)
9958 #   define S_IXOTH (S_IXUSR>>6)
9959 #endif
9960 #ifndef S_IRWXU
9961 #   define S_IRWXU (S_IRUSR|S_IWUSR|S_IXUSR)
9962 #   define S_IRWXG (S_IRGRP|S_IWGRP|S_IXGRP)
9963 #   define S_IRWXO (S_IROTH|S_IWOTH|S_IXOTH)
9964 #endif
9965 END
9966
9967     $cat > try.c <<END
9968 #include <sys/types.h>
9969 #include <sys/ipc.h>
9970 #include <sys/sem.h>
9971 #include <sys/stat.h>
9972 #include <stdio.h>
9973 #include <errno.h>
9974 #include "try.h"
9975 #ifndef errno
9976 extern int errno;
9977 #endif
9978 #$d_union_semun HAS_UNION_SEMUN
9979 int main() {
9980     union semun
9981 #ifndef HAS_UNION_SEMUN
9982     {
9983         int val;
9984         struct semid_ds *buf;
9985         unsigned short *array;
9986     }
9987 #endif
9988     arg;
9989     int sem, st;
9990
9991 #if defined(IPC_PRIVATE) && defined(S_IRWXU) && defined(S_IRWXG) && defined(S_IRWXO) && defined(IPC_CREAT)
9992     sem = semget(IPC_PRIVATE, 1, S_IRWXU|S_IRWXG|S_IRWXO|IPC_CREAT);
9993     if (sem > -1) {
9994         struct semid_ds argbuf;
9995         arg.buf = &argbuf;
9996 #       ifdef IPC_STAT
9997         st = semctl(sem, 0, IPC_STAT, arg);
9998         if (st == 0)
9999             printf("semun\n");
10000         else
10001 #       endif /* IPC_STAT */
10002             printf("semctl IPC_STAT failed: errno = %d\n", errno);
10003 #       ifdef IPC_RMID
10004         if (semctl(sem, 0, IPC_RMID, arg) != 0)
10005 #       endif /* IPC_RMID */
10006             printf("semctl IPC_RMID failed: errno = %d\n", errno);
10007     } else
10008 #endif /* IPC_PRIVATE && ... */
10009         printf("semget failed: errno = %d\n", errno);
10010   return 0;
10011 }
10012 END
10013     val="$undef"
10014     set try
10015     if eval $compile; then
10016         xxx=`./try`
10017         case "$xxx" in
10018         semun) val="$define" ;;
10019         esac
10020     fi
10021     $rm -f try try.c
10022     set d_semctl_semun
10023     eval $setvar
10024     case "$d_semctl_semun" in
10025     $define)
10026         echo "You can use union semun for semctl IPC_STAT." >&4
10027         also='also'
10028         ;;
10029     *)  echo "You cannot use union semun for semctl IPC_STAT." >&4
10030         also=''
10031         ;;
10032     esac
10033
10034     : see whether semctl IPC_STAT can use struct semid_ds pointer
10035     $cat > try.c <<'END'
10036 #include <sys/types.h>
10037 #include <sys/ipc.h>
10038 #include <sys/sem.h>
10039 #include <sys/stat.h>
10040 #include "try.h"
10041 #include <stdio.h>
10042 #include <errno.h>
10043 #ifndef errno
10044 extern int errno;
10045 #endif
10046 int main() {
10047     struct semid_ds arg;
10048     int sem, st;
10049
10050 #if defined(IPC_PRIVATE) && defined(S_IRWXU) && defined(S_IRWXG) &&  defined(S_IRWXO) && defined(IPC_CREAT)
10051     sem = semget(IPC_PRIVATE, 1, S_IRWXU|S_IRWXG|S_IRWXO|IPC_CREAT);
10052     if (sem > -1) {
10053 #       ifdef IPC_STAT
10054         st = semctl(sem, 0, IPC_STAT, &arg);
10055         if (st == 0)
10056             printf("semid_ds\n");
10057         else
10058 #       endif /* IPC_STAT */
10059             printf("semctl IPC_STAT failed: errno = %d\n", errno);
10060 #       ifdef IPC_RMID
10061         if (semctl(sem, 0, IPC_RMID, &arg) != 0)
10062 #       endif /* IPC_RMID */
10063             printf("semctl IPC_RMID failed: errno = %d\n", errno);
10064     } else
10065 #endif /* IPC_PRIVATE && ... */
10066         printf("semget failed: errno = %d\n", errno);
10067
10068     return 0;
10069 }
10070 END
10071     val="$undef"
10072     set try
10073     if eval $compile; then
10074         xxx=`./try`
10075         case "$xxx" in
10076         semid_ds) val="$define" ;;
10077         esac
10078     fi
10079     $rm -f try try.c
10080     set d_semctl_semid_ds
10081     eval $setvar
10082     case "$d_semctl_semid_ds" in
10083     $define)
10084         echo "You can $also use struct semid_ds* for semctl IPC_STAT." >&4
10085         ;;
10086     *)  echo "You cannot use struct semid_ds* for semctl IPC_STAT." >&4
10087         ;;
10088     esac
10089     $rm -f try.h
10090     ;;
10091 *)  val="$undef"
10092
10093     # We do not have the full sem*(2) library, so assume we can not
10094     # use either.
10095
10096     set d_semctl_semun
10097     eval $setvar
10098
10099     set d_semctl_semid_ds
10100     eval $setvar
10101     ;;
10102 esac
10103
10104 : see if setegid exists
10105 set setegid d_setegid
10106 eval $inlibc
10107
10108 : see if seteuid exists
10109 set seteuid d_seteuid
10110 eval $inlibc
10111
10112 : see if setgrent exists
10113 set setgrent d_setgrent
10114 eval $inlibc
10115
10116 : see if sethostent exists
10117 set sethostent d_sethent
10118 eval $inlibc
10119
10120 : see if setlinebuf exists
10121 set setlinebuf d_setlinebuf
10122 eval $inlibc
10123
10124 : see if setlocale exists
10125 set setlocale d_setlocale
10126 eval $inlibc
10127
10128 : see if setnetent exists
10129 set setnetent d_setnent
10130 eval $inlibc
10131
10132 : see if setprotoent exists
10133 set setprotoent d_setpent
10134 eval $inlibc
10135
10136 : see if setpgid exists
10137 set setpgid d_setpgid
10138 eval $inlibc
10139
10140 : see if setpgrp2 exists
10141 set setpgrp2 d_setpgrp2
10142 eval $inlibc
10143
10144 : see if setpriority exists
10145 set setpriority d_setprior
10146 eval $inlibc
10147
10148 : see if setpwent exists
10149 set setpwent d_setpwent
10150 eval $inlibc
10151
10152 : see if setregid exists
10153 set setregid d_setregid
10154 eval $inlibc
10155 set setresgid d_setresgid
10156 eval $inlibc
10157
10158 : see if setreuid exists
10159 set setreuid d_setreuid
10160 eval $inlibc
10161 set setresuid d_setresuid
10162 eval $inlibc
10163
10164 : see if setrgid exists
10165 set setrgid d_setrgid
10166 eval $inlibc
10167
10168 : see if setruid exists
10169 set setruid d_setruid
10170 eval $inlibc
10171
10172 : see if setservent exists
10173 set setservent d_setsent
10174 eval $inlibc
10175
10176 : see if setsid exists
10177 set setsid d_setsid
10178 eval $inlibc
10179
10180 : see if setspent exists
10181 set setspent d_setspent
10182 eval $inlibc
10183
10184 : see if setvbuf exists
10185 set setvbuf d_setvbuf
10186 eval $inlibc
10187
10188 : see if sfio.h is available
10189 set sfio.h i_sfio
10190 eval $inhdr
10191
10192
10193 : see if sfio library is available
10194 case "$i_sfio" in
10195 $define)
10196         val=''
10197         set sfreserve val
10198         eval $inlibc
10199         ;;
10200 *)
10201         val="$undef"
10202         ;;
10203 esac
10204 : Ok, but do we want to use it.
10205 case "$val" in
10206 $define)
10207         case "$usesfio" in
10208         true|$define|[yY]*) dflt='y';;
10209         *) dflt='n';;
10210         esac
10211         echo "$package can use the sfio library, but it is experimental."
10212         rp="You seem to have sfio available, do you want to try using it?"
10213         . ./myread
10214         case "$ans" in
10215         y|Y) ;;
10216         *)      echo "Ok, avoiding sfio this time.  I'll use stdio instead."
10217                 val="$undef"
10218                 : Remove sfio from list of libraries to use
10219                 set `echo X $libs | $sed -e 's/-lsfio / /' -e 's/-lsfio$//'`
10220                 shift
10221                 libs="$*"
10222                 echo "libs = $libs" >&4
10223                 ;;
10224         esac
10225         ;;
10226 *)      case "$usesfio" in
10227         true|$define|[yY]*)
10228                 echo "Sorry, cannot find sfio on this machine" >&4
10229                 echo "Ignoring your setting of usesfio=$usesfio" >&4
10230                 ;;
10231         esac
10232         ;;
10233 esac
10234 set d_sfio
10235 eval $setvar
10236 case "$d_sfio" in
10237 $define) usesfio='true';;
10238 *) usesfio='false';;
10239 esac
10240
10241 : see if shmctl exists
10242 set shmctl d_shmctl
10243 eval $inlibc
10244
10245 : see if shmget exists
10246 set shmget d_shmget
10247 eval $inlibc
10248
10249 : see if shmat exists
10250 set shmat d_shmat
10251 eval $inlibc
10252 : see what shmat returns
10253 case "$d_shmat" in
10254 "$define")
10255         $cat >shmat.c <<'END'
10256 #include <sys/shm.h>
10257 void *shmat();
10258 END
10259         if $cc $ccflags -c shmat.c >/dev/null 2>&1; then
10260                 shmattype='void *'
10261         else
10262                 shmattype='char *'
10263         fi
10264         echo "and it returns ($shmattype)." >&4
10265         : see if a prototype for shmat is available
10266         xxx=`./findhdr sys/shm.h`
10267         $cppstdin $cppflags $cppminus < $xxx > shmat.c 2>/dev/null
10268         if $contains 'shmat.*(' shmat.c >/dev/null 2>&1; then
10269                 val="$define"
10270         else
10271                 val="$undef"
10272         fi
10273         $rm -f shmat.[co]
10274         ;;
10275 *)
10276         val="$undef"
10277         ;;
10278 esac
10279 set d_shmatprototype
10280 eval $setvar
10281
10282 : see if shmdt exists
10283 set shmdt d_shmdt
10284 eval $inlibc
10285
10286 : see how much of the 'shm*(2)' library is present.
10287 h_shm=true
10288 echo " "
10289 case "$d_shmctl$d_shmget$d_shmat$d_shmdt" in
10290 *"$undef"*) h_shm=false;;
10291 esac
10292 case "$osname" in
10293 freebsd)
10294     case "`ipcs 2>&1`" in
10295     "SVID shared memory"*"not configured"*)
10296         echo "Your $osname does not have the shm*(2) configured." >&4
10297         h_shm=false
10298         val="$undef"
10299         set shmctl d_shmctl
10300         evat $setvar
10301         set shmget d_shmget
10302         evat $setvar
10303         set shmat d_shmat
10304         evat $setvar
10305         set shmdt d_shmdt
10306         evat $setvar
10307         ;;
10308     esac
10309     ;;
10310 esac
10311 : we could also check for sys/ipc.h ...
10312 if $h_shm && $test `./findhdr sys/shm.h`; then
10313         echo "You have the full shm*(2) library." >&4
10314         val="$define"
10315 else
10316         echo "You don't have the full shm*(2) library." >&4
10317         val="$undef"
10318 fi
10319 set d_shm
10320 eval $setvar
10321
10322 echo " "
10323 : see if we have sigaction
10324 if set sigaction val -f d_sigaction; eval $csym; $val; then
10325         echo 'sigaction() found.' >&4
10326         $cat > try.c <<'EOP'
10327 #include <stdio.h>
10328 #include <sys/types.h>
10329 #include <signal.h>
10330 int main()
10331 {
10332     struct sigaction act, oact;
10333     act.sa_flags = 0;
10334     oact.sa_handler = 0;
10335     /* so that act and oact are used */
10336     exit(act.sa_flags == 0 &&  oact.sa_handler == 0);
10337 }
10338 EOP
10339         set try
10340         if eval $compile_ok; then
10341                 val="$define"
10342         else
10343                 echo "But you don't seem to have a useable struct sigaction." >&4
10344                 val="$undef"
10345         fi
10346 else
10347         echo 'sigaction NOT found.' >&4
10348         val="$undef"
10349 fi
10350 set d_sigaction; eval $setvar
10351 $rm -f try try$_o try.c
10352
10353 : see if sigsetjmp exists
10354 echo " "
10355 case "$d_sigsetjmp" in
10356 '')
10357         $cat >try.c <<'EOP'
10358 #include <setjmp.h>
10359 sigjmp_buf env;
10360 int set = 1;
10361 int main()
10362 {
10363         if (sigsetjmp(env,1))
10364                 exit(set);
10365         set = 0;
10366         siglongjmp(env, 1);
10367         exit(1);
10368 }
10369 EOP
10370         set try
10371         if eval $compile; then
10372                 if ./try >/dev/null 2>&1; then
10373                         echo "POSIX sigsetjmp found." >&4
10374                         val="$define"
10375                 else
10376                         $cat >&4 <<EOM
10377 Uh-Oh! You have POSIX sigsetjmp and siglongjmp, but they do not work properly!!
10378 I'll ignore them.
10379 EOM
10380                         val="$undef"
10381                 fi
10382         else
10383                 echo "sigsetjmp not found." >&4
10384                 val="$undef"
10385         fi
10386         ;;
10387 *) val="$d_sigsetjmp"
10388         case "$d_sigsetjmp" in
10389         $define) echo "POSIX sigsetjmp found." >&4;;
10390         $undef) echo "sigsetjmp not found." >&4;;
10391         esac
10392         ;;
10393 esac
10394 set d_sigsetjmp
10395 eval $setvar
10396 $rm -f try.c try
10397
10398 : see if sqrtl exists
10399 set sqrtl d_sqrtl
10400 eval $inlibc
10401
10402 : see if sys/stat.h is available
10403 set sys/stat.h i_sysstat
10404 eval $inhdr
10405
10406
10407 : see if stat knows about block sizes
10408 echo " "
10409 echo "Checking to see if your struct stat has st_blocks field..." >&4
10410 set d_statblks stat st_blocks $i_sysstat sys/stat.h
10411 eval $hasfield
10412
10413
10414 : see if this is a sys/vfs.h system
10415 set sys/vfs.h i_sysvfs
10416 eval $inhdr
10417
10418
10419 : see if this is a sys/statfs.h system
10420 set sys/statfs.h i_sysstatfs
10421 eval $inhdr
10422
10423
10424 echo " "
10425 echo "Checking to see if your system supports struct statfs..." >&4
10426 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
10427 eval $hasstruct
10428 case "$d_statfs_s" in
10429 "$define")      echo "Yes, it does."   ;;
10430 *)              echo "No, it doesn't." ;;
10431 esac
10432
10433
10434
10435 : see if struct statfs knows about f_flags
10436 case "$d_statfs_s" in
10437 define) 
10438         echo " "
10439         echo "Checking to see if your struct statfs has f_flags field..." >&4
10440         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
10441         eval $hasfield
10442         ;;
10443 *)      val="$undef"
10444         set d_statfs_f_flags
10445         eval $setvar
10446         ;;
10447 esac
10448 case "$d_statfs_f_flags" in
10449 "$define")      echo "Yes, it does."   ;;
10450 *)              echo "No, it doesn't." ;;
10451 esac
10452
10453 : see if _ptr and _cnt from stdio act std
10454 echo " "
10455 if $contains '_IO_fpos_t' `./findhdr stdio.h` `./findhdr libio.h` >/dev/null 2>&1 ; then
10456         echo "(Looks like you have stdio.h from Linux.)"
10457         case "$stdio_ptr" in
10458         '') stdio_ptr='((fp)->_IO_read_ptr)'
10459                 ptr_lval=$define
10460                 ;;
10461         *)      ptr_lval=$d_stdio_ptr_lval;;
10462         esac
10463         case "$stdio_cnt" in
10464         '') stdio_cnt='((fp)->_IO_read_end - (fp)->_IO_read_ptr)'
10465                 cnt_lval=$undef
10466                 ;;
10467         *)      cnt_lval=$d_stdio_cnt_lval;;
10468         esac
10469         case "$stdio_base" in
10470         '') stdio_base='((fp)->_IO_read_base)';;
10471         esac
10472         case "$stdio_bufsiz" in
10473         '') stdio_bufsiz='((fp)->_IO_read_end - (fp)->_IO_read_base)';;
10474         esac
10475 else
10476         case "$stdio_ptr" in
10477         '') stdio_ptr='((fp)->_ptr)'
10478                 ptr_lval=$define
10479                 ;;
10480         *)      ptr_lval=$d_stdio_ptr_lval;;
10481         esac
10482         case "$stdio_cnt" in
10483         '') stdio_cnt='((fp)->_cnt)'
10484                 cnt_lval=$define
10485                 ;;
10486         *)      cnt_lval=$d_stdio_cnt_lval;;
10487         esac
10488         case "$stdio_base" in
10489         '') stdio_base='((fp)->_base)';;
10490         esac
10491         case "$stdio_bufsiz" in
10492         '') stdio_bufsiz='((fp)->_cnt + (fp)->_ptr - (fp)->_base)';;
10493         esac
10494 fi
10495 : test whether _ptr and _cnt really work
10496 echo "Checking how std your stdio is..." >&4
10497 $cat >try.c <<EOP
10498 #include <stdio.h>
10499 #define FILE_ptr(fp)    $stdio_ptr
10500 #define FILE_cnt(fp)    $stdio_cnt
10501 int main() {
10502         FILE *fp = fopen("try.c", "r");
10503         char c = getc(fp);
10504         if (
10505                 18 <= FILE_cnt(fp) &&
10506                 strncmp(FILE_ptr(fp), "include <stdio.h>\n", 18) == 0
10507         )
10508                 exit(0);
10509         exit(1);
10510 }
10511 EOP
10512 val="$undef"
10513 set try
10514 if eval $compile; then
10515         if ./try; then
10516                 echo "Your stdio acts pretty std."
10517                 val="$define"
10518         else
10519                 echo "Your stdio isn't very std."
10520         fi
10521 else
10522         echo "Your stdio doesn't appear very std."
10523 fi
10524 $rm -f try.c try
10525 set d_stdstdio
10526 eval $setvar
10527
10528 : Can _ptr be used as an lvalue?
10529 case "$d_stdstdio$ptr_lval" in
10530 $define$define) val=$define ;;
10531 *) val=$undef ;;
10532 esac
10533 set d_stdio_ptr_lval
10534 eval $setvar
10535
10536 : Can _cnt be used as an lvalue?
10537 case "$d_stdstdio$cnt_lval" in
10538 $define$define) val=$define ;;
10539 *) val=$undef ;;
10540 esac
10541 set d_stdio_cnt_lval
10542 eval $setvar
10543
10544 : see if _base is also standard
10545 val="$undef"
10546 case "$d_stdstdio" in
10547 $define)
10548         $cat >try.c <<EOP
10549 #include <stdio.h>
10550 #define FILE_base(fp)   $stdio_base
10551 #define FILE_bufsiz(fp) $stdio_bufsiz
10552 int main() {
10553         FILE *fp = fopen("try.c", "r");
10554         char c = getc(fp);
10555         if (
10556                 19 <= FILE_bufsiz(fp) &&
10557                 strncmp(FILE_base(fp), "#include <stdio.h>\n", 19) == 0
10558         )
10559                 exit(0);
10560         exit(1);
10561 }
10562 EOP
10563         set try
10564         if eval $compile; then
10565                 if ./try; then
10566                         echo "And its _base field acts std."
10567                         val="$define"
10568                 else
10569                         echo "But its _base field isn't std."
10570                 fi
10571         else
10572                 echo "However, it seems to be lacking the _base field."
10573         fi
10574         $rm -f try.c try
10575         ;;
10576 esac
10577 set d_stdiobase
10578 eval $setvar
10579
10580 $cat >&4 <<EOM
10581 Checking how to access stdio streams by file descriptor number...
10582 EOM
10583 case "$stdio_stream_array" in
10584 '')     $cat >try.c <<EOCP
10585 #include <stdio.h>
10586 int main() {
10587   if (&STDIO_STREAM_ARRAY[fileno(stdin)] == stdin)
10588     printf("yes\n");
10589 }
10590 EOCP
10591         for s in _iob __iob __sF
10592         do
10593                 set try -DSTDIO_STREAM_ARRAY=$s
10594                 if eval $compile; then
10595                         case "`./try$exe_ext`" in
10596                         yes)    stdio_stream_array=$s; break ;;
10597                         esac
10598                 fi
10599         done
10600         $rm -f try.* try$exe_ext
10601 esac
10602 case "$stdio_stream_array" in
10603 '')     $cat >&4 <<EOM
10604 I can't figure out how to access stdio streams by file descriptor number.
10605 EOM
10606         d_stdio_stream_array="$undef"
10607         ;;
10608 *)      $cat >&4 <<EOM
10609 You can access stdio streams by file descriptor number by the $stdio_stream_array array.
10610 EOM
10611         d_stdio_stream_array="$define"
10612         ;;
10613 esac
10614
10615 : see if strcoll exists
10616 set strcoll d_strcoll
10617 eval $inlibc
10618
10619 : check for structure copying
10620 echo " "
10621 echo "Checking to see if your C compiler can copy structs..." >&4
10622 $cat >try.c <<'EOCP'
10623 int main()
10624 {
10625         struct blurfl {
10626                 int dyick;
10627         } foo, bar;
10628
10629         foo = bar;
10630 }
10631 EOCP
10632 if $cc -c try.c >/dev/null 2>&1 ; then
10633         val="$define"
10634         echo "Yup, it can."
10635 else
10636         val="$undef"
10637         echo "Nope, it can't."
10638 fi
10639 set d_strctcpy
10640 eval $setvar
10641 $rm -f try.*
10642
10643 : see if strerror and/or sys_errlist[] exist
10644 echo " "
10645 if test "X$d_strerror" = X -o "X$d_syserrlst" = X; then
10646     if set strerror val -f d_strerror; eval $csym; $val; then
10647                 echo 'strerror() found.' >&4
10648                 d_strerror="$define"
10649                 d_strerrm='strerror(e)'
10650                 if set sys_errlist val -a d_syserrlst; eval $csym; $val; then   
10651                         echo "(You also have sys_errlist[], so we could roll our own strerror.)" 
10652                         d_syserrlst="$define"
10653                 else
10654                         echo "(Since you don't have sys_errlist[], sterror() is welcome.)"
10655                         d_syserrlst="$undef"
10656                 fi
10657     elif xxx=`./findhdr string.h`; test "$xxx" || xxx=`./findhdr strings.h`; \
10658                         $contains '#[   ]*define.*strerror' "$xxx" >/dev/null 2>&1; then
10659                 echo 'strerror() found in string header.' >&4
10660                 d_strerror="$define"
10661                 d_strerrm='strerror(e)'
10662                 if set sys_errlist val -a d_syserrlst; eval $csym; $val; then   
10663                         echo "(Most probably, strerror() uses sys_errlist[] for descriptions.)"
10664                                 d_syserrlst="$define"
10665                 else
10666                         echo "(You don't appear to have any sys_errlist[], how can this be?)"
10667                         d_syserrlst="$undef"
10668                 fi
10669     elif set sys_errlist val -a d_syserrlst; eval $csym; $val; then
10670                 echo "strerror() not found, but you have sys_errlist[] so we'll use that." >&4
10671                 d_strerror="$undef"
10672                 d_syserrlst="$define"
10673                 d_strerrm='((e)<0||(e)>=sys_nerr?"unknown":sys_errlist[e])'
10674     else
10675                 echo 'strerror() and sys_errlist[] NOT found.' >&4
10676                 d_strerror="$undef"
10677                 d_syserrlst="$undef"
10678                 d_strerrm='"unknown"'
10679     fi
10680 fi
10681
10682 : see if strtod exists
10683 set strtod d_strtod
10684 eval $inlibc
10685
10686 : see if strtol exists
10687 set strtol d_strtol
10688 eval $inlibc
10689
10690 : see if strtoul exists
10691 set strtoul d_strtoul
10692 eval $inlibc
10693
10694 : see if strtoull exists
10695 set strtoull d_strtoull
10696 eval $inlibc
10697
10698 : see if strxfrm exists
10699 set strxfrm d_strxfrm
10700 eval $inlibc
10701
10702 : see if symlink exists
10703 set symlink d_symlink
10704 eval $inlibc
10705
10706 : see if syscall exists
10707 set syscall d_syscall
10708 eval $inlibc
10709
10710 : see if sysconf exists
10711 set sysconf d_sysconf
10712 eval $inlibc
10713
10714 : see if system exists
10715 set system d_system
10716 eval $inlibc
10717
10718 : see if tcgetpgrp exists
10719 set tcgetpgrp d_tcgetpgrp
10720 eval $inlibc
10721
10722 : see if tcsetpgrp exists
10723 set tcsetpgrp d_tcsetpgrp
10724 eval $inlibc
10725
10726 : see if prototype for telldir is available
10727 echo " "
10728 set d_telldirproto telldir $i_systypes sys/types.h $i_dirent dirent.h
10729 eval $hasproto
10730
10731 : see if this is a sys/times.h system
10732 set sys/times.h i_systimes
10733 eval $inhdr
10734
10735 : see if times exists
10736 echo " "
10737 if set times val -f d_times; eval $csym; $val; then
10738         echo 'times() found.' >&4
10739         d_times="$define"
10740         inc=''
10741         case "$i_systimes" in
10742         "$define") inc='sys/times.h';;
10743         esac
10744         rp="What is the type returned by times() on this system?"
10745         set clock_t clocktype long stdio.h sys/types.h $inc
10746         eval $typedef_ask
10747 else
10748         echo 'times() NOT found, hope that will do.' >&4
10749         d_times="$undef"
10750         clocktype='int'
10751 fi
10752
10753 : see if truncate exists
10754 set truncate d_truncate
10755 eval $inlibc
10756
10757 : see if tzname[] exists
10758 echo " "
10759 if set tzname val -a d_tzname; eval $csym; $val; then
10760         val="$define"
10761         echo 'tzname[] found.' >&4
10762 else
10763         val="$undef"
10764         echo 'tzname[] NOT found.' >&4
10765 fi
10766 set d_tzname
10767 eval $setvar
10768
10769 : see if umask exists
10770 set umask d_umask
10771 eval $inlibc
10772
10773 : see if ustat exists
10774 set ustat d_ustat
10775 eval $inlibc
10776
10777 : backward compatibility for d_hvfork
10778 if test X$d_hvfork != X; then
10779         d_vfork="$d_hvfork"
10780         d_hvfork=''
10781 fi
10782 : see if there is a vfork
10783 val=''
10784 set vfork val
10785 eval $inlibc
10786
10787 : Ok, but do we want to use it. vfork is reportedly unreliable in 
10788 : perl on Solaris 2.x, and probably elsewhere.
10789 case "$val" in
10790 $define)
10791         echo " "
10792         case "$usevfork" in
10793         false) dflt='n';;
10794         *) dflt='y';;
10795         esac
10796         cat <<'EOM'
10797  
10798 Perl can only use a vfork() that doesn't suffer from strict
10799 restrictions on calling functions or modifying global data in
10800 the child.  For example, glibc-2.1 contains such a vfork()
10801 that is unsuitable.  If your system provides a proper fork()
10802 call, chances are that you do NOT want perl to use vfork().
10803
10804 EOM
10805         rp="Do you still want to use vfork()?"
10806         . ./myread
10807         case "$ans" in
10808         y|Y) ;;
10809         *)
10810                 echo "Ok, we won't use vfork()."
10811                 val="$undef"
10812                 ;;
10813         esac
10814         ;;
10815 esac
10816 set d_vfork
10817 eval $setvar
10818 case "$d_vfork" in
10819 $define) usevfork='true';;
10820 *) usevfork='false';;
10821 esac
10822
10823 : see if this is an sysdir system
10824 set sys/dir.h i_sysdir
10825 eval $inhdr
10826
10827 : see if this is an sysndir system
10828 set sys/ndir.h i_sysndir
10829 eval $inhdr
10830
10831 : see if closedir exists
10832 set closedir d_closedir
10833 eval $inlibc
10834
10835 case "$d_closedir" in
10836 "$define")
10837         echo " "
10838         echo "Checking whether closedir() returns a status..." >&4
10839         cat > closedir.c <<EOM
10840 #$i_dirent I_DIRENT             /**/
10841 #$i_sysdir I_SYS_DIR            /**/
10842 #$i_sysndir I_SYS_NDIR          /**/
10843 #$i_systypes I_SYS_TYPES        /**/
10844
10845 #if defined(I_SYS_TYPES)
10846 #include <sys/types.h>
10847 #endif
10848 #if defined(I_DIRENT)
10849 #include <dirent.h>
10850 #if defined(NeXT) && defined(I_SYS_DIR) /* NeXT needs dirent + sys/dir.h */
10851 #include <sys/dir.h>
10852 #endif
10853 #else
10854 #ifdef I_SYS_NDIR
10855 #include <sys/ndir.h>
10856 #else
10857 #ifdef I_SYS_DIR
10858 #ifdef hp9000s500
10859 #include <ndir.h>       /* may be wrong in the future */
10860 #else
10861 #include <sys/dir.h>
10862 #endif
10863 #endif
10864 #endif
10865 #endif 
10866 int main() { return closedir(opendir(".")); }
10867 EOM
10868         set closedir
10869         if eval $compile_ok; then
10870                 if ./closedir > /dev/null 2>&1 ; then
10871                         echo "Yes, it does."
10872                         val="$undef"
10873                 else
10874                         echo "No, it doesn't."
10875                         val="$define"
10876                 fi
10877         else
10878                 echo "(I can't seem to compile the test program--assuming it doesn't)"
10879                 val="$define"
10880         fi
10881         ;;
10882 *)
10883         val="$undef";
10884         ;;
10885 esac
10886 set d_void_closedir
10887 eval $setvar
10888 $rm -f closedir*
10889 : check for volatile keyword
10890 echo " "
10891 echo 'Checking to see if your C compiler knows about "volatile"...' >&4
10892 $cat >try.c <<'EOCP'
10893 int main()
10894 {
10895         typedef struct _goo_struct goo_struct;
10896         goo_struct * volatile goo = ((goo_struct *)0);
10897         struct _goo_struct {
10898                 long long_int;
10899                 int reg_int;
10900                 char char_var;
10901         };
10902         typedef unsigned short foo_t;
10903         char *volatile foo;
10904         volatile int bar;
10905         volatile foo_t blech;
10906         foo = foo;
10907 }
10908 EOCP
10909 if $cc -c $ccflags try.c >/dev/null 2>&1 ; then
10910         val="$define"
10911         echo "Yup, it does."
10912 else
10913         val="$undef"
10914         echo "Nope, it doesn't."
10915 fi
10916 set d_volatile
10917 eval $setvar
10918 $rm -f try.*
10919
10920 : see if there is a wait4
10921 set wait4 d_wait4
10922 eval $inlibc
10923
10924 : see if waitpid exists
10925 set waitpid d_waitpid
10926 eval $inlibc
10927
10928 : see if wcstombs exists
10929 set wcstombs d_wcstombs
10930 eval $inlibc
10931
10932 : see if wctomb exists
10933 set wctomb d_wctomb
10934 eval $inlibc
10935
10936 : preserve RCS keywords in files with variable substitution, grrr
10937 Date='$Date'
10938 Id='$Id'
10939 Log='$Log'
10940 RCSfile='$RCSfile'
10941 Revision='$Revision'
10942
10943 case "$crosscompile" in
10944 ''|[nN]*) crosscompile="$undef" ;;
10945 esac
10946
10947 case "$osname" in
10948 next|rhapsody) multiarch="$define" ;;
10949 esac
10950 case "$multiarch" in
10951 ''|[nN]*) multiarch="$undef" ;;
10952 esac
10953
10954 : check for alignment requirements
10955 echo " "
10956 case "$crosscompile$multiarch" in
10957 *$define*)
10958         $cat <<EOM
10959 You seem to be either cross-compiling or doing a multiarchitecture build,
10960 skipping the memory alignment check.
10961
10962 EOM
10963         case "$alignbytes" in
10964         '') alignbytes=8 ;;
10965         esac
10966         ;;
10967 *)
10968         case "$alignbytes" in
10969         '') echo "Checking alignment constraints..." >&4
10970                 $cat >try.c <<'EOCP'
10971 #include <stdio.h>
10972 struct foobar {
10973         char foo;
10974         double bar;
10975 } try_algn;
10976 int main()
10977 {
10978     printf("%d\n", (int)((char *)&try_algn.bar - (char *)&try_algn.foo));
10979     return(0);
10980 }
10981 EOCP
10982                 set try
10983                 if eval $compile_ok; then
10984                         dflt=`./try`
10985                 else
10986                         dflt='8'
10987                         echo "(I can't seem to compile the test program...)"
10988                 fi
10989                 ;;
10990         *) dflt="$alignbytes"
10991                 ;;
10992         esac
10993         rp="Doubles must be aligned on a how-many-byte boundary?"
10994         . ./myread
10995         alignbytes="$ans"
10996         $rm -f try.c try
10997         ;;
10998 esac
10999
11000
11001 : check for ordering of bytes in a long
11002 echo " "
11003 case "$crosscompile$multiarch" in
11004 *$define*)
11005         $cat <<EOM
11006 You seem to be either cross-compiling or doing a multiarchitecture build,
11007 skipping the byteorder check.
11008
11009 EOM
11010         byteorder='0xffff'
11011         ;;
11012 *)
11013         case "$byteorder" in
11014         '')
11015                 $cat <<'EOM'
11016 In the following, larger digits indicate more significance.  A big-endian
11017 machine like a Pyramid or a Motorola 680?0 chip will come out to 4321. A
11018 little-endian machine like a Vax or an Intel 80?86 chip would be 1234. Other
11019 machines may have weird orders like 3412.  A Cray will report 87654321,
11020 an Alpha will report 12345678. If the test program works the default is
11021 probably right.
11022 I'm now running the test program...
11023 EOM
11024                 $cat >try.c <<'EOCP'
11025 #include <stdio.h>
11026 int main()
11027 {
11028         int i;
11029         union {
11030                 unsigned long l;
11031                 char c[sizeof(long)];
11032         } u;
11033
11034         if (sizeof(long) > 4)
11035                 u.l = (0x08070605L << 32) | 0x04030201L;
11036         else
11037                 u.l = 0x04030201L;
11038         for (i = 0; i < sizeof(long); i++)
11039                 printf("%c", u.c[i]+'0');
11040         printf("\n");
11041         exit(0);
11042 }
11043 EOCP
11044                 xxx_prompt=y
11045                 set try
11046                 if eval $compile && ./try > /dev/null; then
11047                         dflt=`./try`
11048                         case "$dflt" in
11049                         [1-4][1-4][1-4][1-4]|12345678|87654321)
11050                                 echo "(The test program ran ok.)"
11051                                 echo "byteorder=$dflt"
11052                                 xxx_prompt=n
11053                         ;;
11054                         ????|????????) echo "(The test program ran ok.)" ;;
11055                         *) echo "(The test program didn't run right for some reason.)" ;;
11056                         esac
11057                 else
11058                         dflt='4321'
11059                         cat <<'EOM'
11060 (I can't seem to compile the test program.  Guessing big-endian...)
11061 EOM
11062                 fi
11063                 case "$xxx_prompt" in
11064                 y)
11065                         rp="What is the order of bytes in a long?"
11066                         . ./myread
11067                         byteorder="$ans"
11068                         ;;
11069                 *)      byteorder=$dflt
11070                         ;;
11071                 esac
11072                 ;;
11073         esac
11074         $rm -f try.c try
11075         ;;
11076 esac
11077
11078
11079 : how do we catenate cpp tokens here?
11080 echo " "
11081 echo "Checking to see how your cpp does stuff like catenate tokens..." >&4
11082 $cat >cpp_stuff.c <<'EOCP'
11083 #define RCAT(a,b)a/**/b
11084 #define ACAT(a,b)a ## b
11085 RCAT(Rei,ser)
11086 ACAT(Cir,cus)
11087 EOCP
11088 $cppstdin $cppflags $cppminus <cpp_stuff.c >cpp_stuff.out 2>&1
11089 if $contains 'Circus' cpp_stuff.out >/dev/null 2>&1; then
11090         echo "Oh!  Smells like ANSI's been here." >&4
11091         echo "We can catify or stringify, separately or together!"
11092         cpp_stuff=42
11093 elif $contains 'Reiser' cpp_stuff.out >/dev/null 2>&1; then
11094         echo "Ah, yes!  The good old days!" >&4
11095         echo "However, in the good old days we don't know how to stringify and"
11096         echo "catify at the same time."
11097         cpp_stuff=1
11098 else
11099         $cat >&4 <<EOM
11100 Hmm, I don't seem to be able to catenate tokens with your cpp.  You're going
11101 to have to edit the values of CAT[2-5] in config.h...
11102 EOM
11103         cpp_stuff="/* Help! How do we handle cpp_stuff? */*/"
11104 fi
11105 $rm -f cpp_stuff.*
11106
11107 : see if this is a db.h system
11108 set db.h i_db
11109 eval $inhdr
11110
11111 case "$i_db" in
11112 $define)
11113         : Check db version.
11114         echo " "
11115         echo "Checking Berkeley DB version ..." >&4
11116         $cat >try.c <<EOCP
11117 #$d_const HASCONST
11118 #ifndef HASCONST
11119 #define const
11120 #endif
11121 #include <sys/types.h>
11122 #include <stdio.h>
11123 #include <db.h>
11124 int main()
11125 {
11126 #ifdef DB_VERSION_MAJOR /* DB version >= 2 */
11127     int Major, Minor, Patch ;
11128     unsigned long Version ;
11129     (void)db_version(&Major, &Minor, &Patch) ;
11130     printf("You have Berkeley DB Version 2 or greater\n");
11131
11132     printf("db.h is from Berkeley DB Version %d.%d.%d\n",
11133                 DB_VERSION_MAJOR, DB_VERSION_MINOR, DB_VERSION_PATCH);
11134     printf("libdb is from Berkeley DB Version %d.%d.%d\n",
11135                 Major, Minor, Patch) ;
11136
11137     /* check that db.h & libdb are compatible */
11138     if (DB_VERSION_MAJOR != Major || DB_VERSION_MINOR != Minor || DB_VERSION_PATCH != Patch) {
11139         printf("db.h and libdb are incompatible\n") ;
11140         exit(3);        
11141     }
11142
11143     printf("db.h and libdb are compatible\n") ;
11144
11145     Version = DB_VERSION_MAJOR * 1000000 + DB_VERSION_MINOR * 1000
11146                 + DB_VERSION_PATCH ;
11147
11148     /* needs to be >= 2.3.4 */
11149     if (Version < 2003004) {
11150     /* if (DB_VERSION_MAJOR == 2 && DB_VERSION_MINOR == 0 && DB_VERSION_PATCH < 5) { */
11151         printf("but Perl needs Berkeley DB 2.3.4 or greater\n") ;
11152         exit(2);        
11153     }
11154
11155     exit(0);
11156 #else
11157 #if defined(_DB_H_) && defined(BTREEMAGIC) && defined(HASHMAGIC)
11158     printf("You have Berkeley DB Version 1\n");
11159     exit(0);    /* DB version < 2: the coast is clear. */
11160 #else
11161     exit(1);    /* <db.h> not Berkeley DB? */
11162 #endif
11163 #endif
11164 }
11165 EOCP
11166         set try
11167         if eval $compile && ./try; then
11168                 echo 'Looks OK.' >&4
11169         else
11170                 echo "I can't use Berkeley DB with your <db.h>.  I'll disable Berkeley DB." >&4
11171                 i_db=$undef
11172                 case " $libs " in
11173                 *"-ldb "*)
11174                         : Remove db from list of libraries to use
11175                         echo "Removing unusable -ldb from library list" >&4
11176                         set `echo X $libs | $sed -e 's/-ldb / /' -e 's/-ldb$//'`
11177                         shift
11178                         libs="$*"
11179                         echo "libs = $libs" >&4
11180                         ;;
11181                 esac
11182         fi
11183         $rm -f try.*
11184         ;;
11185 esac
11186
11187 case "$i_db" in
11188 define)
11189         : Check the return type needed for hash 
11190         echo " "
11191         echo "Checking return type needed for hash for Berkeley DB ..." >&4
11192         $cat >try.c <<EOCP
11193 #$d_const HASCONST
11194 #ifndef HASCONST
11195 #define const
11196 #endif
11197 #include <sys/types.h>
11198 #include <db.h>
11199
11200 #ifndef DB_VERSION_MAJOR
11201 u_int32_t hash_cb (ptr, size)
11202 const void *ptr;
11203 size_t size;
11204 {
11205 }
11206 HASHINFO info;
11207 int main()
11208 {
11209         info.hash = hash_cb;
11210 }
11211 #endif
11212 EOCP
11213         if $cc $ccflags -c try.c >try.out 2>&1 ; then
11214                 if $contains warning try.out >>/dev/null 2>&1 ; then
11215                         db_hashtype='int'
11216                 else
11217                         db_hashtype='u_int32_t'
11218                 fi
11219         else
11220                 : XXX Maybe we should just give up here.
11221                 db_hashtype=u_int32_t
11222                 $cat try.out >&4
11223                 echo "Help:  I can't seem to compile the db test program." >&4
11224                 echo "Something's wrong, but I'll assume you use $db_hashtype." >&4
11225         fi
11226         $rm -f try.*
11227         echo "Your version of Berkeley DB uses $db_hashtype for hash."
11228         ;;
11229 *)      db_hashtype=u_int32_t
11230         ;;
11231 esac
11232 case "$i_db" in
11233 define)
11234         : Check the return type needed for prefix 
11235         echo " "
11236         echo "Checking return type needed for prefix for Berkeley DB ..." >&4
11237         cat >try.c <<EOCP
11238 #$d_const HASCONST
11239 #ifndef HASCONST
11240 #define const
11241 #endif
11242 #include <sys/types.h>
11243 #include <db.h>
11244
11245 #ifndef DB_VERSION_MAJOR
11246 size_t prefix_cb (key1, key2)
11247 const DBT *key1;
11248 const DBT *key2;
11249 {
11250 }
11251 BTREEINFO info;
11252 int main()
11253 {
11254         info.prefix = prefix_cb;
11255 }
11256 #endif
11257 EOCP
11258         if $cc $ccflags -c try.c  >try.out 2>&1 ; then
11259                 if $contains warning try.out >>/dev/null 2>&1 ; then
11260                         db_prefixtype='int'
11261                 else
11262                         db_prefixtype='size_t'
11263                 fi
11264         else
11265                 db_prefixtype='size_t'
11266                 : XXX Maybe we should just give up here.
11267                 $cat try.out >&4
11268                 echo "Help:  I can't seem to compile the db test program." >&4
11269                 echo "Something's wrong, but I'll assume you use $db_prefixtype." >&4
11270         fi
11271         $rm -f try.*
11272         echo "Your version of Berkeley DB uses $db_prefixtype for prefix."
11273         ;;
11274 *)      db_prefixtype='size_t'
11275         ;;
11276 esac
11277
11278 : check for void type
11279 echo " "
11280 echo "Checking to see how well your C compiler groks the void type..." >&4
11281 case "$voidflags" in
11282 '')
11283         $cat >try.c <<'EOCP'
11284 #if TRY & 1
11285 void sub() {
11286 #else
11287 sub() {
11288 #endif
11289         extern void moo();      /* function returning void */
11290         void (*goo)();          /* ptr to func returning void */
11291 #if TRY & 8
11292         void *hue;              /* generic ptr */
11293 #endif
11294 #if TRY & 2
11295         void (*foo[10])();
11296 #endif
11297
11298 #if TRY & 4
11299         if(goo == moo) {
11300                 exit(0);
11301         }
11302 #endif
11303         exit(0);
11304 }
11305 int main() { sub(); }
11306 EOCP
11307         if $cc $ccflags -c -DTRY=$defvoidused try.c >.out 2>&1 ; then
11308                 voidflags=$defvoidused
11309         echo "Good.  It appears to support void to the level $package wants.">&4
11310                 if $contains warning .out >/dev/null 2>&1; then
11311                         echo "However, you might get some warnings that look like this:"
11312                         $cat .out
11313                 fi
11314         else
11315 echo "Hmm, your compiler has some difficulty with void. Checking further..." >&4
11316                 if $cc $ccflags -c -DTRY=1 try.c >/dev/null 2>&1; then
11317                         echo "It supports 1..."
11318                         if $cc $ccflags -c -DTRY=3 try.c >/dev/null 2>&1; then
11319                                 echo "It also supports 2..."
11320                                 if $cc $ccflags -c -DTRY=7 try.c >/dev/null 2>&1; then
11321                                         voidflags=7
11322                                         echo "And it supports 4 but not 8 definitely."
11323                                 else
11324                                         echo "It doesn't support 4..."
11325                                         if $cc $ccflags -c -DTRY=11 try.c >/dev/null 2>&1; then
11326                                                 voidflags=11
11327                                                 echo "But it supports 8."
11328                                         else
11329                                                 voidflags=3
11330                                                 echo "Neither does it support 8."
11331                                         fi
11332                                 fi
11333                         else
11334                                 echo "It does not support 2..."
11335                                 if $cc $ccflags -c -DTRY=13 try.c >/dev/null 2>&1; then
11336                                         voidflags=13
11337                                         echo "But it supports 4 and 8."
11338                                 else
11339                                         if $cc $ccflags -c -DTRY=5 try.c >/dev/null 2>&1; then
11340                                                 voidflags=5
11341                                                 echo "And it supports 4 but has not heard about 8."
11342                                         else
11343                                                 echo "However it supports 8 but not 4."
11344                                         fi
11345                                 fi
11346                         fi
11347                 else
11348                         echo "There is no support at all for void."
11349                         voidflags=0
11350                 fi
11351         fi
11352 esac
11353 case "$voidflags" in
11354 "$defvoidused") ;;
11355 *)      $cat >&4 <<'EOM'
11356   Support flag bits are:
11357     1: basic void declarations.
11358     2: arrays of pointers to functions returning void.
11359     4: operations between pointers to and addresses of void functions.
11360     8: generic void pointers.
11361 EOM
11362         dflt="$voidflags";
11363         rp="Your void support flags add up to what?"
11364         . ./myread
11365         voidflags="$ans"
11366         ;;
11367 esac
11368 $rm -f try.* .out
11369
11370
11371 : How can we generate normalized random numbers ?
11372 echo " "
11373 echo "Looking for a random number function..." >&4
11374 case "$randfunc" in
11375 '')
11376         if set drand48 val -f; eval $csym; $val; then
11377                 dflt="drand48"
11378                 echo "Good, found drand48()." >&4
11379         elif set random val -f; eval $csym; $val; then
11380                 dflt="random"
11381                 echo "OK, found random()." >&4
11382         else
11383                 dflt="rand"
11384                 echo "Yick, looks like I have to use rand()." >&4
11385         fi
11386         echo " "
11387         ;;
11388 *)
11389         dflt="$randfunc"
11390         ;;
11391 esac
11392 cont=true
11393
11394 case "$ccflags" in
11395 *-Dmy_rand=*|*-Dmy_srand=*)
11396         echo "Removing obsolete -Dmy_rand, -Dmy_srand, and -Drandbits from ccflags." >&4
11397         ccflags="`echo $ccflags | sed -e 's/-Dmy_rand=random/ /'`"
11398         ccflags="`echo $ccflags | sed -e 's/-Dmy_srand=srandom/ /'`"
11399         ccflags="`echo $ccflags | sed -e 's/-Drandbits=[0-9][0-9]*/ /'`"
11400         ;;
11401 esac
11402
11403 while $test "$cont"; do
11404         rp="Use which function to generate random numbers?"
11405         . ./myread
11406         if $test "$ans" = "$dflt"; then
11407                 : null
11408         else
11409                 randbits=''
11410         fi
11411         randfunc="$ans"
11412         if set $ans val -f; eval $csym; $val; then
11413                 cont=''
11414         else
11415                 dflt=y
11416                 rp="I cannot find function $ans. Use that name anyway?"
11417                 . ./myread
11418                 dflt=rand
11419                 case "$ans" in
11420                         [yY]*) cont='';;
11421                 esac
11422         fi
11423         case "$cont" in
11424         '')
11425                 case "$randfunc" in
11426                 drand48)
11427                         drand01="drand48()"
11428                         seedfunc="srand48"
11429                         randbits=48
11430                         randseedtype=long
11431                         ;;
11432                 rand|random)
11433                         case "$randbits" in
11434                         '')
11435 echo "Checking to see how many bits your $randfunc() function produces..." >&4
11436                                 $cat >try.c <<EOCP
11437 #$i_unistd I_UNISTD
11438 #$i_stdlib I_STDLIB
11439 #include <stdio.h>
11440 #ifdef I_UNISTD
11441 #  include <unistd.h>
11442 #endif
11443 #ifdef I_STDLIB
11444 #  include <stdlib.h>
11445 #endif
11446 int main()
11447 {
11448         register int i;
11449         register unsigned long tmp;
11450         register unsigned long max = 0L;
11451
11452         for (i = 1000; i; i--) {
11453                 tmp = (unsigned long) $randfunc();
11454                 if (tmp > max) max = tmp;
11455         }
11456         for (i = 0; max; i++)
11457                 max /= 2;
11458         printf("%d\n",i);
11459 }
11460 EOCP
11461                                 set try
11462                                 if eval $compile_ok; then
11463                                         dflt=`try`
11464                                 else
11465                                         dflt='?'
11466                                         echo "(I can't seem to compile the test program...)"
11467                                 fi
11468                                 ;;
11469                         *)
11470                                 dflt="$randbits"
11471                                 ;;
11472                         esac
11473                         rp="How many bits does your $randfunc() function produce?"
11474                         . ./myread
11475                         randbits="$ans"
11476                         $rm -f try.c try
11477                         drand01="($randfunc() / (double) ((unsigned long)1 << $randbits))"
11478                         seedfunc="s$randfunc"
11479                         randseedtype=unsigned
11480                         ;;
11481                 *)
11482                         dflt="31"
11483                         rp="How many bits does your $randfunc() function produce?"
11484                         . ./myread
11485                         randbits="$ans"
11486                         seedfunc="s$randfunc"
11487                         drand01="($randfunc() / (double) ((unsigned long)1 << $randbits))"
11488                         if set $seedfunc val -f; eval $csym; $val; then
11489                                 echo "(Using $seedfunc() to seed random generator)"
11490                         else
11491                                 echo "(Warning: no $seedfunc() to seed random generator)"
11492                                 seedfunc=rand
11493                         fi
11494                         randseedtype=unsigned
11495                         ;;
11496                 esac
11497                 ;;
11498         esac
11499 done
11500
11501 echo " "
11502 echo "Determining whether or not we are on an EBCDIC system..." >&4
11503 $cat >tebcdic.c <<'EOM'
11504 int main()
11505 {
11506   if ('M'==0xd4) return 0;
11507   return 1;
11508 }
11509 EOM
11510
11511 val=$undef
11512 set tebcdic
11513 if eval $compile_ok; then
11514         if ./tebcdic; then
11515                 echo "You have EBCDIC." >&4
11516                 val="$define"
11517         else
11518                 echo "Nope, no EBCDIC, probably ASCII or some ISO Latin." >&4
11519         fi
11520 else
11521         echo "I'm unable to compile the test program." >&4
11522         echo "I'll assume ASCII or some ISO Latin." >&4
11523 fi
11524 $rm -f tebcdic.c tebcdic
11525 set ebcdic
11526 eval $setvar
11527
11528 echo " "
11529 $cat >&4 <<EOM
11530 Checking how to flush all pending stdio output...
11531 EOM
11532 # I only know how to find the first 32 possibly open files on SunOS.
11533 # See also hints/sunos_4_1.sh and util.c  --AD
11534 case "$osname" in
11535 sunos) $echo '#define PERL_FFLUSH_ALL_FOPEN_MAX 32' > try.c ;;
11536 esac
11537 $cat >>try.c <<EOCP
11538 #include <stdio.h>
11539 #$i_unistd I_UNISTD
11540 #ifdef I_UNISTD
11541 # include <unistd.h>
11542 #endif
11543 #$d_sysconf HAS_SYSCONF
11544 #$d_stdio_stream_array HAS_STDIO_STREAM_ARRAY
11545 #ifdef HAS_STDIO_STREAM_ARRAY
11546 # define STDIO_STREAM_ARRAY $stdio_stream_array
11547 #endif
11548 int main() {
11549   FILE* p = fopen("try.out", "w");
11550 #ifdef TRY_FPUTC
11551   fputc('x', p);
11552 #else
11553 # ifdef TRY_FPRINTF
11554   fprintf(p, "x");
11555 # endif
11556 #endif
11557 #ifdef TRY_FFLUSH_NULL
11558   fflush(NULL);
11559 #endif
11560 #ifdef TRY_FFLUSH_ALL
11561   {
11562     long open_max = -1;
11563 # ifdef PERL_FFLUSH_ALL_FOPEN_MAX
11564     open_max = PERL_FFLUSH_ALL_FOPEN_MAX;
11565 # else
11566 #  if defined(HAS_SYSCONF) && defined(_SC_OPEN_MAX)
11567     open_max = sysconf(_SC_OPEN_MAX);
11568 #  else
11569 #   ifdef FOPEN_MAX
11570     open_max = FOPEN_MAX;
11571 #   else
11572 #    ifdef OPEN_MAX
11573     open_max = OPEN_MAX;
11574 #    else
11575 #     ifdef _NFILE
11576     open_max = _NFILE;
11577 #     endif
11578 #    endif
11579 #   endif
11580 #  endif
11581 # endif 
11582 # ifdef HAS_STDIO_STREAM_ARRAY
11583     if (open_max > 0) {
11584       long i;
11585       for (i = 0; i < open_max; i++)
11586             if (STDIO_STREAM_ARRAY[i]._file >= 0 &&
11587                 STDIO_STREAM_ARRAY[i]._file < open_max &&
11588                 STDIO_STREAM_ARRAY[i]._flag)
11589                 fflush(&STDIO_STREAM_ARRAY[i]);
11590     }   
11591   }
11592 # endif
11593 #endif
11594   _exit(42);
11595 }
11596 EOCP
11597 : first we have to find out how _not_ to flush
11598 if $test "X$fflushNULL" = X -o "X$fflushall" = X; then
11599     output=''
11600     set try -DTRY_FPUTC
11601     if eval $compile; then
11602             $rm -f try.out
11603             ./try$exe_ext 2>/dev/null
11604             if $test ! -s try.out -a "X$?" = X42; then
11605                 output=-DTRY_FPUTC
11606             fi
11607     fi
11608     case "$output" in
11609     '')
11610             set try -DTRY_FPRINTF
11611             $rm -f try.out
11612             if eval $compile; then
11613                     $rm -f try.out
11614                     ./try$exe_ext 2>/dev/null
11615                     if $test ! -s try.out -a "X$?" = X42; then
11616                         output=-DTRY_FPRINTF
11617                     fi
11618             fi
11619         ;;
11620     esac
11621 fi
11622 : check for fflush NULL behaviour
11623 case "$fflushNULL" in
11624 '')     set try -DTRY_FFLUSH_NULL $output
11625         if eval $compile; then
11626                 $rm -f try.out
11627                 ./try$exe_ext 2>/dev/null
11628                 code="$?"
11629                 if $test -s try.out -a "X$code" = X42; then
11630                         fflushNULL="`$cat try.out`"
11631                 else
11632                         if $test "X$code" != X42; then
11633                                 $cat >&4 <<EOM
11634 (If this test failed, don't worry, we'll try another method shortly.)
11635 EOM
11636                         fi
11637                 fi
11638         fi
11639         $rm -f core try.core core.try.*
11640         case "$fflushNULL" in
11641         x)      $cat >&4 <<EOM
11642 Your fflush(NULL) works okay.
11643 EOM
11644                 fflushNULL="$define"
11645                 ;;
11646         '')     $cat >&4 <<EOM
11647 Your fflush(NULL) isn't working (contrary to ANSI C).
11648 EOM
11649                 fflushNULL="$undef"
11650                 ;;
11651         *)      $cat >&4 <<EOM
11652 Cannot figure out whether your fflush(NULL) works or not.
11653 I'm assuming it doesn't (contrary to ANSI C).
11654 EOM
11655                 fflushNULL="$undef"
11656                 ;;
11657         esac
11658         ;;
11659 $define|true|[yY]*)
11660         fflushNULL="$define"
11661         ;;
11662 *)
11663         fflushNULL="$undef"
11664         ;;
11665 esac
11666 : check explicit looping only if NULL did not work
11667 case "$fflushNULL" in
11668 "$undef")
11669         : check for fflush all behaviour
11670         case "$fflushall" in
11671         '')     set try -DTRY_FFLUSH_ALL $output
11672                 if eval $compile; then
11673                         $cat >&4 <<EOM
11674 (Now testing the other method--but note that also this may fail.)
11675 EOM
11676                         $rm -f try.out
11677                         ./try$exe_ext 2>/dev/null
11678                         if $test -s try.out -a "X$?" = X42; then
11679                                 fflushall="`$cat try.out`"
11680                         fi
11681                 fi
11682                 $rm -f core try.core core.try.*
11683                 case "$fflushall" in
11684                 x)      $cat >&4 <<EOM
11685 Whew. Flushing explicitly all the stdio streams works.
11686 EOM
11687                         fflushall="$define"
11688                         ;;
11689                 '')     $cat >&4 <<EOM
11690 Sigh. Flushing explicitly all the stdio streams doesn't work.
11691 EOM
11692                         fflushall="$undef"
11693                         ;;
11694                 *)      $cat >&4 <<EOM
11695 Cannot figure out whether flushing stdio streams explicitly works or not.
11696 I'm assuming it doesn't.
11697 EOM
11698                         fflushall="$undef"
11699                         ;;
11700                 esac
11701                 ;;
11702         "$define"|true|[yY]*)
11703                 fflushall="$define"
11704                 ;;
11705         *)
11706                 fflushall="$undef"
11707                 ;;
11708         esac
11709         ;;
11710 *)      fflushall="$undef"      
11711         ;;
11712 esac
11713 case "$fflushNULL$fflushall" in
11714 undefundef)
11715         $cat <<EOM
11716 I cannot figure out how to flush pending stdio output.
11717 EOM
11718         ;;
11719 esac
11720 $rm -f try.* try$exe_ext
11721
11722 : Store the full pathname to the ar program for use in the C program
11723 : Respect a hint or command line value for full_ar.
11724 case "$full_ar" in
11725 '') full_ar=$ar ;;
11726 esac
11727
11728 : Store the full pathname to the sed program for use in the C program
11729 full_sed=$sed
11730
11731 : see what type gids are declared as in the kernel
11732 echo " "
11733 echo "Looking for the type for group ids returned by getgid()."
11734 set gid_t gidtype xxx stdio.h sys/types.h
11735 eval $typedef
11736 case "$gidtype" in
11737 xxx)
11738         xxx=`./findhdr sys/user.h`
11739         set `grep 'groups\[NGROUPS\];' "$xxx" 2>/dev/null` unsigned short
11740         case $1 in
11741         unsigned) dflt="$1 $2" ;;
11742         *) dflt="$1" ;;
11743         esac
11744         ;;
11745 *) dflt="$gidtype";;
11746 esac
11747 case "$gidtype" in
11748 gid_t) echo "gid_t found." ;;
11749 *)      rp="What is the type for group ids returned by getgid()?"
11750         . ./myread
11751         gidtype="$ans"
11752         ;;
11753 esac
11754
11755 echo " "
11756 case "$gidtype" in
11757 *_t) zzz="$gidtype"     ;;
11758 *)   zzz="gid"          ;;
11759 esac
11760 echo "Checking the size of $zzz..." >&4 
11761 cat > try.c <<EOCP
11762 #include <sys/types.h>
11763 #include <stdio.h>
11764 int main() {
11765     printf("%d\n", (int)sizeof($gidtype));
11766     exit(0);
11767 }
11768 EOCP
11769 set try
11770 if eval $compile_ok; then
11771         yyy=`./try`
11772         case "$yyy" in
11773         '')     gidsize=4
11774                 echo "(I can't execute the test program--guessing $gidsize.)" >&4
11775                 ;;
11776         *)      gidsize=$yyy
11777                 echo "Your $zzz size is $gidsize bytes."
11778                 ;;
11779         esac
11780 else
11781         gidsize=4
11782         echo "(I can't compile the test program--guessing $gidsize.)" >&4
11783 fi
11784
11785
11786 echo " "
11787 case "$gidtype" in
11788 *_t) zzz="$gidtype"     ;;
11789 *)   zzz="gid"          ;;
11790 esac
11791 echo "Checking the sign of $zzz..." >&4 
11792 cat > try.c <<EOCP
11793 #include <sys/types.h>
11794 #include <stdio.h>
11795 int main() {
11796         $gidtype foo = -1;
11797         if (foo < 0)
11798                 printf("-1\n");
11799         else
11800                 printf("1\n");
11801 }
11802 EOCP
11803 set try
11804 if eval $compile; then
11805         yyy=`./try`
11806         case "$yyy" in
11807         '')     gidsign=1
11808                 echo "(I can't execute the test program--guessing unsigned.)" >&4
11809                 ;;
11810         *)      gidsign=$yyy
11811                 case "$gidsign" in
11812                  1) echo "Your $zzz is unsigned." ;;
11813                 -1) echo "Your $zzz is signed."   ;;
11814                 esac
11815                 ;;
11816         esac
11817 else
11818         gidsign=1
11819         echo "(I can't compile the test program--guessing unsigned.)" >&4
11820 fi
11821
11822
11823 : check for length of character
11824 echo " "
11825 case "$charsize" in
11826 '')
11827         echo "Checking to see how big your characters are (hey, you never know)..." >&4
11828         $cat >try.c <<'EOCP'
11829 #include <stdio.h>
11830 int main()
11831 {
11832     printf("%d\n", (int)sizeof(char));
11833     exit(0);
11834 }
11835 EOCP
11836         set try
11837         if eval $compile_ok; then
11838                 dflt=`./try`
11839         else
11840                 dflt='1'
11841                 echo "(I can't seem to compile the test program.  Guessing...)"
11842         fi
11843         ;;
11844 *)
11845         dflt="$charsize"
11846         ;;
11847 esac
11848 rp="What is the size of a character (in bytes)?"
11849 . ./myread
11850 charsize="$ans"
11851 $rm -f try.c try
11852
11853
11854 echo " "
11855 $echo "Choosing the C types to be used for Perl's internal types..." >&4
11856
11857 case "$use64bits:$d_quad:$quadtype" in
11858 define:define:?*)
11859         ivtype="$quadtype"
11860         uvtype="$uquadtype"
11861         ivsize=8
11862         uvsize=8
11863         ;;
11864 *)      ivtype="long"
11865         uvtype="unsigned long"
11866         ivsize=$longsize
11867         uvsize=$longsize
11868         ;;
11869 esac
11870
11871 case "$uselongdouble:$d_longdbl" in
11872 define:define)
11873         nvtype="long double"
11874         nvsize=$longdblsize
11875         ;;
11876 *)      nvtype=double
11877         nvsize=$doublesize
11878         ;;
11879 esac
11880
11881 echo "(IV will be "$ivtype", $ivsize bytes)"
11882 echo "(UV will be "$uvtype", $uvsize bytes)"
11883 echo "(NV will be "$nvtype", $nvsize bytes)"
11884
11885 $cat >try.c <<EOCP
11886 #$i_inttypes I_INTTYPES
11887 #ifdef I_INTTYPES
11888 #include <inttypes.h>
11889 #endif
11890 #include <stdio.h>
11891 int main() {
11892 #ifdef INT8
11893    int8_t i =  INT8_MAX;
11894   uint8_t u = UINT8_MAX;
11895   printf("int8_t\n");
11896 #endif
11897 #ifdef INT16
11898    int16_t i =  INT16_MAX;
11899   uint16_t i = UINT16_MAX;
11900   printf("int16_t\n");
11901 #endif
11902 #ifdef INT32
11903    int32_t i =  INT32_MAX;
11904   uint32_t u = UINT32_MAX;
11905   printf("int32_t\n");
11906 #endif
11907 }
11908 EOCP
11909
11910 case "$i8type" in
11911 '')     case "$charsize" in
11912         1)      i8type=char
11913                 u8type="unsigned char"
11914                 i8size=$charsize
11915                 u8size=$charsize
11916                 ;;
11917         esac
11918         ;;
11919 esac
11920 case "$i8type" in
11921 '')     set try -DINT8
11922         if eval $compile; then
11923                 case "`./try$exe_ext`" in
11924                 int8_t) i8type=int8_t
11925                         u8type=uint8_t
11926                         i8size=1
11927                         u8size=1
11928                         ;;
11929                 esac
11930         fi
11931         ;;
11932 esac
11933 case "$i8type" in
11934 '')     if $test $charsize -ge 1; then
11935                 i8type=char
11936                 u8type="unsigned char"
11937                 i8size=$charsize
11938                 u8size=$charsize
11939         fi
11940         ;;
11941 esac
11942
11943 case "$i16type" in
11944 '')     case "$shortsize" in
11945         2)      i16type=short
11946                 u16type="unsigned short"
11947                 i16size=$shortsize
11948                 u16size=$shortsize
11949                 ;;
11950         esac
11951         ;;
11952 esac
11953 case "$i16type" in
11954 '')     set try -DINT16
11955         if eval $compile; then
11956                 case "`./try$exe_ext`" in
11957                 int16_t)
11958                         i16type=int16_t
11959                         u16type=uint16_t
11960                         i16size=2
11961                         u16size=2
11962                         ;;
11963                 esac
11964         fi
11965         ;;
11966 esac
11967 case "$i16type" in
11968 '')     if $test $shortsize -ge 2; then
11969                 i16type=short
11970                 u16type="unsigned short"
11971                 i16size=$shortsize
11972                 u16size=$shortsize
11973         fi
11974         ;;
11975 esac
11976
11977 case "$i32type" in
11978 '')     case "$longsize" in
11979         4)      i32type=long
11980                 u32type="unsigned long"
11981                 i32size=$longsize
11982                 u32size=$longsize
11983                 ;;
11984         *)      case "$intsize" in
11985                 4)      i32type=int
11986                         u32type="unsigned int"
11987                         i32size=$intsize
11988                         u32size=$intsize
11989                         ;;
11990                 esac
11991                 ;;
11992         esac
11993         ;;
11994 esac
11995 case "$i32type" in
11996 '')     set try -DINT32
11997         if eval $compile; then
11998                 case "`./try$exe_ext`" in
11999                 int32_t)
12000                         i32type=int32_t
12001                         u32type=uint32_t
12002                         i32size=4
12003                         u32size=4
12004                         ;;
12005                 esac
12006         fi
12007         ;;
12008 esac
12009 case "$i32type" in
12010 '')     if $test $intsize -ge 4; then
12011                 i32type=int
12012                 u32type="unsigned int"
12013                 i32size=$intsize
12014                 u32size=$intsize
12015         fi
12016         ;;
12017 esac
12018
12019 case "$i64type" in
12020 '')     case "$d_quad:$quadtype" in
12021         define:?*)
12022                 i64type="$quadtype"
12023                 u64type="$uquadtype"
12024                 i64size=8
12025                 u64size=8
12026                 ;;
12027         esac
12028         ;;
12029 esac
12030
12031 $rm -f try.* try
12032
12033 echo " "
12034
12035 if $test X"$quadtype" != X; then
12036
12037 echo "Checking how to print 64-bit integers..." >&4
12038
12039 if $test X"$sPRId64" = X -a X"$quadtype" = Xint; then
12040         $cat >try.c <<'EOCP'
12041 #include <sys/types.h>
12042 #include <stdio.h>
12043 int main() {
12044   int q = 12345678901;
12045   printf("%ld\n", q);
12046 }
12047 EOCP
12048         set try
12049         if eval $compile; then
12050                 yyy=`./try$exe_ext`
12051                 case "$yyy" in
12052                 12345678901)
12053                         sPRId64='"d"'; sPRIi64='"i"'; sPRIu64='"u"';
12054                         sPRIo64='"o"'; sPRIx64='"x"'; sPRIX64='"X"';
12055                         echo "We will use %d."
12056                         ;;
12057                 esac
12058         fi
12059 fi
12060
12061 if $test X"$sPRId64" = X -a X"$quadtype" = Xlong; then
12062         $cat >try.c <<'EOCP'
12063 #include <sys/types.h>
12064 #include <stdio.h>
12065 int main() {
12066   long q = 12345678901;
12067   printf("%ld\n", q);
12068 }
12069 EOCP
12070         set try
12071         if eval $compile; then
12072                 yyy=`./try$exe_ext`
12073                 case "$yyy" in
12074                 12345678901)
12075                         sPRId64='"ld"'; sPRIi64='"li"'; sPRIu64='"lu"';
12076                         sPRIo64='"lo"'; sPRIx64='"lx"'; sPRIX64='"lX"';
12077                         echo "We will use %ld."
12078                         ;;
12079                 esac
12080         fi
12081 fi
12082
12083 if $test X"$sPRId64" = X -a X"$i_inttypes.h" = X"$define" -a X"$quadtype" = Xint64_t; then
12084         $cat >try.c <<'EOCP'
12085 #include <sys/types.h>
12086 #include <inttypes.h>
12087 #include <stdio.h>
12088 int main() {
12089   int64_t q = 12345678901;
12090   printf("%" PRId64 "\n", q);
12091 }
12092 EOCP
12093         set try
12094         if eval $compile; then
12095                 yyy=`./try$exe_ext`
12096                 case "$yyy" in
12097                 12345678901)
12098                         sPRId64=PRId64; sPRIi64=PRIi64; sPRIu64=PRIu64;
12099                         sPRIo64=PRIo64; sPRIx64=PRIx64; sPRIX64=PRIX64;
12100                         echo "We will use the C9X style."
12101                         ;;
12102                 esac
12103         fi
12104 fi
12105
12106 if $test X"$sPRId64" = X -a X"$quadtype" = X"long long"; then
12107         $cat >try.c <<'EOCP'
12108 #include <sys/types.h>
12109 #include <stdio.h>
12110 int main() {
12111   long long q = 12345678901LL; /* AIX cc requires the LL prefix. */
12112   printf("%lld\n", q);
12113 }
12114 EOCP
12115         set try
12116         if eval $compile; then
12117                 yyy=`./try$exe_ext`
12118                 case "$yyy" in
12119                 12345678901)
12120                         sPRId64='"lld"'; sPRIi64='"lli"'; sPRIu64='"llu"';
12121                         sPRIo64='"llo"'; sPRIx64='"llx"'; sPRIX64='"llX"';
12122                         echo "We will use the %lld style."
12123                         ;;
12124                 esac
12125         fi
12126 fi
12127
12128 if $test X"$sPRId64" = X -a X"$quadtype" != X; then
12129         $cat >try.c <<EOCP
12130 #include <sys/types.h>
12131 #include <stdio.h>
12132 int main() {
12133   $quadtype q = 12345678901;
12134   printf("%Ld\n", q);
12135 }
12136 EOCP
12137         set try
12138         if eval $compile; then
12139                 yyy=`./try$exe_ext`
12140                 case "$yyy" in
12141                 12345678901)
12142                         sPRId64='"Ld"'; sPRIi64='"Li"'; sPRIu64='"Lu"';
12143                         sPRIo64='"Lo"'; sPRIx64='"Lx"'; sPRIX64='"LX"';
12144                         echo "We will use %Ld."
12145                         ;;
12146                 esac
12147         fi
12148 fi
12149
12150 if $test X"$sPRId64" = X -a X"$quadtype" != X; then
12151         $cat >try.c <<EOCP
12152 #include <sys/types.h>
12153 #include <stdio.h>
12154 int main() {
12155   $quadtype q = 12345678901;
12156   printf("%qd\n", q);
12157 }
12158 EOCP
12159         set try
12160         if eval $compile; then
12161                 yyy=`./try$exe_ext`
12162                 case "$yyy" in
12163                 12345678901)
12164                         sPRId64='"qd"'; sPRIi64='"qi"'; sPRIu64='"qu"';
12165                         sPRIo64='"qo"'; sPRIx64='"qx"'; sPRIX64='"qX"';
12166                         echo "We will use %qd."
12167                         ;;
12168                 esac
12169         fi
12170 fi
12171
12172 if $test X"$sPRId64" = X; then
12173         echo "Cannot figure out how to print 64-bit integers." >&4
12174 fi
12175
12176 $rm -f try try.*
12177
12178 fi
12179
12180 case "$sPRId64" in
12181 '')     d_PRId64="$undef"; d_PRIi64="$undef"; d_PRIu64="$undef"; 
12182         d_PRIo64="$undef"; d_PRIx64="$undef"; d_PRIX64="$undef"; 
12183         ;;
12184 *)      d_PRId64="$define"; d_PRIi64="$define"; d_PRIu64="$define"; 
12185         d_PRIo64="$define"; d_PRIx64="$define"; d_PRIX64="$define"; 
12186         ;;
12187 esac
12188
12189
12190 echo " "
12191 $echo "Checking the format strings to be used for Perl's internal types..." >&4
12192
12193 if $test X"$ivsize" = X8; then
12194         ivdformat="$sPRId64"
12195         uvuformat="$sPRIu64"
12196         uvoformat="$sPRIo64"
12197         uvxformat="$sPRIx64"
12198 else
12199         if $test X"$ivsize" = X"$longsize"; then
12200                 ivdformat='"ld"'
12201                 uvuformat='"lu"'
12202                 uvoformat='"lo"'
12203                 uvxformat='"lx"'
12204         else
12205                 if $test X"$ivsize" = X"$intsize"; then
12206                         ivdformat='"d"'
12207                         uvuformat='"u"'
12208                         uvoformat='"o"'
12209                         uvxformat='"x"'
12210                 else
12211                         : far out
12212                         if $test X"$ivsize" = X"$shortsize"; then
12213                                 ivdformat='"hd"'
12214                                 uvuformat='"hu"'
12215                                 uvoformat='"ho"'
12216                                 uvxformat='"hx"'
12217                         fi
12218                 fi
12219         fi
12220 fi
12221
12222 case "$ivdformat" in
12223 '') echo "$0: Fatal: failed to find format strings, cannot continue." >& 4
12224     exit 1
12225     ;;
12226 esac
12227
12228
12229 echo " "
12230 $echo "Checking the format string to be used for gids..." >&4
12231
12232 case "$gidsign" in
12233 -1)     if $test X"$gidsize" = X"$ivsize"; then
12234                 gidformat="$ivdformat"
12235         else
12236                 if $test X"$gidsize" = X"$longsize"; then
12237                         gidformat='"ld"'
12238                 else
12239                         if $test X"$gidsize" = X"$intsize"; then
12240                                 gidformat='"d"'
12241                         else
12242                                 if $test X"$gidsize" = X"$shortsize"; then
12243                                         gidformat='"hd"'
12244                                 fi
12245                         fi
12246                 fi
12247         fi
12248         ;;
12249 *)      if $test X"$gidsize" = X"$uvsize"; then
12250                 gidformat="$uvuformat"
12251         else
12252                 if $test X"$gidsize" = X"$longsize"; then
12253                         gidformat='"lu"'
12254                 else
12255                         if $test X"$gidsize" = X"$intsize"; then
12256                                 gidformat='"u"'
12257                         else
12258                                 if $test X"$gidsize" = X"$shortsize"; then
12259                                         gidformat='"hu"'
12260                                 fi
12261                         fi
12262                 fi
12263         fi
12264         ;;
12265 esac
12266
12267 : see if getgroups exists
12268 set getgroups d_getgrps
12269 eval $inlibc
12270
12271 : see if setgroups exists
12272 set setgroups d_setgrps
12273 eval $inlibc
12274
12275
12276 : Find type of 2nd arg to 'getgroups()' and 'setgroups()'
12277 echo " "
12278 case "$d_getgrps$d_setgrps" in
12279 *define*)
12280         case "$groupstype" in
12281         '') dflt="$gidtype" ;;
12282         *)  dflt="$groupstype" ;;
12283         esac
12284         $cat <<EOM
12285 What type of pointer is the second argument to getgroups() and setgroups()?
12286 Usually this is the same as group ids, $gidtype, but not always.
12287
12288 EOM
12289         rp='What type pointer is the second argument to getgroups() and setgroups()?'
12290         . ./myread
12291         groupstype="$ans"
12292         ;;
12293 *)  groupstype="$gidtype";;
12294 esac
12295
12296 echo " "
12297 echo "Checking if your $make program sets \$(MAKE)..." >&4
12298 case "$make_set_make" in
12299 '')
12300         $sed 's/^X //' > testmake.mak << 'EOF'
12301 Xall:
12302 X       @echo 'maketemp="$(MAKE)"'
12303 EOF
12304         case "`$make -f testmake.mak 2>/dev/null`" in
12305         *maketemp=*) make_set_make='#' ;;
12306         *)      make_set_make="MAKE=$make" ;;
12307         esac
12308         $rm -f testmake.mak
12309         ;;
12310 esac
12311 case "$make_set_make" in
12312 '#') echo "Yup, it does.";;
12313 *) echo "Nope, it doesn't.";;
12314 esac
12315
12316 : see what type is used for mode_t
12317 rp="What is the type used for file modes for system calls (e.g. fchmod())?"
12318 set mode_t modetype int stdio.h sys/types.h
12319 eval $typedef_ask
12320
12321 : define a fucntion to check prototypes
12322 $cat > protochk <<EOSH
12323 $startsh
12324 cc="$cc"
12325 optimize="$optimize"
12326 ccflags="$ccflags"
12327 prototype="$prototype"
12328 define="$define"
12329 rm=$rm
12330 EOSH
12331
12332 $cat >> protochk <<'EOSH'
12333
12334 $rm -f try.c
12335 foo="$1"
12336 shift
12337 while test $# -ge 2; do
12338         case "$1" in
12339                 $define) echo "#include <$2>" >> try.c ;;
12340                 literal) echo "$2" >> try.c ;;
12341         esac
12342     shift 2
12343 done
12344 test "$prototype" = "$define"  && echo '#define CAN_PROTOTYPE' >> try.c
12345 cat >> try.c <<'EOCP'
12346 #ifdef CAN_PROTOTYPE
12347 #define _(args) args
12348 #else
12349 #define _(args) ()
12350 #endif
12351 EOCP
12352 echo "$foo" >> try.c
12353 echo 'int no_real_function_has_this_name _((void)) { return 0; }' >> try.c
12354 $cc $optimize $ccflags -c try.c > /dev/null 2>&1
12355 status=$?
12356 $rm -f try.[co]
12357 exit $status
12358 EOSH
12359 chmod +x protochk
12360 $eunicefix protochk
12361
12362 : see what type is used for size_t
12363 rp="What is the type used for the length parameter for string functions?"
12364 set size_t sizetype 'unsigned int' stdio.h sys/types.h
12365 eval $typedef_ask
12366
12367 : check for type of arguments to gethostbyaddr. 
12368 if test "X$netdb_host_type" = X -o "X$netdb_hlen_type" = X; then
12369         case "$d_gethbyaddr" in
12370         $define)
12371                 $cat <<EOM
12372
12373 Checking to see what type of arguments are accepted by gethostbyaddr().
12374 EOM
12375                 hdrs="$define sys/types.h
12376                         $d_socket sys/socket.h 
12377                         $i_niin netinet/in.h 
12378                         $i_netdb netdb.h
12379                         $i_unistd unistd.h"
12380                 : The first arg can 'char *' or 'void *'
12381                 : The second arg is some of integral type
12382                 for xxx in in_addr_t 'const void *' 'const char *' 'void *' 'char *'; do
12383                         for yyy in size_t long int; do
12384                                 case "$netdb_host_type" in
12385                                 '')     try="extern struct hostent *gethostbyaddr($xxx, $yyy, int);"
12386                                         if ./protochk "$try" $hdrs; then
12387                                                 echo "Your system accepts $xxx for the first arg."
12388                                                 echo "...and $yyy for the second arg."
12389                                                 netdb_host_type="$xxx"
12390                                                 netdb_hlen_type="$yyy"
12391                                         fi
12392                                         ;;
12393                                 esac
12394                         done
12395                 done
12396                 : In case none of those worked, prompt the user.
12397                 case "$netdb_host_type" in
12398                 '')     rp='What is the type for the 1st argument to gethostbyaddr?'
12399                         dflt='char *'
12400                         . ./myread
12401                         netdb_host_type=$ans
12402                         rp='What is the type for the 2nd argument to gethostbyaddr?'
12403                         dflt="$sizetype"
12404                         . ./myread
12405                         netdb_hlen_type=$ans
12406                         ;;
12407                 esac
12408                 ;;
12409         *)      : no gethostbyaddr, so pick harmless defaults
12410                 netdb_host_type='char *'
12411                 netdb_hlen_type="$sizetype"
12412                 ;;
12413         esac
12414         # Remove the "const" if needed. -- but then we'll have a 
12415         # prototype clash!
12416         # netdb_host_type=`echo "$netdb_host_type" | sed 's/^const //'`
12417 fi
12418
12419 : check for type of argument to gethostbyname. 
12420 if test "X$netdb_name_type" = X ; then
12421         case "$d_gethbyname" in
12422         $define)
12423                 $cat <<EOM
12424
12425 Checking to see what type of argument is accepted by gethostbyname().
12426 EOM
12427                 hdrs="$define sys/types.h
12428                         $d_socket sys/socket.h 
12429                         $i_niin netinet/in.h 
12430                         $i_netdb netdb.h
12431                         $i_unistd unistd.h"
12432                 for xxx in "const char *" "char *"; do
12433                         case "$netdb_name_type" in
12434                         '')     try="extern struct hostent *gethostbyname($xxx);"
12435                                 if ./protochk "$try" $hdrs; then
12436                                         echo "Your system accepts $xxx."
12437                                         netdb_name_type="$xxx"
12438                                 fi
12439                                 ;;
12440                         esac
12441                 done
12442                 : In case none of those worked, prompt the user.
12443                 case "$netdb_name_type" in
12444                 '')     rp='What is the type for the 1st argument to gethostbyname?'
12445                         dflt='char *'
12446                         . ./myread
12447                         netdb_name_type=$ans
12448                         ;;
12449                 esac
12450                 ;;
12451         *)      : no gethostbyname, so pick harmless default
12452                 netdb_name_type='char *'
12453                 ;;
12454         esac
12455 fi
12456
12457 : check for type of 1st argument to getnetbyaddr. 
12458 if test "X$netdb_net_type" = X ; then
12459         case "$d_getnbyaddr" in
12460         $define)
12461                 $cat <<EOM
12462
12463 Checking to see what type of 1st argument is accepted by getnetbyaddr().
12464 EOM
12465                 hdrs="$define sys/types.h
12466                         $d_socket sys/socket.h 
12467                         $i_niin netinet/in.h 
12468                         $i_netdb netdb.h
12469                         $i_unistd unistd.h"
12470                 for xxx in in_addr_t "unsigned long" long "unsigned int" int; do
12471                         case "$netdb_net_type" in
12472                         '')     try="extern struct netent *getnetbyaddr($xxx, int);"
12473                                 if ./protochk "$try" $hdrs; then
12474                                         echo "Your system accepts $xxx."
12475                                         netdb_net_type="$xxx"
12476                                 fi
12477                                 ;;
12478                         esac
12479                 done
12480                 : In case none of those worked, prompt the user.
12481                 case "$netdb_net_type" in
12482                 '')     rp='What is the type for the 1st argument to getnetbyaddr?'
12483                         dflt='long'
12484                         . ./myread
12485                         netdb_net_type=$ans
12486                         ;;
12487                 esac
12488                 ;;
12489         *)      : no getnetbyaddr, so pick harmless default
12490                 netdb_net_type='long'
12491                 ;;
12492         esac
12493 fi
12494 : locate the preferred pager for this system
12495 case "$pager" in
12496 '')
12497         dflt=''
12498         case "$pg" in
12499         /*) dflt=$pg;;
12500         esac
12501         case "$more" in
12502         /*) dflt=$more;;
12503         esac
12504         case "$less" in
12505         /*) dflt=$less;;
12506         esac
12507         case "$dflt" in
12508         '') dflt=/usr/ucb/more;;
12509         esac
12510         ;;
12511 *) dflt="$pager";;
12512 esac
12513 echo " "
12514 fn=f/
12515 rp='What pager is used on your system?'
12516 . ./getfile
12517 pager="$ans"
12518
12519 : see what type pids are declared as in the kernel
12520 rp="What is the type of process ids on this system?"
12521 set pid_t pidtype int stdio.h sys/types.h
12522 eval $typedef_ask
12523
12524 : Find earliest binary compatible site_perl subdirectory perl can use.
12525 case "$bincompat5005" in
12526 "$define") xs_apiversion='5.005' ;;
12527 *) xs_apiversion=$apiversion ;;   # The current site_perl version.
12528 esac
12529 : Find earliest pure perl site_perl subdirectory perl can use.
12530 : The versioned directories started at 5.005.
12531 pm_apiversion='5.005'
12532
12533 : check for length of pointer
12534 echo " "
12535 case "$ptrsize" in
12536 '')
12537         $echo $n "Checking to see how big your pointers are...$c" >&4
12538         if test "$voidflags" -gt 7; then
12539                 echo '#define VOID_PTR char *' > try.c
12540         else
12541                 echo '#define VOID_PTR void *' > try.c
12542         fi
12543         $cat >>try.c <<'EOCP'
12544 #include <stdio.h>
12545 int main()
12546 {
12547     printf("%d\n", (int)sizeof(VOID_PTR));
12548     exit(0);
12549 }
12550 EOCP
12551         set try
12552         if eval $compile_ok; then
12553                 ptrsize=`./try`
12554                 $echo " $ptrsize bytes." >&4
12555         else
12556                 dflt='4'
12557                 echo "(I can't seem to compile the test program.  Guessing...)" >&4
12558                 rp="What is the size of a pointer (in bytes)?"
12559                 . ./myread
12560                 ptrsize="$ans"
12561         fi
12562         ;;
12563 esac
12564 $rm -f try.c try
12565
12566 : see if ar generates random libraries by itself
12567 echo " "
12568 echo "Checking how to generate random libraries on your machine..." >&4
12569 echo 'int bar1() { return bar2(); }' > bar1.c
12570 echo 'int bar2() { return 2; }' > bar2.c
12571 $cat > foo.c <<'EOP'
12572 int main() { printf("%d\n", bar1()); exit(0); }
12573 EOP
12574 $cc $ccflags -c bar1.c >/dev/null 2>&1
12575 $cc $ccflags -c bar2.c >/dev/null 2>&1
12576 $cc $ccflags -c foo.c >/dev/null 2>&1
12577 $ar rc bar$_a bar2$_o bar1$_o >/dev/null 2>&1
12578 if $cc $ccflags $ldflags -o foobar foo$_o bar$_a $libs > /dev/null 2>&1 &&
12579         ./foobar >/dev/null 2>&1; then
12580         echo "$ar appears to generate random libraries itself."
12581         orderlib=false
12582         ranlib=":"
12583 elif $ar ts bar$_a >/dev/null 2>&1 &&
12584         $cc $ccflags $ldflags -o foobar foo$_o bar$_a $libs > /dev/null 2>&1 &&
12585         ./foobar >/dev/null 2>&1; then
12586                 echo "a table of contents needs to be added with '$ar ts'."
12587                 orderlib=false
12588                 ranlib="$ar ts"
12589 else
12590         case "$ranlib" in
12591         :) ranlib='';;
12592         '')
12593                 ranlib=`./loc ranlib X /usr/bin /bin /usr/local/bin`
12594                 $test -f $ranlib || ranlib=''
12595                 ;;
12596         esac
12597         if $test -n "$ranlib"; then
12598                 echo "your system has '$ranlib'; we'll use that."
12599                 orderlib=false
12600         else
12601                 echo "your system doesn't seem to support random libraries"
12602                 echo "so we'll use lorder and tsort to order the libraries."
12603                 orderlib=true
12604                 ranlib=":"
12605         fi
12606 fi
12607 $rm -f foo* bar* 
12608
12609 : check for type of arguments to select. 
12610 case "$selecttype" in
12611 '') case "$d_select" in
12612         $define)
12613                 $cat <<EOM
12614 Checking to see what type of arguments are accepted by select().
12615 EOM
12616                 hdrs="$define sys/types.h
12617                         $i_systime sys/time.h 
12618                         $i_sysselct sys/select.h
12619                         $d_socket sys/socket.h"
12620                 : The first arg can be int, unsigned, or size_t
12621                 : The last arg may or may not be 'const'
12622                 val=''
12623                 : void pointer has been seen but using that
12624                 : breaks the selectminbits test
12625                 for xxx in 'fd_set *' 'int *'; do
12626                         for nfd in 'int' 'size_t' 'unsigned long' 'unsigned' ; do
12627                                 for tmo in 'struct timeval *' 'const struct timeval *'; do
12628                                         case "$val" in
12629                                         '')     try="extern select _(($nfd, $xxx, $xxx, $xxx, $tmo));"
12630                                                 if ./protochk "$try" $hdrs; then
12631                                                         echo "Your system accepts $xxx."
12632                                                         val="$xxx"
12633                                                 fi
12634                                                 ;;
12635                                         esac
12636                                 done
12637                         done
12638                 done
12639                 case "$val" in
12640                 '')     rp='What is the type for the 2nd, 3rd, and 4th arguments to select?'
12641                         case "$d_fd_set" in
12642                                 $define) dflt="fd_set *" ;;
12643                                 *)              dflt="int *" ;;
12644                         esac
12645                         . ./myread
12646                         val=$ans
12647                         ;;
12648                 esac
12649                 selecttype="$val"
12650                 ;;
12651         *)      : no select, so pick a harmless default
12652                 selecttype='int *'
12653                 ;;
12654         esac
12655         ;;
12656 esac
12657
12658 : check for the select 'width'
12659 case "$selectminbits" in
12660 '') case "$d_select" in
12661         $define)
12662                 $cat <<EOM
12663
12664 Checking to see on how many bits at a time your select() operates...
12665 EOM
12666                 $cat >try.c <<EOCP
12667 #include <sys/types.h>
12668 #$i_time I_TIME
12669 #$i_systime I_SYS_TIME
12670 #$i_systimek I_SYS_TIME_KERNEL
12671 #ifdef I_TIME
12672 #   include <time.h>
12673 #endif
12674 #ifdef I_SYS_TIME
12675 #   ifdef I_SYS_TIME_KERNEL
12676 #       define KERNEL
12677 #   endif
12678 #   include <sys/time.h>
12679 #   ifdef I_SYS_TIME_KERNEL
12680 #       undef KERNEL
12681 #   endif
12682 #endif
12683 #$i_sysselct I_SYS_SELECT
12684 #ifdef I_SYS_SELECT
12685 #include <sys/select.h>
12686 #endif
12687 #$d_socket HAS_SOCKET
12688 #ifdef HAS_SOCKET
12689 #   include <sys/socket.h> /* Might include <sys/bsdtypes.h> */
12690 #endif
12691 #include <stdio.h>
12692 $selecttype b;
12693 #define S sizeof(*(b))
12694 #define MINBITS 64
12695 #define NBYTES (S * 8 > MINBITS ? S : MINBITS/8)
12696 #define NBITS  (NBYTES * 8)
12697 int main() {
12698     char s[NBYTES];
12699     struct timeval t;
12700     int i;
12701     FILE* fp;
12702     int fd;
12703
12704     fclose(stdin);
12705     fp = fopen("try.c", "r");
12706     if (fp == 0)
12707       exit(1);
12708     fd = fileno(fp);
12709     if (fd < 0)
12710       exit(2);
12711     b = ($selecttype)s;
12712     for (i = 0; i < NBITS; i++)
12713         FD_SET(i, b);
12714     t.tv_sec  = 0;
12715     t.tv_usec = 0;
12716     select(fd + 1, b, 0, 0, &t);
12717     for (i = NBITS - 1; i > fd && FD_ISSET(i, b); i--);
12718     printf("%d\n", i + 1);
12719     return 0;
12720 }
12721 EOCP
12722                 set try
12723                 if eval $compile_ok; then
12724                         selectminbits=`./try`
12725                         case "$selectminbits" in
12726                         '')     cat >&4 <<EOM
12727 Cannot figure out on how many bits at a time your select() operates.
12728 I'll play safe and guess it is 32 bits.
12729 EOM
12730                                 selectminbits=32
12731                                 bits="32 bits"
12732                                 ;;
12733                         1)      bits="1 bit" ;;
12734                         *)      bits="$selectminbits bits" ;;
12735                         esac
12736                         echo "Your select() operates on $bits at a time." >&4
12737                 else
12738                         rp='What is the minimum number of bits your select() operates on?'
12739                         case "$byteorder" in
12740                         1234|12345678)  dflt=32 ;;
12741                         *)              dflt=1  ;;
12742                         esac
12743                         . ./myread
12744                         val=$ans
12745                         selectminbits="$val"
12746                 fi
12747                 $rm -f try.* try
12748                 ;;
12749         *)      : no select, so pick a harmless default
12750                 selectminbits='32'
12751                 ;;
12752         esac
12753         ;;
12754 esac
12755
12756 : Trace out the files included by signal.h, then look for SIGxxx names.
12757 : Remove SIGARRAYSIZE used by HPUX.
12758 : Remove SIGSTKSIZE used by Linux.
12759 : Remove SIGSTKSZ used by Posix.
12760 : Remove SIGTYP void lines used by OS2.
12761 xxx=`echo '#include <signal.h>' |
12762         $cppstdin $cppminus $cppflags 2>/dev/null |
12763         $grep '^[       ]*#.*include' | 
12764         $awk "{print \\$$fieldn}" | $sed 's!"!!g' | $sort | $uniq`
12765 : Check this list of files to be sure we have parsed the cpp output ok.
12766 : This will also avoid potentially non-existent files, such 
12767 : as ../foo/bar.h
12768 xxxfiles=''
12769 for xx in $xxx /dev/null ; do
12770         $test -f "$xx" && xxxfiles="$xxxfiles $xx"
12771 done
12772 : If we have found no files, at least try signal.h
12773 case "$xxxfiles" in
12774 '')     xxxfiles=`./findhdr signal.h` ;;
12775 esac
12776 xxx=`awk '
12777 $1 ~ /^#define$/ && $2 ~ /^SIG[A-Z0-9]*$/ && $2 !~ /SIGARRAYSIZE/ && $2 !~ /SIGSTKSIZE/ && $2 !~ /SIGSTKSZ/ && $3 !~ /void/ {
12778         print substr($2, 4, 20)
12779 }
12780 $1 == "#" && $2 ~ /^define$/ && $3 ~ /^SIG[A-Z0-9]*$/ && $3 !~ /SIGARRAYSIZE/ && $4 !~ /void/ {
12781         print substr($3, 4, 20)
12782 }' $xxxfiles`
12783 : Append some common names just in case the awk scan failed.
12784 xxx="$xxx ABRT ALRM BUS CHLD CLD CONT DIL EMT FPE HUP ILL INT IO IOT KILL"
12785 xxx="$xxx LOST PHONE PIPE POLL PROF PWR QUIT SEGV STKFLT STOP SYS TERM TRAP"
12786 xxx="$xxx TSTP TTIN TTOU URG USR1 USR2 USR3 USR4 VTALRM"
12787 xxx="$xxx WINCH WIND WINDOW XCPU XFSZ"
12788 : generate a few handy files for later
12789 $cat > signal.c <<'EOCP'
12790 #include <sys/types.h>
12791 #include <signal.h>
12792 #include <stdio.h>
12793 int main() {
12794
12795 /* Strange style to avoid deeply-nested #if/#else/#endif */
12796 #ifndef NSIG
12797 #  ifdef _NSIG
12798 #    define NSIG (_NSIG)
12799 #  endif
12800 #endif
12801
12802 #ifndef NSIG
12803 #  ifdef SIGMAX
12804 #    define NSIG (SIGMAX+1)
12805 #  endif
12806 #endif
12807
12808 #ifndef NSIG
12809 #  ifdef SIG_MAX
12810 #    define NSIG (SIG_MAX+1)
12811 #  endif
12812 #endif
12813
12814 #ifndef NSIG
12815 #  ifdef MAXSIG
12816 #    define NSIG (MAXSIG+1)
12817 #  endif
12818 #endif
12819
12820 #ifndef NSIG
12821 #  ifdef MAX_SIG
12822 #    define NSIG (MAX_SIG+1)
12823 #  endif
12824 #endif
12825
12826 #ifndef NSIG
12827 #  ifdef SIGARRAYSIZE
12828 #    define NSIG (SIGARRAYSIZE+1) /* Not sure of the +1 */
12829 #  endif
12830 #endif
12831
12832 #ifndef NSIG
12833 #  ifdef _sys_nsig
12834 #    define NSIG (_sys_nsig) /* Solaris 2.5 */
12835 #  endif
12836 #endif
12837
12838 /* Default to some arbitrary number that's big enough to get most
12839    of the common signals.
12840 */
12841 #ifndef NSIG
12842 #    define NSIG 50
12843 #endif
12844
12845 printf("NSIG %d\n", NSIG);
12846
12847 #ifndef JUST_NSIG
12848
12849 EOCP
12850
12851 echo $xxx | $tr ' ' $trnl | $sort | $uniq | $awk '
12852 {
12853         printf "#ifdef SIG"; printf $1; printf "\n"
12854         printf "printf(\""; printf $1; printf " %%d\\n\",SIG";
12855         printf $1; printf ");\n"
12856         printf "#endif\n"
12857 }
12858 END {
12859         printf "#endif /* JUST_NSIG */\n";
12860         printf "exit(0);\n}\n";
12861 }
12862 ' >>signal.c
12863 $cat >signal.awk <<'EOP'
12864 BEGIN { ndups = 0 }
12865 $1 ~ /^NSIG$/ { nsig = $2 }
12866 ($1 !~ /^NSIG$/) && (NF == 2) {
12867     if ($2 > maxsig) { maxsig = $2 }
12868     if (sig_name[$2]) {
12869         dup_name[ndups] = $1
12870         dup_num[ndups] = $2
12871         ndups++ 
12872     }
12873     else {
12874         sig_name[$2] = $1
12875         sig_num[$2] = $2
12876     }
12877 }
12878 END { 
12879     if (nsig == 0) {
12880         nsig = maxsig + 1
12881     }
12882     printf("NSIG %d\n", nsig);
12883     for (n = 1; n < nsig; n++) {
12884         if (sig_name[n]) {
12885             printf("%s %d\n", sig_name[n], sig_num[n])
12886         }
12887         else {
12888             printf("NUM%d %d\n", n, n) 
12889         }
12890     }
12891     for (n = 0; n < ndups; n++) {
12892         printf("%s %d\n", dup_name[n], dup_num[n])
12893     }
12894 }
12895 EOP
12896 $cat >signal_cmd <<EOS
12897 $startsh
12898 if $test -s signal.lst; then
12899     echo "Using your existing signal.lst file"
12900         exit 0
12901 fi
12902 xxx="$xxx"
12903 EOS
12904 $cat >>signal_cmd <<'EOS'
12905
12906 set signal
12907 if eval $compile_ok; then
12908         ./signal$_exe | $sort -n +1 | $uniq | $awk -f signal.awk >signal.lst
12909 else
12910         echo "(I can't seem be able to compile the whole test program)" >&4
12911         echo "(I'll try it in little pieces.)" >&4
12912         set signal -DJUST_NSIG
12913         if eval $compile_ok; then
12914                 ./signal$_exe > signal.nsg
12915                 $cat signal.nsg
12916         else
12917                 echo "I can't seem to figure out how many signals you have." >&4
12918                 echo "Guessing 50." >&4
12919                 echo 'NSIG 50' > signal.nsg
12920         fi
12921         : Now look at all the signal names, one at a time.
12922         for xx in `echo $xxx | $tr ' ' $trnl | $sort | $uniq`; do
12923                 $cat > signal.c <<EOCP
12924 #include <sys/types.h>
12925 #include <signal.h>
12926 #include <stdio.h>
12927 int main() {
12928 printf("$xx %d\n", SIG${xx});
12929 return 0;
12930 }
12931 EOCP
12932                 set signal
12933                 if eval $compile; then
12934                         echo "SIG${xx} found."
12935                         ./signal$_exe  >> signal.ls1
12936                 else
12937                         echo "SIG${xx} NOT found."
12938                 fi
12939         done
12940         if $test -s signal.ls1; then
12941                 $cat signal.nsg signal.ls1 |
12942                         $sort -n +1 | $uniq | $awk -f signal.awk >signal.lst
12943         fi
12944
12945 fi
12946 if $test -s signal.lst; then
12947         :
12948 else
12949         echo "(AAK! I can't compile the test programs -- Guessing)" >&4
12950         echo 'kill -l' >signal
12951         set X `csh -f <signal`
12952         $rm -f signal
12953         shift
12954         case $# in
12955         0) set HUP INT QUIT ILL TRAP ABRT EMT FPE KILL BUS SEGV SYS PIPE ALRM TERM;;
12956         esac
12957         echo $@ | $tr ' ' $trnl | \
12958             $awk '{ printf "%s %d\n", $1, ++s; }
12959                   END { printf "NSIG %d\n", ++s }' >signal.lst
12960 fi
12961 $rm -f signal.c signal$_exe signal$_o signal.nsg signal.ls1
12962 EOS
12963 chmod a+x signal_cmd
12964 $eunicefix signal_cmd
12965
12966 : generate list of signal names
12967 echo " "
12968 case "$sig_name_init" in
12969 '') doinit=yes ;;
12970 *)  case "$sig_num_init" in
12971     ''|*,*) doinit=yes ;;
12972     esac ;;
12973 esac
12974 case "$doinit" in
12975 yes)
12976         echo "Generating a list of signal names and numbers..." >&4
12977         . ./signal_cmd
12978         sig_count=`$awk '/^NSIG/ { printf "%d", $2 }' signal.lst`
12979         sig_name=`$awk 'BEGIN { printf "ZERO " }
12980                         !/^NSIG/ { printf "%s ", $1 }' signal.lst`
12981         sig_num=`$awk  'BEGIN { printf "0 " }
12982                         !/^NSIG/ { printf "%d ", $2 }' signal.lst`
12983         sig_name_init=`$awk 'BEGIN      { printf "\"ZERO\", " }
12984                              !/^NSIG/   { printf "\"%s\", ", $1 }
12985                              END        { printf "0\n" }' signal.lst`
12986         sig_num_init=`$awk  'BEGIN      { printf "0, " }
12987                              !/^NSIG/   { printf "%d, ", $2}
12988                              END        { printf "0\n"}' signal.lst`
12989         ;;
12990 esac
12991 echo "The following $sig_count signals are available:"
12992 echo " "
12993 echo $sig_name | $awk \
12994 'BEGIN { linelen = 0 }
12995 {
12996         for (i = 1; i <= NF; i++) {
12997                 name = "SIG" $i " "
12998                 linelen = linelen + length(name)
12999                 if (linelen > 70) {
13000                         printf "\n"
13001                         linelen = length(name)
13002                 }
13003                 printf "%s", name
13004         }
13005         printf "\n"
13006 }'
13007 $rm -f signal signal.c signal.awk signal.lst signal_cmd 
13008
13009 echo " "
13010 case "$sizetype" in
13011 *_t) zzz="$sizetype"    ;;
13012 *)   zzz="filesize"     ;;
13013 esac
13014 echo "Checking the size of $zzz..." >&4 
13015 cat > try.c <<EOCP
13016 #include <sys/types.h>
13017 #include <stdio.h>
13018 int main() {
13019     printf("%d\n", (int)sizeof($sizetype));
13020     exit(0);
13021 }
13022 EOCP
13023 set try
13024 if eval $compile_ok; then
13025         yyy=`./try`
13026         case "$yyy" in
13027         '')     sizesize=4
13028                 echo "(I can't execute the test program--guessing $sizesize.)" >&4
13029                 ;;
13030         *)      sizesize=$yyy
13031                 echo "Your $zzz size is $sizesize bytes."
13032                 ;;
13033         esac
13034 else
13035         sizesize=4
13036         echo "(I can't compile the test program--guessing $sizesize.)" >&4
13037 fi
13038
13039
13040 : see what type is used for signed size_t
13041 set ssize_t ssizetype int stdio.h sys/types.h
13042 eval $typedef
13043 dflt="$ssizetype"
13044 $cat > ssize.c <<EOM
13045 #include <stdio.h>
13046 #include <sys/types.h>
13047 #define Size_t $sizetype
13048 #define SSize_t $dflt
13049 int main()
13050 {
13051         if (sizeof(Size_t) == sizeof(SSize_t))
13052                 printf("$dflt\n");
13053         else if (sizeof(Size_t) == sizeof(int))
13054                 printf("int\n");
13055         else 
13056                 printf("long\n");
13057         exit(0);
13058 }
13059 EOM
13060 echo " "
13061 set ssize
13062 if eval $compile_ok && ./ssize > /dev/null; then
13063         ssizetype=`./ssize`
13064         echo "I'll be using $ssizetype for functions returning a byte count." >&4
13065 else
13066         $cat >&4 <<EOM
13067 Help! I can't compile and run the ssize_t test program: please enlighten me!
13068 (This is probably a misconfiguration in your system or libraries, and
13069 you really ought to fix it.  Still, I'll try anyway.)
13070
13071 I need a type that is the same size as $sizetype, but is guaranteed to
13072 be signed.  Common values are ssize_t, int and long.
13073
13074 EOM
13075         rp="What signed type is the same size as $sizetype?"
13076         . ./myread
13077         ssizetype="$ans"
13078 fi
13079 $rm -f ssize ssize.*
13080
13081 : see what type of char stdio uses.
13082 echo " "
13083 if $contains 'unsigned.*char.*_ptr;' `./findhdr stdio.h` >/dev/null 2>&1 ; then
13084         echo "Your stdio uses unsigned chars." >&4
13085         stdchar="unsigned char"
13086 else
13087         echo "Your stdio uses signed chars." >&4
13088         stdchar="char"
13089 fi
13090
13091 : see if time exists
13092 echo " "
13093 if test "X$d_time" = X -o X"$timetype" = X; then
13094     if set time val -f d_time; eval $csym; $val; then
13095                 echo 'time() found.' >&4
13096                 val="$define"
13097                 rp="What is the type returned by time() on this system?"
13098                 set time_t timetype long stdio.h sys/types.h
13099                 eval $typedef_ask
13100     else
13101                 echo 'time() not found, hope that will do.' >&4
13102                 val="$undef"
13103                 timetype='int';
13104     fi
13105     set d_time
13106     eval $setvar
13107 fi
13108
13109 : see what type uids are declared as in the kernel
13110 echo " "
13111 echo "Looking for the type for user ids returned by getuid()."
13112 set uid_t uidtype xxx stdio.h sys/types.h
13113 eval $typedef
13114 case "$uidtype" in
13115 xxx)
13116         xxx=`./findhdr sys/user.h`
13117         set `grep '_ruid;' "$xxx" 2>/dev/null` unsigned short
13118         case $1 in
13119         unsigned) dflt="$1 $2" ;;
13120         *) dflt="$1" ;;
13121         esac
13122         ;;
13123 *) dflt="$uidtype";;
13124 esac
13125 case "$uidtype" in
13126 uid_t)  echo "uid_t found." ;;
13127 *)      rp="What is the type for user ids returned by getuid()?"
13128         . ./myread
13129         uidtype="$ans"
13130         ;;
13131 esac
13132
13133 echo " "
13134 case "$uidtype" in
13135 *_t) zzz="$uidtype"     ;;
13136 *)   zzz="uid"          ;;
13137 esac
13138 echo "Checking the size of $zzz..." >&4 
13139 cat > try.c <<EOCP
13140 #include <sys/types.h>
13141 #include <stdio.h>
13142 int main() {
13143     printf("%d\n", (int)sizeof($uidtype));
13144     exit(0);
13145 }
13146 EOCP
13147 set try
13148 if eval $compile_ok; then
13149         yyy=`./try`
13150         case "$yyy" in
13151         '')     uidsize=4
13152                 echo "(I can't execute the test program--guessing $uidsize.)" >&4
13153                 ;;
13154         *)      uidsize=$yyy
13155                 echo "Your $zzz size is $uidsize bytes."
13156                 ;;
13157         esac
13158 else
13159         uidsize=4
13160         echo "(I can't compile the test program--guessing $uidsize.)" >&4
13161 fi
13162
13163 echo " "
13164 case "$uidtype" in
13165 *_t) zzz="$uidtype"     ;;
13166 *)   zzz="uid"          ;;
13167 esac
13168 echo "Checking the sign of $zzz..." >&4
13169 cat > try.c <<EOCP
13170 #include <sys/types.h>
13171 #include <stdio.h>
13172 int main() {
13173         $uidtype foo = -1;
13174         if (foo < 0)
13175                 printf("-1\n");
13176         else
13177                 printf("1\n");
13178 }
13179 EOCP
13180 set try
13181 if eval $compile; then
13182         yyy=`./try`
13183         case "$yyy" in
13184         '')     uidsign=1
13185                 echo "(I can't execute the test program--guessing unsigned.)" >&4
13186                 ;;
13187         *)      uidsign=$yyy
13188                 case "$uidsign" in
13189                  1) echo "Your $zzz is unsigned." ;;
13190                 -1) echo "Your $zzz is signed."   ;;
13191                 esac
13192                 ;;
13193         esac
13194 else
13195         uidsign=1
13196         echo "(I can't compile the test program--guessing unsigned.)" >&4
13197 fi
13198
13199
13200
13201 echo " "
13202 $echo "Checking the format string to be used for uids..." >&4
13203
13204 case "$uidsign" in
13205 -1)     if $test X"$uidsize" = X"$ivsize"; then
13206                 uidformat="$ivdformat"
13207         else
13208                 if $test X"$uidsize" = X"$longsize"; then
13209                         uidformat='"ld"'
13210                 else
13211                         if $test X"$uidsize" = X"$intsize"; then
13212                                 uidformat='"d"'
13213                         else
13214                                 if $test X"$uidsize" = X"$shortsize"; then
13215                                         uidformat='"hd"'
13216                                 fi
13217                         fi
13218                 fi
13219         fi
13220         ;;
13221 *)      if $test X"$uidsize" = X"$uvsize"; then
13222                 uidformat="$uvuformat"
13223         else
13224                 if $test X"$uidsize" = X"$longsize"; then
13225                         uidformat='"lu"'
13226                 else
13227                         if $test X"$uidsize" = X"$intsize"; then
13228                                 uidformat='"u"'
13229                         else
13230                                 if $test X"$uidsize" = X"$shortsize"; then
13231                                         uidformat='"hu"'
13232                                 fi
13233                         fi
13234                 fi
13235         fi
13236         ;;
13237 esac
13238
13239 : see if dbm.h is available
13240 : see if dbmclose exists
13241 set dbmclose d_dbmclose
13242 eval $inlibc
13243
13244 case "$d_dbmclose" in
13245 $define)
13246         set dbm.h i_dbm
13247         eval $inhdr
13248         case "$i_dbm" in
13249         $define)
13250                 val="$undef"
13251                 set i_rpcsvcdbm
13252                 eval $setvar
13253                 ;;
13254         *)      set rpcsvc/dbm.h i_rpcsvcdbm
13255                 eval $inhdr
13256                 ;;
13257         esac
13258         ;;
13259 *)      echo "We won't be including <dbm.h>"
13260         val="$undef"
13261         set i_dbm
13262         eval $setvar
13263         val="$undef"
13264         set i_rpcsvcdbm
13265         eval $setvar
13266         ;;
13267 esac
13268
13269 : see if this is a sys/file.h system
13270 val=''
13271 set sys/file.h val
13272 eval $inhdr
13273
13274 : do we need to include sys/file.h ?
13275 case "$val" in
13276 "$define")
13277         echo " "
13278         if $h_sysfile; then
13279                 val="$define"
13280                 echo "We'll be including <sys/file.h>." >&4
13281         else
13282                 val="$undef"
13283                 echo "We won't be including <sys/file.h>." >&4
13284         fi
13285         ;;
13286 *)
13287         h_sysfile=false
13288         ;;
13289 esac
13290 set i_sysfile
13291 eval $setvar
13292
13293 : see if fcntl.h is there
13294 val=''
13295 set fcntl.h val
13296 eval $inhdr
13297
13298 : see if we can include fcntl.h
13299 case "$val" in
13300 "$define")
13301         echo " "
13302         if $h_fcntl; then
13303                 val="$define"
13304                 echo "We'll be including <fcntl.h>." >&4
13305         else
13306                 val="$undef"
13307                 if $h_sysfile; then
13308         echo "We don't need to include <fcntl.h> if we include <sys/file.h>." >&4
13309                 else
13310                         echo "We won't be including <fcntl.h>." >&4
13311                 fi
13312         fi
13313         ;;
13314 *)
13315         h_fcntl=false
13316         val="$undef"
13317         ;;
13318 esac
13319 set i_fcntl
13320 eval $setvar
13321
13322 : see if locale.h is available
13323 set locale.h i_locale
13324 eval $inhdr
13325
13326 : see if mach cthreads are available
13327 if test "X$usethreads" = "X$define"; then
13328         set mach/cthreads.h i_machcthr
13329         eval $inhdr
13330 else
13331         i_machcthr="$undef"
13332 fi
13333
13334
13335
13336 : see if this is a math.h system
13337 set math.h i_math
13338 eval $inhdr
13339
13340 : see if this is a mntent.h system
13341 set mntent.h i_mntent
13342 eval $inhdr
13343
13344 : see if ndbm.h is available
13345 set ndbm.h t_ndbm
13346 eval $inhdr
13347 case "$t_ndbm" in
13348 $define)
13349         : see if dbm_open exists
13350         set dbm_open d_dbm_open
13351         eval $inlibc
13352         case "$d_dbm_open" in
13353         $undef)
13354                 t_ndbm="$undef"
13355                 echo "We won't be including <ndbm.h>"
13356                 ;;
13357         esac
13358         ;;
13359 esac
13360 val="$t_ndbm"
13361 set i_ndbm
13362 eval $setvar
13363
13364 : see if net/errno.h is available
13365 val=''
13366 set net/errno.h val
13367 eval $inhdr
13368
13369 : Unfortunately, it causes problems on some systems.  Arrgh.
13370 case "$val" in
13371 $define)
13372         cat > try.c <<'EOM'
13373 #include <stdio.h>
13374 #include <errno.h>
13375 #include <net/errno.h>
13376 int func()
13377 {
13378         return ENOTSOCK;
13379 }
13380 EOM
13381         if $cc $ccflags -c try.c >/dev/null 2>&1; then
13382                 echo "We'll be including <net/errno.h>." >&4
13383         else
13384                 echo "We won't be including <net/errno.h>." >&4
13385                 val="$undef"
13386         fi
13387         $rm -f try.* try
13388         ;;
13389 esac
13390 set i_neterrno
13391 eval $setvar
13392
13393 : see if netinet/tcp.h is available
13394 set netinet/tcp.h i_netinettcp
13395 eval $inhdr
13396
13397 : see if this is a poll.h system
13398 set poll.h i_poll
13399 eval $inhdr
13400
13401 : get C preprocessor symbols handy
13402 echo " "
13403 $echo $n "Hmm... $c"
13404 echo $al | $tr ' ' $trnl >Cppsym.know
13405 $cat <<EOSS >Cppsym
13406 $startsh
13407 case "\$1" in
13408 -l) list=true
13409         shift
13410         ;;
13411 esac
13412 unknown=''
13413 case "\$list\$#" in
13414 1|2)
13415         for sym do
13416                 if $contains "^\$1$" Cppsym.true >/dev/null 2>&1; then
13417                         exit 0
13418                 elif $contains "^\$1$" Cppsym.know >/dev/null 2>&1; then
13419                         :
13420                 else
13421                         unknown="\$unknown \$sym"
13422                 fi
13423         done
13424         set X \$unknown
13425         shift
13426         ;;
13427 esac
13428 case \$# in
13429 0) exit 1;;
13430 esac
13431 echo \$* | $tr ' ' '$trnl' | $sed -e 's/\(.*\)/\\
13432 #ifdef \1\\
13433 exit 0; _ _ _ _\1\\      \1\\
13434 #endif\\
13435 /' >Cppsym\$\$
13436 echo "exit 1; _ _ _" >>Cppsym\$\$
13437 $cppstdin $cppminus <Cppsym\$\$ | $grep '^exit [01]; _ _'  >Cppsym2\$\$
13438 case "\$list" in
13439 true) $awk 'NF > 5 {print substr(\$6,2,100)}' <Cppsym2\$\$ ;;
13440 *)
13441         sh Cppsym2\$\$
13442         status=\$?
13443         ;;
13444 esac
13445 $rm -f Cppsym\$\$ Cppsym2\$\$
13446 exit \$status
13447 EOSS
13448 chmod +x Cppsym
13449 $eunicefix Cppsym
13450 ./Cppsym -l $al | $sort | $grep -v '^$' >Cppsym.true
13451
13452 : now check the C compiler for additional symbols
13453 postprocess_cc_v=''
13454 case "$osname" in
13455 aix) postprocess_cc_v="|$tr , ' '" ;;
13456 esac
13457 $cat >ccsym <<EOS
13458 $startsh
13459 $cat >tmp.c <<EOF
13460 extern int foo;
13461 EOF
13462 for i in \`$cc -v -c tmp.c 2>&1 $postprocess_cc_v\`
13463 do
13464         case "\$i" in
13465         -D*) echo "\$i" | $sed 's/^-D//';;
13466         -A*) $test "$gccversion" && echo "\$i" | $sed 's/^-A\(.*\)(\(.*\))/\1=\2/';;
13467         esac
13468 done
13469 $rm -f try.c
13470 EOS
13471 postprocess_cc_v=''
13472 chmod +x ccsym
13473 $eunicefix ccsym
13474 ./ccsym > ccsym1.raw
13475 if $test -s ccsym1.raw; then
13476        $sort ccsym1.raw | $uniq >ccsym.raw
13477 else
13478        mv ccsym1.raw ccsym.raw
13479 fi
13480
13481 $awk '/\=/ { print $0; next }
13482         { print $0"=1" }' ccsym.raw >ccsym.list
13483 $awk '{ print $0"=1" }' Cppsym.true >ccsym.true
13484 $comm -13 ccsym.true ccsym.list >ccsym.own
13485 $comm -12 ccsym.true ccsym.list >ccsym.com
13486 $comm -23 ccsym.true ccsym.list >ccsym.cpp
13487 also=''
13488 if $test -z ccsym.raw; then
13489         echo "Your C compiler doesn't seem to define any symbols!" >&4
13490         echo " "
13491         echo "However, your C preprocessor defines the following symbols:"
13492         $cat Cppsym.true
13493         ccsymbols=''
13494         cppsymbols=`$cat Cppsym.true`
13495         cppsymbols=`echo $cppsymbols`
13496         cppccsymbols="$cppsymbols"
13497 else
13498         if $test -s ccsym.com; then
13499                 echo "Your C compiler and pre-processor define these symbols:"
13500                 $sed -e 's/\(.*\)=.*/\1/' ccsym.com
13501                 also='also '
13502                 symbols='ones'
13503                 cppccsymbols=`$cat ccsym.com`
13504                 cppccsymbols=`echo $cppccsymbols`
13505                 $test "$silent" || sleep 1
13506         fi
13507         if $test -s ccsym.cpp; then
13508                 $test "$also" && echo " "
13509                 echo "Your C pre-processor ${also}defines the following symbols:"
13510                 $sed -e 's/\(.*\)=.*/\1/' ccsym.cpp
13511                 also='further '
13512                 cppsymbols=`$cat ccsym.cpp`
13513                 cppsymbols=`echo $cppsymbols`
13514                 $test "$silent" || sleep 1
13515         fi
13516         if $test -s ccsym.own; then
13517                 $test "$also" && echo " "
13518                 echo "Your C compiler ${also}defines the following cpp symbols:"
13519                 $sed -e 's/\(.*\)=1/\1/' ccsym.own
13520                 $sed -e 's/\(.*\)=.*/\1/' ccsym.own | $uniq >>Cppsym.true
13521                 ccsymbols=`$cat ccsym.own`
13522                 ccsymbols=`echo $ccsymbols`
13523                 $test "$silent" || sleep 1
13524         fi
13525 fi
13526 $rm -f ccsym*
13527
13528 : see if this is a termio system
13529 val="$undef"
13530 val2="$undef"
13531 val3="$undef"
13532 if $test `./findhdr termios.h`; then
13533         set tcsetattr i_termios
13534         eval $inlibc
13535         val3="$i_termios"
13536 fi
13537 echo " "
13538 case "$val3" in
13539 "$define") echo "You have POSIX termios.h... good!" >&4;;
13540 *) if ./Cppsym pyr; then
13541                 case "`/bin/universe`" in
13542                 ucb) if $test `./findhdr sgtty.h`; then
13543                                 val2="$define"
13544                                 echo "<sgtty.h> found." >&4
13545                         else
13546                                 echo "System is pyramid with BSD universe."
13547                                 echo "<sgtty.h> not found--you could have problems." >&4
13548                         fi;;
13549                 *) if $test `./findhdr termio.h`; then
13550                                 val="$define"
13551                                 echo "<termio.h> found." >&4
13552                         else
13553                                 echo "System is pyramid with USG universe."
13554                                 echo "<termio.h> not found--you could have problems." >&4
13555                         fi;;
13556                 esac
13557         elif ./usg; then
13558                 if $test `./findhdr termio.h`; then
13559                         echo "<termio.h> found." >&4
13560                         val="$define"
13561                 elif $test `./findhdr sgtty.h`; then
13562                         echo "<sgtty.h> found." >&4
13563                         val2="$define"
13564                 else
13565 echo "Neither <termio.h> nor <sgtty.h> found--you could have problems." >&4
13566                 fi
13567         else
13568                 if $test `./findhdr sgtty.h`; then
13569                         echo "<sgtty.h> found." >&4
13570                         val2="$define"
13571                 elif $test `./findhdr termio.h`; then
13572                         echo "<termio.h> found." >&4
13573                         val="$define"
13574                 else
13575 echo "Neither <sgtty.h> nor <termio.h> found--you could have problems." >&4
13576                 fi
13577         fi;;
13578 esac
13579 set i_termio; eval $setvar
13580 val=$val2; set i_sgtty; eval $setvar
13581 val=$val3; set i_termios; eval $setvar
13582
13583 : see if this is a shadow.h system
13584 set shadow.h i_shadow
13585 eval $inhdr
13586
13587 : see if this is a socks.h system
13588 set socks.h i_socks
13589 eval $inhdr
13590
13591 : see if stdarg is available
13592 echo " "
13593 if $test `./findhdr stdarg.h`; then
13594         echo "<stdarg.h> found." >&4
13595         valstd="$define"
13596 else
13597         echo "<stdarg.h> NOT found." >&4
13598         valstd="$undef"
13599 fi
13600
13601 : see if varags is available
13602 echo " "
13603 if $test `./findhdr varargs.h`; then
13604         echo "<varargs.h> found." >&4
13605 else
13606         echo "<varargs.h> NOT found, but that's ok (I hope)." >&4
13607 fi
13608
13609 : set up the varargs testing programs
13610 $cat > varargs.c <<EOP
13611 #ifdef I_STDARG
13612 #include <stdarg.h>
13613 #endif
13614 #ifdef I_VARARGS
13615 #include <varargs.h>
13616 #endif
13617
13618 #ifdef I_STDARG
13619 int f(char *p, ...)
13620 #else
13621 int f(va_alist)
13622 va_dcl
13623 #endif
13624 {
13625         va_list ap;
13626 #ifndef I_STDARG
13627         char *p;
13628 #endif
13629 #ifdef I_STDARG
13630         va_start(ap,p);
13631 #else
13632         va_start(ap);
13633         p = va_arg(ap, char *);
13634 #endif
13635         va_end(ap);
13636 }
13637 EOP
13638 $cat > varargs <<EOP
13639 $startsh
13640 if $cc -c $ccflags -D\$1 varargs.c >/dev/null 2>&1; then
13641         echo "true"
13642 else
13643         echo "false"
13644 fi
13645 $rm -f varargs$_o
13646 EOP
13647 chmod +x varargs
13648
13649 : now check which varargs header should be included
13650 echo " "
13651 i_varhdr=''
13652 case "$valstd" in
13653 "$define")
13654         if `./varargs I_STDARG`; then
13655                 val='stdarg.h'
13656         elif `./varargs I_VARARGS`; then
13657                 val='varargs.h'
13658         fi
13659         ;;
13660 *)
13661         if `./varargs I_VARARGS`; then
13662                 val='varargs.h'
13663         fi
13664         ;;
13665 esac
13666 case "$val" in
13667 '')
13668 echo "I could not find the definition for va_dcl... You have problems..." >&4
13669         val="$undef"; set i_stdarg; eval $setvar
13670         val="$undef"; set i_varargs; eval $setvar
13671         ;;
13672 *) 
13673         set i_varhdr
13674         eval $setvar
13675         case "$i_varhdr" in
13676         stdarg.h)
13677                 val="$define"; set i_stdarg; eval $setvar
13678                 val="$undef"; set i_varargs; eval $setvar
13679                 ;;
13680         varargs.h)
13681                 val="$undef"; set i_stdarg; eval $setvar
13682                 val="$define"; set i_varargs; eval $setvar
13683                 ;;
13684         esac
13685         echo "We'll include <$i_varhdr> to get va_dcl definition." >&4;;
13686 esac
13687 $rm -f varargs*
13688
13689 : see if stddef is available
13690 set stddef.h i_stddef
13691 eval $inhdr
13692
13693 : see if sys/access.h is available
13694 set sys/access.h i_sysaccess
13695 eval $inhdr
13696
13697 : see if ioctl defs are in sgtty, termio, sys/filio or sys/ioctl
13698 set sys/filio.h i_sysfilio
13699 eval $inhdr
13700 echo " "
13701 if $test `./findhdr sys/ioctl.h`; then
13702         val="$define"
13703         echo '<sys/ioctl.h> found.' >&4
13704 else
13705         val="$undef"
13706         if $test $i_sysfilio = "$define"; then
13707             echo '<sys/ioctl.h> NOT found.' >&4
13708         else
13709                 $test $i_sgtty = "$define" && xxx="sgtty.h"
13710                 $test $i_termio = "$define" && xxx="termio.h"
13711                 $test $i_termios = "$define" && xxx="termios.h"
13712 echo "No <sys/ioctl.h> found, assuming ioctl args are defined in <$xxx>." >&4
13713         fi
13714 fi
13715 set i_sysioctl
13716 eval $setvar
13717
13718 : see if sys/resource.h has to be included
13719 set sys/resource.h i_sysresrc
13720 eval $inhdr
13721
13722 : see if sys/security.h is available
13723 set sys/security.h i_syssecrt
13724 eval $inhdr
13725
13726 : see if this is a sys/statvfs.h system
13727 set sys/statvfs.h i_sysstatvfs
13728 eval $inhdr
13729
13730 : see if this is a sys/uio.h system
13731 set sys/uio.h i_sysuio
13732 eval $inhdr
13733
13734 : see if this is a sys/un.h system
13735 set sys/un.h i_sysun
13736 eval $inhdr
13737
13738 : see if this is a syswait system
13739 set sys/wait.h i_syswait
13740 eval $inhdr
13741
13742 : see if this is a ustat.h system
13743 set ustat.h i_ustat
13744 eval $inhdr
13745
13746 : see if this is an utime system
13747 set utime.h i_utime
13748 eval $inhdr
13749
13750 : see if this is a values.h system
13751 set values.h i_values
13752 eval $inhdr
13753
13754 : see if this is a vfork system
13755 case "$d_vfork" in
13756 "$define")
13757         set vfork.h i_vfork
13758         eval $inhdr
13759         ;;
13760 *)
13761         i_vfork="$undef"
13762         ;;
13763 esac
13764
13765 : see if gdbm.h is available
13766 set gdbm.h t_gdbm
13767 eval $inhdr
13768 case "$t_gdbm" in
13769 $define)
13770         : see if gdbm_open exists
13771         set gdbm_open d_gdbm_open
13772         eval $inlibc
13773         case "$d_gdbm_open" in
13774         $undef)
13775                 t_gdbm="$undef"
13776                 echo "We won't be including <gdbm.h>"
13777                 ;;
13778         esac
13779         ;;
13780 esac
13781 val="$t_gdbm"
13782 set i_gdbm
13783 eval $setvar
13784
13785 echo " "
13786 echo "Looking for extensions..." >&4
13787 : If we are using the old config.sh, known_extensions may contain
13788 : old or inaccurate or duplicate values.
13789 known_extensions=''
13790 nonxs_extensions=''
13791 : We do not use find because it might not be available.
13792 : We do not just use MANIFEST because the user may have dropped
13793 : some additional extensions into the source tree and expect them
13794 : to be built.
13795
13796 : Function to recursively find available extensions, ignoring DynaLoader
13797 : NOTE: recursion limit of 10 to prevent runaway in case of symlink madness
13798 find_extensions='
13799     for xxx in *; do
13800        case "$xxx" in
13801            DynaLoader|dynaload) ;;
13802            *)
13803            if $test -f $xxx/$xxx.xs; then
13804                known_extensions="$known_extensions $1$xxx";
13805            elif $test -f $xxx/Makefile.PL; then
13806                nonxs_extensions="$nonxs_extensions $1$xxx";
13807            else
13808                if $test -d $xxx -a $# -lt 10; then
13809                    set $1$xxx/ $*;
13810                    cd $xxx;
13811                    eval $find_extensions;
13812                    cd ..;
13813                    shift;
13814                fi;
13815            fi
13816            ;;
13817        esac;
13818     done'
13819 tdir=`pwd`
13820 cd $rsrc/ext
13821 set X
13822 shift
13823 eval $find_extensions
13824 set X $nonxs_extensions
13825 shift
13826 nonxs_extensions="$*"
13827 set X $known_extensions
13828 shift
13829 known_extensions="$*"
13830 cd $tdir
13831
13832 : Now see which are supported on this system.
13833 avail_ext=''
13834 for xxx in $known_extensions ; do
13835         case "$xxx" in
13836         DB_File|db_file)
13837                 case "$i_db" in
13838                 $define) avail_ext="$avail_ext $xxx" ;;
13839                 esac
13840                 ;;
13841         GDBM_File|gdbm_fil)
13842                 case "$i_gdbm" in 
13843                 $define) avail_ext="$avail_ext $xxx" ;;
13844                 esac
13845                 ;;
13846         NDBM_File|ndbm_fil)
13847                 case "$i_ndbm" in
13848                 $define) avail_ext="$avail_ext $xxx" ;;
13849                 esac
13850                 ;;
13851         ODBM_File|odbm_fil) 
13852                 case "${i_dbm}${i_rpcsvcdbm}" in
13853                 *"${define}"*) avail_ext="$avail_ext $xxx" ;;
13854                 esac
13855                 ;;
13856         POSIX|posix)
13857                 case "$useposix" in
13858                 true|define|y) avail_ext="$avail_ext $xxx" ;;
13859                 esac
13860                 ;;
13861         Opcode|opcode)
13862                 case "$useopcode" in
13863                 true|define|y) avail_ext="$avail_ext $xxx" ;;
13864                 esac
13865                 ;;
13866         Socket|socket)
13867                 case "$d_socket" in 
13868                 true|$define|y) avail_ext="$avail_ext $xxx" ;;
13869                 esac
13870                 ;;
13871         Thread|thread)
13872                 case "$usethreads" in 
13873                 true|$define|y) avail_ext="$avail_ext $xxx" ;;
13874                 esac
13875                 ;;
13876         IPC/SysV|ipc/sysv)
13877                 : XXX Do we need a useipcsysv variable here
13878                 case "${d_msg}${d_sem}${d_shm}" in 
13879                 *"${define}"*) avail_ext="$avail_ext $xxx" ;;
13880                 esac
13881                 ;;
13882         *)      avail_ext="$avail_ext $xxx"
13883                 ;;
13884         esac
13885 done
13886
13887 set X $avail_ext
13888 shift
13889 avail_ext="$*"
13890
13891 : Now see which nonxs extensions are supported on this system.
13892 : For now assume all are.
13893 nonxs_ext=''
13894 for xxx in $nonxs_extensions ; do
13895         case "$xxx" in
13896         *)      nonxs_ext="$nonxs_ext $xxx"
13897                 ;;
13898         esac
13899 done
13900
13901 set X $nonxs_ext
13902 shift
13903 nonxs_ext="$*"
13904
13905 case $usedl in
13906 $define)
13907         $cat <<EOM
13908 A number of extensions are supplied with $package.  You may choose to
13909 compile these extensions for dynamic loading (the default), compile
13910 them into the $package executable (static loading), or not include
13911 them at all.  Answer "none" to include no extensions.
13912 Note that DynaLoader is always built and need not be mentioned here.
13913
13914 EOM
13915         case "$dynamic_ext" in
13916         '') dflt="$avail_ext" ;;
13917         *)      dflt="$dynamic_ext"
13918                 # Perhaps we are reusing an old out-of-date config.sh.
13919                 case "$hint" in
13920                 previous)
13921                         if test X"$dynamic_ext" != X"$avail_ext"; then
13922                                 $cat <<EOM
13923 NOTICE:  Your previous config.sh list may be incorrect. 
13924 The extensions now available to you are 
13925         ${avail_ext}
13926 but the default list from your previous config.sh is
13927         ${dynamic_ext} 
13928
13929 EOM
13930                         fi
13931                         ;;
13932                 esac
13933                 ;;
13934         esac
13935         case "$dflt" in
13936         '')     dflt=none;;
13937         esac
13938         rp="What extensions do you wish to load dynamically?"
13939         . ./myread
13940         case "$ans" in
13941         none) dynamic_ext=' ' ;;
13942         *) dynamic_ext="$ans" ;;
13943         esac
13944
13945         case "$static_ext" in
13946         '')
13947                 : Exclude those already listed in dynamic linking
13948                 dflt=''
13949                 for xxx in $avail_ext; do
13950                         case " $dynamic_ext " in
13951                         *" $xxx "*) ;;
13952                         *) dflt="$dflt $xxx" ;;
13953                         esac
13954                 done
13955                 set X $dflt
13956                 shift
13957                 dflt="$*"
13958                 ;;
13959         *)  dflt="$static_ext" 
13960                 ;;
13961         esac
13962
13963         case "$dflt" in
13964         '')     dflt=none;;
13965         esac
13966         rp="What extensions do you wish to load statically?"
13967         . ./myread
13968         case "$ans" in
13969         none) static_ext=' ' ;;
13970         *) static_ext="$ans" ;;
13971         esac
13972         ;;
13973 *)
13974         $cat <<EOM
13975 A number of extensions are supplied with $package.  Answer "none" 
13976 to include no extensions. 
13977 Note that DynaLoader is always built and need not be mentioned here.
13978
13979 EOM
13980         case "$static_ext" in
13981         '') dflt="$avail_ext" ;;
13982         *)      dflt="$static_ext"
13983                 # Perhaps we are reusing an old out-of-date config.sh.
13984                 case "$hint" in
13985                 previous)
13986                         if test X"$static_ext" != X"$avail_ext"; then
13987                                 $cat <<EOM
13988 NOTICE:  Your previous config.sh list may be incorrect. 
13989 The extensions now available to you are 
13990         ${avail_ext}
13991 but the default list from your previous config.sh is
13992         ${static_ext} 
13993
13994 EOM
13995                         fi
13996                         ;;
13997                 esac
13998                 ;;
13999         esac
14000         : Exclude those that are not xs extensions
14001         case "$dflt" in
14002         '')     dflt=none;;
14003         esac
14004         rp="What extensions do you wish to include?"
14005         . ./myread
14006         case "$ans" in
14007         none) static_ext=' ' ;;
14008         *) static_ext="$ans" ;;
14009         esac
14010         ;;
14011 esac
14012
14013 set X $dynamic_ext $static_ext $nonxs_ext
14014 shift
14015 extensions="$*"
14016
14017 : Remove build directory name from cppstdin so it can be used from
14018 : either the present location or the final installed location.
14019 echo " "
14020 : Get out of the UU directory to get correct path name.
14021 cd ..
14022 case "$cppstdin" in
14023 `pwd`/cppstdin)
14024         echo "Stripping down cppstdin path name"
14025         cppstdin=cppstdin
14026         ;;
14027 esac
14028 cd UU
14029
14030 : end of configuration questions
14031 echo " "
14032 echo "End of configuration questions."
14033 echo " "
14034
14035 : back to where it started
14036 if test -d ../UU; then
14037         cd ..
14038 fi
14039
14040 : configuration may be patched via a 'config.over' file
14041 if $test -f config.over; then
14042         echo " "
14043         dflt=y
14044         rp='I see a config.over file.  Do you wish to load it?'
14045         . UU/myread
14046         case "$ans" in
14047         n*) echo "OK, I'll ignore it.";;
14048         *)      . ./config.over
14049                 echo "Configuration override changes have been loaded."
14050                 ;;
14051         esac
14052 fi
14053
14054 : in case they want portability, strip down executable paths
14055 case "$d_portable" in
14056 "$define")
14057         echo " "
14058         echo "Stripping down executable paths..." >&4
14059         for file in $loclist $trylist; do
14060                 eval temp=\$$file
14061                 eval $file=`basename $temp`
14062         done
14063         ;;
14064 esac
14065
14066 : create config.sh file
14067 echo " "
14068 echo "Creating config.sh..." >&4
14069 $spitshell <<EOT >config.sh
14070 $startsh
14071 #
14072 # This file was produced by running the Configure script. It holds all the
14073 # definitions figured out by Configure. Should you modify one of these values,
14074 # do not forget to propagate your changes by running "Configure -der". You may
14075 # instead choose to run each of the .SH files by yourself, or "Configure -S".
14076 #
14077
14078 # Package name      : $package
14079 # Source directory  : $src
14080 # Configuration time: $cf_time
14081 # Configured by     : $cf_by
14082 # Target system     : $myuname
14083
14084 Author='$Author'
14085 Date='$Date'
14086 Header='$Header'
14087 Id='$Id'
14088 Locker='$Locker'
14089 Log='$Log'
14090 Mcc='$Mcc'
14091 RCSfile='$RCSfile'
14092 Revision='$Revision'
14093 Source='$Source'
14094 State='$State'
14095 _a='$_a'
14096 _exe='$_exe'
14097 _o='$_o'
14098 afs='$afs'
14099 alignbytes='$alignbytes'
14100 ansi2knr='$ansi2knr'
14101 aphostname='$aphostname'
14102 apiversion='$apiversion'
14103 ar='$ar'
14104 archlib='$archlib'
14105 archlibexp='$archlibexp'
14106 archname64='$archname64'
14107 archname='$archname'
14108 archobjs='$archobjs'
14109 awk='$awk'
14110 baserev='$baserev'
14111 bash='$bash'
14112 bin='$bin'
14113 bincompat5005='$bincompat5005'
14114 binexp='$binexp'
14115 bison='$bison'
14116 byacc='$byacc'
14117 byteorder='$byteorder'
14118 c='$c'
14119 castflags='$castflags'
14120 cat='$cat'
14121 cc='$cc'
14122 cccdlflags='$cccdlflags'
14123 ccdlflags='$ccdlflags'
14124 ccflags='$ccflags'
14125 ccsymbols='$ccsymbols'
14126 cf_by='$cf_by'
14127 cf_email='$cf_email'
14128 cf_time='$cf_time'
14129 charsize='$charsize'
14130 chgrp='$chgrp'
14131 chmod='$chmod'
14132 chown='$chown'
14133 clocktype='$clocktype'
14134 comm='$comm'
14135 compress='$compress'
14136 contains='$contains'
14137 cp='$cp'
14138 cpio='$cpio'
14139 cpp='$cpp'
14140 cpp_stuff='$cpp_stuff'
14141 cppccsymbols='$cppccsymbols'
14142 cppflags='$cppflags'
14143 cpplast='$cpplast'
14144 cppminus='$cppminus'
14145 cpprun='$cpprun'
14146 cppstdin='$cppstdin'
14147 cppsymbols='$cppsymbols'
14148 crosscompile='$crosscompile'
14149 cryptlib='$cryptlib'
14150 csh='$csh'
14151 d_Gconvert='$d_Gconvert'
14152 d_PRIEldbl='$d_PRIEldbl'
14153 d_PRIFldbl='$d_PRIFldbl'
14154 d_PRIGldbl='$d_PRIGldbl'
14155 d_PRIX64='$d_PRIX64'
14156 d_PRId64='$d_PRId64'
14157 d_PRIeldbl='$d_PRIeldbl'
14158 d_PRIfldbl='$d_PRIfldbl'
14159 d_PRIgldbl='$d_PRIgldbl'
14160 d_PRIi64='$d_PRIi64'
14161 d_PRIo64='$d_PRIo64'
14162 d_PRIu64='$d_PRIu64'
14163 d_PRIx64='$d_PRIx64'
14164 d_access='$d_access'
14165 d_accessx='$d_accessx'
14166 d_alarm='$d_alarm'
14167 d_archlib='$d_archlib'
14168 d_atolf='$d_atolf'
14169 d_atoll='$d_atoll'
14170 d_attribut='$d_attribut'
14171 d_bcmp='$d_bcmp'
14172 d_bcopy='$d_bcopy'
14173 d_bincompat5005='$d_bincompat5005'
14174 d_bsd='$d_bsd'
14175 d_bsdgetpgrp='$d_bsdgetpgrp'
14176 d_bsdsetpgrp='$d_bsdsetpgrp'
14177 d_bzero='$d_bzero'
14178 d_casti32='$d_casti32'
14179 d_castneg='$d_castneg'
14180 d_charvspr='$d_charvspr'
14181 d_chown='$d_chown'
14182 d_chroot='$d_chroot'
14183 d_chsize='$d_chsize'
14184 d_closedir='$d_closedir'
14185 d_const='$d_const'
14186 d_crypt='$d_crypt'
14187 d_csh='$d_csh'
14188 d_cuserid='$d_cuserid'
14189 d_dbl_dig='$d_dbl_dig'
14190 d_difftime='$d_difftime'
14191 d_dirnamlen='$d_dirnamlen'
14192 d_dlerror='$d_dlerror'
14193 d_dlopen='$d_dlopen'
14194 d_dlsymun='$d_dlsymun'
14195 d_dosuid='$d_dosuid'
14196 d_drand48proto='$d_drand48proto'
14197 d_dup2='$d_dup2'
14198 d_eaccess='$d_eaccess'
14199 d_endgrent='$d_endgrent'
14200 d_endhent='$d_endhent'
14201 d_endnent='$d_endnent'
14202 d_endpent='$d_endpent'
14203 d_endpwent='$d_endpwent'
14204 d_endsent='$d_endsent'
14205 d_endspent='$d_endspent'
14206 d_eofnblk='$d_eofnblk'
14207 d_eunice='$d_eunice'
14208 d_fchmod='$d_fchmod'
14209 d_fchown='$d_fchown'
14210 d_fcntl='$d_fcntl'
14211 d_fd_macros='$d_fd_macros'
14212 d_fd_set='$d_fd_set'
14213 d_fds_bits='$d_fds_bits'
14214 d_fgetpos='$d_fgetpos'
14215 d_flexfnam='$d_flexfnam'
14216 d_flock='$d_flock'
14217 d_fork='$d_fork'
14218 d_fpathconf='$d_fpathconf'
14219 d_fpos64_t='$d_fpos64_t'
14220 d_fs_data_s='$d_fs_data_s'
14221 d_fseeko='$d_fseeko'
14222 d_fsetpos='$d_fsetpos'
14223 d_fstatfs='$d_fstatfs'
14224 d_fstatvfs='$d_fstatvfs'
14225 d_ftello='$d_ftello'
14226 d_ftime='$d_ftime'
14227 d_getgrent='$d_getgrent'
14228 d_getgrps='$d_getgrps'
14229 d_gethbyaddr='$d_gethbyaddr'
14230 d_gethbyname='$d_gethbyname'
14231 d_gethent='$d_gethent'
14232 d_gethname='$d_gethname'
14233 d_gethostprotos='$d_gethostprotos'
14234 d_getlogin='$d_getlogin'
14235 d_getmnt='$d_getmnt'
14236 d_getmntent='$d_getmntent'
14237 d_getnbyaddr='$d_getnbyaddr'
14238 d_getnbyname='$d_getnbyname'
14239 d_getnent='$d_getnent'
14240 d_getnetprotos='$d_getnetprotos'
14241 d_getpbyname='$d_getpbyname'
14242 d_getpbynumber='$d_getpbynumber'
14243 d_getpent='$d_getpent'
14244 d_getpgid='$d_getpgid'
14245 d_getpgrp2='$d_getpgrp2'
14246 d_getpgrp='$d_getpgrp'
14247 d_getppid='$d_getppid'
14248 d_getprior='$d_getprior'
14249 d_getprotoprotos='$d_getprotoprotos'
14250 d_getpwent='$d_getpwent'
14251 d_getsbyname='$d_getsbyname'
14252 d_getsbyport='$d_getsbyport'
14253 d_getsent='$d_getsent'
14254 d_getservprotos='$d_getservprotos'
14255 d_getspent='$d_getspent'
14256 d_getspnam='$d_getspnam'
14257 d_gettimeod='$d_gettimeod'
14258 d_gnulibc='$d_gnulibc'
14259 d_grpasswd='$d_grpasswd'
14260 d_hasmntopt='$d_hasmntopt'
14261 d_htonl='$d_htonl'
14262 d_index='$d_index'
14263 d_inetaton='$d_inetaton'
14264 d_int64t='$d_int64t'
14265 d_isascii='$d_isascii'
14266 d_killpg='$d_killpg'
14267 d_lchown='$d_lchown'
14268 d_ldbl_dig='$d_ldbl_dig'
14269 d_link='$d_link'
14270 d_locconv='$d_locconv'
14271 d_lockf='$d_lockf'
14272 d_longdbl='$d_longdbl'
14273 d_longlong='$d_longlong'
14274 d_lstat='$d_lstat'
14275 d_mblen='$d_mblen'
14276 d_mbstowcs='$d_mbstowcs'
14277 d_mbtowc='$d_mbtowc'
14278 d_memchr='$d_memchr'
14279 d_memcmp='$d_memcmp'
14280 d_memcpy='$d_memcpy'
14281 d_memmove='$d_memmove'
14282 d_memset='$d_memset'
14283 d_mkdir='$d_mkdir'
14284 d_mkfifo='$d_mkfifo'
14285 d_mktime='$d_mktime'
14286 d_msg='$d_msg'
14287 d_msg_ctrunc='$d_msg_ctrunc'
14288 d_msg_dontroute='$d_msg_dontroute'
14289 d_msg_oob='$d_msg_oob'
14290 d_msg_peek='$d_msg_peek'
14291 d_msg_proxy='$d_msg_proxy'
14292 d_msgctl='$d_msgctl'
14293 d_msgget='$d_msgget'
14294 d_msgrcv='$d_msgrcv'
14295 d_msgsnd='$d_msgsnd'
14296 d_mymalloc='$d_mymalloc'
14297 d_nice='$d_nice'
14298 d_off64_t='$d_off64_t'
14299 d_old_pthread_create_joinable='$d_old_pthread_create_joinable'
14300 d_oldpthreads='$d_oldpthreads'
14301 d_oldsock='$d_oldsock'
14302 d_open3='$d_open3'
14303 d_pathconf='$d_pathconf'
14304 d_pause='$d_pause'
14305 d_phostname='$d_phostname'
14306 d_pipe='$d_pipe'
14307 d_poll='$d_poll'
14308 d_portable='$d_portable'
14309 d_pthread_yield='$d_pthread_yield'
14310 d_pwage='$d_pwage'
14311 d_pwchange='$d_pwchange'
14312 d_pwclass='$d_pwclass'
14313 d_pwcomment='$d_pwcomment'
14314 d_pwexpire='$d_pwexpire'
14315 d_pwgecos='$d_pwgecos'
14316 d_pwpasswd='$d_pwpasswd'
14317 d_pwquota='$d_pwquota'
14318 d_quad='$d_quad'
14319 d_readdir='$d_readdir'
14320 d_readlink='$d_readlink'
14321 d_rename='$d_rename'
14322 d_rewinddir='$d_rewinddir'
14323 d_rmdir='$d_rmdir'
14324 d_safebcpy='$d_safebcpy'
14325 d_safemcpy='$d_safemcpy'
14326 d_sanemcmp='$d_sanemcmp'
14327 d_sched_yield='$d_sched_yield'
14328 d_scm_rights='$d_scm_rights'
14329 d_seekdir='$d_seekdir'
14330 d_select='$d_select'
14331 d_sem='$d_sem'
14332 d_semctl='$d_semctl'
14333 d_semctl_semid_ds='$d_semctl_semid_ds'
14334 d_semctl_semun='$d_semctl_semun'
14335 d_semget='$d_semget'
14336 d_semop='$d_semop'
14337 d_setegid='$d_setegid'
14338 d_seteuid='$d_seteuid'
14339 d_setgrent='$d_setgrent'
14340 d_setgrps='$d_setgrps'
14341 d_sethent='$d_sethent'
14342 d_setlinebuf='$d_setlinebuf'
14343 d_setlocale='$d_setlocale'
14344 d_setnent='$d_setnent'
14345 d_setpent='$d_setpent'
14346 d_setpgid='$d_setpgid'
14347 d_setpgrp2='$d_setpgrp2'
14348 d_setpgrp='$d_setpgrp'
14349 d_setprior='$d_setprior'
14350 d_setpwent='$d_setpwent'
14351 d_setregid='$d_setregid'
14352 d_setresgid='$d_setresgid'
14353 d_setresuid='$d_setresuid'
14354 d_setreuid='$d_setreuid'
14355 d_setrgid='$d_setrgid'
14356 d_setruid='$d_setruid'
14357 d_setsent='$d_setsent'
14358 d_setsid='$d_setsid'
14359 d_setspent='$d_setspent'
14360 d_setvbuf='$d_setvbuf'
14361 d_sfio='$d_sfio'
14362 d_shm='$d_shm'
14363 d_shmat='$d_shmat'
14364 d_shmatprototype='$d_shmatprototype'
14365 d_shmctl='$d_shmctl'
14366 d_shmdt='$d_shmdt'
14367 d_shmget='$d_shmget'
14368 d_sigaction='$d_sigaction'
14369 d_sigsetjmp='$d_sigsetjmp'
14370 d_socket='$d_socket'
14371 d_sockpair='$d_sockpair'
14372 d_sqrtl='$d_sqrtl'
14373 d_statblks='$d_statblks'
14374 d_statfs_f_flags='$d_statfs_f_flags'
14375 d_statfs_s='$d_statfs_s'
14376 d_statvfs='$d_statvfs'
14377 d_stdio_cnt_lval='$d_stdio_cnt_lval'
14378 d_stdio_ptr_lval='$d_stdio_ptr_lval'
14379 d_stdio_stream_array='$d_stdio_stream_array'
14380 d_stdiobase='$d_stdiobase'
14381 d_stdstdio='$d_stdstdio'
14382 d_strchr='$d_strchr'
14383 d_strcoll='$d_strcoll'
14384 d_strctcpy='$d_strctcpy'
14385 d_strerrm='$d_strerrm'
14386 d_strerror='$d_strerror'
14387 d_strtod='$d_strtod'
14388 d_strtol='$d_strtol'
14389 d_strtoul='$d_strtoul'
14390 d_strtoull='$d_strtoull'
14391 d_strxfrm='$d_strxfrm'
14392 d_suidsafe='$d_suidsafe'
14393 d_symlink='$d_symlink'
14394 d_syscall='$d_syscall'
14395 d_sysconf='$d_sysconf'
14396 d_sysernlst='$d_sysernlst'
14397 d_syserrlst='$d_syserrlst'
14398 d_system='$d_system'
14399 d_tcgetpgrp='$d_tcgetpgrp'
14400 d_tcsetpgrp='$d_tcsetpgrp'
14401 d_telldir='$d_telldir'
14402 d_telldirproto='$d_telldirproto'
14403 d_time='$d_time'
14404 d_times='$d_times'
14405 d_truncate='$d_truncate'
14406 d_tzname='$d_tzname'
14407 d_umask='$d_umask'
14408 d_uname='$d_uname'
14409 d_union_semun='$d_union_semun'
14410 d_ustat='$d_ustat'
14411 d_vendorbin='$d_vendorbin'
14412 d_vendorlib='$d_vendorlib'
14413 d_vfork='$d_vfork'
14414 d_void_closedir='$d_void_closedir'
14415 d_voidsig='$d_voidsig'
14416 d_voidtty='$d_voidtty'
14417 d_volatile='$d_volatile'
14418 d_vprintf='$d_vprintf'
14419 d_wait4='$d_wait4'
14420 d_waitpid='$d_waitpid'
14421 d_wcstombs='$d_wcstombs'
14422 d_wctomb='$d_wctomb'
14423 d_xenix='$d_xenix'
14424 date='$date'
14425 db_hashtype='$db_hashtype'
14426 db_prefixtype='$db_prefixtype'
14427 defvoidused='$defvoidused'
14428 direntrytype='$direntrytype'
14429 dlext='$dlext'
14430 dlsrc='$dlsrc'
14431 doublesize='$doublesize'
14432 drand01='$drand01'
14433 dynamic_ext='$dynamic_ext'
14434 eagain='$eagain'
14435 ebcdic='$ebcdic'
14436 echo='$echo'
14437 egrep='$egrep'
14438 emacs='$emacs'
14439 eunicefix='$eunicefix'
14440 exe_ext='$exe_ext'
14441 expr='$expr'
14442 extensions='$extensions'
14443 fflushNULL='$fflushNULL'
14444 fflushall='$fflushall'
14445 find='$find'
14446 firstmakefile='$firstmakefile'
14447 flex='$flex'
14448 fpossize='$fpossize'
14449 fpostype='$fpostype'
14450 freetype='$freetype'
14451 full_ar='$full_ar'
14452 full_csh='$full_csh'
14453 full_sed='$full_sed'
14454 gccversion='$gccversion'
14455 gidformat='$gidformat'
14456 gidsign='$gidsign'
14457 gidsize='$gidsize'
14458 gidtype='$gidtype'
14459 glibpth='$glibpth'
14460 grep='$grep'
14461 groupcat='$groupcat'
14462 groupstype='$groupstype'
14463 gzip='$gzip'
14464 h_fcntl='$h_fcntl'
14465 h_sysfile='$h_sysfile'
14466 hint='$hint'
14467 hostcat='$hostcat'
14468 huge='$huge'
14469 i16size='$i16size'
14470 i16type='$i16type'
14471 i32size='$i32size'
14472 i32type='$i32type'
14473 i64size='$i64size'
14474 i64type='$i64type'
14475 i8size='$i8size'
14476 i8type='$i8type'
14477 i_arpainet='$i_arpainet'
14478 i_bsdioctl='$i_bsdioctl'
14479 i_db='$i_db'
14480 i_dbm='$i_dbm'
14481 i_dirent='$i_dirent'
14482 i_dld='$i_dld'
14483 i_dlfcn='$i_dlfcn'
14484 i_fcntl='$i_fcntl'
14485 i_float='$i_float'
14486 i_gdbm='$i_gdbm'
14487 i_grp='$i_grp'
14488 i_inttypes='$i_inttypes'
14489 i_limits='$i_limits'
14490 i_locale='$i_locale'
14491 i_machcthr='$i_machcthr'
14492 i_malloc='$i_malloc'
14493 i_math='$i_math'
14494 i_memory='$i_memory'
14495 i_mntent='$i_mntent'
14496 i_ndbm='$i_ndbm'
14497 i_netdb='$i_netdb'
14498 i_neterrno='$i_neterrno'
14499 i_netinettcp='$i_netinettcp'
14500 i_niin='$i_niin'
14501 i_poll='$i_poll'
14502 i_pthread='$i_pthread'
14503 i_pwd='$i_pwd'
14504 i_rpcsvcdbm='$i_rpcsvcdbm'
14505 i_sfio='$i_sfio'
14506 i_sgtty='$i_sgtty'
14507 i_shadow='$i_shadow'
14508 i_socks='$i_socks'
14509 i_stdarg='$i_stdarg'
14510 i_stddef='$i_stddef'
14511 i_stdlib='$i_stdlib'
14512 i_string='$i_string'
14513 i_sysaccess='$i_sysaccess'
14514 i_sysdir='$i_sysdir'
14515 i_sysfile='$i_sysfile'
14516 i_sysfilio='$i_sysfilio'
14517 i_sysin='$i_sysin'
14518 i_sysioctl='$i_sysioctl'
14519 i_sysmount='$i_sysmount'
14520 i_sysndir='$i_sysndir'
14521 i_sysparam='$i_sysparam'
14522 i_sysresrc='$i_sysresrc'
14523 i_syssecrt='$i_syssecrt'
14524 i_sysselct='$i_sysselct'
14525 i_syssockio='$i_syssockio'
14526 i_sysstat='$i_sysstat'
14527 i_sysstatfs='$i_sysstatfs'
14528 i_sysstatvfs='$i_sysstatvfs'
14529 i_systime='$i_systime'
14530 i_systimek='$i_systimek'
14531 i_systimes='$i_systimes'
14532 i_systypes='$i_systypes'
14533 i_sysuio='$i_sysuio'
14534 i_sysun='$i_sysun'
14535 i_sysvfs='$i_sysvfs'
14536 i_syswait='$i_syswait'
14537 i_termio='$i_termio'
14538 i_termios='$i_termios'
14539 i_time='$i_time'
14540 i_unistd='$i_unistd'
14541 i_ustat='$i_ustat'
14542 i_utime='$i_utime'
14543 i_values='$i_values'
14544 i_varargs='$i_varargs'
14545 i_varhdr='$i_varhdr'
14546 i_vfork='$i_vfork'
14547 ignore_versioned_solibs='$ignore_versioned_solibs'
14548 incpath='$incpath'
14549 inews='$inews'
14550 installarchlib='$installarchlib'
14551 installbin='$installbin'
14552 installman1dir='$installman1dir'
14553 installman3dir='$installman3dir'
14554 installprefix='$installprefix'
14555 installprefixexp='$installprefixexp'
14556 installprivlib='$installprivlib'
14557 installscript='$installscript'
14558 installsitearch='$installsitearch'
14559 installsitebin='$installsitebin'
14560 installsitelib='$installsitelib'
14561 installstyle='$installstyle'
14562 installusrbinperl='$installusrbinperl'
14563 installvendorbin='$installvendorbin'
14564 installvendorlib='$installvendorlib'
14565 intsize='$intsize'
14566 ivdformat='$ivdformat'
14567 ivsize='$ivsize'
14568 ivtype='$ivtype'
14569 known_extensions='$known_extensions'
14570 ksh='$ksh'
14571 large='$large'
14572 ld='$ld'
14573 lddlflags='$lddlflags'
14574 ldflags='$ldflags'
14575 ldlibpthname='$ldlibpthname'
14576 less='$less'
14577 lib_ext='$lib_ext'
14578 libc='$libc'
14579 libperl='$libperl'
14580 libpth='$libpth'
14581 libs='$libs'
14582 libswanted='$libswanted'
14583 line='$line'
14584 lint='$lint'
14585 lkflags='$lkflags'
14586 ln='$ln'
14587 lns='$lns'
14588 locincpth='$locincpth'
14589 loclibpth='$loclibpth'
14590 longdblsize='$longdblsize'
14591 longlongsize='$longlongsize'
14592 longsize='$longsize'
14593 lp='$lp'
14594 lpr='$lpr'
14595 ls='$ls'
14596 lseeksize='$lseeksize'
14597 lseektype='$lseektype'
14598 mail='$mail'
14599 mailx='$mailx'
14600 make='$make'
14601 make_set_make='$make_set_make'
14602 mallocobj='$mallocobj'
14603 mallocsrc='$mallocsrc'
14604 malloctype='$malloctype'
14605 man1dir='$man1dir'
14606 man1direxp='$man1direxp'
14607 man1ext='$man1ext'
14608 man3dir='$man3dir'
14609 man3direxp='$man3direxp'
14610 man3ext='$man3ext'
14611 medium='$medium'
14612 mips_type='$mips_type'
14613 mkdir='$mkdir'
14614 models='$models'
14615 modetype='$modetype'
14616 more='$more'
14617 multiarch='$multiarch'
14618 mv='$mv'
14619 myarchname='$myarchname'
14620 mydomain='$mydomain'
14621 myhostname='$myhostname'
14622 myuname='$myuname'
14623 n='$n'
14624 netdb_hlen_type='$netdb_hlen_type'
14625 netdb_host_type='$netdb_host_type'
14626 netdb_name_type='$netdb_name_type'
14627 netdb_net_type='$netdb_net_type'
14628 nm='$nm'
14629 nm_opt='$nm_opt'
14630 nm_so_opt='$nm_so_opt'
14631 nonxs_ext='$nonxs_ext'
14632 nroff='$nroff'
14633 nvsize='$nvsize'
14634 nvtype='$nvtype'
14635 o_nonblock='$o_nonblock'
14636 obj_ext='$obj_ext'
14637 old_pthread_create_joinable='$old_pthread_create_joinable'
14638 optimize='$optimize'
14639 orderlib='$orderlib'
14640 osname='$osname'
14641 osvers='$osvers'
14642 package='$package'
14643 pager='$pager'
14644 passcat='$passcat'
14645 patchlevel='$patchlevel'
14646 path_sep='$path_sep'
14647 perl='$perl'
14648 perladmin='$perladmin'
14649 perlpath='$perlpath'
14650 pg='$pg'
14651 phostname='$phostname'
14652 pidtype='$pidtype'
14653 plibpth='$plibpth'
14654 pm_apiversion='$pm_apiversion'
14655 pmake='$pmake'
14656 pr='$pr'
14657 prefix='$prefix'
14658 prefixexp='$prefixexp'
14659 privlib='$privlib'
14660 privlibexp='$privlibexp'
14661 prototype='$prototype'
14662 ptrsize='$ptrsize'
14663 quadcase='$quadcase'
14664 quadtype='$quadtype'
14665 randbits='$randbits'
14666 randfunc='$randfunc'
14667 randseedtype='$randseedtype'
14668 ranlib='$ranlib'
14669 rd_nodata='$rd_nodata'
14670 rm='$rm'
14671 rmail='$rmail'
14672 runnm='$runnm'
14673 sPRIEldbl='$sPRIEldbl'
14674 sPRIFldbl='$sPRIFldbl'
14675 sPRIGldbl='$sPRIGldbl'
14676 sPRIX64='$sPRIX64'
14677 sPRId64='$sPRId64'
14678 sPRIeldbl='$sPRIeldbl'
14679 sPRIfldbl='$sPRIfldbl'
14680 sPRIgldbl='$sPRIgldbl'
14681 sPRIi64='$sPRIi64'
14682 sPRIo64='$sPRIo64'
14683 sPRIu64='$sPRIu64'
14684 sPRIx64='$sPRIx64'
14685 sched_yield='$sched_yield'
14686 scriptdir='$scriptdir'
14687 scriptdirexp='$scriptdirexp'
14688 sed='$sed'
14689 seedfunc='$seedfunc'
14690 selectminbits='$selectminbits'
14691 selecttype='$selecttype'
14692 sendmail='$sendmail'
14693 sh='$sh'
14694 shar='$shar'
14695 sharpbang='$sharpbang'
14696 shmattype='$shmattype'
14697 shortsize='$shortsize'
14698 shrpenv='$shrpenv'
14699 shsharp='$shsharp'
14700 sig_count='$sig_count'
14701 sig_name='$sig_name'
14702 sig_name_init='$sig_name_init'
14703 sig_num='$sig_num'
14704 sig_num_init='$sig_num_init'
14705 signal_t='$signal_t'
14706 sitearch='$sitearch'
14707 sitearchexp='$sitearchexp'
14708 sitebin='$sitebin'
14709 sitebinexp='$sitebinexp'
14710 sitelib='$sitelib'
14711 sitelibexp='$sitelibexp'
14712 siteprefix='$siteprefix'
14713 siteprefixexp='$siteprefixexp'
14714 sizesize='$sizesize'
14715 sizetype='$sizetype'
14716 sleep='$sleep'
14717 smail='$smail'
14718 small='$small'
14719 so='$so'
14720 sockethdr='$sockethdr'
14721 socketlib='$socketlib'
14722 sort='$sort'
14723 spackage='$spackage'
14724 spitshell='$spitshell'
14725 split='$split'
14726 src='$src'
14727 ssizetype='$ssizetype'
14728 startperl='$startperl'
14729 startsh='$startsh'
14730 static_ext='$static_ext'
14731 stdchar='$stdchar'
14732 stdio_base='$stdio_base'
14733 stdio_bufsiz='$stdio_bufsiz'
14734 stdio_cnt='$stdio_cnt'
14735 stdio_filbuf='$stdio_filbuf'
14736 stdio_ptr='$stdio_ptr'
14737 stdio_stream_array='$stdio_stream_array'
14738 strings='$strings'
14739 submit='$submit'
14740 subversion='$subversion'
14741 sysman='$sysman'
14742 tail='$tail'
14743 tar='$tar'
14744 tbl='$tbl'
14745 tee='$tee'
14746 test='$test'
14747 timeincl='$timeincl'
14748 timetype='$timetype'
14749 touch='$touch'
14750 tr='$tr'
14751 trnl='$trnl'
14752 troff='$troff'
14753 u16size='$u16size'
14754 u16type='$u16type'
14755 u32size='$u32size'
14756 u32type='$u32type'
14757 u64size='$u64size'
14758 u64type='$u64type'
14759 u8size='$u8size'
14760 u8type='$u8type'
14761 uidformat='$uidformat'
14762 uidsign='$uidsign'
14763 uidsize='$uidsize'
14764 uidtype='$uidtype'
14765 uname='$uname'
14766 uniq='$uniq'
14767 uquadtype='$uquadtype'
14768 use64bits='$use64bits'
14769 usedl='$usedl'
14770 uselargefiles='$uselargefiles'
14771 uselongdouble='$uselongdouble'
14772 uselonglong='$uselonglong'
14773 usemorebits='$usemorebits'
14774 usemultiplicity='$usemultiplicity'
14775 usemymalloc='$usemymalloc'
14776 usenm='$usenm'
14777 useopcode='$useopcode'
14778 useperlio='$useperlio'
14779 useposix='$useposix'
14780 usesfio='$usesfio'
14781 useshrplib='$useshrplib'
14782 usesocks='$usesocks'
14783 usethreads='$usethreads'
14784 usevendorprefix='$usevendorprefix'
14785 usevfork='$usevfork'
14786 usrinc='$usrinc'
14787 uuname='$uuname'
14788 uvoformat='$uvoformat'
14789 uvsize='$uvsize'
14790 uvtype='$uvtype'
14791 uvuformat='$uvuformat'
14792 uvxformat='$uvxformat'
14793 vendorbin='$vendorbin'
14794 vendorbinexp='$vendorbinexp'
14795 vendorlib='$vendorlib'
14796 vendorlibexp='$vendorlibexp'
14797 vendorprefix='$vendorprefix'
14798 vendorprefixexp='$vendorprefixexp'
14799 version='$version'
14800 vi='$vi'
14801 voidflags='$voidflags'
14802 xlibpth='$xlibpth'
14803 xs_apiversion='$xs_apiversion'
14804 zcat='$zcat'
14805 zip='$zip'
14806 EOT
14807
14808 : Add in command line options if available
14809 $test -f UU/cmdline.opt && $cat UU/cmdline.opt >> config.sh
14810
14811 : add special variables
14812 $test -f $src/patchlevel.h && \
14813 awk '/^#define[         ]+PERL_/ {printf "%s=%s\n",$2,$3}' $src/patchlevel.h >>config.sh
14814 echo "CONFIGDOTSH=true" >>config.sh
14815
14816 : propagate old symbols
14817 if $test -f UU/config.sh; then
14818         <UU/config.sh sort | uniq >UU/oldconfig.sh
14819         sed -n 's/^\([a-zA-Z_0-9]*\)=.*/\1/p' config.sh config.sh UU/oldconfig.sh |\
14820         sort | uniq -u >UU/oldsyms
14821         set X `cat UU/oldsyms`
14822         shift
14823         case $# in
14824         0) ;;
14825         *)
14826                 cat <<EOM
14827 Hmm...You had some extra variables I don't know about...I'll try to keep 'em...
14828 EOM
14829                 echo "# Variables propagated from previous config.sh file." >>config.sh
14830                 for sym in `cat UU/oldsyms`; do
14831                         echo "    Propagating $hint variable "'$'"$sym..."
14832                         eval 'tmp="$'"${sym}"'"'
14833                         echo "$tmp" | \
14834                                 sed -e "s/'/'\"'\"'/g" -e "s/^/$sym='/" -e "s/$/'/" >>config.sh
14835                 done
14836                 ;;
14837         esac
14838 fi
14839
14840 : Finish up by extracting the .SH files
14841 case "$alldone" in
14842 exit)
14843         $rm -rf UU
14844         echo "Done."
14845         exit 0
14846         ;;
14847 cont)
14848         ;;
14849 '')
14850         dflt=''
14851         nostick=true
14852         $cat <<EOM
14853
14854 If you'd like to make any changes to the config.sh file before I begin
14855 to configure things, do it as a shell escape now (e.g. !vi config.sh).
14856
14857 EOM
14858         rp="Press return or use a shell escape to edit config.sh:"
14859         . UU/myread
14860         nostick=''
14861         case "$ans" in
14862         '') ;;
14863         *) : in case they cannot read
14864                 sh 1>&4 -c "$ans";;
14865         esac
14866         ;;
14867 esac
14868
14869 : if this fails, just run all the .SH files by hand
14870 . ./config.sh
14871
14872 echo " "
14873 exec 1>&4
14874 . ./UU/extract
14875
14876 if $contains '^depend:' [Mm]akefile >/dev/null 2>&1; then
14877         dflt=y
14878         case "$silent" in
14879         true) ;;
14880         *)
14881                 $cat <<EOM
14882
14883 Now you need to generate make dependencies by running "$make depend".
14884 You might prefer to run it in background: "$make depend > makedepend.out &"
14885 It can take a while, so you might not want to run it right now.
14886
14887 EOM
14888                 ;;
14889         esac
14890         rp="Run $make depend now?"
14891         . UU/myread
14892         case "$ans" in
14893         y*)
14894                 $make depend && echo "Now you must run a $make."
14895                 ;;
14896         *)
14897                 echo "You must run '$make depend' then '$make'."
14898                 ;;
14899         esac
14900 elif test -f [Mm]akefile; then
14901         echo " "
14902         echo "Now you must run a $make."
14903 else
14904         echo "Done."
14905 fi
14906
14907 if $test -f Policy.sh; then
14908     $cat <<EOM
14909
14910 If you compile $package on a different machine or from a different object
14911 directory, copy the Policy.sh file from this object directory to the
14912 new one before you run Configure -- this will help you with most of
14913 the policy defaults.
14914
14915 EOM
14916 fi
14917 if $test -f config.msg; then
14918     echo "Hmm.  I also noted the following information while running:"
14919     echo " "
14920     $cat config.msg >&4
14921     $rm -f config.msg
14922 fi
14923 $rm -f kit*isdone ark*isdone
14924 $rm -rf UU
14925
14926 : End of Configure
14927