Turn on largefileness always if available and
[p5sagit/p5-mst-13.2.git] / Configure
1 #! /bin/sh
2 #
3 # If these # comments don't work, trim them. Don't worry about any other
4 # shell scripts, Configure will trim # comments from them for you.
5 #
6 # (If you are trying to port this package to a machine without sh,
7 # I would suggest you have a look at the prototypical config_h.SH file
8 # and edit it to reflect your system. Some packages may include samples
9 # of config.h for certain machines, so you might look for one of those.)
10 #
11 # Yes, you may rip this off to use in other distribution packages. This
12 # script belongs to the public domain and cannot be copyrighted.
13 #
14 # (Note: this Configure script was generated automatically. Rather than
15 # working with this copy of Configure, you may wish to get metaconfig.
16 # The dist-3.0 package (which contains metaconfig) was posted in
17 # comp.sources.misc and is available on CPAN under authors/id/RAM so
18 # you may fetch it yourself from your nearest archive site.)
19 #
20
21 # $Id: Head.U,v 3.0.1.9 1997/02/28 15:02:09 ram Exp $
22 #
23 # Generated on Fri Nov 12 01:02:11 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_int64t=''
404 d_isascii=''
405 d_killpg=''
406 d_lchown=''
407 d_ldbl_dig=''
408 d_link=''
409 d_locconv=''
410 d_lockf=''
411 d_longdbl=''
412 longdblsize=''
413 d_longlong=''
414 longlongsize=''
415 d_lstat=''
416 d_mblen=''
417 d_mbstowcs=''
418 d_mbtowc=''
419 d_memchr=''
420 d_memcmp=''
421 d_memcpy=''
422 d_memmove=''
423 d_memset=''
424 d_mkdir=''
425 d_mkfifo=''
426 d_mktime=''
427 d_msg=''
428 d_msgctl=''
429 d_msgget=''
430 d_msgrcv=''
431 d_msgsnd=''
432 d_nice=''
433 d_open3=''
434 d_fpathconf=''
435 d_pathconf=''
436 d_pause=''
437 d_pipe=''
438 d_poll=''
439 d_portable=''
440 d_old_pthread_create_joinable=''
441 old_pthread_create_joinable=''
442 d_pthread_yield=''
443 d_sched_yield=''
444 sched_yield=''
445 d_readdir=''
446 d_rewinddir=''
447 d_seekdir=''
448 d_telldir=''
449 d_readlink=''
450 d_rename=''
451 d_rmdir=''
452 d_safebcpy=''
453 d_safemcpy=''
454 d_sanemcmp=''
455 d_select=''
456 d_sem=''
457 d_semctl=''
458 d_semget=''
459 d_semop=''
460 d_setegid=''
461 d_seteuid=''
462 d_setgrent=''
463 d_setgrps=''
464 d_sethent=''
465 d_setlinebuf=''
466 d_setlocale=''
467 d_setnent=''
468 d_setpent=''
469 d_setpgid=''
470 d_setpgrp2=''
471 d_bsdsetpgrp=''
472 d_setpgrp=''
473 d_setprior=''
474 d_setpwent=''
475 d_setregid=''
476 d_setresgid=''
477 d_setresuid=''
478 d_setreuid=''
479 d_setrgid=''
480 d_setruid=''
481 d_setsent=''
482 d_setsid=''
483 d_setspent=''
484 d_setvbuf=''
485 d_sfio=''
486 usesfio=''
487 d_shm=''
488 d_shmat=''
489 d_shmatprototype=''
490 shmattype=''
491 d_shmctl=''
492 d_shmdt=''
493 d_shmget=''
494 d_sigaction=''
495 d_sigsetjmp=''
496 d_msg_ctrunc=''
497 d_msg_dontroute=''
498 d_msg_oob=''
499 d_msg_peek=''
500 d_msg_proxy=''
501 d_oldsock=''
502 d_scm_rights=''
503 d_socket=''
504 d_sockpair=''
505 sockethdr=''
506 socketlib=''
507 d_sqrtl=''
508 d_statblks=''
509 d_statfs_f_flags=''
510 d_statfs_s=''
511 d_fstatvfs=''
512 d_statvfs=''
513 d_stdio_cnt_lval=''
514 d_stdio_ptr_lval=''
515 d_stdiobase=''
516 d_stdstdio=''
517 stdio_base=''
518 stdio_bufsiz=''
519 stdio_cnt=''
520 stdio_filbuf=''
521 stdio_ptr=''
522 d_index=''
523 d_strchr=''
524 d_strcoll=''
525 d_strctcpy=''
526 d_strerrm=''
527 d_strerror=''
528 d_sysernlst=''
529 d_syserrlst=''
530 d_strtod=''
531 d_strtol=''
532 d_strtoul=''
533 d_strxfrm=''
534 d_symlink=''
535 d_syscall=''
536 d_sysconf=''
537 d_system=''
538 d_tcgetpgrp=''
539 d_tcsetpgrp=''
540 d_telldirproto=''
541 d_time=''
542 timetype=''
543 clocktype=''
544 d_times=''
545 d_truncate=''
546 d_tzname=''
547 d_umask=''
548 d_semctl_semid_ds=''
549 d_semctl_semun=''
550 d_union_semun=''
551 d_ustat=''
552 d_vfork=''
553 usevfork=''
554 d_voidsig=''
555 signal_t=''
556 d_volatile=''
557 d_charvspr=''
558 d_vprintf=''
559 d_wait4=''
560 d_waitpid=''
561 d_wcstombs=''
562 d_wctomb=''
563 dlext=''
564 cccdlflags=''
565 ccdlflags=''
566 dlsrc=''
567 ld=''
568 lddlflags=''
569 usedl=''
570 doublesize=''
571 ebcdic=''
572 fflushNULL=''
573 fflushall=''
574 fpossize=''
575 fpostype=''
576 gidformat=''
577 gidsign=''
578 gidsize=''
579 gidtype=''
580 groupstype=''
581 h_fcntl=''
582 h_sysfile=''
583 i_arpainet=''
584 db_hashtype=''
585 db_prefixtype=''
586 i_db=''
587 i_dbm=''
588 i_rpcsvcdbm=''
589 d_dirnamlen=''
590 direntrytype=''
591 i_dirent=''
592 i_dld=''
593 i_dlfcn=''
594 i_fcntl=''
595 i_float=''
596 i_gdbm=''
597 d_grpasswd=''
598 i_grp=''
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 quadkind=''
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.)" >&4 ;;
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 echo " "
9039 $echo $n "Checking to see if your system supports int64_t...$c" >&4
9040 $cat >try.c <<EOCP
9041 #include <sys/types.h>
9042 #$i_inttypes I_INTTYPES
9043 #ifdef I_INTTYPES
9044 #include <inttypes.h>
9045 #endif
9046 int main() { int64_t x = 7; }
9047 EOCP
9048 set try
9049 if eval $compile; then
9050         val="$define"
9051         echo " Yes, it does." >&4
9052 else
9053         val="$undef"
9054         echo " No, it doesn't." >&4
9055 fi
9056 $rm -f try try.*
9057 set d_int64t
9058 eval $setvar
9059
9060 : Look for isascii
9061 echo " "
9062 $cat >isascii.c <<'EOCP'
9063 #include <stdio.h>
9064 #include <ctype.h>
9065 int main() {
9066         int c = 'A';
9067         if (isascii(c))
9068                 exit(0);
9069         else
9070                 exit(1);
9071 }
9072 EOCP
9073 set isascii
9074 if eval $compile; then
9075         echo "isascii() found." >&4
9076         val="$define"
9077 else
9078         echo "isascii() NOT found." >&4
9079         val="$undef"
9080 fi
9081 set d_isascii
9082 eval $setvar
9083 $rm -f isascii*
9084
9085 : see if killpg exists
9086 set killpg d_killpg
9087 eval $inlibc
9088
9089 : see if lchown exists
9090 echo " "
9091 $cat > try.c <<'EOCP'
9092 /* System header to define __stub macros and hopefully few prototypes,
9093     which can conflict with char lchown(); below.  */
9094 #include <assert.h>
9095 /* Override any gcc2 internal prototype to avoid an error.  */
9096 /* We use char because int might match the return type of a gcc2
9097    builtin and then its argument prototype would still apply.  */
9098 char lchown();
9099 int main() {
9100     /*  The GNU C library defines this for functions which it implements
9101         to always fail with ENOSYS.  Some functions are actually named
9102         something starting with __ and the normal name is an alias.  */
9103 #if defined (__stub_lchown) || defined (__stub___lchown)
9104 choke me
9105 #else
9106 lchown();
9107 #endif
9108 ; return 0; }
9109 EOCP
9110 set try
9111 if eval $compile; then
9112     $echo "lchown() found." >&4
9113     val="$define"
9114 else
9115     $echo "lchown() NOT found." >&4
9116     val="$undef"
9117 fi
9118 set d_lchown
9119 eval $setvar
9120
9121 : See if number of significant digits in a double precision number is known
9122 echo " "
9123 $cat >ldbl_dig.c <<EOM
9124 #$i_limits I_LIMITS
9125 #$i_float I_FLOAT
9126 #ifdef I_LIMITS
9127 #include <limits.h>
9128 #endif
9129 #ifdef I_FLOAT
9130 #include <float.h>
9131 #endif
9132 #ifdef LDBL_DIG
9133 printf("Contains LDBL_DIG");
9134 #endif
9135 EOM
9136 $cppstdin $cppflags $cppminus < ldbl_dig.c >ldbl_dig.E 2>/dev/null
9137 if $contains 'LDBL_DIG' ldbl_dig.E >/dev/null 2>&1; then
9138         echo "LDBL_DIG found." >&4
9139         val="$define"
9140 else
9141         echo "LDBL_DIG NOT found." >&4
9142         val="$undef"
9143 fi
9144 $rm -f ldbl_dig.?
9145 set d_ldbl_dig
9146 eval $setvar
9147
9148 : see if link exists
9149 set link d_link
9150 eval $inlibc
9151
9152 : see if localeconv exists
9153 set localeconv d_locconv
9154 eval $inlibc
9155
9156 : see if lockf exists
9157 set lockf d_lockf
9158 eval $inlibc
9159
9160 : check for long long
9161 echo " "
9162 $echo $n "Checking to see if your system supports long long..." $c >&4
9163 echo 'int main() { long long x = 7; return 0; }' > try.c
9164 set try
9165 if eval $compile; then
9166         val="$define"
9167         echo " Yes, it does." >&4
9168 else
9169         val="$undef"
9170         echo " No, it doesn't." >&4
9171 fi
9172 $rm try.*
9173 set d_longlong
9174 eval $setvar
9175
9176 : check for length of long long
9177 case "${d_longlong}${longlongsize}" in
9178 $define)
9179         echo " "
9180         $echo $n "Checking to see how big your long longs are..." $c >&4
9181         $cat >try.c <<'EOCP'
9182 #include <stdio.h>
9183 int main()
9184 {
9185     printf("%d\n", (int)sizeof(long long));
9186     return(0);
9187 }
9188 EOCP
9189         set try
9190         if eval $compile_ok; then
9191                 longlongsize=`./try$exe_ext`
9192                 $echo " $longlongsize bytes." >&4
9193         else
9194                 dflt='8'
9195                 echo " "
9196                 echo "(I can't seem to compile the test program.  Guessing...)"
9197                 rp="What is the size of a long long (in bytes)?"
9198                 . ./myread
9199                 longlongsize="$ans"
9200         fi
9201         if $test "X$longsize" = "X$longlongsize"; then
9202                 echo "(That isn't any different from an ordinary long.)"
9203         fi      
9204         ;;
9205 esac
9206 $rm -f try.* try
9207
9208 : see if lstat exists
9209 set lstat d_lstat
9210 eval $inlibc
9211
9212 : see if mblen exists
9213 set mblen d_mblen
9214 eval $inlibc
9215
9216 : see if mbstowcs exists
9217 set mbstowcs d_mbstowcs
9218 eval $inlibc
9219
9220 : see if mbtowc exists
9221 set mbtowc d_mbtowc
9222 eval $inlibc
9223
9224 : see if memchr exists
9225 set memchr d_memchr
9226 eval $inlibc
9227
9228 : see if memcmp exists
9229 set memcmp d_memcmp
9230 eval $inlibc
9231
9232 : see if memcpy exists
9233 set memcpy d_memcpy
9234 eval $inlibc
9235
9236 : see if memmove exists
9237 set memmove d_memmove
9238 eval $inlibc
9239
9240 : see if memset exists
9241 set memset d_memset
9242 eval $inlibc
9243
9244 : see if mkdir exists
9245 set mkdir d_mkdir
9246 eval $inlibc
9247
9248 : see if mkfifo exists
9249 set mkfifo d_mkfifo
9250 eval $inlibc
9251
9252 : see if mktime exists
9253 set mktime d_mktime
9254 eval $inlibc
9255
9256 : see if msgctl exists
9257 set msgctl d_msgctl
9258 eval $inlibc
9259
9260 : see if msgget exists
9261 set msgget d_msgget
9262 eval $inlibc
9263
9264 : see if msgsnd exists
9265 set msgsnd d_msgsnd
9266 eval $inlibc
9267
9268 : see if msgrcv exists
9269 set msgrcv d_msgrcv
9270 eval $inlibc
9271
9272 : see how much of the 'msg*(2)' library is present.
9273 h_msg=true
9274 echo " "
9275 case "$d_msgctl$d_msgget$d_msgsnd$d_msgrcv" in
9276 *"$undef"*) h_msg=false;;
9277 esac
9278 case "$osname" in
9279 freebsd)
9280     case "`ipcs 2>&1`" in
9281     "SVID messages"*"not configured"*)
9282         echo "Your $osname does not have the msg*(2) configured." >&4
9283         h_msg=false
9284         val="$undef"
9285         set msgctl d_msgctl
9286         eval $setvar
9287         set msgget d_msgget
9288         eval $setvar
9289         set msgsnd d_msgsnd
9290         eval $setvar
9291         set msgrcv d_msgrcv
9292         eval $setvar
9293         ;;
9294     esac
9295     ;;
9296 esac
9297 : we could also check for sys/ipc.h ...
9298 if $h_msg && $test `./findhdr sys/msg.h`; then
9299         echo "You have the full msg*(2) library." >&4
9300         val="$define"
9301 else
9302         echo "You don't have the full msg*(2) library." >&4
9303         val="$undef"
9304 fi
9305 set d_msg
9306 eval $setvar
9307
9308 : see if nice exists
9309 set nice d_nice
9310 eval $inlibc
9311
9312 : see if POSIX threads are available
9313 set pthread.h i_pthread
9314 eval $inhdr
9315
9316
9317
9318
9319 : how to create joinable pthreads
9320 if test "X$usethreads" = "X$define" -a "X$i_pthread" = "X$define"; then
9321         echo " "
9322         echo "Checking what constant to use for creating joinable pthreads..." >&4 
9323         $cat >try.c <<'EOCP'
9324 #include <pthread.h>
9325 int main() {
9326     int detachstate = JOINABLE;
9327 }
9328 EOCP
9329         set try -DJOINABLE=PTHREAD_CREATE_JOINABLE
9330         if eval $compile; then
9331                 echo "You seem to use PTHREAD_CREATE_JOINABLE." >&4
9332                 val="$undef" # Yes, undef.
9333                 set d_old_pthread_create_joinable
9334                 eval $setvar
9335                 val=""
9336                 set old_pthread_create_joinable
9337                 eval $setvar
9338         else
9339                 set try -DJOINABLE=PTHREAD_CREATE_UNDETACHED
9340                 if eval $compile; then
9341                         echo "You seem to use PTHREAD_CREATE_UNDETACHED." >&4
9342                         val="$define"
9343                         set d_old_pthread_create_joinable
9344                         eval $setvar
9345                         val=PTHREAD_CREATE_UNDETACHED
9346                         set old_pthread_create_joinable
9347                         eval $setvar
9348                 else            
9349                         set try -DJOINABLE=__UNDETACHED
9350                         if eval $compile; then
9351                                 echo "You seem to use __UNDETACHED." >&4
9352                                 val="$define"
9353                                 set d_old_pthread_create_joinable
9354                                 eval $setvar
9355                                 val=__UNDETACHED
9356                                 set old_pthread_create_joinable
9357                                 eval $setvar
9358                         else
9359                                 echo "Egads, nothing obvious found.  Guessing that you use 0." >&4
9360                                 val="$define"
9361                                 set d_old_pthread_create_joinable
9362                                 eval $setvar
9363                                 val=0
9364                                 set old_pthread_create_joinable
9365                                 eval $setvar
9366                         fi
9367                 fi
9368         fi
9369         $rm -f try try.*
9370 else
9371     d_old_pthread_create_joinable="$undef"
9372     old_pthread_create_joinable=""
9373 fi
9374
9375 : see if pause exists
9376 set pause d_pause
9377 eval $inlibc
9378
9379 : see if pipe exists
9380 set pipe d_pipe
9381 eval $inlibc
9382
9383 : see if poll exists
9384 set poll d_poll
9385 eval $inlibc
9386
9387
9388 : see whether the various POSIXish _yields exist
9389 $cat >try.c <<EOP
9390 #include <pthread.h>
9391 #include <stdio.h>
9392 int main() {
9393 #ifdef SCHED_YIELD
9394         sched_yield();
9395 #else
9396 #ifdef PTHREAD_YIELD
9397         pthread_yield();
9398 #else
9399 #ifdef PTHREAD_YIELD_NULL
9400         pthread_yield(NULL);
9401 #endif
9402 #endif
9403 #endif
9404 }
9405 EOP
9406 : see if sched_yield exists
9407 set try -DSCHED_YIELD
9408 if eval $compile; then
9409     val="$define"
9410     sched_yield='sched_yield()'
9411 else
9412     val="$undef"
9413 fi
9414 case "$usethreads" in
9415 $define)
9416         case "$val" in
9417         $define) echo 'sched_yield() found.' >&4        ;;
9418         *)       echo 'sched_yield() NOT found.' >&4    ;;
9419         esac
9420 esac
9421 set d_sched_yield
9422 eval $setvar
9423
9424 : see if pthread_yield exists
9425 set try -DPTHREAD_YIELD
9426 if eval $compile; then
9427     val="$define"
9428     case "$sched_yield" in
9429     '') sched_yield='pthread_yield()' ;;
9430     esac
9431 else
9432     set try -DPTHREAD_YIELD_NULL
9433     if eval $compile; then
9434         val="$define"
9435         case "$sched_yield" in
9436         '') sched_yield='pthread_yield(NULL)' ;;
9437         esac
9438     else
9439         val="$undef"
9440     fi
9441 fi
9442 case "$usethreads" in
9443 $define)
9444         case "$val" in
9445         $define) echo 'pthread_yield() found.' >&4      ;;
9446         *)       echo 'pthread_yield() NOT found.' >&4  ;;
9447         esac
9448         ;;
9449 esac
9450 set d_pthread_yield
9451 eval $setvar
9452
9453 case "$sched_yield" in
9454 '') sched_yield=undef ;;
9455 esac
9456
9457 $rm -f try try.*
9458
9459 : see if this is a pwd.h system
9460 set pwd.h i_pwd
9461 eval $inhdr
9462
9463 case "$i_pwd" in
9464 $define)
9465         xxx=`./findhdr pwd.h`
9466         $cppstdin $cppflags $cppminus < $xxx >$$.h
9467
9468         if $contains 'pw_quota' $$.h >/dev/null 2>&1; then
9469                 val="$define"
9470         else
9471                 val="$undef"
9472         fi
9473         set d_pwquota
9474         eval $setvar
9475
9476         if $contains 'pw_age' $$.h >/dev/null 2>&1; then
9477                 val="$define"
9478         else
9479                 val="$undef"
9480         fi
9481         set d_pwage
9482         eval $setvar
9483
9484         if $contains 'pw_change' $$.h >/dev/null 2>&1; then
9485                 val="$define"
9486         else
9487                 val="$undef"
9488         fi
9489         set d_pwchange
9490         eval $setvar
9491
9492         if $contains 'pw_class' $$.h >/dev/null 2>&1; then
9493                 val="$define"
9494         else
9495                 val="$undef"
9496         fi
9497         set d_pwclass
9498         eval $setvar
9499
9500         if $contains 'pw_expire' $$.h >/dev/null 2>&1; then
9501                 val="$define"
9502         else
9503                 val="$undef"
9504         fi
9505         set d_pwexpire
9506         eval $setvar
9507
9508         if $contains 'pw_comment' $$.h >/dev/null 2>&1; then
9509                 val="$define"
9510         else
9511                 val="$undef"
9512         fi
9513         set d_pwcomment
9514         eval $setvar
9515
9516         if $contains 'pw_gecos' $$.h >/dev/null 2>&1; then
9517                 val="$define"
9518         else
9519                 val="$undef"
9520         fi
9521         set d_pwgecos
9522         eval $setvar
9523
9524         if $contains 'pw_passwd' $$.h >/dev/null 2>&1; then
9525                 val="$define"
9526         else
9527                 val="$undef"
9528         fi
9529         set d_pwpasswd
9530         eval $setvar
9531
9532         $rm -f $$.h
9533         ;;
9534 *)
9535         val="$undef"; 
9536         set d_pwquota; eval $setvar
9537         set d_pwage; eval $setvar
9538         set d_pwchange; eval $setvar
9539         set d_pwclass; eval $setvar
9540         set d_pwexpire; eval $setvar
9541         set d_pwcomment; eval $setvar
9542         set d_pwgecos; eval $setvar
9543         set d_pwpasswd; eval $setvar
9544         ;;
9545 esac
9546
9547
9548 echo " "
9549 echo "Checking which 64-bit integer type we could use..." >&4
9550
9551 case "$intsize" in
9552 8) val=int
9553    set quadtype
9554    eval $setvar
9555    val='"unsigned int"'
9556    set uquadtype
9557    eval $setvar
9558    quadkind=1
9559    ;;
9560 *) case "$longsize" in
9561    8) val=long
9562       set quadtype
9563       eval $setvar
9564       val='"unsigned long"'
9565       set uquadtype
9566       eval $setvar
9567       quadkind=2
9568       ;;
9569    *) case "$uselonglong:$d_longlong:$longlongsize" in
9570       define:define:8)
9571         val='"long long"'
9572         set quadtype
9573         eval $setvar
9574         val='"unsigned long long"'
9575         set uquadtype
9576         eval $setvar
9577         quadkind=3
9578         ;;
9579       *) case "$d_int64t" in
9580          define)
9581            val=int64_t
9582            set quadtype
9583            eval $setvar
9584            val=uint64_t
9585            set uquadtype
9586            eval $setvar
9587            quadkind=4
9588            ;;
9589          esac
9590          ;;
9591       esac
9592       ;;
9593    esac
9594    ;;
9595 esac
9596
9597 case "$quadtype" in
9598 '')     case "$uselonglong:$d_longlong:$longlongsize" in
9599         undef:define:8)
9600            echo "(You would have 'long long', but you are not using it.)" >&4 ;;
9601         *) echo "Alas, no 64-bit integer types in sight." >&4 ;;
9602         esac
9603         d_quad="$undef"
9604         ;;
9605 *)      echo "We could use '$quadtype' for 64-bit integers." >&4
9606         d_quad="$define"
9607         ;;
9608 esac
9609
9610 : see if readdir and friends exist
9611 set readdir d_readdir
9612 eval $inlibc
9613 set seekdir d_seekdir
9614 eval $inlibc
9615 set telldir d_telldir
9616 eval $inlibc
9617 set rewinddir d_rewinddir
9618 eval $inlibc
9619
9620 : see if readlink exists
9621 set readlink d_readlink
9622 eval $inlibc
9623
9624 : see if rename exists
9625 set rename d_rename
9626 eval $inlibc
9627
9628 : see if rmdir exists
9629 set rmdir d_rmdir
9630 eval $inlibc
9631
9632 : see if memory.h is available.
9633 val=''
9634 set memory.h val
9635 eval $inhdr
9636
9637 : See if it conflicts with string.h
9638 case "$val" in
9639 $define)
9640         case "$strings" in
9641         '') ;;
9642         *)
9643                 $cppstdin $cppflags $cppminus < $strings > mem.h
9644                 if $contains 'memcpy' mem.h >/dev/null 2>&1; then
9645                         echo " "
9646                         echo "We won't be including <memory.h>."
9647                         val="$undef"
9648                 fi
9649                 $rm -f mem.h
9650                 ;;
9651         esac
9652 esac
9653 set i_memory
9654 eval $setvar
9655
9656 : can bcopy handle overlapping blocks?
9657 val="$undef"
9658 case "$d_bcopy" in
9659 "$define")
9660         echo " "
9661         echo "Checking to see if your bcopy() can do overlapping copies..." >&4
9662         $cat >try.c <<EOCP
9663 #$i_memory I_MEMORY
9664 #$i_stdlib I_STDLIB
9665 #$i_string I_STRING
9666 #$i_unistd I_UNISTD
9667 EOCP
9668         $cat >>try.c <<'EOCP'
9669 #include <stdio.h>
9670 #ifdef I_MEMORY
9671 #  include <memory.h>
9672 #endif
9673 #ifdef I_STDLIB
9674 #  include <stdlib.h>
9675 #endif
9676 #ifdef I_STRING
9677 #  include <string.h>
9678 #else
9679 #  include <strings.h>
9680 #endif
9681 #ifdef I_UNISTD
9682 #  include <unistd.h>  /* Needed for NetBSD */
9683 #endif
9684 int main()
9685 {
9686 char buf[128], abc[128];
9687 char *b;
9688 int len;
9689 int off;
9690 int align;
9691
9692 bcopy("abcdefghijklmnopqrstuvwxyz0123456789", abc, 36);
9693
9694 for (align = 7; align >= 0; align--) {
9695         for (len = 36; len; len--) {
9696                 b = buf+align;
9697                 bcopy(abc, b, len);
9698                 for (off = 1; off <= len; off++) {
9699                         bcopy(b, b+off, len);
9700                         bcopy(b+off, b, len);
9701                         if (bcmp(b, abc, len))
9702                                 exit(1);
9703                 }
9704         }
9705 }
9706 exit(0);
9707 }
9708 EOCP
9709         set try
9710         if eval $compile_ok; then
9711                 if ./try 2>/dev/null; then
9712                         echo "Yes, it can."
9713                         val="$define"
9714                 else
9715                         echo "It can't, sorry."
9716                         case "$d_memmove" in
9717                         "$define") echo "But that's Ok since you have memmove()." ;;
9718                         esac
9719                 fi
9720         else
9721                 echo "(I can't compile the test program, so we'll assume not...)"
9722                 case "$d_memmove" in
9723                 "$define") echo "But that's Ok since you have memmove()." ;;
9724                 esac
9725         fi
9726         ;;
9727 esac
9728 $rm -f try.* try core
9729 set d_safebcpy
9730 eval $setvar
9731
9732 : can memcpy handle overlapping blocks?
9733 val="$undef"
9734 case "$d_memcpy" in
9735 "$define")
9736         echo " "
9737         echo "Checking to see if your memcpy() can do overlapping copies..." >&4
9738         $cat >try.c <<EOCP
9739 #$i_memory I_MEMORY
9740 #$i_stdlib I_STDLIB
9741 #$i_string I_STRING
9742 #$i_unistd I_UNISTD
9743 EOCP
9744         $cat >>try.c <<'EOCP'
9745 #include <stdio.h>
9746 #ifdef I_MEMORY
9747 #  include <memory.h>
9748 #endif
9749 #ifdef I_STDLIB
9750 #  include <stdlib.h>
9751 #endif
9752 #ifdef I_STRING
9753 #  include <string.h>
9754 #else
9755 #  include <strings.h>
9756 #endif
9757 #ifdef I_UNISTD
9758 #  include <unistd.h>  /* Needed for NetBSD */
9759 #endif
9760 int main()
9761 {
9762 char buf[128], abc[128];
9763 char *b;
9764 int len;
9765 int off;
9766 int align;
9767
9768 /* Copy "abcde..." string to char abc[] so that gcc doesn't
9769    try to store the string in read-only memory. */
9770 memcpy(abc, "abcdefghijklmnopqrstuvwxyz0123456789", 36);
9771
9772 for (align = 7; align >= 0; align--) {
9773         for (len = 36; len; len--) {
9774                 b = buf+align;
9775                 memcpy(b, abc, len);
9776                 for (off = 1; off <= len; off++) {
9777                         memcpy(b+off, b, len);
9778                         memcpy(b, b+off, len);
9779                         if (memcmp(b, abc, len))
9780                                 exit(1);
9781                 }
9782         }
9783 }
9784 exit(0);
9785 }
9786 EOCP
9787         set try
9788         if eval $compile_ok; then
9789                 if ./try 2>/dev/null; then
9790                         echo "Yes, it can."
9791                         val="$define"
9792                 else
9793                         echo "It can't, sorry."
9794                         case "$d_memmove" in
9795                         "$define") echo "But that's Ok since you have memmove()." ;;
9796                         esac
9797                 fi
9798         else
9799                 echo "(I can't compile the test program, so we'll assume not...)"
9800                 case "$d_memmove" in
9801                 "$define") echo "But that's Ok since you have memmove()." ;;
9802                 esac
9803         fi
9804         ;;
9805 esac
9806 $rm -f try.* try core
9807 set d_safemcpy
9808 eval $setvar
9809
9810 : can memcmp be trusted to compare relative magnitude?
9811 val="$undef"
9812 case "$d_memcmp" in
9813 "$define")
9814         echo " "
9815         echo "Checking if your memcmp() can compare relative magnitude..." >&4
9816         $cat >try.c <<EOCP
9817 #$i_memory I_MEMORY
9818 #$i_stdlib I_STDLIB
9819 #$i_string I_STRING
9820 #$i_unistd I_UNISTD
9821 EOCP
9822         $cat >>try.c <<'EOCP'
9823 #include <stdio.h>
9824 #ifdef I_MEMORY
9825 #  include <memory.h>
9826 #endif
9827 #ifdef I_STDLIB
9828 #  include <stdlib.h>
9829 #endif
9830 #ifdef I_STRING
9831 #  include <string.h>
9832 #else
9833 #  include <strings.h>
9834 #endif
9835 #ifdef I_UNISTD
9836 #  include <unistd.h>  /* Needed for NetBSD */
9837 #endif
9838 int main()
9839 {
9840 char a = -1;
9841 char b = 0;
9842 if ((a < b) && memcmp(&a, &b, 1) < 0)
9843         exit(1);
9844 exit(0);
9845 }
9846 EOCP
9847         set try
9848         if eval $compile_ok; then
9849                 if ./try 2>/dev/null; then
9850                         echo "Yes, it can."
9851                         val="$define"
9852                 else
9853                         echo "No, it can't (it uses signed chars)."
9854                 fi
9855         else
9856                 echo "(I can't compile the test program, so we'll assume not...)"
9857         fi
9858         ;;
9859 esac
9860 $rm -f try.* try core
9861 set d_sanemcmp
9862 eval $setvar
9863
9864 : see if select exists
9865 set select d_select
9866 eval $inlibc
9867
9868 : see if semctl exists
9869 set semctl d_semctl
9870 eval $inlibc
9871
9872 : see if semget exists
9873 set semget d_semget
9874 eval $inlibc
9875
9876 : see if semop exists
9877 set semop d_semop
9878 eval $inlibc
9879
9880 : see how much of the 'sem*(2)' library is present.
9881 h_sem=true
9882 echo " "
9883 case "$d_semctl$d_semget$d_semop" in
9884 *"$undef"*) h_sem=false;;
9885 esac
9886 case "$osname" in
9887 freebsd)
9888     case "`ipcs 2>&1`" in
9889     "SVID messages"*"not configured"*)
9890         echo "Your $osname does not have the sem*(2) configured." >&4
9891         h_sem=false
9892         val="$undef"
9893         set semctl d_semctl
9894         eval $setvar
9895         set semget d_semget
9896         eval $setvar
9897         set semop d_semop
9898         eval $setvar
9899         ;;
9900     esac
9901     ;;
9902 esac
9903 : we could also check for sys/ipc.h ...
9904 if $h_sem && $test `./findhdr sys/sem.h`; then
9905         echo "You have the full sem*(2) library." >&4
9906         val="$define"
9907 else
9908         echo "You don't have the full sem*(2) library." >&4
9909         val="$undef"
9910 fi
9911 set d_sem
9912 eval $setvar
9913
9914 : see whether sys/sem.h defines union semun
9915 echo " "
9916 $cat > try.c <<'END'
9917 #include <sys/types.h>
9918 #include <sys/ipc.h>
9919 #include <sys/sem.h>
9920 int main () { union semun semun; semun.buf = 0; }
9921 END
9922 set try
9923 if eval $compile; then
9924     echo "You have union semun in <sys/sem.h>." >&4
9925     val="$define"
9926 else
9927     echo "You do not have union semun in <sys/sem.h>." >&4
9928     val="$undef"
9929 fi
9930 $rm -f try try.c try.h
9931 set d_union_semun
9932 eval $setvar
9933
9934 : see how to do semctl IPC_STAT
9935 case "$d_sem" in
9936 $define)
9937     : see whether semctl IPC_STAT can use union semun
9938     echo " "
9939     $cat > try.h <<END
9940 #ifndef S_IRUSR
9941 #   ifdef S_IREAD
9942 #       define S_IRUSR S_IREAD
9943 #       define S_IWUSR S_IWRITE
9944 #       define S_IXUSR S_IEXEC
9945 #   else
9946 #       define S_IRUSR 0400
9947 #       define S_IWUSR 0200
9948 #       define S_IXUSR 0100
9949 #   endif
9950 #   define S_IRGRP (S_IRUSR>>3)
9951 #   define S_IWGRP (S_IWUSR>>3)
9952 #   define S_IXGRP (S_IXUSR>>3)
9953 #   define S_IROTH (S_IRUSR>>6)
9954 #   define S_IWOTH (S_IWUSR>>6)
9955 #   define S_IXOTH (S_IXUSR>>6)
9956 #endif
9957 #ifndef S_IRWXU
9958 #   define S_IRWXU (S_IRUSR|S_IWUSR|S_IXUSR)
9959 #   define S_IRWXG (S_IRGRP|S_IWGRP|S_IXGRP)
9960 #   define S_IRWXO (S_IROTH|S_IWOTH|S_IXOTH)
9961 #endif
9962 END
9963
9964     $cat > try.c <<END
9965 #include <sys/types.h>
9966 #include <sys/ipc.h>
9967 #include <sys/sem.h>
9968 #include <sys/stat.h>
9969 #include <stdio.h>
9970 #include <errno.h>
9971 #include "try.h"
9972 #ifndef errno
9973 extern int errno;
9974 #endif
9975 #$d_union_semun HAS_UNION_SEMUN
9976 int main() {
9977     union semun
9978 #ifndef HAS_UNION_SEMUN
9979     {
9980         int val;
9981         struct semid_ds *buf;
9982         unsigned short *array;
9983     }
9984 #endif
9985     arg;
9986     int sem, st;
9987
9988 #if defined(IPC_PRIVATE) && defined(S_IRWXU) && defined(S_IRWXG) && defined(S_IRWXO) && defined(IPC_CREAT)
9989     sem = semget(IPC_PRIVATE, 1, S_IRWXU|S_IRWXG|S_IRWXO|IPC_CREAT);
9990     if (sem > -1) {
9991         struct semid_ds argbuf;
9992         arg.buf = &argbuf;
9993 #       ifdef IPC_STAT
9994         st = semctl(sem, 0, IPC_STAT, arg);
9995         if (st == 0)
9996             printf("semun\n");
9997         else
9998 #       endif /* IPC_STAT */
9999             printf("semctl IPC_STAT failed: errno = %d\n", errno);
10000 #       ifdef IPC_RMID
10001         if (semctl(sem, 0, IPC_RMID, arg) != 0)
10002 #       endif /* IPC_RMID */
10003             printf("semctl IPC_RMID failed: errno = %d\n", errno);
10004     } else
10005 #endif /* IPC_PRIVATE && ... */
10006         printf("semget failed: errno = %d\n", errno);
10007   return 0;
10008 }
10009 END
10010     val="$undef"
10011     set try
10012     if eval $compile; then
10013         xxx=`./try`
10014         case "$xxx" in
10015         semun) val="$define" ;;
10016         esac
10017     fi
10018     $rm -f try try.c
10019     set d_semctl_semun
10020     eval $setvar
10021     case "$d_semctl_semun" in
10022     $define)
10023         echo "You can use union semun for semctl IPC_STAT." >&4
10024         also='also'
10025         ;;
10026     *)  echo "You cannot use union semun for semctl IPC_STAT." >&4
10027         also=''
10028         ;;
10029     esac
10030
10031     : see whether semctl IPC_STAT can use struct semid_ds pointer
10032     $cat > try.c <<'END'
10033 #include <sys/types.h>
10034 #include <sys/ipc.h>
10035 #include <sys/sem.h>
10036 #include <sys/stat.h>
10037 #include "try.h"
10038 #include <stdio.h>
10039 #include <errno.h>
10040 #ifndef errno
10041 extern int errno;
10042 #endif
10043 int main() {
10044     struct semid_ds arg;
10045     int sem, st;
10046
10047 #if defined(IPC_PRIVATE) && defined(S_IRWXU) && defined(S_IRWXG) &&  defined(S_IRWXO) && defined(IPC_CREAT)
10048     sem = semget(IPC_PRIVATE, 1, S_IRWXU|S_IRWXG|S_IRWXO|IPC_CREAT);
10049     if (sem > -1) {
10050 #       ifdef IPC_STAT
10051         st = semctl(sem, 0, IPC_STAT, &arg);
10052         if (st == 0)
10053             printf("semid_ds\n");
10054         else
10055 #       endif /* IPC_STAT */
10056             printf("semctl IPC_STAT failed: errno = %d\n", errno);
10057 #       ifdef IPC_RMID
10058         if (semctl(sem, 0, IPC_RMID, &arg) != 0)
10059 #       endif /* IPC_RMID */
10060             printf("semctl IPC_RMID failed: errno = %d\n", errno);
10061     } else
10062 #endif /* IPC_PRIVATE && ... */
10063         printf("semget failed: errno = %d\n", errno);
10064
10065     return 0;
10066 }
10067 END
10068     val="$undef"
10069     set try
10070     if eval $compile; then
10071         xxx=`./try`
10072         case "$xxx" in
10073         semid_ds) val="$define" ;;
10074         esac
10075     fi
10076     $rm -f try try.c
10077     set d_semctl_semid_ds
10078     eval $setvar
10079     case "$d_semctl_semid_ds" in
10080     $define)
10081         echo "You can $also use struct semid_ds* for semctl IPC_STAT." >&4
10082         ;;
10083     *)  echo "You cannot use struct semid_ds* for semctl IPC_STAT." >&4
10084         ;;
10085     esac
10086     $rm -f try.h
10087     ;;
10088 *)  val="$undef"
10089
10090     # We do not have the full sem*(2) library, so assume we can not
10091     # use either.
10092
10093     set d_semctl_semun
10094     eval $setvar
10095
10096     set d_semctl_semid_ds
10097     eval $setvar
10098     ;;
10099 esac
10100
10101 : see if setegid exists
10102 set setegid d_setegid
10103 eval $inlibc
10104
10105 : see if seteuid exists
10106 set seteuid d_seteuid
10107 eval $inlibc
10108
10109 : see if setgrent exists
10110 set setgrent d_setgrent
10111 eval $inlibc
10112
10113 : see if sethostent exists
10114 set sethostent d_sethent
10115 eval $inlibc
10116
10117 : see if setlinebuf exists
10118 set setlinebuf d_setlinebuf
10119 eval $inlibc
10120
10121 : see if setlocale exists
10122 set setlocale d_setlocale
10123 eval $inlibc
10124
10125 : see if setnetent exists
10126 set setnetent d_setnent
10127 eval $inlibc
10128
10129 : see if setprotoent exists
10130 set setprotoent d_setpent
10131 eval $inlibc
10132
10133 : see if setpgid exists
10134 set setpgid d_setpgid
10135 eval $inlibc
10136
10137 : see if setpgrp2 exists
10138 set setpgrp2 d_setpgrp2
10139 eval $inlibc
10140
10141 : see if setpriority exists
10142 set setpriority d_setprior
10143 eval $inlibc
10144
10145 : see if setpwent exists
10146 set setpwent d_setpwent
10147 eval $inlibc
10148
10149 : see if setregid exists
10150 set setregid d_setregid
10151 eval $inlibc
10152 set setresgid d_setresgid
10153 eval $inlibc
10154
10155 : see if setreuid exists
10156 set setreuid d_setreuid
10157 eval $inlibc
10158 set setresuid d_setresuid
10159 eval $inlibc
10160
10161 : see if setrgid exists
10162 set setrgid d_setrgid
10163 eval $inlibc
10164
10165 : see if setruid exists
10166 set setruid d_setruid
10167 eval $inlibc
10168
10169 : see if setservent exists
10170 set setservent d_setsent
10171 eval $inlibc
10172
10173 : see if setsid exists
10174 set setsid d_setsid
10175 eval $inlibc
10176
10177 : see if setspent exists
10178 set setspent d_setspent
10179 eval $inlibc
10180
10181 : see if setvbuf exists
10182 set setvbuf d_setvbuf
10183 eval $inlibc
10184
10185 : see if sfio.h is available
10186 set sfio.h i_sfio
10187 eval $inhdr
10188
10189
10190 : see if sfio library is available
10191 case "$i_sfio" in
10192 $define)
10193         val=''
10194         set sfreserve val
10195         eval $inlibc
10196         ;;
10197 *)
10198         val="$undef"
10199         ;;
10200 esac
10201 : Ok, but do we want to use it.
10202 case "$val" in
10203 $define)
10204         case "$usesfio" in
10205         true|$define|[yY]*) dflt='y';;
10206         *) dflt='n';;
10207         esac
10208         echo "$package can use the sfio library, but it is experimental."
10209         rp="You seem to have sfio available, do you want to try using it?"
10210         . ./myread
10211         case "$ans" in
10212         y|Y) ;;
10213         *)      echo "Ok, avoiding sfio this time.  I'll use stdio instead."
10214                 val="$undef"
10215                 : Remove sfio from list of libraries to use
10216                 set `echo X $libs | $sed -e 's/-lsfio / /' -e 's/-lsfio$//'`
10217                 shift
10218                 libs="$*"
10219                 echo "libs = $libs" >&4
10220                 ;;
10221         esac
10222         ;;
10223 *)      case "$usesfio" in
10224         true|$define|[yY]*)
10225                 echo "Sorry, cannot find sfio on this machine" >&4
10226                 echo "Ignoring your setting of usesfio=$usesfio" >&4
10227                 ;;
10228         esac
10229         ;;
10230 esac
10231 set d_sfio
10232 eval $setvar
10233 case "$d_sfio" in
10234 $define) usesfio='true';;
10235 *) usesfio='false';;
10236 esac
10237
10238 : see if shmctl exists
10239 set shmctl d_shmctl
10240 eval $inlibc
10241
10242 : see if shmget exists
10243 set shmget d_shmget
10244 eval $inlibc
10245
10246 : see if shmat exists
10247 set shmat d_shmat
10248 eval $inlibc
10249 : see what shmat returns
10250 case "$d_shmat" in
10251 "$define")
10252         $cat >shmat.c <<'END'
10253 #include <sys/shm.h>
10254 void *shmat();
10255 END
10256         if $cc $ccflags -c shmat.c >/dev/null 2>&1; then
10257                 shmattype='void *'
10258         else
10259                 shmattype='char *'
10260         fi
10261         echo "and it returns ($shmattype)." >&4
10262         : see if a prototype for shmat is available
10263         xxx=`./findhdr sys/shm.h`
10264         $cppstdin $cppflags $cppminus < $xxx > shmat.c 2>/dev/null
10265         if $contains 'shmat.*(' shmat.c >/dev/null 2>&1; then
10266                 val="$define"
10267         else
10268                 val="$undef"
10269         fi
10270         $rm -f shmat.[co]
10271         ;;
10272 *)
10273         val="$undef"
10274         ;;
10275 esac
10276 set d_shmatprototype
10277 eval $setvar
10278
10279 : see if shmdt exists
10280 set shmdt d_shmdt
10281 eval $inlibc
10282
10283 : see how much of the 'shm*(2)' library is present.
10284 h_shm=true
10285 echo " "
10286 case "$d_shmctl$d_shmget$d_shmat$d_shmdt" in
10287 *"$undef"*) h_shm=false;;
10288 esac
10289 case "$osname" in
10290 freebsd)
10291     case "`ipcs 2>&1`" in
10292     "SVID shared memory"*"not configured"*)
10293         echo "Your $osname does not have the shm*(2) configured." >&4
10294         h_shm=false
10295         val="$undef"
10296         set shmctl d_shmctl
10297         evat $setvar
10298         set shmget d_shmget
10299         evat $setvar
10300         set shmat d_shmat
10301         evat $setvar
10302         set shmdt d_shmdt
10303         evat $setvar
10304         ;;
10305     esac
10306     ;;
10307 esac
10308 : we could also check for sys/ipc.h ...
10309 if $h_shm && $test `./findhdr sys/shm.h`; then
10310         echo "You have the full shm*(2) library." >&4
10311         val="$define"
10312 else
10313         echo "You don't have the full shm*(2) library." >&4
10314         val="$undef"
10315 fi
10316 set d_shm
10317 eval $setvar
10318
10319 echo " "
10320 : see if we have sigaction
10321 if set sigaction val -f d_sigaction; eval $csym; $val; then
10322         echo 'sigaction() found.' >&4
10323         $cat > try.c <<'EOP'
10324 #include <stdio.h>
10325 #include <sys/types.h>
10326 #include <signal.h>
10327 int main()
10328 {
10329     struct sigaction act, oact;
10330     act.sa_flags = 0;
10331     oact.sa_handler = 0;
10332     /* so that act and oact are used */
10333     exit(act.sa_flags == 0 &&  oact.sa_handler == 0);
10334 }
10335 EOP
10336         set try
10337         if eval $compile_ok; then
10338                 val="$define"
10339         else
10340                 echo "But you don't seem to have a useable struct sigaction." >&4
10341                 val="$undef"
10342         fi
10343 else
10344         echo 'sigaction NOT found.' >&4
10345         val="$undef"
10346 fi
10347 set d_sigaction; eval $setvar
10348 $rm -f try try$_o try.c
10349
10350 : see if sigsetjmp exists
10351 echo " "
10352 case "$d_sigsetjmp" in
10353 '')
10354         $cat >try.c <<'EOP'
10355 #include <setjmp.h>
10356 sigjmp_buf env;
10357 int set = 1;
10358 int main()
10359 {
10360         if (sigsetjmp(env,1))
10361                 exit(set);
10362         set = 0;
10363         siglongjmp(env, 1);
10364         exit(1);
10365 }
10366 EOP
10367         set try
10368         if eval $compile; then
10369                 if ./try >/dev/null 2>&1; then
10370                         echo "POSIX sigsetjmp found." >&4
10371                         val="$define"
10372                 else
10373                         $cat >&4 <<EOM
10374 Uh-Oh! You have POSIX sigsetjmp and siglongjmp, but they do not work properly!!
10375 I'll ignore them.
10376 EOM
10377                         val="$undef"
10378                 fi
10379         else
10380                 echo "sigsetjmp not found." >&4
10381                 val="$undef"
10382         fi
10383         ;;
10384 *) val="$d_sigsetjmp"
10385         case "$d_sigsetjmp" in
10386         $define) echo "POSIX sigsetjmp found." >&4;;
10387         $undef) echo "sigsetjmp not found." >&4;;
10388         esac
10389         ;;
10390 esac
10391 set d_sigsetjmp
10392 eval $setvar
10393 $rm -f try.c try
10394
10395 : see if sqrtl exists
10396 set sqrtl d_sqrtl
10397 eval $inlibc
10398
10399 : see if sys/stat.h is available
10400 set sys/stat.h i_sysstat
10401 eval $inhdr
10402
10403
10404 : see if stat knows about block sizes
10405 echo " "
10406 echo "Checking to see if your struct stat has st_blocks field..." >&4
10407 set d_statblks stat st_blocks $i_sysstat sys/stat.h
10408 eval $hasfield
10409
10410
10411 : see if this is a sys/vfs.h system
10412 set sys/vfs.h i_sysvfs
10413 eval $inhdr
10414
10415
10416 : see if this is a sys/statfs.h system
10417 set sys/statfs.h i_sysstatfs
10418 eval $inhdr
10419
10420
10421 echo " "
10422 echo "Checking to see if your system supports struct statfs..." >&4
10423 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
10424 eval $hasstruct
10425 case "$d_statfs_s" in
10426 "$define")      echo "Yes, it does."   ;;
10427 *)              echo "No, it doesn't." ;;
10428 esac
10429
10430
10431
10432 : see if struct statfs knows about f_flags
10433 case "$d_statfs_s" in
10434 define) 
10435         echo " "
10436         echo "Checking to see if your struct statfs has f_flags field..." >&4
10437         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
10438         eval $hasfield
10439         ;;
10440 *)      val="$undef"
10441         set d_statfs_f_flags
10442         eval $setvar
10443         ;;
10444 esac
10445 case "$d_statfs_f_flags" in
10446 "$define")      echo "Yes, it does."   ;;
10447 *)              echo "No, it doesn't." ;;
10448 esac
10449
10450 : see if _ptr and _cnt from stdio act std
10451 echo " "
10452 if $contains '_IO_fpos_t' `./findhdr stdio.h` `./findhdr libio.h` >/dev/null 2>&1 ; then
10453         echo "(Looks like you have stdio.h from Linux.)"
10454         case "$stdio_ptr" in
10455         '') stdio_ptr='((fp)->_IO_read_ptr)'
10456                 ptr_lval=$define
10457                 ;;
10458         *)      ptr_lval=$d_stdio_ptr_lval;;
10459         esac
10460         case "$stdio_cnt" in
10461         '') stdio_cnt='((fp)->_IO_read_end - (fp)->_IO_read_ptr)'
10462                 cnt_lval=$undef
10463                 ;;
10464         *)      cnt_lval=$d_stdio_cnt_lval;;
10465         esac
10466         case "$stdio_base" in
10467         '') stdio_base='((fp)->_IO_read_base)';;
10468         esac
10469         case "$stdio_bufsiz" in
10470         '') stdio_bufsiz='((fp)->_IO_read_end - (fp)->_IO_read_base)';;
10471         esac
10472 else
10473         case "$stdio_ptr" in
10474         '') stdio_ptr='((fp)->_ptr)'
10475                 ptr_lval=$define
10476                 ;;
10477         *)      ptr_lval=$d_stdio_ptr_lval;;
10478         esac
10479         case "$stdio_cnt" in
10480         '') stdio_cnt='((fp)->_cnt)'
10481                 cnt_lval=$define
10482                 ;;
10483         *)      cnt_lval=$d_stdio_cnt_lval;;
10484         esac
10485         case "$stdio_base" in
10486         '') stdio_base='((fp)->_base)';;
10487         esac
10488         case "$stdio_bufsiz" in
10489         '') stdio_bufsiz='((fp)->_cnt + (fp)->_ptr - (fp)->_base)';;
10490         esac
10491 fi
10492 : test whether _ptr and _cnt really work
10493 echo "Checking how std your stdio is..." >&4
10494 $cat >try.c <<EOP
10495 #include <stdio.h>
10496 #define FILE_ptr(fp)    $stdio_ptr
10497 #define FILE_cnt(fp)    $stdio_cnt
10498 int main() {
10499         FILE *fp = fopen("try.c", "r");
10500         char c = getc(fp);
10501         if (
10502                 18 <= FILE_cnt(fp) &&
10503                 strncmp(FILE_ptr(fp), "include <stdio.h>\n", 18) == 0
10504         )
10505                 exit(0);
10506         exit(1);
10507 }
10508 EOP
10509 val="$undef"
10510 set try
10511 if eval $compile; then
10512         if ./try; then
10513                 echo "Your stdio acts pretty std."
10514                 val="$define"
10515         else
10516                 echo "Your stdio isn't very std."
10517         fi
10518 else
10519         echo "Your stdio doesn't appear very std."
10520 fi
10521 $rm -f try.c try
10522 set d_stdstdio
10523 eval $setvar
10524
10525 : Can _ptr be used as an lvalue?
10526 case "$d_stdstdio$ptr_lval" in
10527 $define$define) val=$define ;;
10528 *) val=$undef ;;
10529 esac
10530 set d_stdio_ptr_lval
10531 eval $setvar
10532
10533 : Can _cnt be used as an lvalue?
10534 case "$d_stdstdio$cnt_lval" in
10535 $define$define) val=$define ;;
10536 *) val=$undef ;;
10537 esac
10538 set d_stdio_cnt_lval
10539 eval $setvar
10540
10541 : see if _base is also standard
10542 val="$undef"
10543 case "$d_stdstdio" in
10544 $define)
10545         $cat >try.c <<EOP
10546 #include <stdio.h>
10547 #define FILE_base(fp)   $stdio_base
10548 #define FILE_bufsiz(fp) $stdio_bufsiz
10549 int main() {
10550         FILE *fp = fopen("try.c", "r");
10551         char c = getc(fp);
10552         if (
10553                 19 <= FILE_bufsiz(fp) &&
10554                 strncmp(FILE_base(fp), "#include <stdio.h>\n", 19) == 0
10555         )
10556                 exit(0);
10557         exit(1);
10558 }
10559 EOP
10560         set try
10561         if eval $compile; then
10562                 if ./try; then
10563                         echo "And its _base field acts std."
10564                         val="$define"
10565                 else
10566                         echo "But its _base field isn't std."
10567                 fi
10568         else
10569                 echo "However, it seems to be lacking the _base field."
10570         fi
10571         $rm -f try.c try
10572         ;;
10573 esac
10574 set d_stdiobase
10575 eval $setvar
10576
10577 $cat >&4 <<EOM
10578 Checking how to access stdio streams by file descriptor number...
10579 EOM
10580 case "$stdio_stream_array" in
10581 '')     $cat >try.c <<EOCP
10582 #include <stdio.h>
10583 int main() {
10584   if (&STDIO_STREAM_ARRAY[fileno(stdin)] == stdin)
10585     printf("yes\n");
10586 }
10587 EOCP
10588         for s in _iob __iob __sF
10589         do
10590                 set try -DSTDIO_STREAM_ARRAY=$s
10591                 if eval $compile; then
10592                         case "`./try$exe_ext`" in
10593                         yes)    stdio_stream_array=$s; break ;;
10594                         esac
10595                 fi
10596         done
10597         $rm -f try.* try$exe_ext
10598 esac
10599 case "$stdio_stream_array" in
10600 '')     $cat >&4 <<EOM
10601 I can't figure out how to access stdio streams by file descriptor number.
10602 EOM
10603         d_stdio_stream_array="$undef"
10604         ;;
10605 *)      $cat >&4 <<EOM
10606 You can access stdio streams by file descriptor number by the $stdio_stream_array array.
10607 EOM
10608         d_stdio_stream_array="$define"
10609         ;;
10610 esac
10611
10612 : see if strcoll exists
10613 set strcoll d_strcoll
10614 eval $inlibc
10615
10616 : check for structure copying
10617 echo " "
10618 echo "Checking to see if your C compiler can copy structs..." >&4
10619 $cat >try.c <<'EOCP'
10620 int main()
10621 {
10622         struct blurfl {
10623                 int dyick;
10624         } foo, bar;
10625
10626         foo = bar;
10627 }
10628 EOCP
10629 if $cc -c try.c >/dev/null 2>&1 ; then
10630         val="$define"
10631         echo "Yup, it can."
10632 else
10633         val="$undef"
10634         echo "Nope, it can't."
10635 fi
10636 set d_strctcpy
10637 eval $setvar
10638 $rm -f try.*
10639
10640 : see if strerror and/or sys_errlist[] exist
10641 echo " "
10642 if test "X$d_strerror" = X -o "X$d_syserrlst" = X; then
10643     if set strerror val -f d_strerror; eval $csym; $val; then
10644                 echo 'strerror() found.' >&4
10645                 d_strerror="$define"
10646                 d_strerrm='strerror(e)'
10647                 if set sys_errlist val -a d_syserrlst; eval $csym; $val; then   
10648                         echo "(You also have sys_errlist[], so we could roll our own strerror.)" 
10649                         d_syserrlst="$define"
10650                 else
10651                         echo "(Since you don't have sys_errlist[], sterror() is welcome.)"
10652                         d_syserrlst="$undef"
10653                 fi
10654     elif xxx=`./findhdr string.h`; test "$xxx" || xxx=`./findhdr strings.h`; \
10655                         $contains '#[   ]*define.*strerror' "$xxx" >/dev/null 2>&1; then
10656                 echo 'strerror() found in string header.' >&4
10657                 d_strerror="$define"
10658                 d_strerrm='strerror(e)'
10659                 if set sys_errlist val -a d_syserrlst; eval $csym; $val; then   
10660                         echo "(Most probably, strerror() uses sys_errlist[] for descriptions.)"
10661                                 d_syserrlst="$define"
10662                 else
10663                         echo "(You don't appear to have any sys_errlist[], how can this be?)"
10664                         d_syserrlst="$undef"
10665                 fi
10666     elif set sys_errlist val -a d_syserrlst; eval $csym; $val; then
10667                 echo "strerror() not found, but you have sys_errlist[] so we'll use that." >&4
10668                 d_strerror="$undef"
10669                 d_syserrlst="$define"
10670                 d_strerrm='((e)<0||(e)>=sys_nerr?"unknown":sys_errlist[e])'
10671     else
10672                 echo 'strerror() and sys_errlist[] NOT found.' >&4
10673                 d_strerror="$undef"
10674                 d_syserrlst="$undef"
10675                 d_strerrm='"unknown"'
10676     fi
10677 fi
10678
10679 : see if strtod exists
10680 set strtod d_strtod
10681 eval $inlibc
10682
10683 : see if strtol exists
10684 set strtol d_strtol
10685 eval $inlibc
10686
10687 : see if strtoul exists
10688 set strtoul d_strtoul
10689 eval $inlibc
10690
10691 : see if strtoull exists
10692 set strtoull d_strtoull
10693 eval $inlibc
10694
10695 : see if strxfrm exists
10696 set strxfrm d_strxfrm
10697 eval $inlibc
10698
10699 : see if symlink exists
10700 set symlink d_symlink
10701 eval $inlibc
10702
10703 : see if syscall exists
10704 set syscall d_syscall
10705 eval $inlibc
10706
10707 : see if sysconf exists
10708 set sysconf d_sysconf
10709 eval $inlibc
10710
10711 : see if system exists
10712 set system d_system
10713 eval $inlibc
10714
10715 : see if tcgetpgrp exists
10716 set tcgetpgrp d_tcgetpgrp
10717 eval $inlibc
10718
10719 : see if tcsetpgrp exists
10720 set tcsetpgrp d_tcsetpgrp
10721 eval $inlibc
10722
10723 : see if prototype for telldir is available
10724 echo " "
10725 set d_telldirproto telldir $i_systypes sys/types.h $i_dirent dirent.h
10726 eval $hasproto
10727
10728 : see if this is a sys/times.h system
10729 set sys/times.h i_systimes
10730 eval $inhdr
10731
10732 : see if times exists
10733 echo " "
10734 if set times val -f d_times; eval $csym; $val; then
10735         echo 'times() found.' >&4
10736         d_times="$define"
10737         inc=''
10738         case "$i_systimes" in
10739         "$define") inc='sys/times.h';;
10740         esac
10741         rp="What is the type returned by times() on this system?"
10742         set clock_t clocktype long stdio.h sys/types.h $inc
10743         eval $typedef_ask
10744 else
10745         echo 'times() NOT found, hope that will do.' >&4
10746         d_times="$undef"
10747         clocktype='int'
10748 fi
10749
10750 : see if truncate exists
10751 set truncate d_truncate
10752 eval $inlibc
10753
10754 : see if tzname[] exists
10755 echo " "
10756 if set tzname val -a d_tzname; eval $csym; $val; then
10757         val="$define"
10758         echo 'tzname[] found.' >&4
10759 else
10760         val="$undef"
10761         echo 'tzname[] NOT found.' >&4
10762 fi
10763 set d_tzname
10764 eval $setvar
10765
10766 : see if umask exists
10767 set umask d_umask
10768 eval $inlibc
10769
10770 : see if ustat exists
10771 set ustat d_ustat
10772 eval $inlibc
10773
10774 : backward compatibility for d_hvfork
10775 if test X$d_hvfork != X; then
10776         d_vfork="$d_hvfork"
10777         d_hvfork=''
10778 fi
10779 : see if there is a vfork
10780 val=''
10781 set vfork val
10782 eval $inlibc
10783
10784 : Ok, but do we want to use it. vfork is reportedly unreliable in 
10785 : perl on Solaris 2.x, and probably elsewhere.
10786 case "$val" in
10787 $define)
10788         echo " "
10789         case "$usevfork" in
10790         false) dflt='n';;
10791         *) dflt='y';;
10792         esac
10793         cat <<'EOM'
10794  
10795 Perl can only use a vfork() that doesn't suffer from strict
10796 restrictions on calling functions or modifying global data in
10797 the child.  For example, glibc-2.1 contains such a vfork()
10798 that is unsuitable.  If your system provides a proper fork()
10799 call, chances are that you do NOT want perl to use vfork().
10800
10801 EOM
10802         rp="Do you still want to use vfork()?"
10803         . ./myread
10804         case "$ans" in
10805         y|Y) ;;
10806         *)
10807                 echo "Ok, we won't use vfork()."
10808                 val="$undef"
10809                 ;;
10810         esac
10811         ;;
10812 esac
10813 set d_vfork
10814 eval $setvar
10815 case "$d_vfork" in
10816 $define) usevfork='true';;
10817 *) usevfork='false';;
10818 esac
10819
10820 : see if this is an sysdir system
10821 set sys/dir.h i_sysdir
10822 eval $inhdr
10823
10824 : see if this is an sysndir system
10825 set sys/ndir.h i_sysndir
10826 eval $inhdr
10827
10828 : see if closedir exists
10829 set closedir d_closedir
10830 eval $inlibc
10831
10832 case "$d_closedir" in
10833 "$define")
10834         echo " "
10835         echo "Checking whether closedir() returns a status..." >&4
10836         cat > closedir.c <<EOM
10837 #$i_dirent I_DIRENT             /**/
10838 #$i_sysdir I_SYS_DIR            /**/
10839 #$i_sysndir I_SYS_NDIR          /**/
10840 #$i_systypes I_SYS_TYPES        /**/
10841
10842 #if defined(I_SYS_TYPES)
10843 #include <sys/types.h>
10844 #endif
10845 #if defined(I_DIRENT)
10846 #include <dirent.h>
10847 #if defined(NeXT) && defined(I_SYS_DIR) /* NeXT needs dirent + sys/dir.h */
10848 #include <sys/dir.h>
10849 #endif
10850 #else
10851 #ifdef I_SYS_NDIR
10852 #include <sys/ndir.h>
10853 #else
10854 #ifdef I_SYS_DIR
10855 #ifdef hp9000s500
10856 #include <ndir.h>       /* may be wrong in the future */
10857 #else
10858 #include <sys/dir.h>
10859 #endif
10860 #endif
10861 #endif
10862 #endif 
10863 int main() { return closedir(opendir(".")); }
10864 EOM
10865         set closedir
10866         if eval $compile_ok; then
10867                 if ./closedir > /dev/null 2>&1 ; then
10868                         echo "Yes, it does."
10869                         val="$undef"
10870                 else
10871                         echo "No, it doesn't."
10872                         val="$define"
10873                 fi
10874         else
10875                 echo "(I can't seem to compile the test program--assuming it doesn't)"
10876                 val="$define"
10877         fi
10878         ;;
10879 *)
10880         val="$undef";
10881         ;;
10882 esac
10883 set d_void_closedir
10884 eval $setvar
10885 $rm -f closedir*
10886 : check for volatile keyword
10887 echo " "
10888 echo 'Checking to see if your C compiler knows about "volatile"...' >&4
10889 $cat >try.c <<'EOCP'
10890 int main()
10891 {
10892         typedef struct _goo_struct goo_struct;
10893         goo_struct * volatile goo = ((goo_struct *)0);
10894         struct _goo_struct {
10895                 long long_int;
10896                 int reg_int;
10897                 char char_var;
10898         };
10899         typedef unsigned short foo_t;
10900         char *volatile foo;
10901         volatile int bar;
10902         volatile foo_t blech;
10903         foo = foo;
10904 }
10905 EOCP
10906 if $cc -c $ccflags try.c >/dev/null 2>&1 ; then
10907         val="$define"
10908         echo "Yup, it does."
10909 else
10910         val="$undef"
10911         echo "Nope, it doesn't."
10912 fi
10913 set d_volatile
10914 eval $setvar
10915 $rm -f try.*
10916
10917 : see if there is a wait4
10918 set wait4 d_wait4
10919 eval $inlibc
10920
10921 : see if waitpid exists
10922 set waitpid d_waitpid
10923 eval $inlibc
10924
10925 : see if wcstombs exists
10926 set wcstombs d_wcstombs
10927 eval $inlibc
10928
10929 : see if wctomb exists
10930 set wctomb d_wctomb
10931 eval $inlibc
10932
10933 : preserve RCS keywords in files with variable substitution, grrr
10934 Date='$Date'
10935 Id='$Id'
10936 Log='$Log'
10937 RCSfile='$RCSfile'
10938 Revision='$Revision'
10939
10940 case "$crosscompile" in
10941 ''|[nN]*) crosscompile="$undef" ;;
10942 esac
10943
10944 case "$osname" in
10945 next|rhapsody) multiarch="$define" ;;
10946 esac
10947 case "$multiarch" in
10948 ''|[nN]*) multiarch="$undef" ;;
10949 esac
10950
10951 : check for alignment requirements
10952 echo " "
10953 case "$crosscompile$multiarch" in
10954 *$define*)
10955         $cat <<EOM
10956 You seem to be either cross-compiling or doing a multiarchitecture build,
10957 skipping the memory alignment check.
10958
10959 EOM
10960         case "$alignbytes" in
10961         '') alignbytes=8 ;;
10962         esac
10963         ;;
10964 *)
10965         case "$alignbytes" in
10966         '') echo "Checking alignment constraints..." >&4
10967                 $cat >try.c <<'EOCP'
10968 #include <stdio.h>
10969 struct foobar {
10970         char foo;
10971         double bar;
10972 } try_algn;
10973 int main()
10974 {
10975     printf("%d\n", (int)((char *)&try_algn.bar - (char *)&try_algn.foo));
10976     return(0);
10977 }
10978 EOCP
10979                 set try
10980                 if eval $compile_ok; then
10981                         dflt=`./try`
10982                 else
10983                         dflt='8'
10984                         echo "(I can't seem to compile the test program...)"
10985                 fi
10986                 ;;
10987         *) dflt="$alignbytes"
10988                 ;;
10989         esac
10990         rp="Doubles must be aligned on a how-many-byte boundary?"
10991         . ./myread
10992         alignbytes="$ans"
10993         $rm -f try.c try
10994         ;;
10995 esac
10996
10997
10998 : check for ordering of bytes in a long
10999 echo " "
11000 case "$crosscompile$multiarch" in
11001 *$define*)
11002         $cat <<EOM
11003 You seem to be either cross-compiling or doing a multiarchitecture build,
11004 skipping the byteorder check.
11005
11006 EOM
11007         byteorder='0xffff'
11008         ;;
11009 *)
11010         case "$byteorder" in
11011         '')
11012                 $cat <<'EOM'
11013 In the following, larger digits indicate more significance.  A big-endian
11014 machine like a Pyramid or a Motorola 680?0 chip will come out to 4321. A
11015 little-endian machine like a Vax or an Intel 80?86 chip would be 1234. Other
11016 machines may have weird orders like 3412.  A Cray will report 87654321,
11017 an Alpha will report 12345678. If the test program works the default is
11018 probably right.
11019 I'm now running the test program...
11020 EOM
11021                 $cat >try.c <<'EOCP'
11022 #include <stdio.h>
11023 int main()
11024 {
11025         int i;
11026         union {
11027                 unsigned long l;
11028                 char c[sizeof(long)];
11029         } u;
11030
11031         if (sizeof(long) > 4)
11032                 u.l = (0x08070605L << 32) | 0x04030201L;
11033         else
11034                 u.l = 0x04030201L;
11035         for (i = 0; i < sizeof(long); i++)
11036                 printf("%c", u.c[i]+'0');
11037         printf("\n");
11038         exit(0);
11039 }
11040 EOCP
11041                 xxx_prompt=y
11042                 set try
11043                 if eval $compile && ./try > /dev/null; then
11044                         dflt=`./try`
11045                         case "$dflt" in
11046                         [1-4][1-4][1-4][1-4]|12345678|87654321)
11047                                 echo "(The test program ran ok.)"
11048                                 echo "byteorder=$dflt"
11049                                 xxx_prompt=n
11050                         ;;
11051                         ????|????????) echo "(The test program ran ok.)" ;;
11052                         *) echo "(The test program didn't run right for some reason.)" ;;
11053                         esac
11054                 else
11055                         dflt='4321'
11056                         cat <<'EOM'
11057 (I can't seem to compile the test program.  Guessing big-endian...)
11058 EOM
11059                 fi
11060                 case "$xxx_prompt" in
11061                 y)
11062                         rp="What is the order of bytes in a long?"
11063                         . ./myread
11064                         byteorder="$ans"
11065                         ;;
11066                 *)      byteorder=$dflt
11067                         ;;
11068                 esac
11069                 ;;
11070         esac
11071         $rm -f try.c try
11072         ;;
11073 esac
11074
11075
11076 : how do we catenate cpp tokens here?
11077 echo " "
11078 echo "Checking to see how your cpp does stuff like catenate tokens..." >&4
11079 $cat >cpp_stuff.c <<'EOCP'
11080 #define RCAT(a,b)a/**/b
11081 #define ACAT(a,b)a ## b
11082 RCAT(Rei,ser)
11083 ACAT(Cir,cus)
11084 EOCP
11085 $cppstdin $cppflags $cppminus <cpp_stuff.c >cpp_stuff.out 2>&1
11086 if $contains 'Circus' cpp_stuff.out >/dev/null 2>&1; then
11087         echo "Oh!  Smells like ANSI's been here." >&4
11088         echo "We can catify or stringify, separately or together!"
11089         cpp_stuff=42
11090 elif $contains 'Reiser' cpp_stuff.out >/dev/null 2>&1; then
11091         echo "Ah, yes!  The good old days!" >&4
11092         echo "However, in the good old days we don't know how to stringify and"
11093         echo "catify at the same time."
11094         cpp_stuff=1
11095 else
11096         $cat >&4 <<EOM
11097 Hmm, I don't seem to be able to catenate tokens with your cpp.  You're going
11098 to have to edit the values of CAT[2-5] in config.h...
11099 EOM
11100         cpp_stuff="/* Help! How do we handle cpp_stuff? */*/"
11101 fi
11102 $rm -f cpp_stuff.*
11103
11104 : see if this is a db.h system
11105 set db.h i_db
11106 eval $inhdr
11107
11108 case "$i_db" in
11109 $define)
11110         : Check db version.
11111         echo " "
11112         echo "Checking Berkeley DB version ..." >&4
11113         $cat >try.c <<EOCP
11114 #$d_const HASCONST
11115 #ifndef HASCONST
11116 #define const
11117 #endif
11118 #include <sys/types.h>
11119 #include <stdio.h>
11120 #include <db.h>
11121 int main()
11122 {
11123 #ifdef DB_VERSION_MAJOR /* DB version >= 2 */
11124     int Major, Minor, Patch ;
11125     unsigned long Version ;
11126     (void)db_version(&Major, &Minor, &Patch) ;
11127     printf("You have Berkeley DB Version 2 or greater\n");
11128
11129     printf("db.h is from Berkeley DB Version %d.%d.%d\n",
11130                 DB_VERSION_MAJOR, DB_VERSION_MINOR, DB_VERSION_PATCH);
11131     printf("libdb is from Berkeley DB Version %d.%d.%d\n",
11132                 Major, Minor, Patch) ;
11133
11134     /* check that db.h & libdb are compatible */
11135     if (DB_VERSION_MAJOR != Major || DB_VERSION_MINOR != Minor || DB_VERSION_PATCH != Patch) {
11136         printf("db.h and libdb are incompatible\n") ;
11137         exit(3);        
11138     }
11139
11140     printf("db.h and libdb are compatible\n") ;
11141
11142     Version = DB_VERSION_MAJOR * 1000000 + DB_VERSION_MINOR * 1000
11143                 + DB_VERSION_PATCH ;
11144
11145     /* needs to be >= 2.3.4 */
11146     if (Version < 2003004) {
11147     /* if (DB_VERSION_MAJOR == 2 && DB_VERSION_MINOR == 0 && DB_VERSION_PATCH < 5) { */
11148         printf("but Perl needs Berkeley DB 2.3.4 or greater\n") ;
11149         exit(2);        
11150     }
11151
11152     exit(0);
11153 #else
11154 #if defined(_DB_H_) && defined(BTREEMAGIC) && defined(HASHMAGIC)
11155     printf("You have Berkeley DB Version 1\n");
11156     exit(0);    /* DB version < 2: the coast is clear. */
11157 #else
11158     exit(1);    /* <db.h> not Berkeley DB? */
11159 #endif
11160 #endif
11161 }
11162 EOCP
11163         set try
11164         if eval $compile && ./try; then
11165                 echo 'Looks OK.' >&4
11166         else
11167                 echo "I can't use Berkeley DB with your <db.h>.  I'll disable Berkeley DB." >&4
11168                 i_db=$undef
11169                 case " $libs " in
11170                 *"-ldb "*)
11171                         : Remove db from list of libraries to use
11172                         echo "Removing unusable -ldb from library list" >&4
11173                         set `echo X $libs | $sed -e 's/-ldb / /' -e 's/-ldb$//'`
11174                         shift
11175                         libs="$*"
11176                         echo "libs = $libs" >&4
11177                         ;;
11178                 esac
11179         fi
11180         $rm -f try.*
11181         ;;
11182 esac
11183
11184 case "$i_db" in
11185 define)
11186         : Check the return type needed for hash 
11187         echo " "
11188         echo "Checking return type needed for hash for Berkeley DB ..." >&4
11189         $cat >try.c <<EOCP
11190 #$d_const HASCONST
11191 #ifndef HASCONST
11192 #define const
11193 #endif
11194 #include <sys/types.h>
11195 #include <db.h>
11196
11197 #ifndef DB_VERSION_MAJOR
11198 u_int32_t hash_cb (ptr, size)
11199 const void *ptr;
11200 size_t size;
11201 {
11202 }
11203 HASHINFO info;
11204 int main()
11205 {
11206         info.hash = hash_cb;
11207 }
11208 #endif
11209 EOCP
11210         if $cc $ccflags -c try.c >try.out 2>&1 ; then
11211                 if $contains warning try.out >>/dev/null 2>&1 ; then
11212                         db_hashtype='int'
11213                 else
11214                         db_hashtype='u_int32_t'
11215                 fi
11216         else
11217                 : XXX Maybe we should just give up here.
11218                 db_hashtype=u_int32_t
11219                 $cat try.out >&4
11220                 echo "Help:  I can't seem to compile the db test program." >&4
11221                 echo "Something's wrong, but I'll assume you use $db_hashtype." >&4
11222         fi
11223         $rm -f try.*
11224         echo "Your version of Berkeley DB uses $db_hashtype for hash."
11225         ;;
11226 *)      db_hashtype=u_int32_t
11227         ;;
11228 esac
11229 case "$i_db" in
11230 define)
11231         : Check the return type needed for prefix 
11232         echo " "
11233         echo "Checking return type needed for prefix for Berkeley DB ..." >&4
11234         cat >try.c <<EOCP
11235 #$d_const HASCONST
11236 #ifndef HASCONST
11237 #define const
11238 #endif
11239 #include <sys/types.h>
11240 #include <db.h>
11241
11242 #ifndef DB_VERSION_MAJOR
11243 size_t prefix_cb (key1, key2)
11244 const DBT *key1;
11245 const DBT *key2;
11246 {
11247 }
11248 BTREEINFO info;
11249 int main()
11250 {
11251         info.prefix = prefix_cb;
11252 }
11253 #endif
11254 EOCP
11255         if $cc $ccflags -c try.c  >try.out 2>&1 ; then
11256                 if $contains warning try.out >>/dev/null 2>&1 ; then
11257                         db_prefixtype='int'
11258                 else
11259                         db_prefixtype='size_t'
11260                 fi
11261         else
11262                 db_prefixtype='size_t'
11263                 : XXX Maybe we should just give up here.
11264                 $cat try.out >&4
11265                 echo "Help:  I can't seem to compile the db test program." >&4
11266                 echo "Something's wrong, but I'll assume you use $db_prefixtype." >&4
11267         fi
11268         $rm -f try.*
11269         echo "Your version of Berkeley DB uses $db_prefixtype for prefix."
11270         ;;
11271 *)      db_prefixtype='size_t'
11272         ;;
11273 esac
11274
11275 : check for void type
11276 echo " "
11277 echo "Checking to see how well your C compiler groks the void type..." >&4
11278 case "$voidflags" in
11279 '')
11280         $cat >try.c <<'EOCP'
11281 #if TRY & 1
11282 void sub() {
11283 #else
11284 sub() {
11285 #endif
11286         extern void moo();      /* function returning void */
11287         void (*goo)();          /* ptr to func returning void */
11288 #if TRY & 8
11289         void *hue;              /* generic ptr */
11290 #endif
11291 #if TRY & 2
11292         void (*foo[10])();
11293 #endif
11294
11295 #if TRY & 4
11296         if(goo == moo) {
11297                 exit(0);
11298         }
11299 #endif
11300         exit(0);
11301 }
11302 int main() { sub(); }
11303 EOCP
11304         if $cc $ccflags -c -DTRY=$defvoidused try.c >.out 2>&1 ; then
11305                 voidflags=$defvoidused
11306         echo "Good.  It appears to support void to the level $package wants.">&4
11307                 if $contains warning .out >/dev/null 2>&1; then
11308                         echo "However, you might get some warnings that look like this:"
11309                         $cat .out
11310                 fi
11311         else
11312 echo "Hmm, your compiler has some difficulty with void. Checking further..." >&4
11313                 if $cc $ccflags -c -DTRY=1 try.c >/dev/null 2>&1; then
11314                         echo "It supports 1..."
11315                         if $cc $ccflags -c -DTRY=3 try.c >/dev/null 2>&1; then
11316                                 echo "It also supports 2..."
11317                                 if $cc $ccflags -c -DTRY=7 try.c >/dev/null 2>&1; then
11318                                         voidflags=7
11319                                         echo "And it supports 4 but not 8 definitely."
11320                                 else
11321                                         echo "It doesn't support 4..."
11322                                         if $cc $ccflags -c -DTRY=11 try.c >/dev/null 2>&1; then
11323                                                 voidflags=11
11324                                                 echo "But it supports 8."
11325                                         else
11326                                                 voidflags=3
11327                                                 echo "Neither does it support 8."
11328                                         fi
11329                                 fi
11330                         else
11331                                 echo "It does not support 2..."
11332                                 if $cc $ccflags -c -DTRY=13 try.c >/dev/null 2>&1; then
11333                                         voidflags=13
11334                                         echo "But it supports 4 and 8."
11335                                 else
11336                                         if $cc $ccflags -c -DTRY=5 try.c >/dev/null 2>&1; then
11337                                                 voidflags=5
11338                                                 echo "And it supports 4 but has not heard about 8."
11339                                         else
11340                                                 echo "However it supports 8 but not 4."
11341                                         fi
11342                                 fi
11343                         fi
11344                 else
11345                         echo "There is no support at all for void."
11346                         voidflags=0
11347                 fi
11348         fi
11349 esac
11350 case "$voidflags" in
11351 "$defvoidused") ;;
11352 *)      $cat >&4 <<'EOM'
11353   Support flag bits are:
11354     1: basic void declarations.
11355     2: arrays of pointers to functions returning void.
11356     4: operations between pointers to and addresses of void functions.
11357     8: generic void pointers.
11358 EOM
11359         dflt="$voidflags";
11360         rp="Your void support flags add up to what?"
11361         . ./myread
11362         voidflags="$ans"
11363         ;;
11364 esac
11365 $rm -f try.* .out
11366
11367
11368 : How can we generate normalized random numbers ?
11369 echo " "
11370 echo "Looking for a random number function..." >&4
11371 case "$randfunc" in
11372 '')
11373         if set drand48 val -f; eval $csym; $val; then
11374                 dflt="drand48"
11375                 echo "Good, found drand48()." >&4
11376         elif set random val -f; eval $csym; $val; then
11377                 dflt="random"
11378                 echo "OK, found random()." >&4
11379         else
11380                 dflt="rand"
11381                 echo "Yick, looks like I have to use rand()." >&4
11382         fi
11383         echo " "
11384         ;;
11385 *)
11386         dflt="$randfunc"
11387         ;;
11388 esac
11389 cont=true
11390
11391 case "$ccflags" in
11392 *-Dmy_rand=*|*-Dmy_srand=*)
11393         echo "Removing obsolete -Dmy_rand, -Dmy_srand, and -Drandbits from ccflags." >&4
11394         ccflags="`echo $ccflags | sed -e 's/-Dmy_rand=random/ /'`"
11395         ccflags="`echo $ccflags | sed -e 's/-Dmy_srand=srandom/ /'`"
11396         ccflags="`echo $ccflags | sed -e 's/-Drandbits=[0-9][0-9]*/ /'`"
11397         ;;
11398 esac
11399
11400 while $test "$cont"; do
11401         rp="Use which function to generate random numbers?"
11402         . ./myread
11403         if $test "$ans" = "$dflt"; then
11404                 : null
11405         else
11406                 randbits=''
11407         fi
11408         randfunc="$ans"
11409         if set $ans val -f; eval $csym; $val; then
11410                 cont=''
11411         else
11412                 dflt=y
11413                 rp="I cannot find function $ans. Use that name anyway?"
11414                 . ./myread
11415                 dflt=rand
11416                 case "$ans" in
11417                         [yY]*) cont='';;
11418                 esac
11419         fi
11420         case "$cont" in
11421         '')
11422                 case "$randfunc" in
11423                 drand48)
11424                         drand01="drand48()"
11425                         seedfunc="srand48"
11426                         randbits=48
11427                         randseedtype=long
11428                         ;;
11429                 rand|random)
11430                         case "$randbits" in
11431                         '')
11432 echo "Checking to see how many bits your $randfunc() function produces..." >&4
11433                                 $cat >try.c <<EOCP
11434 #$i_unistd I_UNISTD
11435 #$i_stdlib I_STDLIB
11436 #include <stdio.h>
11437 #ifdef I_UNISTD
11438 #  include <unistd.h>
11439 #endif
11440 #ifdef I_STDLIB
11441 #  include <stdlib.h>
11442 #endif
11443 int main()
11444 {
11445         register int i;
11446         register unsigned long tmp;
11447         register unsigned long max = 0L;
11448
11449         for (i = 1000; i; i--) {
11450                 tmp = (unsigned long) $randfunc();
11451                 if (tmp > max) max = tmp;
11452         }
11453         for (i = 0; max; i++)
11454                 max /= 2;
11455         printf("%d\n",i);
11456 }
11457 EOCP
11458                                 set try
11459                                 if eval $compile_ok; then
11460                                         dflt=`try`
11461                                 else
11462                                         dflt='?'
11463                                         echo "(I can't seem to compile the test program...)"
11464                                 fi
11465                                 ;;
11466                         *)
11467                                 dflt="$randbits"
11468                                 ;;
11469                         esac
11470                         rp="How many bits does your $randfunc() function produce?"
11471                         . ./myread
11472                         randbits="$ans"
11473                         $rm -f try.c try
11474                         drand01="($randfunc() / (double) ((unsigned long)1 << $randbits))"
11475                         seedfunc="s$randfunc"
11476                         randseedtype=unsigned
11477                         ;;
11478                 *)
11479                         dflt="31"
11480                         rp="How many bits does your $randfunc() function produce?"
11481                         . ./myread
11482                         randbits="$ans"
11483                         seedfunc="s$randfunc"
11484                         drand01="($randfunc() / (double) ((unsigned long)1 << $randbits))"
11485                         if set $seedfunc val -f; eval $csym; $val; then
11486                                 echo "(Using $seedfunc() to seed random generator)"
11487                         else
11488                                 echo "(Warning: no $seedfunc() to seed random generator)"
11489                                 seedfunc=rand
11490                         fi
11491                         randseedtype=unsigned
11492                         ;;
11493                 esac
11494                 ;;
11495         esac
11496 done
11497
11498 echo " "
11499 echo "Determining whether or not we are on an EBCDIC system..." >&4
11500 $cat >tebcdic.c <<'EOM'
11501 int main()
11502 {
11503   if ('M'==0xd4) return 0;
11504   return 1;
11505 }
11506 EOM
11507
11508 val=$undef
11509 set tebcdic
11510 if eval $compile_ok; then
11511         if ./tebcdic; then
11512                 echo "You have EBCDIC." >&4
11513                 val="$define"
11514         else
11515                 echo "Nope, no EBCDIC, probably ASCII or some ISO Latin." >&4
11516         fi
11517 else
11518         echo "I'm unable to compile the test program." >&4
11519         echo "I'll assume ASCII or some ISO Latin." >&4
11520 fi
11521 $rm -f tebcdic.c tebcdic
11522 set ebcdic
11523 eval $setvar
11524
11525 echo " "
11526 $cat >&4 <<EOM
11527 Checking how to flush all pending stdio output...
11528 EOM
11529 # I only know how to find the first 32 possibly open files on SunOS.
11530 # See also hints/sunos_4_1.sh and util.c  --AD
11531 case "$osname" in
11532 sunos) $echo '#define PERL_FFLUSH_ALL_FOPEN_MAX 32' > try.c ;;
11533 esac
11534 $cat >>try.c <<EOCP
11535 #include <stdio.h>
11536 #$i_unistd I_UNISTD
11537 #ifdef I_UNISTD
11538 # include <unistd.h>
11539 #endif
11540 #$d_sysconf HAS_SYSCONF
11541 #$d_stdio_stream_array HAS_STDIO_STREAM_ARRAY
11542 #ifdef HAS_STDIO_STREAM_ARRAY
11543 # define STDIO_STREAM_ARRAY $stdio_stream_array
11544 #endif
11545 int main() {
11546   FILE* p = fopen("try.out", "w");
11547 #ifdef TRY_FPUTC
11548   fputc('x', p);
11549 #else
11550 # ifdef TRY_FPRINTF
11551   fprintf(p, "x");
11552 # endif
11553 #endif
11554 #ifdef TRY_FFLUSH_NULL
11555   fflush(NULL);
11556 #endif
11557 #ifdef TRY_FFLUSH_ALL
11558   {
11559     long open_max = -1;
11560 # ifdef PERL_FFLUSH_ALL_FOPEN_MAX
11561     open_max = PERL_FFLUSH_ALL_FOPEN_MAX;
11562 # else
11563 #  if defined(HAS_SYSCONF) && defined(_SC_OPEN_MAX)
11564     open_max = sysconf(_SC_OPEN_MAX);
11565 #  else
11566 #   ifdef FOPEN_MAX
11567     open_max = FOPEN_MAX;
11568 #   else
11569 #    ifdef OPEN_MAX
11570     open_max = OPEN_MAX;
11571 #    else
11572 #     ifdef _NFILE
11573     open_max = _NFILE;
11574 #     endif
11575 #    endif
11576 #   endif
11577 #  endif
11578 # endif 
11579 # ifdef HAS_STDIO_STREAM_ARRAY
11580     if (open_max > 0) {
11581       long i;
11582       for (i = 0; i < open_max; i++)
11583             if (STDIO_STREAM_ARRAY[i]._file >= 0 &&
11584                 STDIO_STREAM_ARRAY[i]._file < open_max &&
11585                 STDIO_STREAM_ARRAY[i]._flag)
11586                 fflush(&STDIO_STREAM_ARRAY[i]);
11587     }   
11588   }
11589 # endif
11590 #endif
11591   _exit(42);
11592 }
11593 EOCP
11594 : first we have to find out how _not_ to flush
11595 if $test "X$fflushNULL" = X -o "X$fflushall" = X; then
11596     output=''
11597     set try -DTRY_FPUTC
11598     if eval $compile; then
11599             $rm -f try.out
11600             ./try$exe_ext 2>/dev/null
11601             if $test ! -s try.out -a "X$?" = X42; then
11602                 output=-DTRY_FPUTC
11603             fi
11604     fi
11605     case "$output" in
11606     '')
11607             set try -DTRY_FPRINTF
11608             $rm -f try.out
11609             if eval $compile; then
11610                     $rm -f try.out
11611                     ./try$exe_ext 2>/dev/null
11612                     if $test ! -s try.out -a "X$?" = X42; then
11613                         output=-DTRY_FPRINTF
11614                     fi
11615             fi
11616         ;;
11617     esac
11618 fi
11619 : check for fflush NULL behaviour
11620 case "$fflushNULL" in
11621 '')     set try -DTRY_FFLUSH_NULL $output
11622         if eval $compile; then
11623                 $rm -f try.out
11624                 ./try$exe_ext 2>/dev/null
11625                 code="$?"
11626                 if $test -s try.out -a "X$code" = X42; then
11627                         fflushNULL="`$cat try.out`"
11628                 else
11629                         if $test "X$code" != X42; then
11630                                 $cat >&4 <<EOM
11631 (If this test failed, don't worry, we'll try another method shortly.)
11632 EOM
11633                         fi
11634                 fi
11635         fi
11636         $rm -f core try.core core.try.*
11637         case "$fflushNULL" in
11638         x)      $cat >&4 <<EOM
11639 Your fflush(NULL) works okay.
11640 EOM
11641                 fflushNULL="$define"
11642                 ;;
11643         '')     $cat >&4 <<EOM
11644 Your fflush(NULL) isn't working (contrary to ANSI C).
11645 EOM
11646                 fflushNULL="$undef"
11647                 ;;
11648         *)      $cat >&4 <<EOM
11649 Cannot figure out whether your fflush(NULL) works or not.
11650 I'm assuming it doesn't (contrary to ANSI C).
11651 EOM
11652                 fflushNULL="$undef"
11653                 ;;
11654         esac
11655         ;;
11656 $define|true|[yY]*)
11657         fflushNULL="$define"
11658         ;;
11659 *)
11660         fflushNULL="$undef"
11661         ;;
11662 esac
11663 : check explicit looping only if NULL did not work
11664 case "$fflushNULL" in
11665 "$undef")
11666         : check for fflush all behaviour
11667         case "$fflushall" in
11668         '')     set try -DTRY_FFLUSH_ALL $output
11669                 if eval $compile; then
11670                         $cat >&4 <<EOM
11671 (Now testing the other method--but note that also this may fail.)
11672 EOM
11673                         $rm -f try.out
11674                         ./try$exe_ext 2>/dev/null
11675                         if $test -s try.out -a "X$?" = X42; then
11676                                 fflushall="`$cat try.out`"
11677                         fi
11678                 fi
11679                 $rm -f core try.core core.try.*
11680                 case "$fflushall" in
11681                 x)      $cat >&4 <<EOM
11682 Whew. Flushing explicitly all the stdio streams works.
11683 EOM
11684                         fflushall="$define"
11685                         ;;
11686                 '')     $cat >&4 <<EOM
11687 Sigh. Flushing explicitly all the stdio streams doesn't work.
11688 EOM
11689                         fflushall="$undef"
11690                         ;;
11691                 *)      $cat >&4 <<EOM
11692 Cannot figure out whether flushing stdio streams explicitly works or not.
11693 I'm assuming it doesn't.
11694 EOM
11695                         fflushall="$undef"
11696                         ;;
11697                 esac
11698                 ;;
11699         "$define"|true|[yY]*)
11700                 fflushall="$define"
11701                 ;;
11702         *)
11703                 fflushall="$undef"
11704                 ;;
11705         esac
11706         ;;
11707 *)      fflushall="$undef"      
11708         ;;
11709 esac
11710 case "$fflushNULL$fflushall" in
11711 undefundef)
11712         $cat <<EOM
11713 I cannot figure out how to flush pending stdio output.
11714 EOM
11715         ;;
11716 esac
11717 $rm -f try.* try$exe_ext
11718
11719 : Store the full pathname to the ar program for use in the C program
11720 : Respect a hint or command line value for full_ar.
11721 case "$full_ar" in
11722 '') full_ar=$ar ;;
11723 esac
11724
11725 : Store the full pathname to the sed program for use in the C program
11726 full_sed=$sed
11727
11728 : see what type gids are declared as in the kernel
11729 echo " "
11730 echo "Looking for the type for group ids returned by getgid()."
11731 set gid_t gidtype xxx stdio.h sys/types.h
11732 eval $typedef
11733 case "$gidtype" in
11734 xxx)
11735         xxx=`./findhdr sys/user.h`
11736         set `grep 'groups\[NGROUPS\];' "$xxx" 2>/dev/null` unsigned short
11737         case $1 in
11738         unsigned) dflt="$1 $2" ;;
11739         *) dflt="$1" ;;
11740         esac
11741         ;;
11742 *) dflt="$gidtype";;
11743 esac
11744 case "$gidtype" in
11745 gid_t) echo "gid_t found." ;;
11746 *)      rp="What is the type for group ids returned by getgid()?"
11747         . ./myread
11748         gidtype="$ans"
11749         ;;
11750 esac
11751
11752 echo " "
11753 case "$gidtype" in
11754 *_t) zzz="$gidtype"     ;;
11755 *)   zzz="gid"          ;;
11756 esac
11757 echo "Checking the size of $zzz..." >&4 
11758 cat > try.c <<EOCP
11759 #include <sys/types.h>
11760 #include <stdio.h>
11761 int main() {
11762     printf("%d\n", (int)sizeof($gidtype));
11763     exit(0);
11764 }
11765 EOCP
11766 set try
11767 if eval $compile_ok; then
11768         yyy=`./try`
11769         case "$yyy" in
11770         '')     gidsize=4
11771                 echo "(I can't execute the test program--guessing $gidsize.)" >&4
11772                 ;;
11773         *)      gidsize=$yyy
11774                 echo "Your $zzz size is $gidsize bytes."
11775                 ;;
11776         esac
11777 else
11778         gidsize=4
11779         echo "(I can't compile the test program--guessing $gidsize.)" >&4
11780 fi
11781
11782
11783 echo " "
11784 case "$gidtype" in
11785 *_t) zzz="$gidtype"     ;;
11786 *)   zzz="gid"          ;;
11787 esac
11788 echo "Checking the sign of $zzz..." >&4 
11789 cat > try.c <<EOCP
11790 #include <sys/types.h>
11791 #include <stdio.h>
11792 int main() {
11793         $gidtype foo = -1;
11794         if (foo < 0)
11795                 printf("-1\n");
11796         else
11797                 printf("1\n");
11798 }
11799 EOCP
11800 set try
11801 if eval $compile; then
11802         yyy=`./try`
11803         case "$yyy" in
11804         '')     gidsign=1
11805                 echo "(I can't execute the test program--guessing unsigned.)" >&4
11806                 ;;
11807         *)      gidsign=$yyy
11808                 case "$gidsign" in
11809                  1) echo "Your $zzz is unsigned." ;;
11810                 -1) echo "Your $zzz is signed."   ;;
11811                 esac
11812                 ;;
11813         esac
11814 else
11815         gidsign=1
11816         echo "(I can't compile the test program--guessing unsigned.)" >&4
11817 fi
11818
11819
11820 : check for length of character
11821 echo " "
11822 case "$charsize" in
11823 '')
11824         echo "Checking to see how big your characters are (hey, you never know)..." >&4
11825         $cat >try.c <<'EOCP'
11826 #include <stdio.h>
11827 int main()
11828 {
11829     printf("%d\n", (int)sizeof(char));
11830     exit(0);
11831 }
11832 EOCP
11833         set try
11834         if eval $compile_ok; then
11835                 dflt=`./try`
11836         else
11837                 dflt='1'
11838                 echo "(I can't seem to compile the test program.  Guessing...)"
11839         fi
11840         ;;
11841 *)
11842         dflt="$charsize"
11843         ;;
11844 esac
11845 rp="What is the size of a character (in bytes)?"
11846 . ./myread
11847 charsize="$ans"
11848 $rm -f try.c try
11849
11850
11851 echo " "
11852 $echo "Choosing the C types to be used for Perl's internal types..." >&4
11853
11854 case "$use64bits:$d_quad:$quadtype" in
11855 define:define:?*)
11856         ivtype="$quadtype"
11857         uvtype="$uquadtype"
11858         ivsize=8
11859         uvsize=8
11860         ;;
11861 *)      ivtype="long"
11862         uvtype="unsigned long"
11863         ivsize=$longsize
11864         uvsize=$longsize
11865         ;;
11866 esac
11867
11868 case "$uselongdouble:$d_longdbl" in
11869 define:define)
11870         nvtype="long double"
11871         nvsize=$longdblsize
11872         ;;
11873 *)      nvtype=double
11874         nvsize=$doublesize
11875         ;;
11876 esac
11877
11878 echo "(IV will be "$ivtype", $ivsize bytes)"
11879 echo "(UV will be "$uvtype", $uvsize bytes)"
11880 echo "(NV will be "$nvtype", $nvsize bytes)"
11881
11882 $cat >try.c <<EOCP
11883 #$i_inttypes I_INTTYPES
11884 #ifdef I_INTTYPES
11885 #include <inttypes.h>
11886 #endif
11887 #include <stdio.h>
11888 int main() {
11889 #ifdef INT8
11890    int8_t i =  INT8_MAX;
11891   uint8_t u = UINT8_MAX;
11892   printf("int8_t\n");
11893 #endif
11894 #ifdef INT16
11895    int16_t i =  INT16_MAX;
11896   uint16_t i = UINT16_MAX;
11897   printf("int16_t\n");
11898 #endif
11899 #ifdef INT32
11900    int32_t i =  INT32_MAX;
11901   uint32_t u = UINT32_MAX;
11902   printf("int32_t\n");
11903 #endif
11904 }
11905 EOCP
11906
11907 case "$i8type" in
11908 '')     case "$charsize" in
11909         1)      i8type=char
11910                 u8type="unsigned char"
11911                 i8size=$charsize
11912                 u8size=$charsize
11913                 ;;
11914         esac
11915         ;;
11916 esac
11917 case "$i8type" in
11918 '')     set try -DINT8
11919         if eval $compile; then
11920                 case "`./try$exe_ext`" in
11921                 int8_t) i8type=int8_t
11922                         u8type=uint8_t
11923                         i8size=1
11924                         u8size=1
11925                         ;;
11926                 esac
11927         fi
11928         ;;
11929 esac
11930 case "$i8type" in
11931 '')     if $test $charsize -ge 1; then
11932                 i8type=char
11933                 u8type="unsigned char"
11934                 i8size=$charsize
11935                 u8size=$charsize
11936         fi
11937         ;;
11938 esac
11939
11940 case "$i16type" in
11941 '')     case "$shortsize" in
11942         2)      i16type=short
11943                 u16type="unsigned short"
11944                 i16size=$shortsize
11945                 u16size=$shortsize
11946                 ;;
11947         esac
11948         ;;
11949 esac
11950 case "$i16type" in
11951 '')     set try -DINT16
11952         if eval $compile; then
11953                 case "`./try$exe_ext`" in
11954                 int16_t)
11955                         i16type=int16_t
11956                         u16type=uint16_t
11957                         i16size=2
11958                         u16size=2
11959                         ;;
11960                 esac
11961         fi
11962         ;;
11963 esac
11964 case "$i16type" in
11965 '')     if $test $shortsize -ge 2; then
11966                 i16type=short
11967                 u16type="unsigned short"
11968                 i16size=$shortsize
11969                 u16size=$shortsize
11970         fi
11971         ;;
11972 esac
11973
11974 case "$i32type" in
11975 '')     case "$longsize" in
11976         4)      i32type=long
11977                 u32type="unsigned long"
11978                 i32size=$longsize
11979                 u32size=$longsize
11980                 ;;
11981         *)      case "$intsize" in
11982                 4)      i32type=int
11983                         u32type="unsigned int"
11984                         i32size=$intsize
11985                         u32size=$intsize
11986                         ;;
11987                 esac
11988                 ;;
11989         esac
11990         ;;
11991 esac
11992 case "$i32type" in
11993 '')     set try -DINT32
11994         if eval $compile; then
11995                 case "`./try$exe_ext`" in
11996                 int32_t)
11997                         i32type=int32_t
11998                         u32type=uint32_t
11999                         i32size=4
12000                         u32size=4
12001                         ;;
12002                 esac
12003         fi
12004         ;;
12005 esac
12006 case "$i32type" in
12007 '')     if $test $intsize -ge 4; then
12008                 i32type=int
12009                 u32type="unsigned int"
12010                 i32size=$intsize
12011                 u32size=$intsize
12012         fi
12013         ;;
12014 esac
12015
12016 case "$i64type" in
12017 '')     case "$d_quad:$quadtype" in
12018         define:?*)
12019                 i64type="$quadtype"
12020                 u64type="$uquadtype"
12021                 i64size=8
12022                 u64size=8
12023                 ;;
12024         esac
12025         ;;
12026 esac
12027
12028 $rm -f try.* try
12029
12030 echo " "
12031
12032 if $test X"$quadtype" != X; then
12033
12034 echo "Checking how to print 64-bit integers..." >&4
12035
12036 if $test X"$sPRId64" = X -a X"$quadtype" = Xint; then
12037         $cat >try.c <<'EOCP'
12038 #include <sys/types.h>
12039 #include <stdio.h>
12040 int main() {
12041   int q = 12345678901;
12042   printf("%ld\n", q);
12043 }
12044 EOCP
12045         set try
12046         if eval $compile; then
12047                 yyy=`./try$exe_ext`
12048                 case "$yyy" in
12049                 12345678901)
12050                         sPRId64='"d"'; sPRIi64='"i"'; sPRIu64='"u"';
12051                         sPRIo64='"o"'; sPRIx64='"x"'; sPRIX64='"X"';
12052                         echo "We will use %d."
12053                         ;;
12054                 esac
12055         fi
12056 fi
12057
12058 if $test X"$sPRId64" = X -a X"$quadtype" = Xlong; then
12059         $cat >try.c <<'EOCP'
12060 #include <sys/types.h>
12061 #include <stdio.h>
12062 int main() {
12063   long q = 12345678901;
12064   printf("%ld\n", q);
12065 }
12066 EOCP
12067         set try
12068         if eval $compile; then
12069                 yyy=`./try$exe_ext`
12070                 case "$yyy" in
12071                 12345678901)
12072                         sPRId64='"ld"'; sPRIi64='"li"'; sPRIu64='"lu"';
12073                         sPRIo64='"lo"'; sPRIx64='"lx"'; sPRIX64='"lX"';
12074                         echo "We will use %ld."
12075                         ;;
12076                 esac
12077         fi
12078 fi
12079
12080 if $test X"$sPRId64" = X -a X"$i_inttypes.h" = X"$define" -a X"$quadtype" = Xint64_t; then
12081         $cat >try.c <<'EOCP'
12082 #include <sys/types.h>
12083 #include <inttypes.h>
12084 #include <stdio.h>
12085 int main() {
12086   int64_t q = 12345678901;
12087   printf("%" PRId64 "\n", q);
12088 }
12089 EOCP
12090         set try
12091         if eval $compile; then
12092                 yyy=`./try$exe_ext`
12093                 case "$yyy" in
12094                 12345678901)
12095                         sPRId64=PRId64; sPRIi64=PRIi64; sPRIu64=PRIu64;
12096                         sPRIo64=PRIo64; sPRIx64=PRIx64; sPRIX64=PRIX64;
12097                         echo "We will use the C9X style."
12098                         ;;
12099                 esac
12100         fi
12101 fi
12102
12103 if $test X"$sPRId64" = X -a X"$quadtype" = X"long long"; then
12104         $cat >try.c <<'EOCP'
12105 #include <sys/types.h>
12106 #include <stdio.h>
12107 int main() {
12108   long long q = 12345678901LL; /* AIX cc requires the LL prefix. */
12109   printf("%lld\n", q);
12110 }
12111 EOCP
12112         set try
12113         if eval $compile; then
12114                 yyy=`./try$exe_ext`
12115                 case "$yyy" in
12116                 12345678901)
12117                         sPRId64='"lld"'; sPRIi64='"lli"'; sPRIu64='"llu"';
12118                         sPRIo64='"llo"'; sPRIx64='"llx"'; sPRIX64='"llX"';
12119                         echo "We will use the %lld style."
12120                         ;;
12121                 esac
12122         fi
12123 fi
12124
12125 if $test X"$sPRId64" = X -a X"$quadtype" != X; then
12126         $cat >try.c <<EOCP
12127 #include <sys/types.h>
12128 #include <stdio.h>
12129 int main() {
12130   $quadtype q = 12345678901;
12131   printf("%Ld\n", q);
12132 }
12133 EOCP
12134         set try
12135         if eval $compile; then
12136                 yyy=`./try$exe_ext`
12137                 case "$yyy" in
12138                 12345678901)
12139                         sPRId64='"Ld"'; sPRIi64='"Li"'; sPRIu64='"Lu"';
12140                         sPRIo64='"Lo"'; sPRIx64='"Lx"'; sPRIX64='"LX"';
12141                         echo "We will use %Ld."
12142                         ;;
12143                 esac
12144         fi
12145 fi
12146
12147 if $test X"$sPRId64" = X -a X"$quadtype" != X; then
12148         $cat >try.c <<EOCP
12149 #include <sys/types.h>
12150 #include <stdio.h>
12151 int main() {
12152   $quadtype q = 12345678901;
12153   printf("%qd\n", q);
12154 }
12155 EOCP
12156         set try
12157         if eval $compile; then
12158                 yyy=`./try$exe_ext`
12159                 case "$yyy" in
12160                 12345678901)
12161                         sPRId64='"qd"'; sPRIi64='"qi"'; sPRIu64='"qu"';
12162                         sPRIo64='"qo"'; sPRIx64='"qx"'; sPRIX64='"qX"';
12163                         echo "We will use %qd."
12164                         ;;
12165                 esac
12166         fi
12167 fi
12168
12169 if $test X"$sPRId64" = X; then
12170         echo "Cannot figure out how to print 64-bit integers." >&4
12171 fi
12172
12173 $rm -f try try.*
12174
12175 fi
12176
12177 case "$sPRId64" in
12178 '')     d_PRId64="$undef"; d_PRIi64="$undef"; d_PRIu64="$undef"; 
12179         d_PRIo64="$undef"; d_PRIx64="$undef"; d_PRIX64="$undef"; 
12180         ;;
12181 *)      d_PRId64="$define"; d_PRIi64="$define"; d_PRIu64="$define"; 
12182         d_PRIo64="$define"; d_PRIx64="$define"; d_PRIX64="$define"; 
12183         ;;
12184 esac
12185
12186
12187 echo " "
12188 $echo "Checking the format strings to be used for Perl's internal types..." >&4
12189
12190 if $test X"$ivsize" = X8; then
12191         ivdformat="$sPRId64"
12192         uvuformat="$sPRIu64"
12193         uvoformat="$sPRIo64"
12194         uvxformat="$sPRIx64"
12195 else
12196         if $test X"$ivsize" = X"$longsize"; then
12197                 ivdformat='"ld"'
12198                 uvuformat='"lu"'
12199                 uvoformat='"lo"'
12200                 uvxformat='"lx"'
12201         else
12202                 if $test X"$ivsize" = X"$intsize"; then
12203                         ivdformat='"d"'
12204                         uvuformat='"u"'
12205                         uvoformat='"o"'
12206                         uvxformat='"x"'
12207                 else
12208                         : far out
12209                         if $test X"$ivsize" = X"$shortsize"; then
12210                                 ivdformat='"hd"'
12211                                 uvuformat='"hu"'
12212                                 uvoformat='"ho"'
12213                                 uvxformat='"hx"'
12214                         fi
12215                 fi
12216         fi
12217 fi
12218
12219 case "$ivdformat" in
12220 '') echo "$0: Fatal: failed to find format strings, cannot continue." >& 4
12221     exit 1
12222     ;;
12223 esac
12224
12225
12226 echo " "
12227 $echo "Checking the format string to be used for gids..." >&4
12228
12229 case "$gidsign" in
12230 -1)     if $test X"$gidsize" = X"$ivsize"; then
12231                 gidformat="$ivdformat"
12232         else
12233                 if $test X"$gidsize" = X"$longsize"; then
12234                         gidformat='"ld"'
12235                 else
12236                         if $test X"$gidsize" = X"$intsize"; then
12237                                 gidformat='"d"'
12238                         else
12239                                 if $test X"$gidsize" = X"$shortsize"; then
12240                                         gidformat='"hd"'
12241                                 fi
12242                         fi
12243                 fi
12244         fi
12245         ;;
12246 *)      if $test X"$gidsize" = X"$uvsize"; then
12247                 gidformat="$uvuformat"
12248         else
12249                 if $test X"$gidsize" = X"$longsize"; then
12250                         gidformat='"lu"'
12251                 else
12252                         if $test X"$gidsize" = X"$intsize"; then
12253                                 gidformat='"u"'
12254                         else
12255                                 if $test X"$gidsize" = X"$shortsize"; then
12256                                         gidformat='"hu"'
12257                                 fi
12258                         fi
12259                 fi
12260         fi
12261         ;;
12262 esac
12263
12264 : see if getgroups exists
12265 set getgroups d_getgrps
12266 eval $inlibc
12267
12268 : see if setgroups exists
12269 set setgroups d_setgrps
12270 eval $inlibc
12271
12272
12273 : Find type of 2nd arg to 'getgroups()' and 'setgroups()'
12274 echo " "
12275 case "$d_getgrps$d_setgrps" in
12276 *define*)
12277         case "$groupstype" in
12278         '') dflt="$gidtype" ;;
12279         *)  dflt="$groupstype" ;;
12280         esac
12281         $cat <<EOM
12282 What type of pointer is the second argument to getgroups() and setgroups()?
12283 Usually this is the same as group ids, $gidtype, but not always.
12284
12285 EOM
12286         rp='What type pointer is the second argument to getgroups() and setgroups()?'
12287         . ./myread
12288         groupstype="$ans"
12289         ;;
12290 *)  groupstype="$gidtype";;
12291 esac
12292
12293 echo " "
12294 echo "Checking if your $make program sets \$(MAKE)..." >&4
12295 case "$make_set_make" in
12296 '')
12297         $sed 's/^X //' > testmake.mak << 'EOF'
12298 Xall:
12299 X       @echo 'maketemp="$(MAKE)"'
12300 EOF
12301         case "`$make -f testmake.mak 2>/dev/null`" in
12302         *maketemp=*) make_set_make='#' ;;
12303         *)      make_set_make="MAKE=$make" ;;
12304         esac
12305         $rm -f testmake.mak
12306         ;;
12307 esac
12308 case "$make_set_make" in
12309 '#') echo "Yup, it does.";;
12310 *) echo "Nope, it doesn't.";;
12311 esac
12312
12313 : see what type is used for mode_t
12314 rp="What is the type used for file modes for system calls (e.g. fchmod())?"
12315 set mode_t modetype int stdio.h sys/types.h
12316 eval $typedef_ask
12317
12318 : define a fucntion to check prototypes
12319 $cat > protochk <<EOSH
12320 $startsh
12321 cc="$cc"
12322 optimize="$optimize"
12323 ccflags="$ccflags"
12324 prototype="$prototype"
12325 define="$define"
12326 rm=$rm
12327 EOSH
12328
12329 $cat >> protochk <<'EOSH'
12330
12331 $rm -f try.c
12332 foo="$1"
12333 shift
12334 while test $# -ge 2; do
12335         case "$1" in
12336                 $define) echo "#include <$2>" >> try.c ;;
12337                 literal) echo "$2" >> try.c ;;
12338         esac
12339     shift 2
12340 done
12341 test "$prototype" = "$define"  && echo '#define CAN_PROTOTYPE' >> try.c
12342 cat >> try.c <<'EOCP'
12343 #ifdef CAN_PROTOTYPE
12344 #define _(args) args
12345 #else
12346 #define _(args) ()
12347 #endif
12348 EOCP
12349 echo "$foo" >> try.c
12350 echo 'int no_real_function_has_this_name _((void)) { return 0; }' >> try.c
12351 $cc $optimize $ccflags -c try.c > /dev/null 2>&1
12352 status=$?
12353 $rm -f try.[co]
12354 exit $status
12355 EOSH
12356 chmod +x protochk
12357 $eunicefix protochk
12358
12359 : see what type is used for size_t
12360 rp="What is the type used for the length parameter for string functions?"
12361 set size_t sizetype 'unsigned int' stdio.h sys/types.h
12362 eval $typedef_ask
12363
12364 : check for type of arguments to gethostbyaddr. 
12365 if test "X$netdb_host_type" = X -o "X$netdb_hlen_type" = X; then
12366         case "$d_gethbyaddr" in
12367         $define)
12368                 $cat <<EOM
12369
12370 Checking to see what type of arguments are accepted by gethostbyaddr().
12371 EOM
12372                 hdrs="$define sys/types.h
12373                         $d_socket sys/socket.h 
12374                         $i_niin netinet/in.h 
12375                         $i_netdb netdb.h
12376                         $i_unistd unistd.h"
12377                 : The first arg can 'char *' or 'void *'
12378                 : The second arg is some of integral type
12379                 for xxx in in_addr_t 'const void *' 'const char *' 'void *' 'char *'; do
12380                         for yyy in size_t long int; do
12381                                 case "$netdb_host_type" in
12382                                 '')     try="extern struct hostent *gethostbyaddr($xxx, $yyy, int);"
12383                                         if ./protochk "$try" $hdrs; then
12384                                                 echo "Your system accepts $xxx for the first arg."
12385                                                 echo "...and $yyy for the second arg."
12386                                                 netdb_host_type="$xxx"
12387                                                 netdb_hlen_type="$yyy"
12388                                         fi
12389                                         ;;
12390                                 esac
12391                         done
12392                 done
12393                 : In case none of those worked, prompt the user.
12394                 case "$netdb_host_type" in
12395                 '')     rp='What is the type for the 1st argument to gethostbyaddr?'
12396                         dflt='char *'
12397                         . ./myread
12398                         netdb_host_type=$ans
12399                         rp='What is the type for the 2nd argument to gethostbyaddr?'
12400                         dflt="$sizetype"
12401                         . ./myread
12402                         netdb_hlen_type=$ans
12403                         ;;
12404                 esac
12405                 ;;
12406         *)      : no gethostbyaddr, so pick harmless defaults
12407                 netdb_host_type='char *'
12408                 netdb_hlen_type="$sizetype"
12409                 ;;
12410         esac
12411         # Remove the "const" if needed. -- but then we'll have a 
12412         # prototype clash!
12413         # netdb_host_type=`echo "$netdb_host_type" | sed 's/^const //'`
12414 fi
12415
12416 : check for type of argument to gethostbyname. 
12417 if test "X$netdb_name_type" = X ; then
12418         case "$d_gethbyname" in
12419         $define)
12420                 $cat <<EOM
12421
12422 Checking to see what type of argument is accepted by gethostbyname().
12423 EOM
12424                 hdrs="$define sys/types.h
12425                         $d_socket sys/socket.h 
12426                         $i_niin netinet/in.h 
12427                         $i_netdb netdb.h
12428                         $i_unistd unistd.h"
12429                 for xxx in "const char *" "char *"; do
12430                         case "$netdb_name_type" in
12431                         '')     try="extern struct hostent *gethostbyname($xxx);"
12432                                 if ./protochk "$try" $hdrs; then
12433                                         echo "Your system accepts $xxx."
12434                                         netdb_name_type="$xxx"
12435                                 fi
12436                                 ;;
12437                         esac
12438                 done
12439                 : In case none of those worked, prompt the user.
12440                 case "$netdb_name_type" in
12441                 '')     rp='What is the type for the 1st argument to gethostbyname?'
12442                         dflt='char *'
12443                         . ./myread
12444                         netdb_name_type=$ans
12445                         ;;
12446                 esac
12447                 ;;
12448         *)      : no gethostbyname, so pick harmless default
12449                 netdb_name_type='char *'
12450                 ;;
12451         esac
12452 fi
12453
12454 : check for type of 1st argument to getnetbyaddr. 
12455 if test "X$netdb_net_type" = X ; then
12456         case "$d_getnbyaddr" in
12457         $define)
12458                 $cat <<EOM
12459
12460 Checking to see what type of 1st argument is accepted by getnetbyaddr().
12461 EOM
12462                 hdrs="$define sys/types.h
12463                         $d_socket sys/socket.h 
12464                         $i_niin netinet/in.h 
12465                         $i_netdb netdb.h
12466                         $i_unistd unistd.h"
12467                 for xxx in in_addr_t "unsigned long" long "unsigned int" int; do
12468                         case "$netdb_net_type" in
12469                         '')     try="extern struct netent *getnetbyaddr($xxx, int);"
12470                                 if ./protochk "$try" $hdrs; then
12471                                         echo "Your system accepts $xxx."
12472                                         netdb_net_type="$xxx"
12473                                 fi
12474                                 ;;
12475                         esac
12476                 done
12477                 : In case none of those worked, prompt the user.
12478                 case "$netdb_net_type" in
12479                 '')     rp='What is the type for the 1st argument to getnetbyaddr?'
12480                         dflt='long'
12481                         . ./myread
12482                         netdb_net_type=$ans
12483                         ;;
12484                 esac
12485                 ;;
12486         *)      : no getnetbyaddr, so pick harmless default
12487                 netdb_net_type='long'
12488                 ;;
12489         esac
12490 fi
12491 : locate the preferred pager for this system
12492 case "$pager" in
12493 '')
12494         dflt=''
12495         case "$pg" in
12496         /*) dflt=$pg;;
12497         esac
12498         case "$more" in
12499         /*) dflt=$more;;
12500         esac
12501         case "$less" in
12502         /*) dflt=$less;;
12503         esac
12504         case "$dflt" in
12505         '') dflt=/usr/ucb/more;;
12506         esac
12507         ;;
12508 *) dflt="$pager";;
12509 esac
12510 echo " "
12511 fn=f/
12512 rp='What pager is used on your system?'
12513 . ./getfile
12514 pager="$ans"
12515
12516 : see what type pids are declared as in the kernel
12517 rp="What is the type of process ids on this system?"
12518 set pid_t pidtype int stdio.h sys/types.h
12519 eval $typedef_ask
12520
12521 : Find earliest binary compatible site_perl subdirectory perl can use.
12522 case "$bincompat5005" in
12523 "$define") xs_apiversion='5.005' ;;
12524 *) xs_apiversion=$apiversion ;;   # The current site_perl version.
12525 esac
12526 : Find earliest pure perl site_perl subdirectory perl can use.
12527 : The versioned directories started at 5.005.
12528 pm_apiversion='5.005'
12529
12530 : check for length of pointer
12531 echo " "
12532 case "$ptrsize" in
12533 '')
12534         $echo $n "Checking to see how big your pointers are...$c" >&4
12535         if test "$voidflags" -gt 7; then
12536                 echo '#define VOID_PTR char *' > try.c
12537         else
12538                 echo '#define VOID_PTR void *' > try.c
12539         fi
12540         $cat >>try.c <<'EOCP'
12541 #include <stdio.h>
12542 int main()
12543 {
12544     printf("%d\n", (int)sizeof(VOID_PTR));
12545     exit(0);
12546 }
12547 EOCP
12548         set try
12549         if eval $compile_ok; then
12550                 ptrsize=`./try`
12551                 $echo " $ptrsize bytes." >&4
12552         else
12553                 dflt='4'
12554                 echo "(I can't seem to compile the test program.  Guessing...)" >&4
12555                 rp="What is the size of a pointer (in bytes)?"
12556                 . ./myread
12557                 ptrsize="$ans"
12558         fi
12559         ;;
12560 esac
12561 $rm -f try.c try
12562
12563 : see if ar generates random libraries by itself
12564 echo " "
12565 echo "Checking how to generate random libraries on your machine..." >&4
12566 echo 'int bar1() { return bar2(); }' > bar1.c
12567 echo 'int bar2() { return 2; }' > bar2.c
12568 $cat > foo.c <<'EOP'
12569 int main() { printf("%d\n", bar1()); exit(0); }
12570 EOP
12571 $cc $ccflags -c bar1.c >/dev/null 2>&1
12572 $cc $ccflags -c bar2.c >/dev/null 2>&1
12573 $cc $ccflags -c foo.c >/dev/null 2>&1
12574 $ar rc bar$_a bar2$_o bar1$_o >/dev/null 2>&1
12575 if $cc $ccflags $ldflags -o foobar foo$_o bar$_a $libs > /dev/null 2>&1 &&
12576         ./foobar >/dev/null 2>&1; then
12577         echo "$ar appears to generate random libraries itself."
12578         orderlib=false
12579         ranlib=":"
12580 elif $ar ts bar$_a >/dev/null 2>&1 &&
12581         $cc $ccflags $ldflags -o foobar foo$_o bar$_a $libs > /dev/null 2>&1 &&
12582         ./foobar >/dev/null 2>&1; then
12583                 echo "a table of contents needs to be added with '$ar ts'."
12584                 orderlib=false
12585                 ranlib="$ar ts"
12586 else
12587         case "$ranlib" in
12588         :) ranlib='';;
12589         '')
12590                 ranlib=`./loc ranlib X /usr/bin /bin /usr/local/bin`
12591                 $test -f $ranlib || ranlib=''
12592                 ;;
12593         esac
12594         if $test -n "$ranlib"; then
12595                 echo "your system has '$ranlib'; we'll use that."
12596                 orderlib=false
12597         else
12598                 echo "your system doesn't seem to support random libraries"
12599                 echo "so we'll use lorder and tsort to order the libraries."
12600                 orderlib=true
12601                 ranlib=":"
12602         fi
12603 fi
12604 $rm -f foo* bar* 
12605
12606 : check for type of arguments to select. 
12607 case "$selecttype" in
12608 '') case "$d_select" in
12609         $define)
12610                 $cat <<EOM
12611 Checking to see what type of arguments are accepted by select().
12612 EOM
12613                 hdrs="$define sys/types.h
12614                         $i_systime sys/time.h 
12615                         $i_sysselct sys/select.h
12616                         $d_socket sys/socket.h"
12617                 : The first arg can be int, unsigned, or size_t
12618                 : The last arg may or may not be 'const'
12619                 val=''
12620                 : void pointer has been seen but using that
12621                 : breaks the selectminbits test
12622                 for xxx in 'fd_set *' 'int *'; do
12623                         for nfd in 'int' 'size_t' 'unsigned long' 'unsigned' ; do
12624                                 for tmo in 'struct timeval *' 'const struct timeval *'; do
12625                                         case "$val" in
12626                                         '')     try="extern select _(($nfd, $xxx, $xxx, $xxx, $tmo));"
12627                                                 if ./protochk "$try" $hdrs; then
12628                                                         echo "Your system accepts $xxx."
12629                                                         val="$xxx"
12630                                                 fi
12631                                                 ;;
12632                                         esac
12633                                 done
12634                         done
12635                 done
12636                 case "$val" in
12637                 '')     rp='What is the type for the 2nd, 3rd, and 4th arguments to select?'
12638                         case "$d_fd_set" in
12639                                 $define) dflt="fd_set *" ;;
12640                                 *)              dflt="int *" ;;
12641                         esac
12642                         . ./myread
12643                         val=$ans
12644                         ;;
12645                 esac
12646                 selecttype="$val"
12647                 ;;
12648         *)      : no select, so pick a harmless default
12649                 selecttype='int *'
12650                 ;;
12651         esac
12652         ;;
12653 esac
12654
12655 : check for the select 'width'
12656 case "$selectminbits" in
12657 '') case "$d_select" in
12658         $define)
12659                 $cat <<EOM
12660
12661 Checking to see on how many bits at a time your select() operates...
12662 EOM
12663                 $cat >try.c <<EOCP
12664 #include <sys/types.h>
12665 #$i_time I_TIME
12666 #$i_systime I_SYS_TIME
12667 #$i_systimek I_SYS_TIME_KERNEL
12668 #ifdef I_TIME
12669 #   include <time.h>
12670 #endif
12671 #ifdef I_SYS_TIME
12672 #   ifdef I_SYS_TIME_KERNEL
12673 #       define KERNEL
12674 #   endif
12675 #   include <sys/time.h>
12676 #   ifdef I_SYS_TIME_KERNEL
12677 #       undef KERNEL
12678 #   endif
12679 #endif
12680 #$i_sysselct I_SYS_SELECT
12681 #ifdef I_SYS_SELECT
12682 #include <sys/select.h>
12683 #endif
12684 #$d_socket HAS_SOCKET
12685 #ifdef HAS_SOCKET
12686 #   include <sys/socket.h> /* Might include <sys/bsdtypes.h> */
12687 #endif
12688 #include <stdio.h>
12689 $selecttype b;
12690 #define S sizeof(*(b))
12691 #define MINBITS 64
12692 #define NBYTES (S * 8 > MINBITS ? S : MINBITS/8)
12693 #define NBITS  (NBYTES * 8)
12694 int main() {
12695     char s[NBYTES];
12696     struct timeval t;
12697     int i;
12698     FILE* fp;
12699     int fd;
12700
12701     fclose(stdin);
12702     fp = fopen("try.c", "r");
12703     if (fp == 0)
12704       exit(1);
12705     fd = fileno(fp);
12706     if (fd < 0)
12707       exit(2);
12708     b = ($selecttype)s;
12709     for (i = 0; i < NBITS; i++)
12710         FD_SET(i, b);
12711     t.tv_sec  = 0;
12712     t.tv_usec = 0;
12713     select(fd + 1, b, 0, 0, &t);
12714     for (i = NBITS - 1; i > fd && FD_ISSET(i, b); i--);
12715     printf("%d\n", i + 1);
12716     return 0;
12717 }
12718 EOCP
12719                 set try
12720                 if eval $compile_ok; then
12721                         selectminbits=`./try`
12722                         case "$selectminbits" in
12723                         '')     cat >&4 <<EOM
12724 Cannot figure out on how many bits at a time your select() operates.
12725 I'll play safe and guess it is 32 bits.
12726 EOM
12727                                 selectminbits=32
12728                                 bits="32 bits"
12729                                 ;;
12730                         1)      bits="1 bit" ;;
12731                         *)      bits="$selectminbits bits" ;;
12732                         esac
12733                         echo "Your select() operates on $bits at a time." >&4
12734                 else
12735                         rp='What is the minimum number of bits your select() operates on?'
12736                         case "$byteorder" in
12737                         1234|12345678)  dflt=32 ;;
12738                         *)              dflt=1  ;;
12739                         esac
12740                         . ./myread
12741                         val=$ans
12742                         selectminbits="$val"
12743                 fi
12744                 $rm -f try.* try
12745                 ;;
12746         *)      : no select, so pick a harmless default
12747                 selectminbits='32'
12748                 ;;
12749         esac
12750         ;;
12751 esac
12752
12753 : Trace out the files included by signal.h, then look for SIGxxx names.
12754 : Remove SIGARRAYSIZE used by HPUX.
12755 : Remove SIGSTKSIZE used by Linux.
12756 : Remove SIGSTKSZ used by Posix.
12757 : Remove SIGTYP void lines used by OS2.
12758 xxx=`echo '#include <signal.h>' |
12759         $cppstdin $cppminus $cppflags 2>/dev/null |
12760         $grep '^[       ]*#.*include' | 
12761         $awk "{print \\$$fieldn}" | $sed 's!"!!g' | $sort | $uniq`
12762 : Check this list of files to be sure we have parsed the cpp output ok.
12763 : This will also avoid potentially non-existent files, such 
12764 : as ../foo/bar.h
12765 xxxfiles=''
12766 for xx in $xxx /dev/null ; do
12767         $test -f "$xx" && xxxfiles="$xxxfiles $xx"
12768 done
12769 : If we have found no files, at least try signal.h
12770 case "$xxxfiles" in
12771 '')     xxxfiles=`./findhdr signal.h` ;;
12772 esac
12773 xxx=`awk '
12774 $1 ~ /^#define$/ && $2 ~ /^SIG[A-Z0-9]*$/ && $2 !~ /SIGARRAYSIZE/ && $2 !~ /SIGSTKSIZE/ && $2 !~ /SIGSTKSZ/ && $3 !~ /void/ {
12775         print substr($2, 4, 20)
12776 }
12777 $1 == "#" && $2 ~ /^define$/ && $3 ~ /^SIG[A-Z0-9]*$/ && $3 !~ /SIGARRAYSIZE/ && $4 !~ /void/ {
12778         print substr($3, 4, 20)
12779 }' $xxxfiles`
12780 : Append some common names just in case the awk scan failed.
12781 xxx="$xxx ABRT ALRM BUS CHLD CLD CONT DIL EMT FPE HUP ILL INT IO IOT KILL"
12782 xxx="$xxx LOST PHONE PIPE POLL PROF PWR QUIT SEGV STKFLT STOP SYS TERM TRAP"
12783 xxx="$xxx TSTP TTIN TTOU URG USR1 USR2 USR3 USR4 VTALRM"
12784 xxx="$xxx WINCH WIND WINDOW XCPU XFSZ"
12785 : generate a few handy files for later
12786 $cat > signal.c <<'EOCP'
12787 #include <sys/types.h>
12788 #include <signal.h>
12789 #include <stdio.h>
12790 int main() {
12791
12792 /* Strange style to avoid deeply-nested #if/#else/#endif */
12793 #ifndef NSIG
12794 #  ifdef _NSIG
12795 #    define NSIG (_NSIG)
12796 #  endif
12797 #endif
12798
12799 #ifndef NSIG
12800 #  ifdef SIGMAX
12801 #    define NSIG (SIGMAX+1)
12802 #  endif
12803 #endif
12804
12805 #ifndef NSIG
12806 #  ifdef SIG_MAX
12807 #    define NSIG (SIG_MAX+1)
12808 #  endif
12809 #endif
12810
12811 #ifndef NSIG
12812 #  ifdef MAXSIG
12813 #    define NSIG (MAXSIG+1)
12814 #  endif
12815 #endif
12816
12817 #ifndef NSIG
12818 #  ifdef MAX_SIG
12819 #    define NSIG (MAX_SIG+1)
12820 #  endif
12821 #endif
12822
12823 #ifndef NSIG
12824 #  ifdef SIGARRAYSIZE
12825 #    define NSIG (SIGARRAYSIZE+1) /* Not sure of the +1 */
12826 #  endif
12827 #endif
12828
12829 #ifndef NSIG
12830 #  ifdef _sys_nsig
12831 #    define NSIG (_sys_nsig) /* Solaris 2.5 */
12832 #  endif
12833 #endif
12834
12835 /* Default to some arbitrary number that's big enough to get most
12836    of the common signals.
12837 */
12838 #ifndef NSIG
12839 #    define NSIG 50
12840 #endif
12841
12842 printf("NSIG %d\n", NSIG);
12843
12844 #ifndef JUST_NSIG
12845
12846 EOCP
12847
12848 echo $xxx | $tr ' ' $trnl | $sort | $uniq | $awk '
12849 {
12850         printf "#ifdef SIG"; printf $1; printf "\n"
12851         printf "printf(\""; printf $1; printf " %%d\\n\",SIG";
12852         printf $1; printf ");\n"
12853         printf "#endif\n"
12854 }
12855 END {
12856         printf "#endif /* JUST_NSIG */\n";
12857         printf "exit(0);\n}\n";
12858 }
12859 ' >>signal.c
12860 $cat >signal.awk <<'EOP'
12861 BEGIN { ndups = 0 }
12862 $1 ~ /^NSIG$/ { nsig = $2 }
12863 ($1 !~ /^NSIG$/) && (NF == 2) {
12864     if ($2 > maxsig) { maxsig = $2 }
12865     if (sig_name[$2]) {
12866         dup_name[ndups] = $1
12867         dup_num[ndups] = $2
12868         ndups++ 
12869     }
12870     else {
12871         sig_name[$2] = $1
12872         sig_num[$2] = $2
12873     }
12874 }
12875 END { 
12876     if (nsig == 0) {
12877         nsig = maxsig + 1
12878     }
12879     printf("NSIG %d\n", nsig);
12880     for (n = 1; n < nsig; n++) {
12881         if (sig_name[n]) {
12882             printf("%s %d\n", sig_name[n], sig_num[n])
12883         }
12884         else {
12885             printf("NUM%d %d\n", n, n) 
12886         }
12887     }
12888     for (n = 0; n < ndups; n++) {
12889         printf("%s %d\n", dup_name[n], dup_num[n])
12890     }
12891 }
12892 EOP
12893 $cat >signal_cmd <<EOS
12894 $startsh
12895 if $test -s signal.lst; then
12896     echo "Using your existing signal.lst file"
12897         exit 0
12898 fi
12899 xxx="$xxx"
12900 EOS
12901 $cat >>signal_cmd <<'EOS'
12902
12903 set signal
12904 if eval $compile_ok; then
12905         ./signal$_exe | $sort -n +1 | $uniq | $awk -f signal.awk >signal.lst
12906 else
12907         echo "(I can't seem be able to compile the whole test program)" >&4
12908         echo "(I'll try it in little pieces.)" >&4
12909         set signal -DJUST_NSIG
12910         if eval $compile_ok; then
12911                 ./signal$_exe > signal.nsg
12912                 $cat signal.nsg
12913         else
12914                 echo "I can't seem to figure out how many signals you have." >&4
12915                 echo "Guessing 50." >&4
12916                 echo 'NSIG 50' > signal.nsg
12917         fi
12918         : Now look at all the signal names, one at a time.
12919         for xx in `echo $xxx | $tr ' ' $trnl | $sort | $uniq`; do
12920                 $cat > signal.c <<EOCP
12921 #include <sys/types.h>
12922 #include <signal.h>
12923 #include <stdio.h>
12924 int main() {
12925 printf("$xx %d\n", SIG${xx});
12926 return 0;
12927 }
12928 EOCP
12929                 set signal
12930                 if eval $compile; then
12931                         echo "SIG${xx} found."
12932                         ./signal$_exe  >> signal.ls1
12933                 else
12934                         echo "SIG${xx} NOT found."
12935                 fi
12936         done
12937         if $test -s signal.ls1; then
12938                 $cat signal.nsg signal.ls1 |
12939                         $sort -n +1 | $uniq | $awk -f signal.awk >signal.lst
12940         fi
12941
12942 fi
12943 if $test -s signal.lst; then
12944         :
12945 else
12946         echo "(AAK! I can't compile the test programs -- Guessing)" >&4
12947         echo 'kill -l' >signal
12948         set X `csh -f <signal`
12949         $rm -f signal
12950         shift
12951         case $# in
12952         0) set HUP INT QUIT ILL TRAP ABRT EMT FPE KILL BUS SEGV SYS PIPE ALRM TERM;;
12953         esac
12954         echo $@ | $tr ' ' $trnl | \
12955             $awk '{ printf "%s %d\n", $1, ++s; }
12956                   END { printf "NSIG %d\n", ++s }' >signal.lst
12957 fi
12958 $rm -f signal.c signal$_exe signal$_o signal.nsg signal.ls1
12959 EOS
12960 chmod a+x signal_cmd
12961 $eunicefix signal_cmd
12962
12963 : generate list of signal names
12964 echo " "
12965 case "$sig_name_init" in
12966 '') doinit=yes ;;
12967 *)  case "$sig_num_init" in
12968     ''|*,*) doinit=yes ;;
12969     esac ;;
12970 esac
12971 case "$doinit" in
12972 yes)
12973         echo "Generating a list of signal names and numbers..." >&4
12974         . ./signal_cmd
12975         sig_count=`$awk '/^NSIG/ { printf "%d", $2 }' signal.lst`
12976         sig_name=`$awk 'BEGIN { printf "ZERO " }
12977                         !/^NSIG/ { printf "%s ", $1 }' signal.lst`
12978         sig_num=`$awk  'BEGIN { printf "0 " }
12979                         !/^NSIG/ { printf "%d ", $2 }' signal.lst`
12980         sig_name_init=`$awk 'BEGIN      { printf "\"ZERO\", " }
12981                              !/^NSIG/   { printf "\"%s\", ", $1 }
12982                              END        { printf "0\n" }' signal.lst`
12983         sig_num_init=`$awk  'BEGIN      { printf "0, " }
12984                              !/^NSIG/   { printf "%d, ", $2}
12985                              END        { printf "0\n"}' signal.lst`
12986         ;;
12987 esac
12988 echo "The following $sig_count signals are available:"
12989 echo " "
12990 echo $sig_name | $awk \
12991 'BEGIN { linelen = 0 }
12992 {
12993         for (i = 1; i <= NF; i++) {
12994                 name = "SIG" $i " "
12995                 linelen = linelen + length(name)
12996                 if (linelen > 70) {
12997                         printf "\n"
12998                         linelen = length(name)
12999                 }
13000                 printf "%s", name
13001         }
13002         printf "\n"
13003 }'
13004 $rm -f signal signal.c signal.awk signal.lst signal_cmd 
13005
13006 echo " "
13007 case "$sizetype" in
13008 *_t) zzz="$sizetype"    ;;
13009 *)   zzz="filesize"     ;;
13010 esac
13011 echo "Checking the size of $zzz..." >&4 
13012 cat > try.c <<EOCP
13013 #include <sys/types.h>
13014 #include <stdio.h>
13015 int main() {
13016     printf("%d\n", (int)sizeof($sizetype));
13017     exit(0);
13018 }
13019 EOCP
13020 set try
13021 if eval $compile_ok; then
13022         yyy=`./try`
13023         case "$yyy" in
13024         '')     sizesize=4
13025                 echo "(I can't execute the test program--guessing $sizesize.)" >&4
13026                 ;;
13027         *)      sizesize=$yyy
13028                 echo "Your $zzz size is $sizesize bytes."
13029                 ;;
13030         esac
13031 else
13032         sizesize=4
13033         echo "(I can't compile the test program--guessing $sizesize.)" >&4
13034 fi
13035
13036
13037 : see what type is used for signed size_t
13038 set ssize_t ssizetype int stdio.h sys/types.h
13039 eval $typedef
13040 dflt="$ssizetype"
13041 $cat > ssize.c <<EOM
13042 #include <stdio.h>
13043 #include <sys/types.h>
13044 #define Size_t $sizetype
13045 #define SSize_t $dflt
13046 int main()
13047 {
13048         if (sizeof(Size_t) == sizeof(SSize_t))
13049                 printf("$dflt\n");
13050         else if (sizeof(Size_t) == sizeof(int))
13051                 printf("int\n");
13052         else 
13053                 printf("long\n");
13054         exit(0);
13055 }
13056 EOM
13057 echo " "
13058 set ssize
13059 if eval $compile_ok && ./ssize > /dev/null; then
13060         ssizetype=`./ssize`
13061         echo "I'll be using $ssizetype for functions returning a byte count." >&4
13062 else
13063         $cat >&4 <<EOM
13064 Help! I can't compile and run the ssize_t test program: please enlighten me!
13065 (This is probably a misconfiguration in your system or libraries, and
13066 you really ought to fix it.  Still, I'll try anyway.)
13067
13068 I need a type that is the same size as $sizetype, but is guaranteed to
13069 be signed.  Common values are ssize_t, int and long.
13070
13071 EOM
13072         rp="What signed type is the same size as $sizetype?"
13073         . ./myread
13074         ssizetype="$ans"
13075 fi
13076 $rm -f ssize ssize.*
13077
13078 : see what type of char stdio uses.
13079 echo " "
13080 if $contains 'unsigned.*char.*_ptr;' `./findhdr stdio.h` >/dev/null 2>&1 ; then
13081         echo "Your stdio uses unsigned chars." >&4
13082         stdchar="unsigned char"
13083 else
13084         echo "Your stdio uses signed chars." >&4
13085         stdchar="char"
13086 fi
13087
13088 : see if time exists
13089 echo " "
13090 if test "X$d_time" = X -o X"$timetype" = X; then
13091     if set time val -f d_time; eval $csym; $val; then
13092                 echo 'time() found.' >&4
13093                 val="$define"
13094                 rp="What is the type returned by time() on this system?"
13095                 set time_t timetype long stdio.h sys/types.h
13096                 eval $typedef_ask
13097     else
13098                 echo 'time() not found, hope that will do.' >&4
13099                 val="$undef"
13100                 timetype='int';
13101     fi
13102     set d_time
13103     eval $setvar
13104 fi
13105
13106 : see what type uids are declared as in the kernel
13107 echo " "
13108 echo "Looking for the type for user ids returned by getuid()."
13109 set uid_t uidtype xxx stdio.h sys/types.h
13110 eval $typedef
13111 case "$uidtype" in
13112 xxx)
13113         xxx=`./findhdr sys/user.h`
13114         set `grep '_ruid;' "$xxx" 2>/dev/null` unsigned short
13115         case $1 in
13116         unsigned) dflt="$1 $2" ;;
13117         *) dflt="$1" ;;
13118         esac
13119         ;;
13120 *) dflt="$uidtype";;
13121 esac
13122 case "$uidtype" in
13123 uid_t)  echo "uid_t found." ;;
13124 *)      rp="What is the type for user ids returned by getuid()?"
13125         . ./myread
13126         uidtype="$ans"
13127         ;;
13128 esac
13129
13130 echo " "
13131 case "$uidtype" in
13132 *_t) zzz="$uidtype"     ;;
13133 *)   zzz="uid"          ;;
13134 esac
13135 echo "Checking the size of $zzz..." >&4 
13136 cat > try.c <<EOCP
13137 #include <sys/types.h>
13138 #include <stdio.h>
13139 int main() {
13140     printf("%d\n", (int)sizeof($uidtype));
13141     exit(0);
13142 }
13143 EOCP
13144 set try
13145 if eval $compile_ok; then
13146         yyy=`./try`
13147         case "$yyy" in
13148         '')     uidsize=4
13149                 echo "(I can't execute the test program--guessing $uidsize.)" >&4
13150                 ;;
13151         *)      uidsize=$yyy
13152                 echo "Your $zzz size is $uidsize bytes."
13153                 ;;
13154         esac
13155 else
13156         uidsize=4
13157         echo "(I can't compile the test program--guessing $uidsize.)" >&4
13158 fi
13159
13160 echo " "
13161 case "$uidtype" in
13162 *_t) zzz="$uidtype"     ;;
13163 *)   zzz="uid"          ;;
13164 esac
13165 echo "Checking the sign of $zzz..." >&4
13166 cat > try.c <<EOCP
13167 #include <sys/types.h>
13168 #include <stdio.h>
13169 int main() {
13170         $uidtype foo = -1;
13171         if (foo < 0)
13172                 printf("-1\n");
13173         else
13174                 printf("1\n");
13175 }
13176 EOCP
13177 set try
13178 if eval $compile; then
13179         yyy=`./try`
13180         case "$yyy" in
13181         '')     uidsign=1
13182                 echo "(I can't execute the test program--guessing unsigned.)" >&4
13183                 ;;
13184         *)      uidsign=$yyy
13185                 case "$uidsign" in
13186                  1) echo "Your $zzz is unsigned." ;;
13187                 -1) echo "Your $zzz is signed."   ;;
13188                 esac
13189                 ;;
13190         esac
13191 else
13192         uidsign=1
13193         echo "(I can't compile the test program--guessing unsigned.)" >&4
13194 fi
13195
13196
13197
13198 echo " "
13199 $echo "Checking the format string to be used for uids..." >&4
13200
13201 case "$uidsign" in
13202 -1)     if $test X"$uidsize" = X"$ivsize"; then
13203                 uidformat="$ivdformat"
13204         else
13205                 if $test X"$uidsize" = X"$longsize"; then
13206                         uidformat='"ld"'
13207                 else
13208                         if $test X"$uidsize" = X"$intsize"; then
13209                                 uidformat='"d"'
13210                         else
13211                                 if $test X"$uidsize" = X"$shortsize"; then
13212                                         uidformat='"hd"'
13213                                 fi
13214                         fi
13215                 fi
13216         fi
13217         ;;
13218 *)      if $test X"$uidsize" = X"$uvsize"; then
13219                 uidformat="$uvuformat"
13220         else
13221                 if $test X"$uidsize" = X"$longsize"; then
13222                         uidformat='"lu"'
13223                 else
13224                         if $test X"$uidsize" = X"$intsize"; then
13225                                 uidformat='"u"'
13226                         else
13227                                 if $test X"$uidsize" = X"$shortsize"; then
13228                                         uidformat='"hu"'
13229                                 fi
13230                         fi
13231                 fi
13232         fi
13233         ;;
13234 esac
13235
13236 : see if dbm.h is available
13237 : see if dbmclose exists
13238 set dbmclose d_dbmclose
13239 eval $inlibc
13240
13241 case "$d_dbmclose" in
13242 $define)
13243         set dbm.h i_dbm
13244         eval $inhdr
13245         case "$i_dbm" in
13246         $define)
13247                 val="$undef"
13248                 set i_rpcsvcdbm
13249                 eval $setvar
13250                 ;;
13251         *)      set rpcsvc/dbm.h i_rpcsvcdbm
13252                 eval $inhdr
13253                 ;;
13254         esac
13255         ;;
13256 *)      echo "We won't be including <dbm.h>"
13257         val="$undef"
13258         set i_dbm
13259         eval $setvar
13260         val="$undef"
13261         set i_rpcsvcdbm
13262         eval $setvar
13263         ;;
13264 esac
13265
13266 : see if this is a sys/file.h system
13267 val=''
13268 set sys/file.h val
13269 eval $inhdr
13270
13271 : do we need to include sys/file.h ?
13272 case "$val" in
13273 "$define")
13274         echo " "
13275         if $h_sysfile; then
13276                 val="$define"
13277                 echo "We'll be including <sys/file.h>." >&4
13278         else
13279                 val="$undef"
13280                 echo "We won't be including <sys/file.h>." >&4
13281         fi
13282         ;;
13283 *)
13284         h_sysfile=false
13285         ;;
13286 esac
13287 set i_sysfile
13288 eval $setvar
13289
13290 : see if fcntl.h is there
13291 val=''
13292 set fcntl.h val
13293 eval $inhdr
13294
13295 : see if we can include fcntl.h
13296 case "$val" in
13297 "$define")
13298         echo " "
13299         if $h_fcntl; then
13300                 val="$define"
13301                 echo "We'll be including <fcntl.h>." >&4
13302         else
13303                 val="$undef"
13304                 if $h_sysfile; then
13305         echo "We don't need to include <fcntl.h> if we include <sys/file.h>." >&4
13306                 else
13307                         echo "We won't be including <fcntl.h>." >&4
13308                 fi
13309         fi
13310         ;;
13311 *)
13312         h_fcntl=false
13313         val="$undef"
13314         ;;
13315 esac
13316 set i_fcntl
13317 eval $setvar
13318
13319 : see if locale.h is available
13320 set locale.h i_locale
13321 eval $inhdr
13322
13323 : see if mach cthreads are available
13324 if test "X$usethreads" = "X$define"; then
13325         set mach/cthreads.h i_machcthr
13326         eval $inhdr
13327 else
13328         i_machcthr="$undef"
13329 fi
13330
13331
13332
13333 : see if this is a math.h system
13334 set math.h i_math
13335 eval $inhdr
13336
13337 : see if this is a mntent.h system
13338 set mntent.h i_mntent
13339 eval $inhdr
13340
13341 : see if ndbm.h is available
13342 set ndbm.h t_ndbm
13343 eval $inhdr
13344 case "$t_ndbm" in
13345 $define)
13346         : see if dbm_open exists
13347         set dbm_open d_dbm_open
13348         eval $inlibc
13349         case "$d_dbm_open" in
13350         $undef)
13351                 t_ndbm="$undef"
13352                 echo "We won't be including <ndbm.h>"
13353                 ;;
13354         esac
13355         ;;
13356 esac
13357 val="$t_ndbm"
13358 set i_ndbm
13359 eval $setvar
13360
13361 : see if net/errno.h is available
13362 val=''
13363 set net/errno.h val
13364 eval $inhdr
13365
13366 : Unfortunately, it causes problems on some systems.  Arrgh.
13367 case "$val" in
13368 $define)
13369         cat > try.c <<'EOM'
13370 #include <stdio.h>
13371 #include <errno.h>
13372 #include <net/errno.h>
13373 int func()
13374 {
13375         return ENOTSOCK;
13376 }
13377 EOM
13378         if $cc $ccflags -c try.c >/dev/null 2>&1; then
13379                 echo "We'll be including <net/errno.h>." >&4
13380         else
13381                 echo "We won't be including <net/errno.h>." >&4
13382                 val="$undef"
13383         fi
13384         $rm -f try.* try
13385         ;;
13386 esac
13387 set i_neterrno
13388 eval $setvar
13389
13390 : see if netinet/tcp.h is available
13391 set netinet/tcp.h i_netinettcp
13392 eval $inhdr
13393
13394 : see if this is a poll.h system
13395 set poll.h i_poll
13396 eval $inhdr
13397
13398 : get C preprocessor symbols handy
13399 echo " "
13400 $echo $n "Hmm... $c"
13401 echo $al | $tr ' ' $trnl >Cppsym.know
13402 $cat <<EOSS >Cppsym
13403 $startsh
13404 case "\$1" in
13405 -l) list=true
13406         shift
13407         ;;
13408 esac
13409 unknown=''
13410 case "\$list\$#" in
13411 1|2)
13412         for sym do
13413                 if $contains "^\$1$" Cppsym.true >/dev/null 2>&1; then
13414                         exit 0
13415                 elif $contains "^\$1$" Cppsym.know >/dev/null 2>&1; then
13416                         :
13417                 else
13418                         unknown="\$unknown \$sym"
13419                 fi
13420         done
13421         set X \$unknown
13422         shift
13423         ;;
13424 esac
13425 case \$# in
13426 0) exit 1;;
13427 esac
13428 echo \$* | $tr ' ' '$trnl' | $sed -e 's/\(.*\)/\\
13429 #ifdef \1\\
13430 exit 0; _ _ _ _\1\\      \1\\
13431 #endif\\
13432 /' >Cppsym\$\$
13433 echo "exit 1; _ _ _" >>Cppsym\$\$
13434 $cppstdin $cppminus <Cppsym\$\$ | $grep '^exit [01]; _ _'  >Cppsym2\$\$
13435 case "\$list" in
13436 true) $awk 'NF > 5 {print substr(\$6,2,100)}' <Cppsym2\$\$ ;;
13437 *)
13438         sh Cppsym2\$\$
13439         status=\$?
13440         ;;
13441 esac
13442 $rm -f Cppsym\$\$ Cppsym2\$\$
13443 exit \$status
13444 EOSS
13445 chmod +x Cppsym
13446 $eunicefix Cppsym
13447 ./Cppsym -l $al | $sort | $grep -v '^$' >Cppsym.true
13448
13449 : now check the C compiler for additional symbols
13450 postprocess_cc_v=''
13451 case "$osname" in
13452 aix) postprocess_cc_v="|$tr , ' '" ;;
13453 esac
13454 $cat >ccsym <<EOS
13455 $startsh
13456 $cat >tmp.c <<EOF
13457 extern int foo;
13458 EOF
13459 for i in \`$cc -v -c tmp.c 2>&1 $postprocess_cc_v\`
13460 do
13461         case "\$i" in
13462         -D*) echo "\$i" | $sed 's/^-D//';;
13463         -A*) $test "$gccversion" && echo "\$i" | $sed 's/^-A\(.*\)(\(.*\))/\1=\2/';;
13464         esac
13465 done
13466 $rm -f try.c
13467 EOS
13468 postprocess_cc_v=''
13469 chmod +x ccsym
13470 $eunicefix ccsym
13471 ./ccsym > ccsym1.raw
13472 if $test -s ccsym1.raw; then
13473        $sort ccsym1.raw | $uniq >ccsym.raw
13474 else
13475        mv ccsym1.raw ccsym.raw
13476 fi
13477
13478 $awk '/\=/ { print $0; next }
13479         { print $0"=1" }' ccsym.raw >ccsym.list
13480 $awk '{ print $0"=1" }' Cppsym.true >ccsym.true
13481 $comm -13 ccsym.true ccsym.list >ccsym.own
13482 $comm -12 ccsym.true ccsym.list >ccsym.com
13483 $comm -23 ccsym.true ccsym.list >ccsym.cpp
13484 also=''
13485 if $test -z ccsym.raw; then
13486         echo "Your C compiler doesn't seem to define any symbols!" >&4
13487         echo " "
13488         echo "However, your C preprocessor defines the following symbols:"
13489         $cat Cppsym.true
13490         ccsymbols=''
13491         cppsymbols=`$cat Cppsym.true`
13492         cppsymbols=`echo $cppsymbols`
13493         cppccsymbols="$cppsymbols"
13494 else
13495         if $test -s ccsym.com; then
13496                 echo "Your C compiler and pre-processor define these symbols:"
13497                 $sed -e 's/\(.*\)=.*/\1/' ccsym.com
13498                 also='also '
13499                 symbols='ones'
13500                 cppccsymbols=`$cat ccsym.com`
13501                 cppccsymbols=`echo $cppccsymbols`
13502                 $test "$silent" || sleep 1
13503         fi
13504         if $test -s ccsym.cpp; then
13505                 $test "$also" && echo " "
13506                 echo "Your C pre-processor ${also}defines the following symbols:"
13507                 $sed -e 's/\(.*\)=.*/\1/' ccsym.cpp
13508                 also='further '
13509                 cppsymbols=`$cat ccsym.cpp`
13510                 cppsymbols=`echo $cppsymbols`
13511                 $test "$silent" || sleep 1
13512         fi
13513         if $test -s ccsym.own; then
13514                 $test "$also" && echo " "
13515                 echo "Your C compiler ${also}defines the following cpp symbols:"
13516                 $sed -e 's/\(.*\)=1/\1/' ccsym.own
13517                 $sed -e 's/\(.*\)=.*/\1/' ccsym.own | $uniq >>Cppsym.true
13518                 ccsymbols=`$cat ccsym.own`
13519                 ccsymbols=`echo $ccsymbols`
13520                 $test "$silent" || sleep 1
13521         fi
13522 fi
13523 $rm -f ccsym*
13524
13525 : see if this is a termio system
13526 val="$undef"
13527 val2="$undef"
13528 val3="$undef"
13529 if $test `./findhdr termios.h`; then
13530         set tcsetattr i_termios
13531         eval $inlibc
13532         val3="$i_termios"
13533 fi
13534 echo " "
13535 case "$val3" in
13536 "$define") echo "You have POSIX termios.h... good!" >&4;;
13537 *) if ./Cppsym pyr; then
13538                 case "`/bin/universe`" in
13539                 ucb) if $test `./findhdr sgtty.h`; then
13540                                 val2="$define"
13541                                 echo "<sgtty.h> found." >&4
13542                         else
13543                                 echo "System is pyramid with BSD universe."
13544                                 echo "<sgtty.h> not found--you could have problems." >&4
13545                         fi;;
13546                 *) if $test `./findhdr termio.h`; then
13547                                 val="$define"
13548                                 echo "<termio.h> found." >&4
13549                         else
13550                                 echo "System is pyramid with USG universe."
13551                                 echo "<termio.h> not found--you could have problems." >&4
13552                         fi;;
13553                 esac
13554         elif ./usg; then
13555                 if $test `./findhdr termio.h`; then
13556                         echo "<termio.h> found." >&4
13557                         val="$define"
13558                 elif $test `./findhdr sgtty.h`; then
13559                         echo "<sgtty.h> found." >&4
13560                         val2="$define"
13561                 else
13562 echo "Neither <termio.h> nor <sgtty.h> found--you could have problems." >&4
13563                 fi
13564         else
13565                 if $test `./findhdr sgtty.h`; then
13566                         echo "<sgtty.h> found." >&4
13567                         val2="$define"
13568                 elif $test `./findhdr termio.h`; then
13569                         echo "<termio.h> found." >&4
13570                         val="$define"
13571                 else
13572 echo "Neither <sgtty.h> nor <termio.h> found--you could have problems." >&4
13573                 fi
13574         fi;;
13575 esac
13576 set i_termio; eval $setvar
13577 val=$val2; set i_sgtty; eval $setvar
13578 val=$val3; set i_termios; eval $setvar
13579
13580 : see if this is a shadow.h system
13581 set shadow.h i_shadow
13582 eval $inhdr
13583
13584 : see if this is a socks.h system
13585 set socks.h i_socks
13586 eval $inhdr
13587
13588 : see if stdarg is available
13589 echo " "
13590 if $test `./findhdr stdarg.h`; then
13591         echo "<stdarg.h> found." >&4
13592         valstd="$define"
13593 else
13594         echo "<stdarg.h> NOT found." >&4
13595         valstd="$undef"
13596 fi
13597
13598 : see if varags is available
13599 echo " "
13600 if $test `./findhdr varargs.h`; then
13601         echo "<varargs.h> found." >&4
13602 else
13603         echo "<varargs.h> NOT found, but that's ok (I hope)." >&4
13604 fi
13605
13606 : set up the varargs testing programs
13607 $cat > varargs.c <<EOP
13608 #ifdef I_STDARG
13609 #include <stdarg.h>
13610 #endif
13611 #ifdef I_VARARGS
13612 #include <varargs.h>
13613 #endif
13614
13615 #ifdef I_STDARG
13616 int f(char *p, ...)
13617 #else
13618 int f(va_alist)
13619 va_dcl
13620 #endif
13621 {
13622         va_list ap;
13623 #ifndef I_STDARG
13624         char *p;
13625 #endif
13626 #ifdef I_STDARG
13627         va_start(ap,p);
13628 #else
13629         va_start(ap);
13630         p = va_arg(ap, char *);
13631 #endif
13632         va_end(ap);
13633 }
13634 EOP
13635 $cat > varargs <<EOP
13636 $startsh
13637 if $cc -c $ccflags -D\$1 varargs.c >/dev/null 2>&1; then
13638         echo "true"
13639 else
13640         echo "false"
13641 fi
13642 $rm -f varargs$_o
13643 EOP
13644 chmod +x varargs
13645
13646 : now check which varargs header should be included
13647 echo " "
13648 i_varhdr=''
13649 case "$valstd" in
13650 "$define")
13651         if `./varargs I_STDARG`; then
13652                 val='stdarg.h'
13653         elif `./varargs I_VARARGS`; then
13654                 val='varargs.h'
13655         fi
13656         ;;
13657 *)
13658         if `./varargs I_VARARGS`; then
13659                 val='varargs.h'
13660         fi
13661         ;;
13662 esac
13663 case "$val" in
13664 '')
13665 echo "I could not find the definition for va_dcl... You have problems..." >&4
13666         val="$undef"; set i_stdarg; eval $setvar
13667         val="$undef"; set i_varargs; eval $setvar
13668         ;;
13669 *) 
13670         set i_varhdr
13671         eval $setvar
13672         case "$i_varhdr" in
13673         stdarg.h)
13674                 val="$define"; set i_stdarg; eval $setvar
13675                 val="$undef"; set i_varargs; eval $setvar
13676                 ;;
13677         varargs.h)
13678                 val="$undef"; set i_stdarg; eval $setvar
13679                 val="$define"; set i_varargs; eval $setvar
13680                 ;;
13681         esac
13682         echo "We'll include <$i_varhdr> to get va_dcl definition." >&4;;
13683 esac
13684 $rm -f varargs*
13685
13686 : see if stddef is available
13687 set stddef.h i_stddef
13688 eval $inhdr
13689
13690 : see if sys/access.h is available
13691 set sys/access.h i_sysaccess
13692 eval $inhdr
13693
13694 : see if ioctl defs are in sgtty, termio, sys/filio or sys/ioctl
13695 set sys/filio.h i_sysfilio
13696 eval $inhdr
13697 echo " "
13698 if $test `./findhdr sys/ioctl.h`; then
13699         val="$define"
13700         echo '<sys/ioctl.h> found.' >&4
13701 else
13702         val="$undef"
13703         if $test $i_sysfilio = "$define"; then
13704             echo '<sys/ioctl.h> NOT found.' >&4
13705         else
13706                 $test $i_sgtty = "$define" && xxx="sgtty.h"
13707                 $test $i_termio = "$define" && xxx="termio.h"
13708                 $test $i_termios = "$define" && xxx="termios.h"
13709 echo "No <sys/ioctl.h> found, assuming ioctl args are defined in <$xxx>." >&4
13710         fi
13711 fi
13712 set i_sysioctl
13713 eval $setvar
13714
13715 : see if sys/resource.h has to be included
13716 set sys/resource.h i_sysresrc
13717 eval $inhdr
13718
13719 : see if sys/security.h is available
13720 set sys/security.h i_syssecrt
13721 eval $inhdr
13722
13723 : see if this is a sys/statvfs.h system
13724 set sys/statvfs.h i_sysstatvfs
13725 eval $inhdr
13726
13727 : see if this is a sys/uio.h system
13728 set sys/uio.h i_sysuio
13729 eval $inhdr
13730
13731 : see if this is a sys/un.h system
13732 set sys/un.h i_sysun
13733 eval $inhdr
13734
13735 : see if this is a syswait system
13736 set sys/wait.h i_syswait
13737 eval $inhdr
13738
13739 : see if this is a ustat.h system
13740 set ustat.h i_ustat
13741 eval $inhdr
13742
13743 : see if this is an utime system
13744 set utime.h i_utime
13745 eval $inhdr
13746
13747 : see if this is a values.h system
13748 set values.h i_values
13749 eval $inhdr
13750
13751 : see if this is a vfork system
13752 case "$d_vfork" in
13753 "$define")
13754         set vfork.h i_vfork
13755         eval $inhdr
13756         ;;
13757 *)
13758         i_vfork="$undef"
13759         ;;
13760 esac
13761
13762 : see if gdbm.h is available
13763 set gdbm.h t_gdbm
13764 eval $inhdr
13765 case "$t_gdbm" in
13766 $define)
13767         : see if gdbm_open exists
13768         set gdbm_open d_gdbm_open
13769         eval $inlibc
13770         case "$d_gdbm_open" in
13771         $undef)
13772                 t_gdbm="$undef"
13773                 echo "We won't be including <gdbm.h>"
13774                 ;;
13775         esac
13776         ;;
13777 esac
13778 val="$t_gdbm"
13779 set i_gdbm
13780 eval $setvar
13781
13782 echo " "
13783 echo "Looking for extensions..." >&4
13784 : If we are using the old config.sh, known_extensions may contain
13785 : old or inaccurate or duplicate values.
13786 known_extensions=''
13787 nonxs_extensions=''
13788 : We do not use find because it might not be available.
13789 : We do not just use MANIFEST because the user may have dropped
13790 : some additional extensions into the source tree and expect them
13791 : to be built.
13792
13793 : Function to recursively find available extensions, ignoring DynaLoader
13794 : NOTE: recursion limit of 10 to prevent runaway in case of symlink madness
13795 find_extensions='
13796     for xxx in *; do
13797        case "$xxx" in
13798            DynaLoader|dynaload) ;;
13799            *)
13800            if $test -f $xxx/$xxx.xs; then
13801                known_extensions="$known_extensions $1$xxx";
13802            elif $test -f $xxx/Makefile.PL; then
13803                nonxs_extensions="$nonxs_extensions $1$xxx";
13804            else
13805                if $test -d $xxx -a $# -lt 10; then
13806                    set $1$xxx/ $*;
13807                    cd $xxx;
13808                    eval $find_extensions;
13809                    cd ..;
13810                    shift;
13811                fi;
13812            fi
13813            ;;
13814        esac;
13815     done'
13816 tdir=`pwd`
13817 cd $rsrc/ext
13818 set X
13819 shift
13820 eval $find_extensions
13821 set X $nonxs_extensions
13822 shift
13823 nonxs_extensions="$*"
13824 set X $known_extensions
13825 shift
13826 known_extensions="$*"
13827 cd $tdir
13828
13829 : Now see which are supported on this system.
13830 avail_ext=''
13831 for xxx in $known_extensions ; do
13832         case "$xxx" in
13833         DB_File|db_file)
13834                 case "$i_db" in
13835                 $define) avail_ext="$avail_ext $xxx" ;;
13836                 esac
13837                 ;;
13838         GDBM_File|gdbm_fil)
13839                 case "$i_gdbm" in 
13840                 $define) avail_ext="$avail_ext $xxx" ;;
13841                 esac
13842                 ;;
13843         NDBM_File|ndbm_fil)
13844                 case "$i_ndbm" in
13845                 $define) avail_ext="$avail_ext $xxx" ;;
13846                 esac
13847                 ;;
13848         ODBM_File|odbm_fil) 
13849                 case "${i_dbm}${i_rpcsvcdbm}" in
13850                 *"${define}"*) avail_ext="$avail_ext $xxx" ;;
13851                 esac
13852                 ;;
13853         POSIX|posix)
13854                 case "$useposix" in
13855                 true|define|y) avail_ext="$avail_ext $xxx" ;;
13856                 esac
13857                 ;;
13858         Opcode|opcode)
13859                 case "$useopcode" in
13860                 true|define|y) avail_ext="$avail_ext $xxx" ;;
13861                 esac
13862                 ;;
13863         Socket|socket)
13864                 case "$d_socket" in 
13865                 true|$define|y) avail_ext="$avail_ext $xxx" ;;
13866                 esac
13867                 ;;
13868         Thread|thread)
13869                 case "$usethreads" in 
13870                 true|$define|y) avail_ext="$avail_ext $xxx" ;;
13871                 esac
13872                 ;;
13873         IPC/SysV|ipc/sysv)
13874                 : XXX Do we need a useipcsysv variable here
13875                 case "${d_msg}${d_sem}${d_shm}" in 
13876                 *"${define}"*) avail_ext="$avail_ext $xxx" ;;
13877                 esac
13878                 ;;
13879         *)      avail_ext="$avail_ext $xxx"
13880                 ;;
13881         esac
13882 done
13883
13884 set X $avail_ext
13885 shift
13886 avail_ext="$*"
13887
13888 : Now see which nonxs extensions are supported on this system.
13889 : For now assume all are.
13890 nonxs_ext=''
13891 for xxx in $nonxs_extensions ; do
13892         case "$xxx" in
13893         *)      nonxs_ext="$nonxs_ext $xxx"
13894                 ;;
13895         esac
13896 done
13897
13898 set X $nonxs_ext
13899 shift
13900 nonxs_ext="$*"
13901
13902 case $usedl in
13903 $define)
13904         $cat <<EOM
13905 A number of extensions are supplied with $package.  You may choose to
13906 compile these extensions for dynamic loading (the default), compile
13907 them into the $package executable (static loading), or not include
13908 them at all.  Answer "none" to include no extensions.
13909 Note that DynaLoader is always built and need not be mentioned here.
13910
13911 EOM
13912         case "$dynamic_ext" in
13913         '') dflt="$avail_ext" ;;
13914         *)      dflt="$dynamic_ext"
13915                 # Perhaps we are reusing an old out-of-date config.sh.
13916                 case "$hint" in
13917                 previous)
13918                         if test X"$dynamic_ext" != X"$avail_ext"; then
13919                                 $cat <<EOM
13920 NOTICE:  Your previous config.sh list may be incorrect. 
13921 The extensions now available to you are 
13922         ${avail_ext}
13923 but the default list from your previous config.sh is
13924         ${dynamic_ext} 
13925
13926 EOM
13927                         fi
13928                         ;;
13929                 esac
13930                 ;;
13931         esac
13932         case "$dflt" in
13933         '')     dflt=none;;
13934         esac
13935         rp="What extensions do you wish to load dynamically?"
13936         . ./myread
13937         case "$ans" in
13938         none) dynamic_ext=' ' ;;
13939         *) dynamic_ext="$ans" ;;
13940         esac
13941
13942         case "$static_ext" in
13943         '')
13944                 : Exclude those already listed in dynamic linking
13945                 dflt=''
13946                 for xxx in $avail_ext; do
13947                         case " $dynamic_ext " in
13948                         *" $xxx "*) ;;
13949                         *) dflt="$dflt $xxx" ;;
13950                         esac
13951                 done
13952                 set X $dflt
13953                 shift
13954                 dflt="$*"
13955                 ;;
13956         *)  dflt="$static_ext" 
13957                 ;;
13958         esac
13959
13960         case "$dflt" in
13961         '')     dflt=none;;
13962         esac
13963         rp="What extensions do you wish to load statically?"
13964         . ./myread
13965         case "$ans" in
13966         none) static_ext=' ' ;;
13967         *) static_ext="$ans" ;;
13968         esac
13969         ;;
13970 *)
13971         $cat <<EOM
13972 A number of extensions are supplied with $package.  Answer "none" 
13973 to include no extensions. 
13974 Note that DynaLoader is always built and need not be mentioned here.
13975
13976 EOM
13977         case "$static_ext" in
13978         '') dflt="$avail_ext" ;;
13979         *)      dflt="$static_ext"
13980                 # Perhaps we are reusing an old out-of-date config.sh.
13981                 case "$hint" in
13982                 previous)
13983                         if test X"$static_ext" != X"$avail_ext"; then
13984                                 $cat <<EOM
13985 NOTICE:  Your previous config.sh list may be incorrect. 
13986 The extensions now available to you are 
13987         ${avail_ext}
13988 but the default list from your previous config.sh is
13989         ${static_ext} 
13990
13991 EOM
13992                         fi
13993                         ;;
13994                 esac
13995                 ;;
13996         esac
13997         : Exclude those that are not xs extensions
13998         case "$dflt" in
13999         '')     dflt=none;;
14000         esac
14001         rp="What extensions do you wish to include?"
14002         . ./myread
14003         case "$ans" in
14004         none) static_ext=' ' ;;
14005         *) static_ext="$ans" ;;
14006         esac
14007         ;;
14008 esac
14009
14010 set X $dynamic_ext $static_ext $nonxs_ext
14011 shift
14012 extensions="$*"
14013
14014 : Remove build directory name from cppstdin so it can be used from
14015 : either the present location or the final installed location.
14016 echo " "
14017 : Get out of the UU directory to get correct path name.
14018 cd ..
14019 case "$cppstdin" in
14020 `pwd`/cppstdin)
14021         echo "Stripping down cppstdin path name"
14022         cppstdin=cppstdin
14023         ;;
14024 esac
14025 cd UU
14026
14027 : end of configuration questions
14028 echo " "
14029 echo "End of configuration questions."
14030 echo " "
14031
14032 : back to where it started
14033 if test -d ../UU; then
14034         cd ..
14035 fi
14036
14037 : configuration may be patched via a 'config.over' file
14038 if $test -f config.over; then
14039         echo " "
14040         dflt=y
14041         rp='I see a config.over file.  Do you wish to load it?'
14042         . UU/myread
14043         case "$ans" in
14044         n*) echo "OK, I'll ignore it.";;
14045         *)      . ./config.over
14046                 echo "Configuration override changes have been loaded."
14047                 ;;
14048         esac
14049 fi
14050
14051 : in case they want portability, strip down executable paths
14052 case "$d_portable" in
14053 "$define")
14054         echo " "
14055         echo "Stripping down executable paths..." >&4
14056         for file in $loclist $trylist; do
14057                 eval temp=\$$file
14058                 eval $file=`basename $temp`
14059         done
14060         ;;
14061 esac
14062
14063 : create config.sh file
14064 echo " "
14065 echo "Creating config.sh..." >&4
14066 $spitshell <<EOT >config.sh
14067 $startsh
14068 #
14069 # This file was produced by running the Configure script. It holds all the
14070 # definitions figured out by Configure. Should you modify one of these values,
14071 # do not forget to propagate your changes by running "Configure -der". You may
14072 # instead choose to run each of the .SH files by yourself, or "Configure -S".
14073 #
14074
14075 # Package name      : $package
14076 # Source directory  : $src
14077 # Configuration time: $cf_time
14078 # Configured by     : $cf_by
14079 # Target system     : $myuname
14080
14081 Author='$Author'
14082 Date='$Date'
14083 Header='$Header'
14084 Id='$Id'
14085 Locker='$Locker'
14086 Log='$Log'
14087 Mcc='$Mcc'
14088 RCSfile='$RCSfile'
14089 Revision='$Revision'
14090 Source='$Source'
14091 State='$State'
14092 _a='$_a'
14093 _exe='$_exe'
14094 _o='$_o'
14095 afs='$afs'
14096 alignbytes='$alignbytes'
14097 ansi2knr='$ansi2knr'
14098 aphostname='$aphostname'
14099 apiversion='$apiversion'
14100 ar='$ar'
14101 archlib='$archlib'
14102 archlibexp='$archlibexp'
14103 archname64='$archname64'
14104 archname='$archname'
14105 archobjs='$archobjs'
14106 awk='$awk'
14107 baserev='$baserev'
14108 bash='$bash'
14109 bin='$bin'
14110 bincompat5005='$bincompat5005'
14111 binexp='$binexp'
14112 bison='$bison'
14113 byacc='$byacc'
14114 byteorder='$byteorder'
14115 c='$c'
14116 castflags='$castflags'
14117 cat='$cat'
14118 cc='$cc'
14119 cccdlflags='$cccdlflags'
14120 ccdlflags='$ccdlflags'
14121 ccflags='$ccflags'
14122 ccsymbols='$ccsymbols'
14123 cf_by='$cf_by'
14124 cf_email='$cf_email'
14125 cf_time='$cf_time'
14126 charsize='$charsize'
14127 chgrp='$chgrp'
14128 chmod='$chmod'
14129 chown='$chown'
14130 clocktype='$clocktype'
14131 comm='$comm'
14132 compress='$compress'
14133 contains='$contains'
14134 cp='$cp'
14135 cpio='$cpio'
14136 cpp='$cpp'
14137 cpp_stuff='$cpp_stuff'
14138 cppccsymbols='$cppccsymbols'
14139 cppflags='$cppflags'
14140 cpplast='$cpplast'
14141 cppminus='$cppminus'
14142 cpprun='$cpprun'
14143 cppstdin='$cppstdin'
14144 cppsymbols='$cppsymbols'
14145 crosscompile='$crosscompile'
14146 cryptlib='$cryptlib'
14147 csh='$csh'
14148 d_Gconvert='$d_Gconvert'
14149 d_PRIEldbl='$d_PRIEldbl'
14150 d_PRIFldbl='$d_PRIFldbl'
14151 d_PRIGldbl='$d_PRIGldbl'
14152 d_PRIX64='$d_PRIX64'
14153 d_PRId64='$d_PRId64'
14154 d_PRIeldbl='$d_PRIeldbl'
14155 d_PRIfldbl='$d_PRIfldbl'
14156 d_PRIgldbl='$d_PRIgldbl'
14157 d_PRIi64='$d_PRIi64'
14158 d_PRIo64='$d_PRIo64'
14159 d_PRIu64='$d_PRIu64'
14160 d_PRIx64='$d_PRIx64'
14161 d_access='$d_access'
14162 d_accessx='$d_accessx'
14163 d_alarm='$d_alarm'
14164 d_archlib='$d_archlib'
14165 d_atolf='$d_atolf'
14166 d_atoll='$d_atoll'
14167 d_attribut='$d_attribut'
14168 d_bcmp='$d_bcmp'
14169 d_bcopy='$d_bcopy'
14170 d_bincompat5005='$d_bincompat5005'
14171 d_bsd='$d_bsd'
14172 d_bsdgetpgrp='$d_bsdgetpgrp'
14173 d_bsdsetpgrp='$d_bsdsetpgrp'
14174 d_bzero='$d_bzero'
14175 d_casti32='$d_casti32'
14176 d_castneg='$d_castneg'
14177 d_charvspr='$d_charvspr'
14178 d_chown='$d_chown'
14179 d_chroot='$d_chroot'
14180 d_chsize='$d_chsize'
14181 d_closedir='$d_closedir'
14182 d_const='$d_const'
14183 d_crypt='$d_crypt'
14184 d_csh='$d_csh'
14185 d_cuserid='$d_cuserid'
14186 d_dbl_dig='$d_dbl_dig'
14187 d_difftime='$d_difftime'
14188 d_dirnamlen='$d_dirnamlen'
14189 d_dlerror='$d_dlerror'
14190 d_dlopen='$d_dlopen'
14191 d_dlsymun='$d_dlsymun'
14192 d_dosuid='$d_dosuid'
14193 d_drand48proto='$d_drand48proto'
14194 d_dup2='$d_dup2'
14195 d_eaccess='$d_eaccess'
14196 d_endgrent='$d_endgrent'
14197 d_endhent='$d_endhent'
14198 d_endnent='$d_endnent'
14199 d_endpent='$d_endpent'
14200 d_endpwent='$d_endpwent'
14201 d_endsent='$d_endsent'
14202 d_endspent='$d_endspent'
14203 d_eofnblk='$d_eofnblk'
14204 d_eunice='$d_eunice'
14205 d_fchmod='$d_fchmod'
14206 d_fchown='$d_fchown'
14207 d_fcntl='$d_fcntl'
14208 d_fd_macros='$d_fd_macros'
14209 d_fd_set='$d_fd_set'
14210 d_fds_bits='$d_fds_bits'
14211 d_fgetpos='$d_fgetpos'
14212 d_flexfnam='$d_flexfnam'
14213 d_flock='$d_flock'
14214 d_fork='$d_fork'
14215 d_fpathconf='$d_fpathconf'
14216 d_fpos64_t='$d_fpos64_t'
14217 d_fs_data_s='$d_fs_data_s'
14218 d_fseeko='$d_fseeko'
14219 d_fsetpos='$d_fsetpos'
14220 d_fstatfs='$d_fstatfs'
14221 d_fstatvfs='$d_fstatvfs'
14222 d_ftello='$d_ftello'
14223 d_ftime='$d_ftime'
14224 d_getgrent='$d_getgrent'
14225 d_getgrps='$d_getgrps'
14226 d_gethbyaddr='$d_gethbyaddr'
14227 d_gethbyname='$d_gethbyname'
14228 d_gethent='$d_gethent'
14229 d_gethname='$d_gethname'
14230 d_gethostprotos='$d_gethostprotos'
14231 d_getlogin='$d_getlogin'
14232 d_getmnt='$d_getmnt'
14233 d_getmntent='$d_getmntent'
14234 d_getnbyaddr='$d_getnbyaddr'
14235 d_getnbyname='$d_getnbyname'
14236 d_getnent='$d_getnent'
14237 d_getnetprotos='$d_getnetprotos'
14238 d_getpbyname='$d_getpbyname'
14239 d_getpbynumber='$d_getpbynumber'
14240 d_getpent='$d_getpent'
14241 d_getpgid='$d_getpgid'
14242 d_getpgrp2='$d_getpgrp2'
14243 d_getpgrp='$d_getpgrp'
14244 d_getppid='$d_getppid'
14245 d_getprior='$d_getprior'
14246 d_getprotoprotos='$d_getprotoprotos'
14247 d_getpwent='$d_getpwent'
14248 d_getsbyname='$d_getsbyname'
14249 d_getsbyport='$d_getsbyport'
14250 d_getsent='$d_getsent'
14251 d_getservprotos='$d_getservprotos'
14252 d_getspent='$d_getspent'
14253 d_getspnam='$d_getspnam'
14254 d_gettimeod='$d_gettimeod'
14255 d_gnulibc='$d_gnulibc'
14256 d_grpasswd='$d_grpasswd'
14257 d_hasmntopt='$d_hasmntopt'
14258 d_htonl='$d_htonl'
14259 d_index='$d_index'
14260 d_inetaton='$d_inetaton'
14261 d_int64t='$d_int64t'
14262 d_isascii='$d_isascii'
14263 d_killpg='$d_killpg'
14264 d_lchown='$d_lchown'
14265 d_ldbl_dig='$d_ldbl_dig'
14266 d_link='$d_link'
14267 d_locconv='$d_locconv'
14268 d_lockf='$d_lockf'
14269 d_longdbl='$d_longdbl'
14270 d_longlong='$d_longlong'
14271 d_lstat='$d_lstat'
14272 d_mblen='$d_mblen'
14273 d_mbstowcs='$d_mbstowcs'
14274 d_mbtowc='$d_mbtowc'
14275 d_memchr='$d_memchr'
14276 d_memcmp='$d_memcmp'
14277 d_memcpy='$d_memcpy'
14278 d_memmove='$d_memmove'
14279 d_memset='$d_memset'
14280 d_mkdir='$d_mkdir'
14281 d_mkfifo='$d_mkfifo'
14282 d_mktime='$d_mktime'
14283 d_msg='$d_msg'
14284 d_msg_ctrunc='$d_msg_ctrunc'
14285 d_msg_dontroute='$d_msg_dontroute'
14286 d_msg_oob='$d_msg_oob'
14287 d_msg_peek='$d_msg_peek'
14288 d_msg_proxy='$d_msg_proxy'
14289 d_msgctl='$d_msgctl'
14290 d_msgget='$d_msgget'
14291 d_msgrcv='$d_msgrcv'
14292 d_msgsnd='$d_msgsnd'
14293 d_mymalloc='$d_mymalloc'
14294 d_nice='$d_nice'
14295 d_off64_t='$d_off64_t'
14296 d_old_pthread_create_joinable='$d_old_pthread_create_joinable'
14297 d_oldpthreads='$d_oldpthreads'
14298 d_oldsock='$d_oldsock'
14299 d_open3='$d_open3'
14300 d_pathconf='$d_pathconf'
14301 d_pause='$d_pause'
14302 d_phostname='$d_phostname'
14303 d_pipe='$d_pipe'
14304 d_poll='$d_poll'
14305 d_portable='$d_portable'
14306 d_pthread_yield='$d_pthread_yield'
14307 d_pwage='$d_pwage'
14308 d_pwchange='$d_pwchange'
14309 d_pwclass='$d_pwclass'
14310 d_pwcomment='$d_pwcomment'
14311 d_pwexpire='$d_pwexpire'
14312 d_pwgecos='$d_pwgecos'
14313 d_pwpasswd='$d_pwpasswd'
14314 d_pwquota='$d_pwquota'
14315 d_quad='$d_quad'
14316 d_readdir='$d_readdir'
14317 d_readlink='$d_readlink'
14318 d_rename='$d_rename'
14319 d_rewinddir='$d_rewinddir'
14320 d_rmdir='$d_rmdir'
14321 d_safebcpy='$d_safebcpy'
14322 d_safemcpy='$d_safemcpy'
14323 d_sanemcmp='$d_sanemcmp'
14324 d_sched_yield='$d_sched_yield'
14325 d_scm_rights='$d_scm_rights'
14326 d_seekdir='$d_seekdir'
14327 d_select='$d_select'
14328 d_sem='$d_sem'
14329 d_semctl='$d_semctl'
14330 d_semctl_semid_ds='$d_semctl_semid_ds'
14331 d_semctl_semun='$d_semctl_semun'
14332 d_semget='$d_semget'
14333 d_semop='$d_semop'
14334 d_setegid='$d_setegid'
14335 d_seteuid='$d_seteuid'
14336 d_setgrent='$d_setgrent'
14337 d_setgrps='$d_setgrps'
14338 d_sethent='$d_sethent'
14339 d_setlinebuf='$d_setlinebuf'
14340 d_setlocale='$d_setlocale'
14341 d_setnent='$d_setnent'
14342 d_setpent='$d_setpent'
14343 d_setpgid='$d_setpgid'
14344 d_setpgrp2='$d_setpgrp2'
14345 d_setpgrp='$d_setpgrp'
14346 d_setprior='$d_setprior'
14347 d_setpwent='$d_setpwent'
14348 d_setregid='$d_setregid'
14349 d_setresgid='$d_setresgid'
14350 d_setresuid='$d_setresuid'
14351 d_setreuid='$d_setreuid'
14352 d_setrgid='$d_setrgid'
14353 d_setruid='$d_setruid'
14354 d_setsent='$d_setsent'
14355 d_setsid='$d_setsid'
14356 d_setspent='$d_setspent'
14357 d_setvbuf='$d_setvbuf'
14358 d_sfio='$d_sfio'
14359 d_shm='$d_shm'
14360 d_shmat='$d_shmat'
14361 d_shmatprototype='$d_shmatprototype'
14362 d_shmctl='$d_shmctl'
14363 d_shmdt='$d_shmdt'
14364 d_shmget='$d_shmget'
14365 d_sigaction='$d_sigaction'
14366 d_sigsetjmp='$d_sigsetjmp'
14367 d_socket='$d_socket'
14368 d_sockpair='$d_sockpair'
14369 d_sqrtl='$d_sqrtl'
14370 d_statblks='$d_statblks'
14371 d_statfs_f_flags='$d_statfs_f_flags'
14372 d_statfs_s='$d_statfs_s'
14373 d_statvfs='$d_statvfs'
14374 d_stdio_cnt_lval='$d_stdio_cnt_lval'
14375 d_stdio_ptr_lval='$d_stdio_ptr_lval'
14376 d_stdio_stream_array='$d_stdio_stream_array'
14377 d_stdiobase='$d_stdiobase'
14378 d_stdstdio='$d_stdstdio'
14379 d_strchr='$d_strchr'
14380 d_strcoll='$d_strcoll'
14381 d_strctcpy='$d_strctcpy'
14382 d_strerrm='$d_strerrm'
14383 d_strerror='$d_strerror'
14384 d_strtod='$d_strtod'
14385 d_strtol='$d_strtol'
14386 d_strtoul='$d_strtoul'
14387 d_strtoull='$d_strtoull'
14388 d_strxfrm='$d_strxfrm'
14389 d_suidsafe='$d_suidsafe'
14390 d_symlink='$d_symlink'
14391 d_syscall='$d_syscall'
14392 d_sysconf='$d_sysconf'
14393 d_sysernlst='$d_sysernlst'
14394 d_syserrlst='$d_syserrlst'
14395 d_system='$d_system'
14396 d_tcgetpgrp='$d_tcgetpgrp'
14397 d_tcsetpgrp='$d_tcsetpgrp'
14398 d_telldir='$d_telldir'
14399 d_telldirproto='$d_telldirproto'
14400 d_time='$d_time'
14401 d_times='$d_times'
14402 d_truncate='$d_truncate'
14403 d_tzname='$d_tzname'
14404 d_umask='$d_umask'
14405 d_uname='$d_uname'
14406 d_union_semun='$d_union_semun'
14407 d_ustat='$d_ustat'
14408 d_vendorbin='$d_vendorbin'
14409 d_vendorlib='$d_vendorlib'
14410 d_vfork='$d_vfork'
14411 d_void_closedir='$d_void_closedir'
14412 d_voidsig='$d_voidsig'
14413 d_voidtty='$d_voidtty'
14414 d_volatile='$d_volatile'
14415 d_vprintf='$d_vprintf'
14416 d_wait4='$d_wait4'
14417 d_waitpid='$d_waitpid'
14418 d_wcstombs='$d_wcstombs'
14419 d_wctomb='$d_wctomb'
14420 d_xenix='$d_xenix'
14421 date='$date'
14422 db_hashtype='$db_hashtype'
14423 db_prefixtype='$db_prefixtype'
14424 defvoidused='$defvoidused'
14425 direntrytype='$direntrytype'
14426 dlext='$dlext'
14427 dlsrc='$dlsrc'
14428 doublesize='$doublesize'
14429 drand01='$drand01'
14430 dynamic_ext='$dynamic_ext'
14431 eagain='$eagain'
14432 ebcdic='$ebcdic'
14433 echo='$echo'
14434 egrep='$egrep'
14435 emacs='$emacs'
14436 eunicefix='$eunicefix'
14437 exe_ext='$exe_ext'
14438 expr='$expr'
14439 extensions='$extensions'
14440 fflushNULL='$fflushNULL'
14441 fflushall='$fflushall'
14442 find='$find'
14443 firstmakefile='$firstmakefile'
14444 flex='$flex'
14445 fpossize='$fpossize'
14446 fpostype='$fpostype'
14447 freetype='$freetype'
14448 full_ar='$full_ar'
14449 full_csh='$full_csh'
14450 full_sed='$full_sed'
14451 gccversion='$gccversion'
14452 gidformat='$gidformat'
14453 gidsign='$gidsign'
14454 gidsize='$gidsize'
14455 gidtype='$gidtype'
14456 glibpth='$glibpth'
14457 grep='$grep'
14458 groupcat='$groupcat'
14459 groupstype='$groupstype'
14460 gzip='$gzip'
14461 h_fcntl='$h_fcntl'
14462 h_sysfile='$h_sysfile'
14463 hint='$hint'
14464 hostcat='$hostcat'
14465 huge='$huge'
14466 i16size='$i16size'
14467 i16type='$i16type'
14468 i32size='$i32size'
14469 i32type='$i32type'
14470 i64size='$i64size'
14471 i64type='$i64type'
14472 i8size='$i8size'
14473 i8type='$i8type'
14474 i_arpainet='$i_arpainet'
14475 i_bsdioctl='$i_bsdioctl'
14476 i_db='$i_db'
14477 i_dbm='$i_dbm'
14478 i_dirent='$i_dirent'
14479 i_dld='$i_dld'
14480 i_dlfcn='$i_dlfcn'
14481 i_fcntl='$i_fcntl'
14482 i_float='$i_float'
14483 i_gdbm='$i_gdbm'
14484 i_grp='$i_grp'
14485 i_inttypes='$i_inttypes'
14486 i_limits='$i_limits'
14487 i_locale='$i_locale'
14488 i_machcthr='$i_machcthr'
14489 i_malloc='$i_malloc'
14490 i_math='$i_math'
14491 i_memory='$i_memory'
14492 i_mntent='$i_mntent'
14493 i_ndbm='$i_ndbm'
14494 i_netdb='$i_netdb'
14495 i_neterrno='$i_neterrno'
14496 i_netinettcp='$i_netinettcp'
14497 i_niin='$i_niin'
14498 i_poll='$i_poll'
14499 i_pthread='$i_pthread'
14500 i_pwd='$i_pwd'
14501 i_rpcsvcdbm='$i_rpcsvcdbm'
14502 i_sfio='$i_sfio'
14503 i_sgtty='$i_sgtty'
14504 i_shadow='$i_shadow'
14505 i_socks='$i_socks'
14506 i_stdarg='$i_stdarg'
14507 i_stddef='$i_stddef'
14508 i_stdlib='$i_stdlib'
14509 i_string='$i_string'
14510 i_sysaccess='$i_sysaccess'
14511 i_sysdir='$i_sysdir'
14512 i_sysfile='$i_sysfile'
14513 i_sysfilio='$i_sysfilio'
14514 i_sysin='$i_sysin'
14515 i_sysioctl='$i_sysioctl'
14516 i_sysmount='$i_sysmount'
14517 i_sysndir='$i_sysndir'
14518 i_sysparam='$i_sysparam'
14519 i_sysresrc='$i_sysresrc'
14520 i_syssecrt='$i_syssecrt'
14521 i_sysselct='$i_sysselct'
14522 i_syssockio='$i_syssockio'
14523 i_sysstat='$i_sysstat'
14524 i_sysstatfs='$i_sysstatfs'
14525 i_sysstatvfs='$i_sysstatvfs'
14526 i_systime='$i_systime'
14527 i_systimek='$i_systimek'
14528 i_systimes='$i_systimes'
14529 i_systypes='$i_systypes'
14530 i_sysuio='$i_sysuio'
14531 i_sysun='$i_sysun'
14532 i_sysvfs='$i_sysvfs'
14533 i_syswait='$i_syswait'
14534 i_termio='$i_termio'
14535 i_termios='$i_termios'
14536 i_time='$i_time'
14537 i_unistd='$i_unistd'
14538 i_ustat='$i_ustat'
14539 i_utime='$i_utime'
14540 i_values='$i_values'
14541 i_varargs='$i_varargs'
14542 i_varhdr='$i_varhdr'
14543 i_vfork='$i_vfork'
14544 ignore_versioned_solibs='$ignore_versioned_solibs'
14545 incpath='$incpath'
14546 inews='$inews'
14547 installarchlib='$installarchlib'
14548 installbin='$installbin'
14549 installman1dir='$installman1dir'
14550 installman3dir='$installman3dir'
14551 installprefix='$installprefix'
14552 installprefixexp='$installprefixexp'
14553 installprivlib='$installprivlib'
14554 installscript='$installscript'
14555 installsitearch='$installsitearch'
14556 installsitebin='$installsitebin'
14557 installsitelib='$installsitelib'
14558 installstyle='$installstyle'
14559 installusrbinperl='$installusrbinperl'
14560 installvendorbin='$installvendorbin'
14561 installvendorlib='$installvendorlib'
14562 intsize='$intsize'
14563 ivdformat='$ivdformat'
14564 ivsize='$ivsize'
14565 ivtype='$ivtype'
14566 known_extensions='$known_extensions'
14567 ksh='$ksh'
14568 large='$large'
14569 ld='$ld'
14570 lddlflags='$lddlflags'
14571 ldflags='$ldflags'
14572 ldlibpthname='$ldlibpthname'
14573 less='$less'
14574 lib_ext='$lib_ext'
14575 libc='$libc'
14576 libperl='$libperl'
14577 libpth='$libpth'
14578 libs='$libs'
14579 libswanted='$libswanted'
14580 line='$line'
14581 lint='$lint'
14582 lkflags='$lkflags'
14583 ln='$ln'
14584 lns='$lns'
14585 locincpth='$locincpth'
14586 loclibpth='$loclibpth'
14587 longdblsize='$longdblsize'
14588 longlongsize='$longlongsize'
14589 longsize='$longsize'
14590 lp='$lp'
14591 lpr='$lpr'
14592 ls='$ls'
14593 lseeksize='$lseeksize'
14594 lseektype='$lseektype'
14595 mail='$mail'
14596 mailx='$mailx'
14597 make='$make'
14598 make_set_make='$make_set_make'
14599 mallocobj='$mallocobj'
14600 mallocsrc='$mallocsrc'
14601 malloctype='$malloctype'
14602 man1dir='$man1dir'
14603 man1direxp='$man1direxp'
14604 man1ext='$man1ext'
14605 man3dir='$man3dir'
14606 man3direxp='$man3direxp'
14607 man3ext='$man3ext'
14608 medium='$medium'
14609 mips_type='$mips_type'
14610 mkdir='$mkdir'
14611 models='$models'
14612 modetype='$modetype'
14613 more='$more'
14614 multiarch='$multiarch'
14615 mv='$mv'
14616 myarchname='$myarchname'
14617 mydomain='$mydomain'
14618 myhostname='$myhostname'
14619 myuname='$myuname'
14620 n='$n'
14621 netdb_hlen_type='$netdb_hlen_type'
14622 netdb_host_type='$netdb_host_type'
14623 netdb_name_type='$netdb_name_type'
14624 netdb_net_type='$netdb_net_type'
14625 nm='$nm'
14626 nm_opt='$nm_opt'
14627 nm_so_opt='$nm_so_opt'
14628 nonxs_ext='$nonxs_ext'
14629 nroff='$nroff'
14630 nvsize='$nvsize'
14631 nvtype='$nvtype'
14632 o_nonblock='$o_nonblock'
14633 obj_ext='$obj_ext'
14634 old_pthread_create_joinable='$old_pthread_create_joinable'
14635 optimize='$optimize'
14636 orderlib='$orderlib'
14637 osname='$osname'
14638 osvers='$osvers'
14639 package='$package'
14640 pager='$pager'
14641 passcat='$passcat'
14642 patchlevel='$patchlevel'
14643 path_sep='$path_sep'
14644 perl='$perl'
14645 perladmin='$perladmin'
14646 perlpath='$perlpath'
14647 pg='$pg'
14648 phostname='$phostname'
14649 pidtype='$pidtype'
14650 plibpth='$plibpth'
14651 pm_apiversion='$pm_apiversion'
14652 pmake='$pmake'
14653 pr='$pr'
14654 prefix='$prefix'
14655 prefixexp='$prefixexp'
14656 privlib='$privlib'
14657 privlibexp='$privlibexp'
14658 prototype='$prototype'
14659 ptrsize='$ptrsize'
14660 quadkind='$quadkind'
14661 quadtype='$quadtype'
14662 randbits='$randbits'
14663 randfunc='$randfunc'
14664 randseedtype='$randseedtype'
14665 ranlib='$ranlib'
14666 rd_nodata='$rd_nodata'
14667 rm='$rm'
14668 rmail='$rmail'
14669 runnm='$runnm'
14670 sPRIEldbl='$sPRIEldbl'
14671 sPRIFldbl='$sPRIFldbl'
14672 sPRIGldbl='$sPRIGldbl'
14673 sPRIX64='$sPRIX64'
14674 sPRId64='$sPRId64'
14675 sPRIeldbl='$sPRIeldbl'
14676 sPRIfldbl='$sPRIfldbl'
14677 sPRIgldbl='$sPRIgldbl'
14678 sPRIi64='$sPRIi64'
14679 sPRIo64='$sPRIo64'
14680 sPRIu64='$sPRIu64'
14681 sPRIx64='$sPRIx64'
14682 sched_yield='$sched_yield'
14683 scriptdir='$scriptdir'
14684 scriptdirexp='$scriptdirexp'
14685 sed='$sed'
14686 seedfunc='$seedfunc'
14687 selectminbits='$selectminbits'
14688 selecttype='$selecttype'
14689 sendmail='$sendmail'
14690 sh='$sh'
14691 shar='$shar'
14692 sharpbang='$sharpbang'
14693 shmattype='$shmattype'
14694 shortsize='$shortsize'
14695 shrpenv='$shrpenv'
14696 shsharp='$shsharp'
14697 sig_count='$sig_count'
14698 sig_name='$sig_name'
14699 sig_name_init='$sig_name_init'
14700 sig_num='$sig_num'
14701 sig_num_init='$sig_num_init'
14702 signal_t='$signal_t'
14703 sitearch='$sitearch'
14704 sitearchexp='$sitearchexp'
14705 sitebin='$sitebin'
14706 sitebinexp='$sitebinexp'
14707 sitelib='$sitelib'
14708 sitelibexp='$sitelibexp'
14709 siteprefix='$siteprefix'
14710 siteprefixexp='$siteprefixexp'
14711 sizesize='$sizesize'
14712 sizetype='$sizetype'
14713 sleep='$sleep'
14714 smail='$smail'
14715 small='$small'
14716 so='$so'
14717 sockethdr='$sockethdr'
14718 socketlib='$socketlib'
14719 sort='$sort'
14720 spackage='$spackage'
14721 spitshell='$spitshell'
14722 split='$split'
14723 src='$src'
14724 ssizetype='$ssizetype'
14725 startperl='$startperl'
14726 startsh='$startsh'
14727 static_ext='$static_ext'
14728 stdchar='$stdchar'
14729 stdio_base='$stdio_base'
14730 stdio_bufsiz='$stdio_bufsiz'
14731 stdio_cnt='$stdio_cnt'
14732 stdio_filbuf='$stdio_filbuf'
14733 stdio_ptr='$stdio_ptr'
14734 stdio_stream_array='$stdio_stream_array'
14735 strings='$strings'
14736 submit='$submit'
14737 subversion='$subversion'
14738 sysman='$sysman'
14739 tail='$tail'
14740 tar='$tar'
14741 tbl='$tbl'
14742 tee='$tee'
14743 test='$test'
14744 timeincl='$timeincl'
14745 timetype='$timetype'
14746 touch='$touch'
14747 tr='$tr'
14748 trnl='$trnl'
14749 troff='$troff'
14750 u16size='$u16size'
14751 u16type='$u16type'
14752 u32size='$u32size'
14753 u32type='$u32type'
14754 u64size='$u64size'
14755 u64type='$u64type'
14756 u8size='$u8size'
14757 u8type='$u8type'
14758 uidformat='$uidformat'
14759 uidsign='$uidsign'
14760 uidsize='$uidsize'
14761 uidtype='$uidtype'
14762 uname='$uname'
14763 uniq='$uniq'
14764 uquadtype='$uquadtype'
14765 use64bits='$use64bits'
14766 usedl='$usedl'
14767 uselargefiles='$uselargefiles'
14768 uselongdouble='$uselongdouble'
14769 uselonglong='$uselonglong'
14770 usemorebits='$usemorebits'
14771 usemultiplicity='$usemultiplicity'
14772 usemymalloc='$usemymalloc'
14773 usenm='$usenm'
14774 useopcode='$useopcode'
14775 useperlio='$useperlio'
14776 useposix='$useposix'
14777 usesfio='$usesfio'
14778 useshrplib='$useshrplib'
14779 usesocks='$usesocks'
14780 usethreads='$usethreads'
14781 usevendorprefix='$usevendorprefix'
14782 usevfork='$usevfork'
14783 usrinc='$usrinc'
14784 uuname='$uuname'
14785 uvoformat='$uvoformat'
14786 uvsize='$uvsize'
14787 uvtype='$uvtype'
14788 uvuformat='$uvuformat'
14789 uvxformat='$uvxformat'
14790 vendorbin='$vendorbin'
14791 vendorbinexp='$vendorbinexp'
14792 vendorlib='$vendorlib'
14793 vendorlibexp='$vendorlibexp'
14794 vendorprefix='$vendorprefix'
14795 vendorprefixexp='$vendorprefixexp'
14796 version='$version'
14797 vi='$vi'
14798 voidflags='$voidflags'
14799 xlibpth='$xlibpth'
14800 xs_apiversion='$xs_apiversion'
14801 zcat='$zcat'
14802 zip='$zip'
14803 EOT
14804
14805 : Add in command line options if available
14806 $test -f UU/cmdline.opt && $cat UU/cmdline.opt >> config.sh
14807
14808 : add special variables
14809 $test -f $src/patchlevel.h && \
14810 awk '/^#define[         ]+PERL_/ {printf "%s=%s\n",$2,$3}' $src/patchlevel.h >>config.sh
14811 echo "CONFIGDOTSH=true" >>config.sh
14812
14813 : propagate old symbols
14814 if $test -f UU/config.sh; then
14815         <UU/config.sh sort | uniq >UU/oldconfig.sh
14816         sed -n 's/^\([a-zA-Z_0-9]*\)=.*/\1/p' config.sh config.sh UU/oldconfig.sh |\
14817         sort | uniq -u >UU/oldsyms
14818         set X `cat UU/oldsyms`
14819         shift
14820         case $# in
14821         0) ;;
14822         *)
14823                 cat <<EOM
14824 Hmm...You had some extra variables I don't know about...I'll try to keep 'em...
14825 EOM
14826                 echo "# Variables propagated from previous config.sh file." >>config.sh
14827                 for sym in `cat UU/oldsyms`; do
14828                         echo "    Propagating $hint variable "'$'"$sym..."
14829                         eval 'tmp="$'"${sym}"'"'
14830                         echo "$tmp" | \
14831                                 sed -e "s/'/'\"'\"'/g" -e "s/^/$sym='/" -e "s/$/'/" >>config.sh
14832                 done
14833                 ;;
14834         esac
14835 fi
14836
14837 : Finish up by extracting the .SH files
14838 case "$alldone" in
14839 exit)
14840         $rm -rf UU
14841         echo "Done."
14842         exit 0
14843         ;;
14844 cont)
14845         ;;
14846 '')
14847         dflt=''
14848         nostick=true
14849         $cat <<EOM
14850
14851 If you'd like to make any changes to the config.sh file before I begin
14852 to configure things, do it as a shell escape now (e.g. !vi config.sh).
14853
14854 EOM
14855         rp="Press return or use a shell escape to edit config.sh:"
14856         . UU/myread
14857         nostick=''
14858         case "$ans" in
14859         '') ;;
14860         *) : in case they cannot read
14861                 sh 1>&4 -c "$ans";;
14862         esac
14863         ;;
14864 esac
14865
14866 : if this fails, just run all the .SH files by hand
14867 . ./config.sh
14868
14869 echo " "
14870 exec 1>&4
14871 . ./UU/extract
14872
14873 if $contains '^depend:' [Mm]akefile >/dev/null 2>&1; then
14874         dflt=y
14875         case "$silent" in
14876         true) ;;
14877         *)
14878                 $cat <<EOM
14879
14880 Now you need to generate make dependencies by running "$make depend".
14881 You might prefer to run it in background: "$make depend > makedepend.out &"
14882 It can take a while, so you might not want to run it right now.
14883
14884 EOM
14885                 ;;
14886         esac
14887         rp="Run $make depend now?"
14888         . UU/myread
14889         case "$ans" in
14890         y*)
14891                 $make depend && echo "Now you must run a $make."
14892                 ;;
14893         *)
14894                 echo "You must run '$make depend' then '$make'."
14895                 ;;
14896         esac
14897 elif test -f [Mm]akefile; then
14898         echo " "
14899         echo "Now you must run a $make."
14900 else
14901         echo "Done."
14902 fi
14903
14904 if $test -f Policy.sh; then
14905     $cat <<EOM
14906
14907 If you compile $package on a different machine or from a different object
14908 directory, copy the Policy.sh file from this object directory to the
14909 new one before you run Configure -- this will help you with most of
14910 the policy defaults.
14911
14912 EOM
14913 fi
14914 if $test -f config.msg; then
14915     echo "Hmm.  I also noted the following information while running:"
14916     echo " "
14917     $cat config.msg >&4
14918     $rm -f config.msg
14919 fi
14920 $rm -f kit*isdone ark*isdone
14921 $rm -rf UU
14922
14923 : End of Configure
14924