megalomaniac 64-bit update: most importantly,
[p5sagit/p5-mst-13.2.git] / Configure
1 #! /bin/sh
2 #
3 # If these # comments don't work, trim them. Don't worry about any other
4 # shell scripts, Configure will trim # comments from them for you.
5 #
6 # (If you are trying to port this package to a machine without sh,
7 # I would suggest you have a look at the prototypical config_h.SH file
8 # and edit it to reflect your system. Some packages may include samples
9 # of config.h for certain machines, so you might look for one of those.)
10 #
11 # Yes, you may rip this off to use in other distribution packages. This
12 # script belongs to the public domain and cannot be copyrighted.
13 #
14 # (Note: this Configure script was generated automatically. Rather than
15 # working with this copy of Configure, you may wish to get metaconfig.
16 # The dist-3.0 package (which contains metaconfig) was posted in
17 # comp.sources.misc and is available on CPAN under authors/id/RAM so
18 # you may fetch it yourself from your nearest archive site.)
19 #
20
21 # $Id: Head.U,v 3.0.1.9 1997/02/28 15:02:09 ram Exp $
22 #
23 # Generated on Sat Feb 12 03:16:21 EET 2000 [metaconfig 3.0 PL70]
24 # (with additional metaconfig patches by perlbug@perl.com)
25
26 cat >/tmp/c1$$ <<EOF
27 ARGGGHHHH!!!!!
28
29 SCO csh still thinks true is false.  Write to SCO today and tell them that next
30 year Configure ought to "rm /bin/csh" unless they fix their blasted shell. :-)
31
32 (Actually, Configure ought to just patch csh in place.  Hmm.  Hmmmmm.  All
33 we'd have to do is go in and swap the && and || tokens, wherever they are.)
34
35 [End of diatribe. We now return you to your regularly scheduled programming...]
36 EOF
37 cat >/tmp/c2$$ <<EOF
38
39 OOPS!  You naughty creature!  You didn't run Configure with sh!
40 I will attempt to remedy the situation by running sh for you...
41 EOF
42
43 true || cat /tmp/c1$$ /tmp/c2$$
44 true || exec sh $0 $argv:q
45
46 (exit $?0) || cat /tmp/c2$$
47 (exit $?0) || exec sh $0 $argv:q
48 rm -f /tmp/c1$$ /tmp/c2$$
49
50 : compute my invocation name
51 me=$0
52 case "$0" in
53 */*)
54         me=`echo $0 | sed -e 's!.*/\(.*\)!\1!' 2>/dev/null`
55         test "$me" || me=$0
56         ;;
57 esac
58
59 : Proper separator for the PATH environment variable
60 p_=:
61 : On OS/2 this directory should exist if this is not floppy only system :-]
62 if test -d c:/. ; then
63     if test -n "$OS2_SHELL"; then
64                 p_=\;
65                 PATH=`cmd /c "echo %PATH%" | tr '\\\\' / `
66                 OS2_SHELL=`cmd /c "echo %OS2_SHELL%" | tr '\\\\' / | tr '[A-Z]' '[a-z]'`
67         elif test -n "$DJGPP"; then
68                 p_=\;
69         fi
70 fi
71
72 : Proper PATH setting
73 paths='/bin /usr/bin /usr/local/bin /usr/ucb /usr/local /usr/lbin'
74 paths="$paths /opt/bin /opt/local/bin /opt/local /opt/lbin"
75 paths="$paths /usr/5bin /etc /usr/gnu/bin /usr/new /usr/new/bin /usr/nbin"
76 paths="$paths /opt/gnu/bin /opt/new /opt/new/bin /opt/nbin"
77 paths="$paths /sys5.3/bin /sys5.3/usr/bin /bsd4.3/bin /bsd4.3/usr/ucb"
78 paths="$paths /bsd4.3/usr/bin /usr/bsd /bsd43/bin /usr/ccs/bin"
79 paths="$paths /etc /usr/lib /usr/ucblib /lib /usr/ccs/lib"
80 paths="$paths /sbin /usr/sbin /usr/libexec"
81
82 for p in $paths
83 do
84         case "$p_$PATH$p_" in
85         *$p_$p$p_*) ;;
86         *) test -d $p && PATH=$PATH$p_$p ;;
87         esac
88 done
89
90 PATH=.$p_$PATH
91 export PATH
92
93 : shall we be using ksh?
94 inksh=''
95 needksh=''
96 avoidksh=''
97 newsh=/bin/ksh
98 changesh=''
99 if (PATH=.; alias -x) >/dev/null 2>&1; then
100                 inksh=true
101 fi
102 if test -f /hp-ux -a -f /bin/ksh; then
103         needksh='to avoid sh bug in "here document" expansion'
104 fi
105 if test -d /usr/lpp -a -f /usr/bin/bsh -a -f /usr/bin/uname; then
106         if test X`/usr/bin/uname -v` = X4; then
107                 avoidksh="to avoid AIX 4's /bin/sh"
108                 newsh=/usr/bin/bsh
109         fi
110 fi
111 if test -f /osf_boot -a -f /usr/sbin/setld; then
112         if test X`/usr/bin/uname -s` = XOSF1; then
113                 avoidksh="to avoid Digital UNIX' ksh"
114                 newsh=/bin/sh
115                 unset BIN_SH # if this is 'xpg4' sh will start up ksh
116         fi
117 fi
118 case "$inksh/$needksh" in
119 /[a-z]*)
120                 ENV=''
121                 changesh=true
122                 reason="$needksh"
123         ;;
124 esac
125 case "$inksh/$avoidksh" in
126 true/[a-z]*)
127         changesh=true
128         reason="$avoidksh"
129         ;;
130 esac
131 case "$inksh/$needksh-$avoidksh-" in
132 true/--)
133                 cat <<EOM
134 (I see you are using the Korn shell.  Some ksh's blow up on $me,
135 mainly on older exotic systems.  If yours does, try the Bourne shell instead.)
136 EOM
137         ;;
138 esac
139 case "$changesh" in
140 true)
141         echo "(Feeding myself to $newsh $reason.)"
142         case "$0" in
143         Configure|*/Configure) exec $newsh $0 "$@";;
144         *) exec $newsh Configure "$@";;
145         esac
146         ;;
147 esac
148
149 : if needed set CDPATH to a harmless value that is not chatty
150 : avoid bash 2.02 problems with empty CDPATH.
151 case "$CDPATH" in
152 '')     ;;
153 *)      case "$SHELL" in
154         *bash*) CDPATH='.' ;;
155         *)              CDPATH='' ;;
156         esac
157         ;;
158 esac
159 : Configure runs within the UU subdirectory
160 test -d UU || mkdir UU
161 cd UU && rm -f ./*
162
163 ccsymbols=''
164 cppccsymbols=''
165 cppsymbols=''
166 dynamic_ext=''
167 extensions=''
168 known_extensions=''
169 nonxs_ext=''
170 static_ext=''
171 useopcode=''
172 useposix=''
173 d_bsd=''
174 d_eunice=''
175 d_xenix=''
176 eunicefix=''
177 Mcc=''
178 ar=''
179 awk=''
180 bash=''
181 bison=''
182 byacc=''
183 cat=''
184 chgrp=''
185 chmod=''
186 chown=''
187 comm=''
188 compress=''
189 cp=''
190 cpio=''
191 cpp=''
192 csh=''
193 date=''
194 echo=''
195 egrep=''
196 emacs=''
197 expr=''
198 find=''
199 flex=''
200 grep=''
201 gzip=''
202 inews=''
203 ksh=''
204 less=''
205 line=''
206 lint=''
207 ln=''
208 lp=''
209 lpr=''
210 ls=''
211 mail=''
212 mailx=''
213 make=''
214 mkdir=''
215 more=''
216 mv=''
217 nm=''
218 nroff=''
219 perl=''
220 pg=''
221 pmake=''
222 pr=''
223 rm=''
224 rmail=''
225 sed=''
226 sendmail=''
227 shar=''
228 sleep=''
229 smail=''
230 sort=''
231 submit=''
232 tail=''
233 tar=''
234 tbl=''
235 tee=''
236 test=''
237 touch=''
238 tr=''
239 troff=''
240 uname=''
241 uniq=''
242 uuname=''
243 vi=''
244 zcat=''
245 zip=''
246 full_ar=''
247 full_sed=''
248 libswanted=''
249 hint=''
250 myuname=''
251 osname=''
252 osvers=''
253 Author=''
254 Date=''
255 Header=''
256 Id=''
257 Locker=''
258 Log=''
259 RCSfile=''
260 Revision=''
261 Source=''
262 State=''
263 _a=''
264 _exe=''
265 _o=''
266 archobjs=''
267 exe_ext=''
268 firstmakefile=''
269 lib_ext=''
270 obj_ext=''
271 path_sep=''
272 afs=''
273 alignbytes=''
274 ansi2knr=''
275 archlib=''
276 archlibexp=''
277 d_archlib=''
278 installarchlib=''
279 archname=''
280 myarchname=''
281 d_atolf=''
282 d_atoll=''
283 baserev=''
284 bin=''
285 binexp=''
286 installbin=''
287 bincompat5005=''
288 d_bincompat5005=''
289 byteorder=''
290 cc=''
291 gccversion=''
292 ccflags=''
293 cppflags=''
294 ldflags=''
295 lkflags=''
296 locincpth=''
297 optimize=''
298 cf_email=''
299 cf_by=''
300 cf_time=''
301 charsize=''
302 contains=''
303 cpp_stuff=''
304 cpplast=''
305 cppminus=''
306 cpprun=''
307 cppstdin=''
308 crosscompile=''
309 d_access=''
310 d_accessx=''
311 d_alarm=''
312 d_attribut=''
313 d_bcmp=''
314 d_bcopy=''
315 d_bzero=''
316 d_casti32=''
317 castflags=''
318 d_castneg=''
319 d_chown=''
320 d_chroot=''
321 d_chsize=''
322 d_closedir=''
323 d_void_closedir=''
324 d_const=''
325 cryptlib=''
326 d_crypt=''
327 d_csh=''
328 full_csh=''
329 d_cuserid=''
330 d_dbl_dig=''
331 d_difftime=''
332 d_dlerror=''
333 d_dlopen=''
334 d_dlsymun=''
335 d_dosuid=''
336 d_suidsafe=''
337 d_drand48proto=''
338 d_dup2=''
339 d_eaccess=''
340 d_endgrent=''
341 d_endhent=''
342 d_endnent=''
343 d_endpent=''
344 d_endpwent=''
345 d_endsent=''
346 d_endspent=''
347 d_fchmod=''
348 d_fchown=''
349 d_fcntl=''
350 d_fd_macros=''
351 d_fd_set=''
352 d_fds_bits=''
353 d_fgetpos=''
354 d_flexfnam=''
355 d_flock=''
356 d_fork=''
357 d_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_getcwd=''
366 d_getgrent=''
367 d_getgrps=''
368 d_gethbyaddr=''
369 d_gethbyname=''
370 d_gethent=''
371 aphostname=''
372 d_gethname=''
373 d_phostname=''
374 d_uname=''
375 d_gethostprotos=''
376 d_getlogin=''
377 d_getmnt=''
378 d_getmntent=''
379 d_getnbyaddr=''
380 d_getnbyname=''
381 d_getnent=''
382 d_getnetprotos=''
383 d_getpent=''
384 d_getpgid=''
385 d_getpgrp2=''
386 d_bsdgetpgrp=''
387 d_getpgrp=''
388 d_getppid=''
389 d_getprior=''
390 d_getpbyname=''
391 d_getpbynumber=''
392 d_getprotoprotos=''
393 d_getpwent=''
394 d_getsent=''
395 d_getservprotos=''
396 d_getspent=''
397 d_getspnam=''
398 d_getsbyname=''
399 d_getsbyport=''
400 d_gnulibc=''
401 d_hasmntopt=''
402 d_htonl=''
403 d_iconv=''
404 d_inetaton=''
405 d_int64t=''
406 d_isascii=''
407 d_killpg=''
408 d_lchown=''
409 d_ldbl_dig=''
410 d_link=''
411 d_locconv=''
412 d_lockf=''
413 d_longdbl=''
414 longdblsize=''
415 d_longlong=''
416 longlongsize=''
417 d_lstat=''
418 d_mblen=''
419 d_mbstowcs=''
420 d_mbtowc=''
421 d_memchr=''
422 d_memcmp=''
423 d_memcpy=''
424 d_memmove=''
425 d_memset=''
426 d_mkdir=''
427 d_mkdtemp=''
428 d_mkfifo=''
429 d_mkstemp=''
430 d_mkstemps=''
431 d_mktime=''
432 d_mmap=''
433 mmaptype=''
434 d_mprotect=''
435 d_msg=''
436 d_msgctl=''
437 d_msgget=''
438 d_msgrcv=''
439 d_msgsnd=''
440 d_msync=''
441 d_munmap=''
442 d_nice=''
443 d_open3=''
444 d_fpathconf=''
445 d_pathconf=''
446 d_pause=''
447 d_pipe=''
448 d_poll=''
449 d_portable=''
450 d_old_pthread_create_joinable=''
451 old_pthread_create_joinable=''
452 d_pthread_yield=''
453 d_sched_yield=''
454 sched_yield=''
455 d_readdir=''
456 d_rewinddir=''
457 d_seekdir=''
458 d_telldir=''
459 d_readlink=''
460 d_rename=''
461 d_rmdir=''
462 d_safebcpy=''
463 d_safemcpy=''
464 d_sanemcmp=''
465 d_select=''
466 d_sem=''
467 d_semctl=''
468 d_semget=''
469 d_semop=''
470 d_setegid=''
471 d_seteuid=''
472 d_setgrent=''
473 d_setgrps=''
474 d_sethent=''
475 d_setlinebuf=''
476 d_setlocale=''
477 d_setnent=''
478 d_setpent=''
479 d_setpgid=''
480 d_setpgrp2=''
481 d_bsdsetpgrp=''
482 d_setpgrp=''
483 d_setprior=''
484 d_setpwent=''
485 d_setregid=''
486 d_setresgid=''
487 d_setresuid=''
488 d_setreuid=''
489 d_setrgid=''
490 d_setruid=''
491 d_setsent=''
492 d_setsid=''
493 d_setspent=''
494 d_setvbuf=''
495 d_sfio=''
496 usesfio=''
497 d_shm=''
498 d_shmat=''
499 d_shmatprototype=''
500 shmattype=''
501 d_shmctl=''
502 d_shmdt=''
503 d_shmget=''
504 d_sigaction=''
505 d_sigsetjmp=''
506 d_msg_ctrunc=''
507 d_msg_dontroute=''
508 d_msg_oob=''
509 d_msg_peek=''
510 d_msg_proxy=''
511 d_oldsock=''
512 d_scm_rights=''
513 d_socket=''
514 d_sockpair=''
515 sockethdr=''
516 socketlib=''
517 d_sqrtl=''
518 d_statblks=''
519 d_statfs_f_flags=''
520 d_statfs_s=''
521 d_fstatvfs=''
522 d_statvfs=''
523 d_stdio_cnt_lval=''
524 d_stdio_ptr_lval=''
525 d_stdiobase=''
526 d_stdstdio=''
527 stdio_base=''
528 stdio_bufsiz=''
529 stdio_cnt=''
530 stdio_filbuf=''
531 stdio_ptr=''
532 d_index=''
533 d_strchr=''
534 d_strcoll=''
535 d_strctcpy=''
536 d_strerrm=''
537 d_strerror=''
538 d_sysernlst=''
539 d_syserrlst=''
540 d_strtod=''
541 d_strtol=''
542 d_strtold=''
543 d_strtoll=''
544 d_strtoul=''
545 d_strtoull=''
546 d_strtouq=''
547 d_strxfrm=''
548 d_symlink=''
549 d_syscall=''
550 d_sysconf=''
551 d_system=''
552 d_tcgetpgrp=''
553 d_tcsetpgrp=''
554 d_telldirproto=''
555 d_time=''
556 timetype=''
557 clocktype=''
558 d_times=''
559 d_truncate=''
560 d_tzname=''
561 d_umask=''
562 d_semctl_semid_ds=''
563 d_semctl_semun=''
564 d_union_semun=''
565 d_ustat=''
566 d_vfork=''
567 usevfork=''
568 d_voidsig=''
569 signal_t=''
570 d_volatile=''
571 d_charvspr=''
572 d_vprintf=''
573 d_wait4=''
574 d_waitpid=''
575 d_wcstombs=''
576 d_wctomb=''
577 dlext=''
578 cccdlflags=''
579 ccdlflags=''
580 dlsrc=''
581 ld=''
582 lddlflags=''
583 usedl=''
584 doublesize=''
585 ebcdic=''
586 fflushNULL=''
587 fflushall=''
588 fpossize=''
589 fpostype=''
590 gidformat=''
591 gidsign=''
592 gidsize=''
593 gidtype=''
594 groupstype=''
595 h_fcntl=''
596 h_sysfile=''
597 i_arpainet=''
598 db_hashtype=''
599 db_prefixtype=''
600 i_db=''
601 i_dbm=''
602 i_rpcsvcdbm=''
603 d_dirnamlen=''
604 direntrytype=''
605 i_dirent=''
606 i_dld=''
607 i_dlfcn=''
608 i_fcntl=''
609 i_float=''
610 i_gdbm=''
611 d_grpasswd=''
612 i_grp=''
613 i_iconv=''
614 i_inttypes=''
615 i_limits=''
616 i_locale=''
617 i_machcthr=''
618 i_malloc=''
619 i_math=''
620 i_memory=''
621 i_mntent=''
622 i_ndbm=''
623 i_netdb=''
624 i_neterrno=''
625 i_netinettcp=''
626 i_niin=''
627 i_sysin=''
628 i_poll=''
629 i_pthread=''
630 d_pwage=''
631 d_pwchange=''
632 d_pwclass=''
633 d_pwcomment=''
634 d_pwexpire=''
635 d_pwgecos=''
636 d_pwpasswd=''
637 d_pwquota=''
638 i_pwd=''
639 i_sfio=''
640 i_shadow=''
641 i_socks=''
642 i_stddef=''
643 i_stdlib=''
644 i_string=''
645 strings=''
646 i_sysaccess=''
647 i_sysdir=''
648 i_sysfile=''
649 d_voidtty=''
650 i_bsdioctl=''
651 i_sysfilio=''
652 i_sysioctl=''
653 i_syssockio=''
654 i_syslog=''
655 i_sysmman=''
656 i_sysmount=''
657 i_sysndir=''
658 i_sysparam=''
659 i_sysresrc=''
660 i_syssecrt=''
661 i_sysselct=''
662 i_sysstat=''
663 i_sysstatfs=''
664 i_sysstatvfs=''
665 i_systimes=''
666 i_systypes=''
667 i_sysuio=''
668 i_sysun=''
669 i_sysvfs=''
670 i_syswait=''
671 i_sgtty=''
672 i_termio=''
673 i_termios=''
674 i_systime=''
675 i_systimek=''
676 i_time=''
677 timeincl=''
678 i_unistd=''
679 i_ustat=''
680 i_utime=''
681 i_values=''
682 i_stdarg=''
683 i_varargs=''
684 i_varhdr=''
685 i_vfork=''
686 inc_version_list=''
687 inc_version_list_init=''
688 installprefix=''
689 installprefixexp=''
690 installstyle=''
691 installusrbinperl=''
692 intsize=''
693 longsize=''
694 shortsize=''
695 d_fpos64_t=''
696 d_off64_t=''
697 libc=''
698 ldlibpthname=''
699 libperl=''
700 shrpenv=''
701 useshrplib=''
702 glibpth=''
703 libpth=''
704 loclibpth=''
705 plibpth=''
706 xlibpth=''
707 ignore_versioned_solibs=''
708 libs=''
709 libsdirs=''
710 libsfiles=''
711 libsfound=''
712 lns=''
713 d_PRIEldbl=''
714 d_PRIFldbl=''
715 d_PRIGldbl=''
716 d_PRIeldbl=''
717 d_PRIfldbl=''
718 d_PRIgldbl=''
719 sPRIEldbl=''
720 sPRIFldbl=''
721 sPRIGldbl=''
722 sPRIeldbl=''
723 sPRIfldbl=''
724 sPRIgldbl=''
725 lseeksize=''
726 lseektype=''
727 make_set_make=''
728 d_mymalloc=''
729 freetype=''
730 mallocobj=''
731 mallocsrc=''
732 malloctype=''
733 usemymalloc=''
734 installman1dir=''
735 man1dir=''
736 man1direxp=''
737 man1ext=''
738 installman3dir=''
739 man3dir=''
740 man3direxp=''
741 man3ext=''
742 huge=''
743 large=''
744 medium=''
745 models=''
746 small=''
747 split=''
748 modetype=''
749 multiarch=''
750 mydomain=''
751 myhostname=''
752 phostname=''
753 c=''
754 n=''
755 d_eofnblk=''
756 eagain=''
757 o_nonblock=''
758 rd_nodata=''
759 netdb_hlen_type=''
760 netdb_host_type=''
761 netdb_name_type=''
762 netdb_net_type=''
763 groupcat=''
764 hostcat=''
765 passcat=''
766 orderlib=''
767 ranlib=''
768 package=''
769 spackage=''
770 pager=''
771 api_revision=''
772 api_subversion=''
773 api_version=''
774 api_versionstring=''
775 patchlevel=''
776 subversion=''
777 version=''
778 perladmin=''
779 perlpath=''
780 d_nv_preserves_uv=''
781 i16size=''
782 i16type=''
783 i32size=''
784 i32type=''
785 i64size=''
786 i64type=''
787 i8size=''
788 i8type=''
789 ivsize=''
790 ivtype=''
791 nvsize=''
792 nvtype=''
793 u16size=''
794 u16type=''
795 u32size=''
796 u32type=''
797 u64size=''
798 u64type=''
799 u8size=''
800 u8type=''
801 uvsize=''
802 uvtype=''
803 ivdformat=''
804 uvoformat=''
805 uvuformat=''
806 uvxformat=''
807 pidtype=''
808 prefix=''
809 prefixexp=''
810 installprivlib=''
811 privlib=''
812 privlibexp=''
813 prototype=''
814 ptrsize=''
815 d_PRIX64=''
816 d_PRId64=''
817 d_PRIi64=''
818 d_PRIo64=''
819 d_PRIu64=''
820 d_PRIx64=''
821 sPRIX64=''
822 sPRId64=''
823 sPRIi64=''
824 sPRIo64=''
825 sPRIu64=''
826 sPRIx64=''
827 d_quad=''
828 quadkind=''
829 quadtype=''
830 uquadtype=''
831 drand01=''
832 randbits=''
833 randfunc=''
834 randseedtype=''
835 seedfunc=''
836 installscript=''
837 scriptdir=''
838 scriptdirexp=''
839 selectminbits=''
840 selecttype=''
841 sh=''
842 sig_count=''
843 sig_name=''
844 sig_name_init=''
845 sig_num=''
846 sig_num_init=''
847 installsitearch=''
848 sitearch=''
849 sitearchexp=''
850 installsitebin=''
851 sitebin=''
852 sitebinexp=''
853 installsitelib=''
854 sitelib=''
855 sitelibexp=''
856 siteprefix=''
857 siteprefixexp=''
858 sizetype=''
859 so=''
860 sharpbang=''
861 shsharp=''
862 spitshell=''
863 src=''
864 ssizetype=''
865 startperl=''
866 startsh=''
867 stdchar=''
868 d_stdio_stream_array=''
869 stdio_stream_array=''
870 sysman=''
871 trnl=''
872 uidformat=''
873 uidsign=''
874 uidsize=''
875 uidtype=''
876 archname64=''
877 use64bits=''
878 uselargefiles=''
879 uselongdouble=''
880 usemorebits=''
881 usemultiplicity=''
882 nm_opt=''
883 nm_so_opt=''
884 runnm=''
885 usenm=''
886 useperlio=''
887 usesocks=''
888 d_oldpthreads=''
889 use5005threads=''
890 useithreads=''
891 usethreads=''
892 incpath=''
893 mips_type=''
894 usrinc=''
895 d_vendorbin=''
896 installvendorbin=''
897 vendorbin=''
898 vendorbinexp=''
899 d_vendorlib=''
900 installvendorlib=''
901 vendorlib=''
902 vendorlibexp=''
903 usevendorprefix=''
904 vendorprefix=''
905 vendorprefixexp=''
906 defvoidused=''
907 voidflags=''
908 pm_apiversion=''
909 xs_apiversion=''
910 CONFIG=''
911
912 define='define'
913 undef='undef'
914 smallmach='pdp11 i8086 z8000 i80286 iAPX286'
915 rmlist=''
916
917 : We must find out about Eunice early
918 eunicefix=':'
919 if test -f /etc/unixtovms; then
920         eunicefix=/etc/unixtovms
921 fi
922 if test -f /etc/unixtovms.exe; then
923         eunicefix=/etc/unixtovms.exe
924 fi
925
926 i_whoami=''
927 : set useposix=false in your hint file to disable the POSIX extension.
928 useposix=true
929 : set useopcode=false in your hint file to disable the Opcode extension.
930 useopcode=true
931 : Trailing extension.  Override this in a hint file, if needed.
932 _exe=''
933 : Extra object files, if any, needed on this platform.
934 archobjs=''
935 : Possible local include directories to search.
936 : Set locincpth to "" in a hint file to defeat local include searches.
937 locincpth="/usr/local/include /opt/local/include /usr/gnu/include"
938 locincpth="$locincpth /opt/gnu/include /usr/GNU/include /opt/GNU/include"
939 :
940 : no include file wanted by default
941 inclwanted=''
942
943 groupstype=''
944 : change the next line if compiling for Xenix/286 on Xenix/386
945 xlibpth='/usr/lib/386 /lib/386'
946
947 : Possible local library directories to search.
948 loclibpth="/usr/local/lib /opt/local/lib /usr/gnu/lib"
949 loclibpth="$loclibpth /opt/gnu/lib /usr/GNU/lib /opt/GNU/lib"
950
951 : general looking path for locating libraries
952 glibpth="/shlib /usr/shlib /lib/pa20_64 /lib/pa1.1 /usr/lib/large"
953 glibpth="$glibpth /lib /usr/lib $xlibpth"
954 glibpth="$glibpth /lib/large /usr/lib/small /lib/small"
955 glibpth="$glibpth /usr/ccs/lib /usr/ucblib /usr/local/lib"
956
957 : Private path used by Configure to find libraries.  Its value
958 : is prepended to libpth. This variable takes care of special
959 : machines, like the mips.  Usually, it should be empty.
960 plibpth=''
961
962 : default library list
963 libswanted=''
964 : some systems want to use only the non-versioned libso:s
965 ignore_versioned_solibs=''
966 : set usemultiplicity on the Configure command line to enable multiplicity.
967 : set usesocks on the Configure command line to enable socks.
968 : set usethreads on the Configure command line to enable threads.
969 : full support for void wanted by default
970 defvoidused=15
971
972 : List of libraries we want.
973 : If anyone needs -lnet, put it in a hint file.
974 libswanted='sfio socket inet nsl nm ndbm gdbm dbm db malloc dl'
975 libswanted="$libswanted dld ld sun m c cposix posix"
976 libswanted="$libswanted ndir dir crypt sec"
977 libswanted="$libswanted ucb bsd BSD PW x"
978 : We probably want to search /usr/shlib before most other libraries.
979 : This is only used by the lib/ExtUtils/MakeMaker.pm routine extliblist.
980 glibpth=`echo " $glibpth " | sed -e 's! /usr/shlib ! !'`
981 glibpth="/usr/shlib $glibpth"
982 : Do not use vfork unless overridden by a hint file.
983 usevfork=false
984
985 : Find the basic shell for Bourne shell scripts
986 case "$sh" in
987 '')
988         case "$SYSTYPE" in
989         *bsd*|sys5*) xxx="/$SYSTYPE/bin/sh";;
990         *) xxx='/bin/sh';;
991         esac
992         if test -f "$xxx"; then
993                 sh="$xxx"
994         else
995                 : Build up a list and do a single loop so we can 'break' out.
996                 pth=`echo $PATH | sed -e "s/$p_/ /g"`
997                 for xxx in sh bash ksh pdksh ash; do
998                         for p in $pth; do
999                                 try="$try ${p}/${xxx}"
1000                         done
1001                 done
1002                 for xxx in $try; do
1003                         if test -f "$xxx"; then
1004                                 sh="$xxx";
1005                                 break
1006                         elif test -f "$xxx.exe"; then
1007                                 sh="$xxx";
1008                                 break
1009                         fi
1010                 done
1011         fi
1012         ;;
1013 esac
1014
1015 case "$sh" in
1016 '')     cat <<EOM >&2
1017 $me:  Fatal Error:  I can't find a Bourne Shell anywhere.  
1018
1019 Usually it's in /bin/sh.  How did you even get this far?
1020 Please contact me (Perl Maintainers) at perlbug@perl.com and 
1021 we'll try to straighten this all out.
1022 EOM
1023         exit 1
1024         ;;
1025 esac
1026
1027 : see if sh knows # comments
1028 if `$sh -c '#' >/dev/null 2>&1`; then
1029         shsharp=true
1030         spitshell=cat
1031         xcat=/bin/cat
1032         test -f $xcat || xcat=/usr/bin/cat
1033         echo "#!$xcat" >try
1034         $eunicefix try
1035         chmod +x try
1036         ./try > today
1037         if test -s today; then
1038                 sharpbang='#!'
1039         else
1040                 echo "#! $xcat" > try
1041                 $eunicefix try
1042                 chmod +x try
1043                 ./try > today
1044                 if test -s today; then
1045                         sharpbang='#! '
1046                 else
1047                         sharpbang=': use '
1048                 fi
1049         fi
1050 else
1051         echo " "
1052         echo "Your $sh doesn't grok # comments--I will strip them later on."
1053         shsharp=false
1054         cd ..
1055         echo "exec grep -v '^[  ]*#'" >spitshell
1056         chmod +x spitshell
1057         $eunicefix spitshell
1058         spitshell=`pwd`/spitshell
1059         cd UU
1060         echo "I presume that if # doesn't work, #! won't work either!"
1061         sharpbang=': use '
1062 fi
1063 rm -f try today
1064
1065 : figure out how to guarantee sh startup
1066 case "$startsh" in
1067 '') startsh=${sharpbang}${sh} ;;
1068 *)
1069 esac
1070 cat >try <<EOSS
1071 $startsh
1072 set abc
1073 test "$?abc" != 1
1074 EOSS
1075
1076 chmod +x try
1077 $eunicefix try
1078 if ./try; then
1079         : echo "Yup, it does."
1080 else
1081         echo "Hmm... '$startsh' does not guarantee sh startup..."
1082         echo "You may have to fix up the shell scripts to make sure $sh runs them."
1083 fi
1084 rm -f try
1085
1086
1087 : Save command line options in file UU/cmdline.opt for later use in
1088 : generating config.sh.
1089 cat > cmdline.opt <<EOSH
1090 # Configure command line arguments.
1091 config_arg0='$0'
1092 config_args='$*'
1093 config_argc=$#
1094 EOSH
1095 argn=1
1096 for arg in "$@"; do
1097         cat >>cmdline.opt <<EOSH
1098 config_arg$argn='$arg'
1099 EOSH
1100         argn=`expr $argn + 1`
1101 done
1102
1103 : produce awk script to parse command line options
1104 cat >options.awk <<'EOF'
1105 BEGIN {
1106         optstr = "A:dD:eEf:hKOrsSU:V";  # getopt-style specification
1107
1108         len = length(optstr);
1109         for (i = 1; i <= len; i++) {
1110                 c = substr(optstr, i, 1);
1111                 if (i < len) a = substr(optstr, i + 1, 1); else a = "";
1112                 if (a == ":") {
1113                         arg[c] = 1;
1114                         i++;
1115                 }
1116                 opt[c] = 1;
1117         }
1118 }
1119 {
1120         expect = 0;
1121         str = $0;
1122         if (substr(str, 1, 1) != "-") {
1123                 printf("'%s'\n", str);
1124                 next;
1125         }
1126         len = length($0);
1127         for (i = 2; i <= len; i++) {
1128                 c = substr(str, i, 1);
1129                 if (!opt[c]) {
1130                         printf("-%s\n", substr(str, i));
1131                         next;
1132                 }
1133                 printf("-%s\n", c);
1134                 if (arg[c]) {
1135                         if (i < len)
1136                                 printf("'%s'\n", substr(str, i + 1));
1137                         else
1138                                 expect = 1;
1139                         next;
1140                 }
1141         }
1142 }
1143 END {
1144         if (expect)
1145                 print "?";
1146 }
1147 EOF
1148
1149 : process the command line options
1150 set X `for arg in "$@"; do echo "X$arg"; done |
1151         sed -e s/X// | awk -f options.awk`
1152 eval "set $*"
1153 shift
1154 rm -f options.awk
1155
1156 : set up default values
1157 fastread=''
1158 reuseval=false
1159 config_sh=''
1160 alldone=''
1161 error=''
1162 silent=''
1163 extractsh=''
1164 override=''
1165 knowitall=''
1166 rm -f optdef.sh posthint.sh
1167 cat >optdef.sh <<EOS
1168 $startsh
1169 EOS
1170
1171
1172 : option parsing
1173 while test $# -gt 0; do
1174         case "$1" in
1175         -d) shift; fastread=yes;;
1176         -e) shift; alldone=cont;;
1177         -f)
1178                 shift
1179                 cd ..
1180                 if test -r "$1"; then
1181                         config_sh="$1"
1182                 else
1183                         echo "$me: cannot read config file $1." >&2
1184                         error=true
1185                 fi
1186                 cd UU
1187                 shift;;
1188         -h) shift; error=true;;
1189         -r) shift; reuseval=true;;
1190         -s) shift; silent=true; realsilent=true;;
1191         -E) shift; alldone=exit;;
1192         -K) shift; knowitall=true;;
1193         -O) shift; override=true;;
1194         -S) shift; silent=true; extractsh=true;;
1195         -D)
1196                 shift
1197                 case "$1" in
1198                 *=)
1199                         echo "$me: use '-U symbol=', not '-D symbol='." >&2
1200                         echo "$me: ignoring -D $1" >&2
1201                         ;;
1202                 *=*) echo "$1" | \
1203                                 sed -e "s/'/'\"'\"'/g" -e "s/=\(.*\)/='\1'/" >> optdef.sh;;
1204                 *) echo "$1='define'" >> optdef.sh;;
1205                 esac
1206                 shift
1207                 ;;
1208         -U)
1209                 shift
1210                 case "$1" in
1211                 *=) echo "$1" >> optdef.sh;;
1212                 *=*)
1213                         echo "$me: use '-D symbol=val', not '-U symbol=val'." >&2
1214                         echo "$me: ignoring -U $1" >&2
1215                         ;;
1216                 *) echo "$1='undef'" >> optdef.sh;;
1217                 esac
1218                 shift
1219                 ;;
1220         -A)
1221             shift
1222             xxx=''
1223             yyy="$1"
1224             zzz=''
1225             uuu=undef
1226             case "$yyy" in
1227             *=*) zzz=`echo $yyy|sed 's!=.*!!'`
1228                  case "$zzz" in
1229                  *:*) zzz='' ;;
1230                  *)   xxx=append
1231                       zzz=" "`echo $yyy|sed 's!^[^=]*=!!'` 
1232                       yyy=`echo $yyy|sed 's!=.*!!'` ;;
1233                  esac
1234                  ;;
1235             esac
1236             case "$xxx" in
1237             '')  case "$yyy" in
1238                  *:*) xxx=`echo $yyy|sed 's!:.*!!'`
1239                       yyy=`echo $yyy|sed 's!^[^:]*:!!'`
1240                       zzz=`echo $yyy|sed 's!^[^=]*=!!'`
1241                       yyy=`echo $yyy|sed 's!=.*!!'` ;;
1242                  *)   xxx=`echo $yyy|sed 's!:.*!!'`
1243                       yyy=`echo $yyy|sed 's!^[^:]*:!!'` ;;
1244                  esac
1245                  ;;       
1246             esac
1247             case "$xxx" in
1248             append)
1249                 echo "$yyy=\"\${$yyy}$zzz\""    >> posthint.sh ;;
1250             clear)
1251                 echo "$yyy=''"                  >> posthint.sh ;;
1252             define)
1253                 case "$zzz" in
1254                 '') zzz=define ;;
1255                 esac
1256                 echo "$yyy='$zzz'"              >> posthint.sh ;;
1257             eval)
1258                 echo "eval \"$yyy=$zzz\""       >> posthint.sh ;;
1259             prepend)
1260                 echo "$yyy=\"$zzz\${$yyy}\""    >> posthint.sh ;;
1261             undef)
1262                 case "$zzz" in
1263                 '') zzz="$uuu" ;;
1264                 esac
1265                 echo "$yyy=$zzz"                >> posthint.sh ;;
1266             *)  echo "$me: unknown -A command '$xxx', ignoring -A $1" >&2 ;;
1267             esac
1268             ;;
1269         -V) echo "$me generated by metaconfig 3.0 PL70." >&2
1270             exit 0;;
1271         --) break;;
1272         -*) echo "$me: unknown option $1" >&2; shift; error=true;;
1273         *) break;;
1274         esac
1275 done
1276
1277 case "$error" in
1278 true)
1279         cat >&2 <<EOM
1280 Usage: $me [-dehrsEKOSV] [-f config.sh] [-D symbol] [-D symbol=value]
1281                  [-U symbol] [-U symbol=] [-A command:symbol...]
1282   -d : use defaults for all answers.
1283   -e : go on without questioning past the production of config.sh.
1284   -f : specify an alternate default configuration file.
1285   -h : print this help message and exit (with an error status).
1286   -r : reuse C symbols value if possible (skips costly nm extraction).
1287   -s : silent mode, only echoes questions and essential information.
1288   -D : define symbol to have some value:
1289          -D symbol         symbol gets the value 'define'
1290          -D symbol=value   symbol gets the value 'value'
1291   -E : stop at the end of questions, after having produced config.sh.
1292   -K : do not use unless you know what you are doing.
1293   -O : let -D and -U override definitions from loaded configuration file.
1294   -S : perform variable substitutions on all .SH files (can mix with -f)
1295   -U : undefine symbol:
1296          -U symbol    symbol gets the value 'undef'
1297          -U symbol=   symbol gets completely empty
1298   -A : manipulate symbol after the platform specific hints have been applied:
1299          -A symbol=value                append " "value to symbol
1300          -A append:symbol=value         append value to symbol
1301          -A define:symbol=value         define symbol to have value
1302          -A clear:symbol                define symbol to be ''
1303          -A define:symbol               define symbol to be 'define'
1304          -A eval:symbol=value           define symbol to be eval of value
1305          -A prepend:symbol=value        prepend value to symbol
1306          -A undef:symbol                define symbol to be 'undef'
1307          -A undef:symbol=               define symbol to be ''
1308   -V : print version number and exit (with a zero status).
1309 EOM
1310         exit 1
1311         ;;
1312 esac
1313
1314 : Sanity checks
1315 case "$fastread$alldone" in
1316 yescont|yesexit) ;;
1317 *)
1318         if test ! -t 0; then
1319                 echo "Say 'sh Configure', not 'sh <Configure'"
1320                 exit 1
1321         fi
1322         ;;
1323 esac
1324
1325 exec 4>&1
1326 case "$silent" in
1327 true) exec 1>/dev/null;;
1328 esac
1329
1330 : run the defines and the undefines, if any, but leave the file out there...
1331 touch optdef.sh
1332 . ./optdef.sh
1333 : create the posthint manipulation script and leave the file out there...
1334 touch posthint.sh
1335
1336 : set package name
1337 package=perl5
1338 first=`echo $package | sed -e 's/^\(.\).*/\1/'`
1339 last=`echo $package | sed -e 's/^.\(.*\)/\1/'`
1340 case "`echo AbyZ | tr '[:lower:]' '[:upper:]' 2>/dev/null`" in
1341 ABYZ) spackage=`echo $first | tr '[:lower:]' '[:upper:]'`$last;;
1342 *) spackage=`echo $first | tr '[a-z]' '[A-Z]'`$last;;
1343 esac
1344
1345 : Some greps do not return status, grrr.
1346 echo "grimblepritz" >grimble
1347 if grep blurfldyick grimble >/dev/null 2>&1 ; then
1348         contains=contains
1349 elif grep grimblepritz grimble >/dev/null 2>&1 ; then
1350         contains=grep
1351 else
1352         contains=contains
1353 fi
1354 rm -f grimble
1355 : the following should work in any shell
1356 case "$contains" in
1357 contains*)
1358         echo " "
1359         echo "AGH!  Grep doesn't return a status.  Attempting remedial action."
1360         cat >contains <<'EOSS'
1361 grep "$1" "$2" >.greptmp && cat .greptmp && test -s .greptmp
1362 EOSS
1363 chmod +x contains
1364 esac
1365
1366 : Find the path to the source tree
1367 case "$src" in
1368 '') case "$0" in
1369     */*) src=`echo $0 | sed -e 's%/[^/][^/]*$%%'`
1370          case "$src" in
1371          /*)    ;;
1372          *)     src=`cd ../$src && pwd` ;;
1373          esac
1374          ;;
1375     *)   src='.';;
1376     esac;;
1377 esac
1378 case "$src" in
1379 '')     src=/
1380         rsrc=/
1381         ;;
1382 /*) rsrc="$src";;
1383 *) rsrc="../$src";;
1384 esac
1385 if test -f $rsrc/Configure && \
1386         $contains "^package=$package$" $rsrc/Configure >/dev/null 2>&1
1387 then
1388    : found it, so we are ok.
1389 else
1390         rsrc=''
1391         for src in . .. ../.. ../../.. ../../../..; do
1392                 if test -f ../$src/Configure && \
1393                         $contains "^package=$package$" ../$src/Configure >/dev/null 2>&1
1394                 then
1395                         rsrc=../$src
1396                         break
1397                 fi
1398         done
1399 fi
1400 case "$rsrc" in
1401 '')
1402         cat <<EOM >&4
1403
1404 Sorry, I can't seem to locate the source dir for $package.  Please start
1405 Configure with an explicit path -- i.e. /some/path/Configure.
1406
1407 EOM
1408         exit 1
1409         ;;
1410 ../.)   rsrc='..';;
1411 *)
1412         echo " "
1413         echo "Sources for $package found in \"$src\"." >&4
1414         ;;
1415 esac
1416
1417 : script used to extract .SH files with variable substitutions
1418 cat >extract <<'EOS'
1419 CONFIGDOTSH=true
1420 echo "Doing variable substitutions on .SH files..."
1421 if test -f $src/MANIFEST; then
1422         set x `awk '{print $1}' <$src/MANIFEST | grep '\.SH$'`
1423 else
1424         echo "(Looking for .SH files under the source directory.)"
1425         set x `(cd $src; find . -name "*.SH" -print)`
1426 fi
1427 shift
1428 case $# in
1429 0) set x `(cd $src; echo *.SH)`; shift;;
1430 esac
1431 if test ! -f $src/$1; then
1432         shift
1433 fi
1434 mkdir_p='
1435 name=$1;
1436 create="";
1437 while test $name; do
1438         if test ! -d "$name"; then
1439                 create="$name $create";
1440                 name=`echo $name | sed -e "s|^[^/]*$||"`;
1441                 name=`echo $name | sed -e "s|\(.*\)/.*|\1|"`;
1442         else
1443                 name="";
1444         fi;
1445 done;
1446 for file in $create; do
1447         mkdir $file;
1448 done
1449 '
1450 for file in $*; do
1451         case "$src" in
1452         ".")
1453                 case "$file" in
1454                 */*)
1455                         dir=`expr X$file : 'X\(.*\)/'`
1456                         file=`expr X$file : 'X.*/\(.*\)'`
1457                         (cd $dir && . ./$file)
1458                         ;;
1459                 *)
1460                         . ./$file
1461                         ;;
1462                 esac
1463                 ;;
1464         *)
1465                 case "$file" in
1466                 */*)
1467                         dir=`expr X$file : 'X\(.*\)/'`
1468                         file=`expr X$file : 'X.*/\(.*\)'`
1469                         (set x $dir; shift; eval $mkdir_p)
1470                         sh <$src/$dir/$file
1471                         ;;
1472                 *)
1473                         sh <$src/$file
1474                         ;;
1475                 esac
1476                 ;;
1477         esac
1478 done
1479 if test -f $src/config_h.SH; then
1480         if test ! -f config.h; then
1481         : oops, they left it out of MANIFEST, probably, so do it anyway.
1482         . $src/config_h.SH
1483         fi
1484 fi
1485 EOS
1486
1487 : extract files and exit if asked to do so
1488 case "$extractsh" in
1489 true)
1490         case "$realsilent" in
1491         true) ;;
1492         *) exec 1>&4;;
1493         esac
1494         case "$config_sh" in
1495         '') config_sh='config.sh';;
1496         esac
1497         echo " "
1498         echo "Fetching answers from $config_sh..."
1499         cd ..
1500         . $config_sh
1501         test "$override" && . ./optdef.sh
1502         echo " "
1503         . UU/extract
1504         rm -rf UU
1505         echo "Done."
1506         exit 0
1507         ;;
1508 esac
1509
1510 : Eunice requires " " instead of "", can you believe it
1511 echo " "
1512 : Here we go...
1513 echo "Beginning of configuration questions for $package."
1514
1515 trap 'echo " "; test -d ../UU && rm -rf X $rmlist; exit 1' 1 2 3 15
1516
1517 : first determine how to suppress newline on echo command
1518 echo " "
1519 echo "Checking echo to see how to suppress newlines..."
1520 (echo "hi there\c" ; echo " ") >.echotmp
1521 if $contains c .echotmp >/dev/null 2>&1 ; then
1522         echo "...using -n."
1523         n='-n'
1524         c=''
1525 else
1526         cat <<'EOM'
1527 ...using \c
1528 EOM
1529         n=''
1530         c='\c'
1531 fi
1532 echo $n "The star should be here-->$c"
1533 echo '*'
1534 rm -f .echotmp
1535
1536 : Now test for existence of everything in MANIFEST
1537 echo " "
1538 if test -f $rsrc/MANIFEST; then
1539         echo "First let's make sure your kit is complete.  Checking..." >&4
1540         awk '$1 !~ /PACK[A-Z]+/ {print $1}' $rsrc/MANIFEST | split -50
1541         rm -f missing
1542         tmppwd=`pwd`
1543         for filelist in x??; do
1544                 (cd $rsrc; ls `cat $tmppwd/$filelist` >/dev/null 2>>$tmppwd/missing)
1545         done
1546         if test -s missing; then
1547                 cat missing >&4
1548                 cat >&4 <<'EOM'
1549
1550 THIS PACKAGE SEEMS TO BE INCOMPLETE.
1551
1552 You have the option of continuing the configuration process, despite the
1553 distinct possibility that your kit is damaged, by typing 'y'es.  If you
1554 do, don't blame me if something goes wrong.  I advise you to type 'n'o
1555 and contact the author (perlbug@perl.com).
1556
1557 EOM
1558                 echo $n "Continue? [n] $c" >&4
1559                 read ans
1560                 case "$ans" in
1561                 y*)
1562                         echo "Continuing..." >&4
1563                         rm -f missing
1564                         ;;
1565                 *)
1566                         echo "ABORTING..." >&4
1567                         kill $$
1568                         ;;
1569                 esac
1570         else
1571                 echo "Looks good..."
1572         fi
1573 else
1574         echo "There is no MANIFEST file.  I hope your kit is complete !"
1575 fi
1576 rm -f missing x??
1577
1578 echo " "
1579 : Find the appropriate value for a newline for tr
1580 if test -n "$DJGPP"; then
1581        trnl='\012'
1582 fi
1583 if test X"$trnl" = X; then
1584         case "`echo foo|tr '\n' x 2>/dev/null`" in
1585         foox) trnl='\n' ;;
1586         esac
1587 fi
1588 if test X"$trnl" = X; then
1589         case "`echo foo|tr '\012' x 2>/dev/null`" in
1590         foox) trnl='\012' ;;
1591         esac
1592 fi
1593 if test X"$trnl" = X; then
1594         cat <<EOM >&2
1595
1596 $me: Fatal Error: cannot figure out how to translate newlines with 'tr'.
1597
1598 EOM
1599         exit 1
1600 fi
1601
1602 : compute the number of columns on the terminal for proper question formatting
1603 case "$COLUMNS" in
1604 '') COLUMNS='80';;
1605 esac
1606
1607 : set up the echo used in my read
1608 myecho="case \"\$xxxm\" in
1609 '') echo $n \"\$rp $c\" >&4;;
1610 *) case \"\$rp\" in
1611         '') echo $n \"[\$xxxm] $c\";;
1612         *)
1613                 if test \`echo \"\$rp [\$xxxm]  \" | wc -c\` -ge $COLUMNS; then
1614                         echo \"\$rp\" >&4
1615                         echo $n \"[\$xxxm] $c\" >&4
1616                 else
1617                         echo $n \"\$rp [\$xxxm] $c\" >&4
1618                 fi
1619                 ;;
1620         esac;;
1621 esac"
1622
1623 : now set up to do reads with possible shell escape and default assignment
1624 cat <<EOSC >myread
1625 $startsh
1626 xxxm=\$dflt
1627 $myecho
1628 ans='!'
1629 case "\$fastread" in
1630 yes) case "\$dflt" in
1631         '') ;;
1632         *) ans='';
1633                 case "\$silent-\$rp" in
1634                 true-) ;;
1635                 *) echo " " >&4;;
1636                 esac;;
1637         esac;;
1638 *) case "\$silent" in
1639         true) case "\$rp" in
1640                 '') ans='';;
1641                 esac;;
1642         esac;;
1643 esac
1644 while expr "X\$ans" : "X!" >/dev/null; do
1645         read answ
1646         set x \$xxxm
1647         shift
1648         aok=''; eval "ans=\\"\$answ\\"" && aok=y
1649         case  "\$answ" in
1650         "!")
1651                 sh 1>&4
1652                 echo " "
1653                 $myecho
1654                 ;;
1655         !*)
1656                 set x \`expr "X\$ans" : "X!\(.*\)\$"\`
1657                 shift
1658                 sh 1>&4 -c "\$*"
1659                 echo " "
1660                 $myecho
1661                 ;;
1662         "\$ans")
1663                 case "\$ans" in
1664                 \\&*)
1665                         set x \`expr "X\$ans" : "X&\(.*\)\$"\`
1666                         shift
1667                         case "\$1" in
1668                         -d)
1669                                 fastread=yes
1670                                 echo "(OK, I'll run with -d after this question.)" >&4
1671                                 ;;
1672                         -*)
1673                                 echo "*** Sorry, \$1 not supported yet." >&4
1674                                 ;;
1675                         esac
1676                         $myecho
1677                         ans=!
1678                         ;;
1679                 esac;;
1680         *)
1681                 case "\$aok" in
1682                 y)
1683                         echo "*** Substitution done -- please confirm."
1684                         xxxm="\$ans"
1685                         ans=\`echo $n "\$ans$c" | tr '$trnl' ' '\`
1686                         xxxm="\$ans"
1687                         ans=!
1688                         ;;
1689                 *)
1690                         echo "*** Error -- try again."
1691                         ans=!
1692                         ;;
1693                 esac
1694                 $myecho
1695                 ;;
1696         esac
1697         case "\$ans\$xxxm\$nostick" in
1698         '')
1699                 ans=!
1700                 $myecho
1701                 ;;
1702         esac
1703 done
1704 case "\$ans" in
1705 '') ans="\$xxxm";;
1706 esac
1707 EOSC
1708
1709 : create .config dir to save info across Configure sessions
1710 test -d ../.config || mkdir ../.config
1711 cat >../.config/README <<EOF
1712 This directory created by Configure to save information that should
1713 persist across sessions for $package.
1714
1715 You may safely delete it if you wish.
1716 EOF
1717
1718 : general instructions
1719 needman=true
1720 firsttime=true
1721 user=`(logname) 2>/dev/null`
1722 case "$user" in
1723 '') user=`whoami 2>&1`;;
1724 esac
1725 if $contains "^$user\$" ../.config/instruct >/dev/null 2>&1; then
1726         firsttime=false
1727         echo " "
1728         rp='Would you like to see the instructions?'
1729         dflt=n
1730         . ./myread
1731         case "$ans" in
1732         [yY]*) ;;
1733         *) needman=false;;
1734         esac
1735 fi
1736 if $needman; then
1737         cat <<EOH
1738
1739 This installation shell script will examine your system and ask you questions
1740 to determine how the perl5 package should be installed. If you get
1741 stuck on a question, you may use a ! shell escape to start a subshell or
1742 execute a command.  Many of the questions will have default answers in square
1743 brackets; typing carriage return will give you the default.
1744
1745 On some of the questions which ask for file or directory names you are allowed
1746 to use the ~name construct to specify the login directory belonging to "name",
1747 even if you don't have a shell which knows about that.  Questions where this is
1748 allowed will be marked "(~name ok)".
1749
1750 EOH
1751         rp=''
1752         dflt='Type carriage return to continue'
1753         . ./myread
1754         cat <<'EOH'
1755
1756 The prompter used in this script allows you to use shell variables and
1757 backticks in your answers.  You may use $1, $2, etc...  to refer to the words
1758 in the default answer, as if the default line was a set of arguments given to a
1759 script shell.  This means you may also use $* to repeat the whole default line,
1760 so you do not have to re-type everything to add something to the default.
1761
1762 Everytime there is a substitution, you will have to confirm.  If there is an
1763 error (e.g. an unmatched backtick), the default answer will remain unchanged
1764 and you will be prompted again.
1765
1766 If you are in a hurry, you may run 'Configure -d'.  This will bypass nearly all
1767 the questions and use the computed defaults (or the previous answers if there
1768 was already a config.sh file). Type 'Configure -h' for a list of options.
1769 You may also start interactively and then answer '& -d' at any prompt to turn
1770 on the non-interactive behaviour for the remainder of the execution.
1771
1772 EOH
1773         . ./myread
1774         cat <<EOH
1775
1776 Much effort has been expended to ensure that this shell script will run on any
1777 Unix system.  If despite that it blows up on yours, your best bet is to edit
1778 Configure and run it again.  If you can't run Configure for some reason,
1779 you'll have to generate a config.sh file by hand.  Whatever problems you
1780 have, let me (perlbug@perl.com) know how I blew it.
1781
1782 This installation script affects things in two ways:
1783
1784 1) it may do direct variable substitutions on some of the files included
1785    in this kit.
1786 2) it builds a config.h file for inclusion in C programs.  You may edit
1787    any of these files as the need arises after running this script.
1788
1789 If you make a mistake on a question, there is no easy way to back up to it
1790 currently.  The easiest thing to do is to edit config.sh and rerun all the SH
1791 files.  Configure will offer to let you do this before it runs the SH files.
1792
1793 EOH
1794         dflt='Type carriage return to continue'
1795         . ./myread
1796         case "$firsttime" in
1797         true) echo $user >>../.config/instruct;;
1798         esac
1799 fi
1800
1801 : find out where common programs are
1802 echo " "
1803 echo "Locating common programs..." >&4
1804 cat <<EOSC >loc
1805 $startsh
1806 case \$# in
1807 0) exit 1;;
1808 esac
1809 thing=\$1
1810 shift
1811 dflt=\$1
1812 shift
1813 for dir in \$*; do
1814         case "\$thing" in
1815         .)
1816         if test -d \$dir/\$thing; then
1817                 echo \$dir
1818                 exit 0
1819         fi
1820         ;;
1821         *)
1822         for thisthing in \$dir/\$thing; do
1823                 : just loop through to pick last item
1824         done
1825         if test -f \$thisthing; then
1826                 echo \$thisthing
1827                 exit 0
1828         elif test -f \$dir/\$thing.exe; then
1829                 if test -n "$DJGPP"; then
1830                         echo \$dir/\$thing.exe
1831                 else
1832                         : on Eunice apparently
1833                         echo \$dir/\$thing
1834                 fi
1835                 exit 0
1836         fi
1837         ;;
1838         esac
1839 done
1840 echo \$dflt
1841 exit 1
1842 EOSC
1843 chmod +x loc
1844 $eunicefix loc
1845 loclist="
1846 awk
1847 cat
1848 comm
1849 cp
1850 echo
1851 expr
1852 grep
1853 ls
1854 make
1855 mkdir
1856 rm
1857 sed
1858 sort
1859 touch
1860 tr
1861 uniq
1862 "
1863 trylist="
1864 Mcc
1865 ar
1866 byacc
1867 cpp
1868 csh
1869 date
1870 egrep
1871 gzip
1872 less
1873 ln
1874 more
1875 nm
1876 nroff
1877 perl
1878 pg
1879 test
1880 uname
1881 zip
1882 "
1883 pth=`echo $PATH | sed -e "s/$p_/ /g"`
1884 pth="$pth /lib /usr/lib"
1885 for file in $loclist; do
1886         eval xxx=\$$file
1887         case "$xxx" in
1888         /*|?:[\\/]*)
1889                 if test -f "$xxx"; then
1890                         : ok
1891                 else
1892                         echo "WARNING: no $xxx -- ignoring your setting for $file." >&4
1893                         xxx=`./loc $file $file $pth`
1894                 fi
1895                 ;;
1896         '') xxx=`./loc $file $file $pth`;;
1897         *) xxx=`./loc $xxx $xxx $pth`;;
1898         esac
1899         eval $file=$xxx
1900         eval _$file=$xxx
1901         case "$xxx" in
1902         /*)
1903                 echo $file is in $xxx.
1904                 ;;
1905         ?:[\\/]*)
1906                 echo $file is in $xxx.
1907                 ;;
1908         *)
1909                 echo "I don't know where '$file' is, and my life depends on it." >&4
1910                 echo "Go find a public domain implementation or fix your PATH setting!" >&4
1911                 exit 1
1912                 ;;
1913         esac
1914 done
1915 echo " "
1916 echo "Don't worry if any of the following aren't found..."
1917 say=offhand
1918 for file in $trylist; do
1919         eval xxx=\$$file
1920         case "$xxx" in
1921         /*|?:[\\/]*)
1922                 if test -f "$xxx"; then
1923                         : ok
1924                 else
1925                         echo "WARNING: no $xxx -- ignoring your setting for $file." >&4
1926                         xxx=`./loc $file $file $pth`
1927                 fi
1928                 ;;
1929         '') xxx=`./loc $file $file $pth`;;
1930         *) xxx=`./loc $xxx $xxx $pth`;;
1931         esac
1932         eval $file=$xxx
1933         eval _$file=$xxx
1934         case "$xxx" in
1935         /*)
1936                 echo $file is in $xxx.
1937                 ;;
1938         ?:[\\/]*)
1939                 echo $file is in $xxx.
1940                 ;;
1941         *)
1942                 echo "I don't see $file out there, $say."
1943                 say=either
1944                 ;;
1945         esac
1946 done
1947 case "$egrep" in
1948 egrep)
1949         echo "Substituting grep for egrep."
1950         egrep=$grep
1951         ;;
1952 esac
1953 case "$ln" in
1954 ln)
1955         echo "Substituting cp for ln."
1956         ln=$cp
1957         ;;
1958 esac
1959 case "$test" in
1960 test)
1961         echo "Hopefully test is built into your sh."
1962         ;;
1963 *)
1964         if `sh -c "PATH= test true" >/dev/null 2>&1`; then
1965                 echo "Using the test built into your sh."
1966                 test=test
1967                 _test=test
1968         fi
1969         ;;
1970 esac
1971 case "$echo" in
1972 echo)
1973         echo "Hopefully echo is built into your sh."
1974         ;;
1975 '') ;;
1976 *)
1977         echo " "
1978 echo "Checking compatibility between $echo and builtin echo (if any)..." >&4
1979         $echo $n "hi there$c" >foo1
1980         echo $n "hi there$c" >foo2
1981         if cmp foo1 foo2 >/dev/null 2>&1; then
1982                 echo "They are compatible.  In fact, they may be identical."
1983         else
1984                 case "$n" in
1985                 '-n') n='' c='\c';;
1986                 *) n='-n' c='';;
1987                 esac
1988                 cat <<FOO
1989 They are not compatible!  You are probably running ksh on a non-USG system.
1990 I'll have to use $echo instead of the builtin, since Bourne shell doesn't
1991 have echo built in and we may have to run some Bourne shell scripts.  That
1992 means I'll have to use '$n$c' to suppress newlines now.  Life is ridiculous.
1993
1994 FOO
1995                 $echo $n "The star should be here-->$c"
1996                 $echo "*"
1997         fi
1998         $rm -f foo1 foo2
1999         ;;
2000 esac
2001
2002 : determine whether symbolic links are supported
2003 echo " "
2004 $touch blurfl
2005 if $ln -s blurfl sym > /dev/null 2>&1 ; then
2006         echo "Symbolic links are supported." >&4
2007         lns="$ln -s"
2008 else
2009         echo "Symbolic links are NOT supported." >&4
2010         lns="$ln"
2011 fi
2012 $rm -f blurfl sym
2013
2014 : see whether [:lower:] and [:upper:] are supported character classes
2015 echo " "
2016 case "`echo AbyZ | $tr '[:lower:]' '[:upper:]' 2>/dev/null`" in
2017 ABYZ)
2018         echo "Good, your tr supports [:lower:] and [:upper:] to convert case." >&4
2019         up='[:upper:]'
2020         low='[:lower:]'
2021         ;;
2022 *)      # There is a discontinuity in EBCDIC between 'I' and 'J'
2023         # (0xc9 and 0xd1), therefore that is a nice testing point.
2024         if test "X$up" = X -o "X$low" = X; then
2025             case "`echo IJ | $tr '[I-J]' '[i-j]' 2>/dev/null`" in
2026             ij) up='[A-Z]'
2027                 low='[a-z]'
2028                 ;;
2029             esac
2030         fi
2031         if test "X$up" = X -o "X$low" = X; then
2032             case "`echo IJ | $tr I-J i-j 2>/dev/null`" in
2033             ij) up='A-Z'
2034                 low='a-z'
2035                 ;;
2036             esac
2037         fi
2038         if test "X$up" = X -o "X$low" = X; then
2039             case "`echo IJ | od -x 2>/dev/null`" in
2040             *C9D1*|*c9d1*)
2041                 echo "Hey, this might be EBCDIC." >&4
2042                 if test "X$up" = X -o "X$low" = X; then
2043                     case "`echo IJ | $tr '[A-IJ-RS-Z]' '[a-ij-rs-z]' 2>/dev/null`" in
2044                     ij) up='[A-IJ-RS-Z]'
2045                         low='[a-ij-rs-z]'
2046                         ;;
2047                     esac
2048                 fi
2049                 if test "X$up" = X -o "X$low" = X; then
2050                     case "`echo IJ | $tr A-IJ-RS-Z a-ij-rs-z 2>/dev/null`" in
2051                     ij) up='A-IJ-RS-Z'
2052                         low='a-ij-rs-z'
2053                         ;;
2054                     esac
2055                 fi
2056                 ;;
2057             esac
2058         fi
2059 esac
2060 case "`echo IJ | $tr \"$up\" \"$low\" 2>/dev/null`" in
2061 ij)
2062     echo "Using $up and $low to convert case." >&4
2063     ;;
2064 *)
2065     echo "I don't know how to translate letters from upper to lower case." >&4
2066     echo "Your tr is not acting any way I know of." >&4
2067     exit 1
2068     ;;
2069 esac
2070 : set up the translation script tr, must be called with ./tr of course
2071 cat >tr <<EOSC
2072 $startsh
2073 case "\$1\$2" in
2074 '[A-Z][a-z]') exec $tr '$up' '$low';;
2075 '[a-z][A-Z]') exec $tr '$low' '$up';;
2076 esac
2077 exec $tr "\$@"
2078 EOSC
2079 chmod +x tr
2080 $eunicefix tr
2081
2082 : Try to determine whether config.sh was made on this system
2083 case "$config_sh" in
2084 '')
2085 myuname=`$uname -a 2>/dev/null`
2086 $test -z "$myuname" && myuname=`hostname 2>/dev/null`
2087 # tr '[A-Z]' '[a-z]' would not work in EBCDIC
2088 # because the A-Z/a-z are not consecutive.
2089 myuname=`echo $myuname | $sed -e 's/^[^=]*=//' -e 's/\///g' | \
2090         ./tr '[A-Z]' '[a-z]' | $tr $trnl ' '`
2091 newmyuname="$myuname"
2092 dflt=n
2093 case "$knowitall" in
2094 '')
2095         if test -f ../config.sh; then
2096                 if $contains myuname= ../config.sh >/dev/null 2>&1; then
2097                         eval "`grep myuname= ../config.sh`"
2098                 fi
2099                 if test "X$myuname" = "X$newmyuname"; then
2100                         dflt=y
2101                 fi
2102         fi
2103         ;;
2104 *) dflt=y;;
2105 esac
2106
2107 : Get old answers from old config file if Configure was run on the
2108 : same system, otherwise use the hints.
2109 hint=default
2110 cd ..
2111 if test -f config.sh; then
2112         echo " "
2113         rp="I see a config.sh file.  Shall I use it to set the defaults?"
2114         . UU/myread
2115         case "$ans" in
2116         n*|N*) echo "OK, I'll ignore it."; mv config.sh config.sh.old;;
2117         *)  echo "Fetching default answers from your old config.sh file..." >&4
2118                 tmp_n="$n"
2119                 tmp_c="$c"
2120                 tmp_sh="$sh"
2121                 . ./config.sh
2122                 cp config.sh UU
2123                 n="$tmp_n"
2124                 c="$tmp_c"
2125                 : Older versions did not always set $sh.  Catch re-use of such
2126                 : an old config.sh.
2127                 case "$sh" in
2128                 '') sh="$tmp_sh" ;;
2129                 esac
2130                 hint=previous
2131                 ;;
2132         esac
2133 fi
2134 if test ! -f config.sh; then
2135         $cat <<EOM
2136
2137 First time through, eh?  I have some defaults handy for some systems
2138 that need some extra help getting the Configure answers right:
2139
2140 EOM
2141         (cd $src/hints; ls -C *.sh) | $sed 's/\.sh/   /g' >&4
2142         dflt=''
2143         : Half the following guesses are probably wrong... If you have better
2144         : tests or hints, please send them to perlbug@perl.com
2145         : The metaconfig authors would also appreciate a copy...
2146         $test -f /irix && osname=irix
2147         $test -f /xenix && osname=sco_xenix
2148         $test -f /dynix && osname=dynix
2149         $test -f /dnix && osname=dnix
2150         $test -f /lynx.os && osname=lynxos
2151         $test -f /unicos && osname=unicos && osvers=`$uname -r`
2152         $test -f /unicosmk && osname=unicosmk && osvers=`$uname -r`
2153         $test -f /unicosmk.ar && osname=unicosmk && osvers=`$uname -r`
2154         $test -f /bin/mips && /bin/mips && osname=mips
2155         $test -d /NextApps && set X `hostinfo | grep 'NeXT Mach.*:' | \
2156                 $sed -e 's/://' -e 's/\./_/'` && osname=next && osvers=$4
2157         $test -d /usr/apollo/bin && osname=apollo
2158         $test -f /etc/saf/_sactab && osname=svr4
2159         $test -d /usr/include/minix && osname=minix
2160         if $test -d /MachTen -o -d /MachTen_Folder; then
2161                 osname=machten
2162                 if $test -x /sbin/version; then
2163                         osvers=`/sbin/version | $awk '{print $2}' |
2164                         $sed -e 's/[A-Za-z]$//'`
2165                 elif $test -x /usr/etc/version; then
2166                         osvers=`/usr/etc/version | $awk '{print $2}' |
2167                         $sed -e 's/[A-Za-z]$//'`
2168                 else
2169                         osvers="$2.$3"
2170                 fi
2171         fi
2172
2173         $test -f /sys/posix.dll &&
2174                 $test -f /usr/bin/what &&
2175                 set X `/usr/bin/what /sys/posix.dll` &&
2176                 $test "$3" = UWIN &&
2177                 osname=uwin &&
2178                 osvers="$5"
2179
2180         if $test -f $uname; then
2181                 set X $myuname
2182                 shift
2183
2184                 case "$5" in
2185                 fps*) osname=fps ;;
2186                 mips*)
2187                         case "$4" in
2188                         umips) osname=umips ;;
2189                         *) osname=mips ;;
2190                         esac;;
2191                 [23]100) osname=mips ;;
2192                 next*) osname=next ;;
2193                 i386*)
2194                         tmp=`/bin/uname -X 2>/dev/null|awk '/3\.2v[45]/{ print $(NF) }'`
2195                         if $test "$tmp" != "" -a "$3" = "3.2" -a -f '/etc/systemid'; then
2196                                 osname='sco'
2197                                 osvers=$tmp
2198                         elif $test -f /etc/kconfig; then
2199                                 osname=isc
2200                                 if test "$lns" = "$ln -s"; then
2201                                         osvers=4
2202                                 elif $contains _SYSV3 /usr/include/stdio.h > /dev/null 2>&1 ; then
2203                                         osvers=3
2204                                 elif $contains _POSIX_SOURCE /usr/include/stdio.h > /dev/null 2>&1 ; then
2205                                         osvers=2
2206                                 fi
2207                         fi
2208                         tmp=''
2209                         ;;
2210                 pc*)
2211                         if test -n "$DJGPP"; then
2212                                 osname=dos
2213                                 osvers=djgpp
2214                         fi
2215                         ;;
2216                 esac
2217
2218                 case "$1" in
2219                 aix) osname=aix
2220                         tmp=`( (oslevel) 2>/dev/null || echo "not found") 2>&1`
2221                         case "$tmp" in
2222                         'not found') osvers="$4"."$3" ;;
2223                         '<3240'|'<>3240') osvers=3.2.0 ;;
2224                         '=3240'|'>3240'|'<3250'|'<>3250') osvers=3.2.4 ;;
2225                         '=3250'|'>3250') osvers=3.2.5 ;;
2226                         *) osvers=$tmp;;
2227                         esac
2228                         ;;
2229                 bsd386) osname=bsd386
2230                         osvers=`$uname -r`
2231                         ;;
2232                 cygwin*) osname=cygwin
2233                         osvers="$3"
2234                         ;;
2235                 *dc.osx) osname=dcosx
2236                         osvers="$3"
2237                         ;;
2238                 dnix) osname=dnix
2239                         osvers="$3"
2240                         ;;
2241                 domainos) osname=apollo
2242                         osvers="$3"
2243                         ;;
2244                 dgux) osname=dgux 
2245                         osvers="$3"
2246                         ;;
2247                 dynixptx*) osname=dynixptx
2248                         osvers=`echo "$4"|sed 's/^v//'`
2249                         ;;
2250                 freebsd) osname=freebsd 
2251                         osvers="$3" ;;
2252                 genix) osname=genix ;;
2253                 hp*) osname=hpux 
2254                         osvers=`echo "$3" | $sed 's,.*\.\([0-9]*\.[0-9]*\),\1,'`
2255                         ;;
2256                 irix*) osname=irix
2257                         case "$3" in
2258                         4*) osvers=4 ;;
2259                         5*) osvers=5 ;;
2260                         *)      osvers="$3" ;;
2261                         esac
2262                         ;;
2263                 linux) osname=linux
2264                         case "$3" in
2265                         *)      osvers="$3" ;;
2266                         esac
2267                         ;;
2268                 MiNT) osname=mint
2269                         ;;
2270                 netbsd*) osname=netbsd
2271                         osvers="$3"
2272                         ;;
2273                 news-os) osvers="$3"
2274                         case "$3" in
2275                         4*) osname=newsos4 ;;
2276                         *) osname=newsos ;;
2277                         esac
2278                         ;;
2279                 next*) osname=next ;;
2280                 POSIX-BC | posix-bc ) osname=posix-bc
2281                         osvers="$3"
2282                         ;;
2283                 powerux | power_ux | powermax_os | powermaxos | \
2284                 powerunix | power_unix) osname=powerux
2285                         osvers="$3"
2286                         ;;
2287                 qnx) osname=qnx
2288                         osvers="$4"
2289                         ;;
2290                 solaris) osname=solaris
2291                         case "$3" in
2292                         5*) osvers=`echo $3 | $sed 's/^5/2/g'` ;;
2293                         *)      osvers="$3" ;;
2294                         esac
2295                         ;;
2296                 sunos) osname=sunos
2297                         case "$3" in
2298                         5*) osname=solaris
2299                                 osvers=`echo $3 | $sed 's/^5/2/g'` ;;
2300                         *)      osvers="$3" ;;
2301                         esac
2302                         ;;
2303                 titanos) osname=titanos
2304                         case "$3" in
2305                         1*) osvers=1 ;;
2306                         2*) osvers=2 ;;
2307                         3*) osvers=3 ;;
2308                         4*) osvers=4 ;;
2309                         *)      osvers="$3" ;;
2310                         esac
2311                         ;;
2312                 ultrix) osname=ultrix
2313                         osvers="$3"
2314                         ;;
2315                 osf1|mls+)      case "$5" in
2316                                 alpha)
2317                                         osname=dec_osf
2318                                         osvers=`echo "$3" | sed 's/^[xvt]//'`
2319                                         ;;
2320                         hp*)    osname=hp_osf1  ;;
2321                         mips)   osname=mips_osf1 ;;
2322                         esac
2323                         ;;
2324                 unixware) osname=svr5
2325                         osvers="$4"
2326                         ;;
2327                 uts) osname=uts
2328                         osvers="$3"
2329                         ;;
2330                 $2) case "$osname" in
2331                         *isc*) ;;
2332                         *freebsd*) ;;
2333                         svr*)
2334                                 : svr4.x or possibly later
2335                                 case "svr$3" in 
2336                                 ${osname}*)
2337                                         osname=svr$3
2338                                         osvers=$4
2339                                         ;;
2340                                 esac
2341                                 case "$osname" in
2342                                 svr4.0)
2343                                         : Check for ESIX
2344                                         if test -f /stand/boot ; then
2345                                                 eval `grep '^INITPROG=[a-z/0-9]*$' /stand/boot`
2346                                                 if test -n "$INITPROG" -a -f "$INITPROG"; then
2347                         isesix=`strings -a $INITPROG|grep 'ESIX SYSTEM V/386 Release 4.0'`
2348                                                         if test -n "$isesix"; then
2349                                                                 osname=esix4
2350                                                         fi
2351                                                 fi
2352                                         fi
2353                                         ;;
2354                                 esac
2355                                 ;;
2356                         *)      if test -f /etc/systemid; then
2357                                         osname=sco
2358                                         set `echo $3 | $sed 's/\./ /g'` $4
2359                                         if $test -f $src/hints/sco_$1_$2_$3.sh; then
2360                                                 osvers=$1.$2.$3
2361                                         elif $test -f $src/hints/sco_$1_$2.sh; then
2362                                                 osvers=$1.$2
2363                                         elif $test -f $src/hints/sco_$1.sh; then
2364                                                 osvers=$1
2365                                         fi
2366                                 else
2367                                         case "$osname" in
2368                                         '') : Still unknown.  Probably a generic Sys V.
2369                                                 osname="sysv"
2370                                                 osvers="$3"
2371                                                 ;;
2372                                         esac
2373                                 fi
2374                                 ;;
2375                         esac
2376                         ;;
2377                 *)      case "$osname" in
2378                         '') : Still unknown.  Probably a generic BSD.
2379                                 osname="$1"
2380                                 osvers="$3"
2381                                 ;;
2382                         esac
2383                         ;;
2384                 esac
2385         else
2386                 if test -f /vmunix -a -f $src/hints/news_os.sh; then
2387                         (what /vmunix | UU/tr '[A-Z]' '[a-z]') > UU/kernel.what 2>&1
2388                         if $contains news-os UU/kernel.what >/dev/null 2>&1; then
2389                                 osname=news_os
2390                         fi
2391                         $rm -f UU/kernel.what
2392                 elif test -d c:/.; then
2393                         set X $myuname
2394                         osname=os2
2395                         osvers="$5"
2396                 fi
2397         fi
2398         
2399         : Now look for a hint file osname_osvers, unless one has been
2400         : specified already.
2401         case "$hintfile" in
2402         ''|' ')
2403                 file=`echo "${osname}_${osvers}" | $sed -e 's@\.@_@g' -e 's@_$@@'`
2404                 : Also try without trailing minor version numbers.
2405                 xfile=`echo $file | $sed -e 's@_[^_]*$@@'`
2406                 xxfile=`echo $xfile | $sed -e 's@_[^_]*$@@'`
2407                 xxxfile=`echo $xxfile | $sed -e 's@_[^_]*$@@'`
2408                 xxxxfile=`echo $xxxfile | $sed -e 's@_[^_]*$@@'`
2409                 case "$file" in
2410                 '') dflt=none ;;
2411                 *)  case "$osvers" in
2412                         '') dflt=$file
2413                                 ;;
2414                         *)  if $test -f $src/hints/$file.sh ; then
2415                                         dflt=$file
2416                                 elif $test -f $src/hints/$xfile.sh ; then
2417                                         dflt=$xfile
2418                                 elif $test -f $src/hints/$xxfile.sh ; then
2419                                         dflt=$xxfile
2420                                 elif $test -f $src/hints/$xxxfile.sh ; then
2421                                         dflt=$xxxfile
2422                                 elif $test -f $src/hints/$xxxxfile.sh ; then
2423                                         dflt=$xxxxfile
2424                                 elif $test -f "$src/hints/${osname}.sh" ; then
2425                                         dflt="${osname}"
2426                                 else
2427                                         dflt=none
2428                                 fi
2429                                 ;;
2430                         esac
2431                         ;;
2432                 esac
2433                 if $test -f Policy.sh ; then
2434                         case "$dflt" in
2435                         *Policy*) ;;
2436                         none) dflt="Policy" ;;
2437                         *) dflt="Policy $dflt" ;;
2438                         esac
2439                 fi
2440                 ;;
2441         *)
2442                 dflt=`echo $hintfile | $sed 's/\.sh$//'`
2443                 ;;
2444         esac
2445
2446         if $test -f Policy.sh ; then
2447                 $cat <<EOM
2448
2449 There's also a Policy hint file available, which should make the
2450 site-specific (policy) questions easier to answer.
2451 EOM
2452
2453         fi
2454
2455         $cat <<EOM
2456
2457 You may give one or more space-separated answers, or "none" if appropriate.
2458 A well-behaved OS will have no hints, so answering "none" or just "Policy"
2459 is a good thing.  DO NOT give a wrong version or a wrong OS.
2460
2461 EOM
2462
2463         rp="Which of these apply, if any?"
2464         . UU/myread
2465         tans=$ans
2466         for file in $tans; do
2467                 if $test X$file = XPolicy -a -f Policy.sh; then
2468                         . Policy.sh
2469                         $cat Policy.sh >> UU/config.sh
2470                 elif $test -f $src/hints/$file.sh; then
2471                         . $src/hints/$file.sh
2472                         $cat $src/hints/$file.sh >> UU/config.sh
2473                 elif $test X$tans = X -o X$tans = Xnone ; then
2474                         : nothing
2475                 else
2476                         : Give one chance to correct a possible typo.
2477                         echo "$file.sh does not exist"
2478                         dflt=$file
2479                         rp="hint to use instead?"
2480                         . UU/myread
2481                         for file in $ans; do
2482                                 if $test -f "$src/hints/$file.sh"; then
2483                                         . $src/hints/$file.sh
2484                                         $cat $src/hints/$file.sh >> UU/config.sh
2485                                 elif $test X$ans = X -o X$ans = Xnone ; then
2486                                         : nothing
2487                                 else
2488                                         echo "$file.sh does not exist -- ignored."
2489                                 fi
2490                         done
2491                 fi
2492         done
2493
2494         hint=recommended
2495         : Remember our hint file for later.
2496         if $test -f "$src/hints/$file.sh" ; then
2497                 hintfile="$file"
2498         else
2499                 hintfile=''
2500         fi
2501 fi
2502 cd UU
2503 ;;
2504 *)
2505         echo " "
2506         echo "Fetching default answers from $config_sh..." >&4
2507         tmp_n="$n"
2508         tmp_c="$c"
2509         cd ..
2510         cp $config_sh config.sh 2>/dev/null
2511         chmod +w config.sh
2512         . ./config.sh
2513         cd UU
2514         cp ../config.sh .
2515         n="$tmp_n"
2516         c="$tmp_c"
2517         hint=previous
2518         ;;
2519 esac
2520 test "$override" && . ./optdef.sh
2521 myuname="$newmyuname"
2522
2523 : Restore computed paths
2524 for file in $loclist $trylist; do
2525         eval $file="\$_$file"
2526 done
2527
2528 cat << EOM
2529
2530 Configure uses the operating system name and version to set some defaults.
2531 The default value is probably right if the name rings a bell. Otherwise,
2532 since spelling matters for me, either accept the default or answer "none"
2533 to leave it blank.
2534
2535 EOM
2536 case "$osname" in
2537         ''|' ')
2538                 case "$hintfile" in
2539                 ''|' '|none) dflt=none ;;
2540                 *)  dflt=`echo $hintfile | $sed -e 's/\.sh$//' -e 's/_.*$//'` ;;
2541                 esac
2542                 ;;
2543         *) dflt="$osname" ;;
2544 esac
2545 rp="Operating system name?"
2546 . ./myread
2547 case "$ans" in
2548 none)  osname='' ;;
2549 *) osname=`echo "$ans" | $sed -e 's/[   ][      ]*/_/g' | ./tr '[A-Z]' '[a-z]'`;;
2550 esac
2551 echo " "
2552 case "$osvers" in
2553         ''|' ')
2554                 case "$hintfile" in
2555                 ''|' '|none) dflt=none ;;
2556                 *)      dflt=`echo $hintfile | $sed -e 's/\.sh$//' -e 's/^[^_]*//'`
2557                         dflt=`echo $dflt | $sed -e 's/^_//' -e 's/_/./g'`
2558                         case "$dflt" in
2559                         ''|' ') dflt=none ;;
2560                         esac
2561                         ;;
2562                 esac
2563                 ;;
2564         *) dflt="$osvers" ;;
2565 esac
2566 rp="Operating system version?"
2567 . ./myread
2568 case "$ans" in
2569 none)  osvers='' ;;
2570 *) osvers="$ans" ;;
2571 esac
2572
2573
2574 . ./posthint.sh
2575
2576 : who configured the system
2577 cf_time=`LC_ALL=C; LANGUAGE=C; export LC_ALL; export LANGUAGE; $date 2>&1`
2578 cf_by=`(logname) 2>/dev/null`
2579 case "$cf_by" in
2580 "")
2581         cf_by=`(whoami) 2>/dev/null`
2582         case "$cf_by" in
2583         "") cf_by=unknown ;;
2584         esac ;;
2585 esac
2586
2587 : set up the script used to warn in case of inconsistency
2588 cat <<EOS >whoa
2589 $startsh
2590 EOS
2591 cat <<'EOSC' >>whoa
2592 dflt=y
2593 echo " "
2594 echo "*** WHOA THERE!!! ***" >&4
2595 echo "    The $hint value for \$$var on this machine was \"$was\"!" >&4
2596 rp="    Keep the $hint value?"
2597 . ./myread
2598 case "$ans" in
2599 y) td=$was; tu=$was;;
2600 esac
2601 EOSC
2602
2603 : function used to set $1 to $val
2604 setvar='var=$1; eval "was=\$$1"; td=$define; tu=$undef;
2605 case "$val$was" in
2606 $define$undef) . ./whoa; eval "$var=\$td";;
2607 $undef$define) . ./whoa; eval "$var=\$tu";;
2608 *) eval "$var=$val";;
2609 esac'
2610
2611 cat <<EOM
2612
2613 Perl can be built to take advantage of threads on some systems.
2614 To do so, Configure must be run with -Dusethreads.
2615
2616 Note that threading is a highly experimental feature, and
2617 some known race conditions still remain.  If you choose to try
2618 it, be very sure to not actually deploy it for production
2619 purposes.  README.threads has more details, and is required
2620 reading if you enable threads.
2621 EOM
2622 case "$usethreads" in
2623 $define|true|[yY]*)     dflt='y';;
2624 *) dflt='n';;
2625 esac
2626 rp='Build a threading Perl?'
2627 . ./myread
2628 case "$ans" in
2629 y|Y)    val="$define" ;;
2630 *)      val="$undef" ;;
2631 esac
2632 set usethreads
2633 eval $setvar
2634
2635 case "$usethreads" in
2636 $define)
2637         $cat <<EOM
2638
2639 As of 5.5.640, Perl has two different internal threading implementations,
2640 the 5.005 version (5005threads) and an interpreter-based version
2641 (ithreads) that has one interpreter per thread.  Both are very 
2642 experimental.  This arrangement exists to help developers work out
2643 which one is better.
2644
2645 If you're a casual user, you probably don't want interpreter-threads
2646 at this time.  There doesn't yet exist a way to create threads from
2647 within Perl in this model, i.e., "use Thread;" will NOT work.
2648 EOM
2649         : Default to ithreads unless overridden on command line or with
2650         : old config.sh
2651         dflt='y'
2652         case "$use5005threads" in
2653                 $define|true|[yY]*) dflt='n';;
2654         esac
2655         case "$useithreads" in
2656                 $undef|false|[nN]*) dflt='n';;
2657         esac
2658         rp='Use interpreter-based ithreads?'
2659         . ./myread
2660         case "$ans" in
2661         y|Y)    val="$define" ;;
2662         *)      val="$undef" ;;
2663         esac
2664         set useithreads
2665         eval $setvar
2666         : Now set use5005threads to the opposite value.
2667         case "$useithreads" in
2668         $define) val="$undef" ;;
2669         *) val="$define" ;;
2670         esac
2671         set use5005threads
2672         eval $setvar
2673         ;;
2674 *)
2675         useithreads="$undef"
2676         use5005threads="$undef"
2677         ;;
2678 esac
2679
2680 case "$d_oldpthreads" in
2681 '')     : Configure tests would be welcome here.  For now, assume undef.
2682         val="$undef" ;;
2683 *)      val="$d_oldpthreads" ;;
2684 esac
2685 set d_oldpthreads
2686 eval $setvar
2687
2688
2689 case "$usethreads" in
2690 "$define"|true|[yY]*)
2691 : Look for a hint-file generated 'call-back-unit'.  If the
2692 : user has specified that a threading perl is to be built,
2693 : we may need to set or change some other defaults.
2694         if $test -f usethreads.cbu; then
2695                 echo "Your platform has some specific hints for threaded builds, using them..."
2696                 . ./usethreads.cbu
2697         else
2698                 $cat <<EOM
2699 (Your platform doesn't have any specific hints for threaded builds.
2700  Assuming POSIX threads, then.)
2701 EOM
2702         fi
2703         ;;
2704 esac
2705
2706 cat <<EOM
2707
2708 Perl can be built so that multiple Perl interpreters can coexist
2709 within the same Perl executable.
2710 EOM
2711
2712 case "$useithreads" in
2713 $define)
2714         cat <<EOM
2715 This multiple interpreter support is required for interpreter-based threads.
2716 EOM
2717         val="$define"
2718         ;;
2719 *)
2720         echo 'Normally you do not need this and you should answer no.'
2721         case "$usemultiplicity" in
2722         $define|true|[yY]*)     dflt='y';;
2723         *) dflt='n';;
2724         esac
2725         rp='Build Perl for multiplicity?'
2726         . ./myread
2727         case "$ans" in
2728         y|Y)    val="$define" ;;
2729         *)      val="$undef" ;;
2730         esac
2731         ;;
2732 esac
2733 set usemultiplicity
2734 eval $setvar
2735
2736 : determine where manual pages are on this system
2737 echo " "
2738 case "$sysman" in
2739 '') 
2740         syspath='/usr/man/man1 /usr/man/mann /usr/man/manl /usr/man/local/man1'
2741         syspath="$syspath /usr/man/u_man/man1 /usr/share/man/man1"
2742         syspath="$syspath /usr/catman/u_man/man1 /usr/man/l_man/man1"
2743         syspath="$syspath /usr/local/man/u_man/man1 /usr/local/man/l_man/man1"
2744         syspath="$syspath /usr/man/man.L /local/man/man1 /usr/local/man/man1"
2745         sysman=`./loc . /usr/man/man1 $syspath`
2746         ;;
2747 esac
2748 if $test -d "$sysman"; then
2749         echo "System manual is in $sysman." >&4
2750 else
2751         echo "Could not find manual pages in source form." >&4
2752 fi
2753
2754 : see what memory models we can support
2755 case "$models" in
2756 '')
2757         $cat >pdp11.c <<'EOP'
2758 int main() {
2759 #ifdef pdp11
2760         exit(0);
2761 #else
2762         exit(1);
2763 #endif
2764 }
2765 EOP
2766         ( cc -o pdp11 pdp11.c ) >/dev/null 2>&1
2767         if $test -f pdp11 && ./pdp11 2>/dev/null; then
2768                 dflt='unsplit split'
2769         else
2770                 tans=`./loc . X /lib/small /lib/large /usr/lib/small /usr/lib/large /lib/medium /usr/lib/medium /lib/huge`
2771                 case "$tans" in
2772                 X) dflt='none';;
2773                 *) if $test -d /lib/small || $test -d /usr/lib/small; then
2774                                 dflt='small'
2775                         else
2776                                 dflt=''
2777                         fi
2778                         if $test -d /lib/medium || $test -d /usr/lib/medium; then
2779                                 dflt="$dflt medium"
2780                         fi
2781                         if $test -d /lib/large || $test -d /usr/lib/large; then
2782                                 dflt="$dflt large"
2783                         fi
2784                         if $test -d /lib/huge || $test -d /usr/lib/huge; then
2785                                 dflt="$dflt huge"
2786                         fi
2787                 esac
2788         fi;;
2789 *) dflt="$models";;
2790 esac
2791 $cat <<EOM
2792  
2793 Some systems have different model sizes.  On most systems they are called
2794 small, medium, large, and huge.  On the PDP11 they are called unsplit and
2795 split.  If your system doesn't support different memory models, say "none".
2796 If you wish to force everything to one memory model, say "none" here and
2797 put the appropriate flags later when it asks you for other cc and ld flags.
2798 Venix systems may wish to put "none" and let the compiler figure things out.
2799 (In the following question multiple model names should be space separated.)
2800
2801 The default for most systems is "none".
2802
2803 EOM
2804 rp="Which memory models are supported?"
2805 . ./myread
2806 models="$ans"
2807
2808 case "$models" in
2809 none)
2810         small=''
2811         medium=''
2812         large=''
2813         huge=''
2814         unsplit=''
2815         split=''
2816         ;;
2817 *split)
2818         case "$split" in
2819         '') if $contains '\-i' $sysman/ld.1 >/dev/null 2>&1 || \
2820                          $contains '\-i' $sysman/cc.1 >/dev/null 2>&1; then
2821                         dflt='-i'
2822                 else
2823                         dflt='none'
2824                 fi;;
2825         *) dflt="$split";;
2826         esac
2827         rp="What flag indicates separate I and D space?"
2828         . ./myread
2829         tans="$ans"
2830         case "$tans" in
2831         none) tans='';;
2832         esac
2833         split="$tans"
2834         unsplit='';;
2835 *large*|*small*|*medium*|*huge*)
2836         case "$models" in
2837         *large*)
2838                 case "$large" in
2839                 '') dflt='-Ml';;
2840                 *) dflt="$large";;
2841                 esac
2842         rp="What flag indicates large model?"
2843         . ./myread
2844         tans="$ans"
2845         case "$tans" in
2846         none) tans='';
2847         esac
2848         large="$tans";;
2849         *) large='';;
2850         esac
2851         case "$models" in
2852         *huge*) case "$huge" in
2853                 '') dflt='-Mh';;
2854                 *) dflt="$huge";;
2855                 esac
2856                 rp="What flag indicates huge model?"
2857                 . ./myread
2858                 tans="$ans"
2859                 case "$tans" in
2860                 none) tans='';
2861                 esac
2862                 huge="$tans";;
2863         *) huge="$large";;
2864         esac
2865         case "$models" in
2866         *medium*) case "$medium" in
2867                 '') dflt='-Mm';;
2868                 *) dflt="$medium";;
2869                 esac
2870                 rp="What flag indicates medium model?"
2871                 . ./myread
2872                 tans="$ans"
2873                 case "$tans" in
2874                 none) tans='';
2875                 esac
2876                 medium="$tans";;
2877         *) medium="$large";;
2878         esac
2879         case "$models" in
2880         *small*) case "$small" in
2881                 '') dflt='none';;
2882                 *) dflt="$small";;
2883                 esac
2884                 rp="What flag indicates small model?"
2885                 . ./myread
2886                 tans="$ans"
2887                 case "$tans" in
2888                 none) tans='';
2889                 esac
2890                 small="$tans";;
2891         *) small='';;
2892         esac
2893         ;;
2894 *)
2895         echo "Unrecognized memory models--you may have to edit Makefile.SH" >&4
2896         ;;
2897 esac
2898 $rm -f pdp11.* pdp11
2899
2900 : make some quick guesses about what we are up against
2901 echo " "
2902 $echo $n "Hmm...  $c"
2903 echo exit 1 >bsd
2904 echo exit 1 >usg
2905 echo exit 1 >v7
2906 echo exit 1 >osf1
2907 echo exit 1 >eunice
2908 echo exit 1 >xenix
2909 echo exit 1 >venix
2910 echo exit 1 >os2
2911 d_bsd="$undef"
2912 $cat /usr/include/signal.h /usr/include/sys/signal.h >foo 2>/dev/null
2913 if test -f /osf_boot || $contains 'OSF/1' /usr/include/ctype.h >/dev/null 2>&1
2914 then
2915         echo "Looks kind of like an OSF/1 system, but we'll see..."
2916         echo exit 0 >osf1
2917 elif test `echo abc | tr a-z A-Z` = Abc ; then
2918         xxx=`./loc addbib blurfl $pth`
2919         if $test -f $xxx; then
2920         echo "Looks kind of like a USG system with BSD features, but we'll see..."
2921                 echo exit 0 >bsd
2922                 echo exit 0 >usg
2923         else
2924                 if $contains SIGTSTP foo >/dev/null 2>&1 ; then
2925                         echo "Looks kind of like an extended USG system, but we'll see..."
2926                 else
2927                         echo "Looks kind of like a USG system, but we'll see..."
2928                 fi
2929                 echo exit 0 >usg
2930         fi
2931 elif $contains SIGTSTP foo >/dev/null 2>&1 ; then
2932         echo "Looks kind of like a BSD system, but we'll see..."
2933         d_bsd="$define"
2934         echo exit 0 >bsd
2935 else
2936         echo "Looks kind of like a Version 7 system, but we'll see..."
2937         echo exit 0 >v7
2938 fi
2939 case "$eunicefix" in
2940 *unixtovms*)
2941         $cat <<'EOI'
2942 There is, however, a strange, musty smell in the air that reminds me of
2943 something...hmm...yes...I've got it...there's a VMS nearby, or I'm a Blit.
2944 EOI
2945         echo exit 0 >eunice
2946         d_eunice="$define"
2947 : it so happens the Eunice I know will not run shell scripts in Unix format
2948         ;;
2949 *)
2950         echo " "
2951         echo "Congratulations.  You aren't running Eunice."
2952         d_eunice="$undef"
2953         ;;
2954 esac
2955 : Detect OS2.  The p_ variable is set above in the Head.U unit.
2956 case "$p_" in
2957 :) ;;
2958 *)
2959         $cat <<'EOI'
2960 I have the feeling something is not exactly right, however...don't tell me...
2961 lemme think...does HAL ring a bell?...no, of course, you're only running OS/2!
2962 EOI
2963         echo exit 0 >os2
2964         ;;
2965 esac
2966 if test -f /xenix; then
2967         echo "Actually, this looks more like a XENIX system..."
2968         echo exit 0 >xenix
2969         d_xenix="$define"
2970 else
2971         echo " "
2972         echo "It's not Xenix..."
2973         d_xenix="$undef"
2974 fi
2975 chmod +x xenix
2976 $eunicefix xenix
2977 if test -f /venix; then
2978         echo "Actually, this looks more like a VENIX system..."
2979         echo exit 0 >venix
2980 else
2981         echo " "
2982         if ./xenix; then
2983                 : null
2984         else
2985                 echo "Nor is it Venix..."
2986         fi
2987 fi
2988 chmod +x bsd usg v7 osf1 eunice xenix venix os2
2989 $eunicefix bsd usg v7 osf1 eunice xenix venix os2
2990 $rm -f foo
2991
2992 : see if we need a special compiler
2993 echo " "
2994 if ./usg; then
2995         case "$cc" in
2996         '') case "$Mcc" in
2997                 /*) dflt='Mcc';;
2998                 *) case "$large" in
2999                         -M*) dflt='cc';;
3000                         *)      if $contains '\-M' $sysman/cc.1 >/dev/null 2>&1 ; then
3001                                         if $contains '\-M' $sysman/cpp.1 >/dev/null 2>&1; then
3002                                                 dflt='cc'
3003                                         else
3004                                                 dflt='cc -M'
3005                                         fi
3006                                 else
3007                                         dflt='cc'
3008                                 fi;;
3009                         esac;;
3010                 esac;;
3011         *)  dflt="$cc";;
3012         esac
3013         case "$dflt" in
3014         *M*)    $cat <<'EOM'
3015 On some older systems the default C compiler will not resolve multiple global
3016 references that happen to have the same name.  On some such systems the "Mcc"
3017 command may be used to force these to be resolved.  On other systems a "cc -M"
3018 command is required.  (Note that the -M flag on other systems indicates a
3019 memory model to use!) If you have the Gnu C compiler, you might wish to use
3020 that instead.
3021
3022 EOM
3023         ;;
3024         esac
3025         rp="Use which C compiler?"
3026         . ./myread
3027         cc="$ans"
3028 else
3029         case "$cc" in
3030         '') dflt=cc;;
3031         *) dflt="$cc";;
3032         esac
3033         rp="Use which C compiler?"
3034         . ./myread
3035         cc="$ans"
3036 fi
3037 : Look for a hint-file generated 'call-back-unit'.  Now that the
3038 : user has specified the compiler, we may need to set or change some
3039 : other defaults.
3040 if $test -f cc.cbu; then
3041     . ./cc.cbu
3042 fi
3043 echo " "
3044 echo "Checking for GNU cc in disguise and/or its version number..." >&4
3045 $cat >gccvers.c <<EOM
3046 #include <stdio.h>
3047 int main() {
3048 #ifdef __GNUC__
3049 #ifdef __VERSION__
3050         printf("%s\n", __VERSION__);
3051 #else
3052         printf("%s\n", "1");
3053 #endif
3054 #endif
3055         exit(0);
3056 }
3057 EOM
3058 if $cc -o gccvers gccvers.c; then
3059         gccversion=`./gccvers`
3060         case "$gccversion" in
3061         '') echo "You are not using GNU cc." ;;
3062         *)  echo "You are using GNU cc $gccversion."
3063             ;;
3064         esac
3065 else
3066         echo " "
3067         echo "*** WHOA THERE!!! ***" >&4
3068         echo "    Your C compiler \"$cc\" doesn't seem to be working!" >&4
3069         case "$knowitall" in
3070         '')
3071         echo "    You'd better start hunting for one and let me know about it." >&4
3072                 exit 1
3073                 ;;
3074         esac
3075 fi
3076 $rm -f gccvers*
3077 case "$gccversion" in
3078 1*) cpp=`./loc gcc-cpp $cpp $pth` ;;
3079 esac
3080
3081 : decide how portable to be.  Allow command line overrides.
3082 case "$d_portable" in
3083 "$undef") ;;
3084 *)      d_portable="$define" ;;
3085 esac
3086
3087 : set up shell script to do ~ expansion
3088 cat >filexp <<EOSS
3089 $startsh
3090 : expand filename
3091 case "\$1" in
3092  ~/*|~)
3093         echo \$1 | $sed "s|~|\${HOME-\$LOGDIR}|"
3094         ;;
3095  ~*)
3096         if $test -f /bin/csh; then
3097                 /bin/csh -f -c "glob \$1"
3098                 failed=\$?
3099                 echo ""
3100                 exit \$failed
3101         else
3102                 name=\`$expr x\$1 : '..\([^/]*\)'\`
3103                 dir=\`$sed -n -e "/^\${name}:/{s/^[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:\([^:]*\).*"'\$'"/\1/" -e p -e q -e '}' </etc/passwd\`
3104                 if $test ! -d "\$dir"; then
3105                         me=\`basename \$0\`
3106                         echo "\$me: can't locate home directory for: \$name" >&2
3107                         exit 1
3108                 fi
3109                 case "\$1" in
3110                 */*)
3111                         echo \$dir/\`$expr x\$1 : '..[^/]*/\(.*\)'\`
3112                         ;;
3113                 *)
3114                         echo \$dir
3115                         ;;
3116                 esac
3117         fi
3118         ;;
3119 *)
3120         echo \$1
3121         ;;
3122 esac
3123 EOSS
3124 chmod +x filexp
3125 $eunicefix filexp
3126
3127 : now set up to get a file name
3128 cat <<EOS >getfile
3129 $startsh
3130 EOS
3131 cat <<'EOSC' >>getfile
3132 tilde=''
3133 fullpath=''
3134 already=''
3135 skip=''
3136 none_ok=''
3137 exp_file=''
3138 nopath_ok=''
3139 orig_rp="$rp"
3140 orig_dflt="$dflt"
3141 case "$gfpth" in
3142 '') gfpth='.' ;;
3143 esac
3144
3145 case "$fn" in
3146 *\(*)
3147         expr $fn : '.*(\(.*\)).*' | tr ',' $trnl >getfile.ok
3148         fn=`echo $fn | sed 's/(.*)//'`
3149         ;;
3150 esac
3151
3152 case "$fn" in
3153 *:*)
3154         loc_file=`expr $fn : '.*:\(.*\)'`
3155         fn=`expr $fn : '\(.*\):.*'`
3156         ;;
3157 esac
3158
3159 case "$fn" in
3160 *~*) tilde=true;;
3161 esac
3162 case "$fn" in
3163 */*) fullpath=true;;
3164 esac
3165 case "$fn" in
3166 *+*) skip=true;;
3167 esac
3168 case "$fn" in
3169 *n*) none_ok=true;;
3170 esac
3171 case "$fn" in
3172 *e*) exp_file=true;;
3173 esac
3174 case "$fn" in
3175 *p*) nopath_ok=true;;
3176 esac
3177
3178 case "$fn" in
3179 *f*) type='File';;
3180 *d*) type='Directory';;
3181 *l*) type='Locate';;
3182 esac
3183
3184 what="$type"
3185 case "$what" in
3186 Locate) what='File';;
3187 esac
3188
3189 case "$exp_file" in
3190 '')
3191         case "$d_portable" in
3192         "$define") ;;
3193         *) exp_file=true;;
3194         esac
3195         ;;
3196 esac
3197
3198 cd ..
3199 while test "$type"; do
3200         redo=''
3201         rp="$orig_rp"
3202         dflt="$orig_dflt"
3203         case "$tilde" in
3204         true) rp="$rp (~name ok)";;
3205         esac
3206         . UU/myread
3207         if test -f UU/getfile.ok && \
3208                 $contains "^$ans\$" UU/getfile.ok >/dev/null 2>&1
3209         then
3210                 value="$ans"
3211                 ansexp="$ans"
3212                 break
3213         fi
3214         case "$ans" in
3215         none)
3216                 value=''
3217                 ansexp=''
3218                 case "$none_ok" in
3219                 true) type='';;
3220                 esac
3221                 ;;
3222         *)
3223                 case "$tilde" in
3224                 '') value="$ans"
3225                         ansexp="$ans";;
3226                 *)
3227                         value=`UU/filexp $ans`
3228                         case $? in
3229                         0)
3230                                 if test "$ans" != "$value"; then
3231                                         echo "(That expands to $value on this system.)"
3232                                 fi
3233                                 ;;
3234                         *) value="$ans";;
3235                         esac
3236                         ansexp="$value"
3237                         case "$exp_file" in
3238                         '') value="$ans";;
3239                         esac
3240                         ;;
3241                 esac
3242                 case "$fullpath" in
3243                 true)
3244                         case "$ansexp" in
3245                         /*) value="$ansexp" ;;
3246                         *)
3247                                 redo=true
3248                                 case "$already" in
3249                                 true)
3250                                 echo "I shall only accept a full path name, as in /bin/ls." >&4
3251                                 echo "Use a ! shell escape if you wish to check pathnames." >&4
3252                                         ;;
3253                                 *)
3254                                 echo "Please give a full path name, starting with slash." >&4
3255                                         case "$tilde" in
3256                                         true)
3257                                 echo "Note that using ~name is ok provided it expands well." >&4
3258                                                 already=true
3259                                                 ;;
3260                                         esac
3261                                 esac
3262                                 ;;
3263                         esac
3264                         ;;
3265                 esac
3266                 case "$redo" in
3267                 '')
3268                         case "$type" in
3269                         File)
3270                                 for fp in $gfpth; do
3271                                         if test "X$fp" = X.; then
3272                                             pf="$ansexp"
3273                                         else    
3274                                             pf="$fp/$ansexp"
3275                                         fi
3276                                         if test -f "$pf"; then
3277                                                 type=''
3278                                         elif test -r "$pf" || (test -h "$pf") >/dev/null 2>&1
3279                                         then
3280                                                 echo "($value is not a plain file, but that's ok.)"
3281                                                 type=''
3282                                         fi
3283                                         if test X"$type" = X; then
3284                                             value="$pf"
3285                                             break
3286                                         fi
3287                                 done
3288                                 ;;
3289                         Directory)
3290                                 for fp in $gfpth; do
3291                                         if test "X$fp" = X.; then
3292                                             pf="$ansexp"
3293                                         else    
3294                                             pf="$fp/$ansexp"
3295                                         fi
3296                                         if test -d "$pf"; then
3297                                                 type=''
3298                                                 value="$pf"
3299                                                 break
3300                                         fi
3301                                 done
3302                                 ;;
3303                         Locate)
3304                                 if test -d "$ansexp"; then
3305                                         echo "(Looking for $loc_file in directory $value.)"
3306                                         value="$value/$loc_file"
3307                                         ansexp="$ansexp/$loc_file"
3308                                 fi
3309                                 if test -f "$ansexp"; then
3310                                         type=''
3311                                 fi
3312                                 case "$nopath_ok" in
3313                                 true)   case "$value" in
3314                                         */*) ;;
3315                                         *)      echo "Assuming $value will be in people's path."
3316                                                 type=''
3317                                                 ;;
3318                                         esac
3319                                         ;;
3320                                 esac
3321                                 ;;
3322                         esac
3323
3324                         case "$skip" in
3325                         true) type='';
3326                         esac
3327
3328                         case "$type" in
3329                         '') ;;
3330                         *)
3331                                 if test "$fastread" = yes; then
3332                                         dflt=y
3333                                 else
3334                                         dflt=n
3335                                 fi
3336                                 rp="$what $value doesn't exist.  Use that name anyway?"
3337                                 . UU/myread
3338                                 dflt=''
3339                                 case "$ans" in
3340                                 y*) type='';;
3341                                 *) echo " ";;
3342                                 esac
3343                                 ;;
3344                         esac
3345                         ;;
3346                 esac
3347                 ;;
3348         esac
3349 done
3350 cd UU
3351 ans="$value"
3352 rp="$orig_rp"
3353 dflt="$orig_dflt"
3354 rm -f getfile.ok
3355 test "X$gfpthkeep" != Xy && gfpth=""
3356 EOSC
3357
3358 : What should the include directory be ?
3359 echo " "
3360 $echo $n "Hmm...  $c"
3361 dflt='/usr/include'
3362 incpath=''
3363 mips_type=''
3364 if $test -f /bin/mips && /bin/mips; then
3365         echo "Looks like a MIPS system..."
3366         $cat >usr.c <<'EOCP'
3367 #ifdef SYSTYPE_BSD43
3368 /bsd43
3369 #endif
3370 EOCP
3371         if $cc -E usr.c > usr.out && $contains / usr.out >/dev/null 2>&1; then
3372                 dflt='/bsd43/usr/include'
3373                 incpath='/bsd43'
3374                 mips_type='BSD 4.3'
3375         else
3376                 mips_type='System V'
3377         fi
3378         $rm -f usr.c usr.out
3379         echo "and you're compiling with the $mips_type compiler and libraries."
3380         xxx_prompt=y
3381         echo "exit 0" >mips
3382 else
3383         echo "Doesn't look like a MIPS system."
3384         xxx_prompt=n
3385         echo "exit 1" >mips
3386 fi
3387 chmod +x mips
3388 $eunicefix mips
3389 case "$usrinc" in
3390 '') ;;
3391 *) dflt="$usrinc";;
3392 esac
3393 case "$xxx_prompt" in
3394 y)      fn=d/
3395         echo " "
3396         rp='Where are the include files you want to use?'
3397         . ./getfile
3398         usrinc="$ans"
3399         ;;
3400 *)      usrinc="$dflt"
3401         ;;
3402 esac
3403
3404 : see how we invoke the C preprocessor
3405 echo " "
3406 echo "Now, how can we feed standard input to your C preprocessor..." >&4
3407 cat <<'EOT' >testcpp.c
3408 #define ABC abc
3409 #define XYZ xyz
3410 ABC.XYZ
3411 EOT
3412 cd ..
3413 if test ! -f cppstdin; then
3414         if test "X$osname" = "Xaix" -a "X$gccversion" = X; then
3415                 # AIX cc -E doesn't show the absolute headerfile
3416                 # locations but we'll cheat by using the -M flag.
3417                 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
3418         else
3419                 echo 'cat >.$$.c; '"$cc"' -E ${1+"$@"} .$$.c; rm .$$.c' >cppstdin
3420         fi
3421 else
3422         echo "Keeping your $hint cppstdin wrapper."
3423 fi
3424 chmod 755 cppstdin
3425 wrapper=`pwd`/cppstdin
3426 ok='false'
3427 cd UU
3428
3429 if $test "X$cppstdin" != "X" && \
3430         $cppstdin $cppminus <testcpp.c >testcpp.out 2>&1 && \
3431         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
3432 then
3433         echo "You used to use $cppstdin $cppminus so we'll use that again."
3434         case "$cpprun" in
3435         '') echo "But let's see if we can live without a wrapper..." ;;
3436         *)
3437                 if $cpprun $cpplast <testcpp.c >testcpp.out 2>&1 && \
3438                         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
3439                 then
3440                         echo "(And we'll use $cpprun $cpplast to preprocess directly.)"
3441                         ok='true'
3442                 else
3443                         echo "(However, $cpprun $cpplast does not work, let's see...)"
3444                 fi
3445                 ;;
3446         esac
3447 else
3448         case "$cppstdin" in
3449         '') ;;
3450         *)
3451                 echo "Good old $cppstdin $cppminus does not seem to be of any help..."
3452                 ;;
3453         esac
3454 fi
3455
3456 if $ok; then
3457         : nothing
3458 elif echo 'Maybe "'"$cc"' -E" will work...'; \
3459         $cc -E <testcpp.c >testcpp.out 2>&1; \
3460         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3461         echo "Yup, it does."
3462         x_cpp="$cc -E"
3463         x_minus='';
3464 elif echo 'Nope...maybe "'"$cc"' -E -" will work...'; \
3465         $cc -E - <testcpp.c >testcpp.out 2>&1; \
3466         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3467         echo "Yup, it does."
3468         x_cpp="$cc -E"
3469         x_minus='-';
3470 elif echo 'Nope...maybe "'"$cc"' -P" will work...'; \
3471         $cc -P <testcpp.c >testcpp.out 2>&1; \
3472         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3473         echo "Yipee, that works!"
3474         x_cpp="$cc -P"
3475         x_minus='';
3476 elif echo 'Nope...maybe "'"$cc"' -P -" will work...'; \
3477         $cc -P - <testcpp.c >testcpp.out 2>&1; \
3478         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3479         echo "At long last!"
3480         x_cpp="$cc -P"
3481         x_minus='-';
3482 elif echo 'No such luck, maybe "'$cpp'" will work...'; \
3483         $cpp <testcpp.c >testcpp.out 2>&1; \
3484         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3485         echo "It works!"
3486         x_cpp="$cpp"
3487         x_minus='';
3488 elif echo 'Nixed again...maybe "'$cpp' -" will work...'; \
3489         $cpp - <testcpp.c >testcpp.out 2>&1; \
3490         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3491         echo "Hooray, it works!  I was beginning to wonder."
3492         x_cpp="$cpp"
3493         x_minus='-';
3494 elif echo 'Uh-uh.  Time to get fancy.  Trying a wrapper...'; \
3495         $wrapper <testcpp.c >testcpp.out 2>&1; \
3496         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3497         x_cpp="$wrapper"
3498         x_minus=''
3499         echo "Eureka!"
3500 else
3501         dflt=''
3502         rp="No dice.  I can't find a C preprocessor.  Name one:"
3503         . ./myread
3504         x_cpp="$ans"
3505         x_minus=''
3506         $x_cpp <testcpp.c >testcpp.out 2>&1
3507         if $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3508                 echo "OK, that will do." >&4
3509         else
3510 echo "Sorry, I can't get that to work.  Go find one and rerun Configure." >&4
3511                 exit 1
3512         fi
3513 fi
3514
3515 case "$ok" in
3516 false)
3517         cppstdin="$x_cpp"
3518         cppminus="$x_minus"
3519         cpprun="$x_cpp"
3520         cpplast="$x_minus"
3521         set X $x_cpp
3522         shift
3523         case "$1" in
3524         "$cpp")
3525                 echo "Perhaps can we force $cc -E using a wrapper..."
3526                 if $wrapper <testcpp.c >testcpp.out 2>&1; \
3527                         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
3528                 then
3529                         echo "Yup, we can."
3530                         cppstdin="$wrapper"
3531                         cppminus='';
3532                 else
3533                         echo "Nope, we'll have to live without it..."
3534                 fi
3535                 ;;
3536         esac
3537         case "$cpprun" in
3538         "$wrapper")
3539                 cpprun=''
3540                 cpplast=''
3541                 ;;
3542         esac
3543         ;;
3544 esac
3545
3546 case "$cppstdin" in
3547 "$wrapper"|'cppstdin') ;;
3548 *) $rm -f $wrapper;;
3549 esac
3550 $rm -f testcpp.c testcpp.out
3551
3552 : Set private lib path
3553 case "$plibpth" in
3554 '') if ./mips; then
3555                 plibpth="$incpath/usr/lib /usr/local/lib /usr/ccs/lib"
3556         fi;;
3557 esac
3558 case "$libpth" in
3559 ' ') dlist='';;
3560 '') dlist="$loclibpth $plibpth $glibpth";;
3561 *) dlist="$libpth";;
3562 esac
3563
3564 : Now check and see which directories actually exist, avoiding duplicates
3565 libpth=''
3566 for xxx in $dlist
3567 do
3568     if $test -d $xxx; then
3569                 case " $libpth " in
3570                 *" $xxx "*) ;;
3571                 *) libpth="$libpth $xxx";;
3572                 esac
3573     fi
3574 done
3575 $cat <<'EOM'
3576
3577 Some systems have incompatible or broken versions of libraries.  Among
3578 the directories listed in the question below, please remove any you
3579 know not to be holding relevant libraries, and add any that are needed.
3580 Say "none" for none.
3581
3582 EOM
3583 case "$libpth" in
3584 '') dflt='none';;
3585 *)
3586         set X $libpth
3587         shift
3588         dflt=${1+"$@"}
3589         ;;
3590 esac
3591 rp="Directories to use for library searches?"
3592 . ./myread
3593 case "$ans" in
3594 none) libpth=' ';;
3595 *) libpth="$ans";;
3596 esac
3597
3598 : compute shared library extension
3599 case "$so" in
3600 '')
3601         if xxx=`./loc libc.sl X $libpth`; $test -f "$xxx"; then
3602                 dflt='sl'
3603         else
3604                 dflt='so'
3605         fi
3606         ;;
3607 *) dflt="$so";;
3608 esac
3609 $cat <<EOM
3610
3611 On some systems, shared libraries may be available.  Answer 'none' if
3612 you want to suppress searching of shared libraries for the remainder
3613 of this configuration.
3614
3615 EOM
3616 rp='What is the file extension used for shared libraries?'
3617 . ./myread
3618 so="$ans"
3619
3620 : Define several unixisms.
3621 : Hints files or command line option can be used to override them.
3622 : The convoluted testing is in case hints files set either the old
3623 : or the new name.
3624 case "$_exe" in
3625 '')     case "$exe_ext" in
3626     '') ;;
3627         *)      _exe="$exe_ext" ;;
3628         esac
3629         ;;
3630 esac
3631 case "$_a" in
3632 '')     case "$lib_ext" in
3633     '') _a='.a';;
3634         *)      _a="$lib_ext" ;;
3635         esac
3636         ;;
3637 esac
3638 case "$_o" in
3639 '') case "$obj_ext" in
3640         '')     _o='.o';;
3641         *)      _o="$obj_ext";;
3642         esac
3643         ;;
3644 esac
3645 case "$p_" in
3646 '') case "$path_sep" in
3647         '')     p_=':';;
3648         *)      p_="$path_sep";;
3649         esac
3650         ;;
3651 esac
3652 exe_ext=$_exe
3653 lib_ext=$_a
3654 obj_ext=$_o
3655 path_sep=$p_
3656
3657 : Which makefile gets called first.  This is used by make depend.
3658 case "$firstmakefile" in
3659 '') firstmakefile='makefile';;
3660 esac
3661
3662 cat <<EOM
3663
3664 Perl can be built to use the SOCKS proxy protocol library.  To do so,
3665 Configure must be run with -Dusesocks.
3666
3667 Normally you do not need this and you should answer no.
3668
3669 EOM
3670 case "$usesocks" in
3671 $define|true|[yY]*)     dflt='y';;
3672 *) dflt='n';;
3673 esac
3674 rp='Build Perl for SOCKS?'
3675 . ./myread
3676 case "$ans" in
3677 y|Y)    val="$define" ;;     
3678 *)      val="$undef" ;;
3679 esac
3680 set usesocks
3681 eval $setvar
3682
3683 : Looking for optional libraries
3684 echo " "
3685 echo "Checking for optional libraries..." >&4
3686 case "$libs" in
3687 ' '|'') dflt='';;
3688 *) dflt="$libs";;
3689 esac
3690 case "$libswanted" in
3691 '') libswanted='c_s';;
3692 esac
3693 case "$usesocks" in
3694 $define)
3695         libswanted="$libswanted socks5 socks5_sh"
3696         ;;
3697 esac
3698 for thislib in $libswanted; do
3699         
3700         libname="$thislib"
3701         if xxx=`./loc lib$thislib.$so.[0-9]'*' X $libpth`
3702            $test -f "$xxx" -a "X$ignore_versioned_solibs" = "X" ; then
3703                 libstyle=shared
3704         elif xxx=`./loc lib$thislib.$so X $libpth` ; $test -f "$xxx"; then
3705                 libstyle=shared
3706         elif xxx=`./loc lib$thislib$_a X $libpth`; $test -f "$xxx"; then
3707                 libstyle=static
3708         elif xxx=`./loc $thislib$_a X $libpth`; $test -f "$xxx"; then
3709                 libstyle=static
3710         elif xxx=`./loc lib${thislib}_s$_a X $libpth`; $test -f "$xxx"; then
3711                 libstyle=static
3712                 libname=${thislib}_s
3713         elif xxx=`./loc Slib$thislib$_a X $xlibpth`; $test -f "$xxx"; then
3714                 libstyle="static"
3715         fi
3716         if $test -f "$xxx"; then
3717                 case "$libstyle" in
3718                 shared) echo "Found -l$libname (shared)." ;;
3719                 static) echo "Found -l$libname." ;;
3720                 *)      echo "Found -l$libname ($libstyle)." ;;
3721                 esac
3722                 case " $dflt " in
3723                 *"-l$thislib "*);;
3724                 *) dflt="$dflt -l$libname"
3725                    libsfound="$libsfound $xxx"
3726                    yyy=`basename $xxx`
3727                    libsfiles="$libsfiles $yyy"
3728                    yyy=`echo $xxx|sed "s@/$yyy\\$@@"`
3729                    case " $libsdirs " in
3730                    *" $yyy "*) ;;
3731                    *) libsdirs="$libsdirs $yyy" ;;
3732                    esac
3733                    ;;
3734                 esac
3735         else
3736                 echo "No -l$thislib."
3737         fi
3738 done
3739 set X $dflt
3740 shift
3741 dflt="$*"
3742 case "$libs" in
3743 '') dflt="$dflt";;
3744 *) dflt="$libs";;
3745 esac
3746 case "$dflt" in
3747 ' '|'') dflt='none';;
3748 esac
3749
3750 $cat <<EOM
3751
3752 In order to compile $package on your machine, a number of libraries
3753 are usually needed.  Include any other special libraries here as well.
3754 Say "none" for none.  The default list is almost always right.
3755 EOM
3756
3757 echo " "
3758 rp="What libraries to use?"
3759 . ./myread
3760 case "$ans" in
3761 none) libs=' ';;
3762 *) libs="$ans";;
3763 esac
3764
3765 : determine optimization, if desired, or use for debug flag also
3766 case "$optimize" in
3767 ' '|$undef) dflt='none';;
3768 '') dflt='-O';;
3769 *) dflt="$optimize";;
3770 esac
3771 $cat <<EOH
3772
3773 By default, $package compiles with the -O flag to use the optimizer.
3774 Alternately, you might want to use the symbolic debugger, which uses
3775 the -g flag (on traditional Unix systems).  Either flag can be
3776 specified here.  To use neither flag, specify the word "none".
3777
3778 EOH
3779 rp="What optimizer/debugger flag should be used?"
3780 . ./myread
3781 optimize="$ans"
3782 case "$optimize" in
3783 'none') optimize=" ";;
3784 esac
3785
3786 dflt=''
3787 : We will not override a previous value, but we might want to
3788 : augment a hint file
3789 case "$hint" in
3790 default|recommended)
3791         case "$gccversion" in
3792         1*) dflt='-fpcc-struct-return' ;;
3793         esac
3794         case "$optimize" in
3795         *-g*) dflt="$dflt -DDEBUGGING";;
3796         esac
3797         case "$gccversion" in
3798         2*) if test -d /etc/conf/kconfig.d &&
3799                         $contains _POSIX_VERSION $usrinc/sys/unistd.h >/dev/null 2>&1
3800                 then
3801                         dflt="$dflt -posix"
3802                 fi
3803                 ;;
3804         esac
3805         case "$gccversion" in
3806         1*) ;;
3807         2.[0-8]*) ;;
3808         ?*)     echo " "
3809                 echo "Checking if your compiler accepts -fno-strict-aliasing" 2>&1
3810                 echo 'int main(void) { return 0; }' > gcctest.c
3811                 if $cc -O2 -fno-strict-aliasing -o gcctest gcctest.c; then
3812                         echo "Yes, it does." 2>&1
3813                         case "$ccflags" in
3814                         *strict-aliasing*) 
3815                                 echo "Leaving current flags $ccflags alone." 2>&1
3816                                 ;;
3817                         *) dflt="$dflt -fno-strict-aliasing" ;;
3818                         esac
3819                 else
3820                         echo "Nope, it doesn't, but that's ok." 2>&1
3821                 fi
3822                 ;;
3823         esac
3824         ;;
3825 esac
3826
3827 case "$mips_type" in
3828 *BSD*|'') inclwanted="$locincpth $usrinc";;
3829 *) inclwanted="$locincpth $inclwanted $usrinc/bsd";;
3830 esac
3831 for thisincl in $inclwanted; do
3832         if $test -d $thisincl; then
3833                 if $test x$thisincl != x$usrinc; then
3834                         case "$dflt" in
3835                         *$thisincl*);;
3836                         *) dflt="$dflt -I$thisincl";;
3837                         esac
3838                 fi
3839         fi
3840 done
3841
3842 inctest='if $contains $2 $usrinc/$1 >/dev/null 2>&1; then
3843         xxx=true;
3844 elif $contains $2 $usrinc/sys/$1 >/dev/null 2>&1; then
3845         xxx=true;
3846 else
3847         xxx=false;
3848 fi;
3849 if $xxx; then
3850         case "$dflt" in
3851         *$2*);;
3852         *) dflt="$dflt -D$2";;
3853         esac;
3854 fi'
3855
3856 set signal.h LANGUAGE_C; eval $inctest
3857
3858 case "$usesocks" in
3859 $define)
3860         ccflags="$ccflags -DSOCKS"
3861         ;;
3862 esac
3863
3864 case "$hint" in
3865 default|recommended) dflt="$ccflags $dflt" ;;
3866 *) dflt="$ccflags";;
3867 esac
3868
3869 case "$dflt" in
3870 ''|' ') dflt=none;;
3871 esac
3872 $cat <<EOH
3873
3874 Your C compiler may want other flags.  For this question you should include
3875 -I/whatever and -DWHATEVER flags and any other flags used by the C compiler,
3876 but you should NOT include libraries or ld flags like -lwhatever.  If you
3877 want $package to honor its debug switch, you should include -DDEBUGGING here.
3878 Your C compiler might also need additional flags, such as -D_POSIX_SOURCE.
3879
3880 To use no flags, specify the word "none".
3881
3882 EOH
3883 set X $dflt
3884 shift
3885 dflt=${1+"$@"}
3886 rp="Any additional cc flags?"
3887 . ./myread
3888 case "$ans" in
3889 none) ccflags='';;
3890 *) ccflags="$ans";;
3891 esac
3892
3893 : the following weeds options from ccflags that are of no interest to cpp
3894 cppflags="$ccflags"
3895 case "$gccversion" in
3896 1*) cppflags="$cppflags -D__GNUC__"
3897 esac
3898 case "$mips_type" in
3899 '');;
3900 *BSD*) cppflags="$cppflags -DSYSTYPE_BSD43";;
3901 esac
3902 case "$cppflags" in
3903 '');;
3904 *)
3905         echo " "
3906         echo "Let me guess what the preprocessor flags are..." >&4
3907         set X $cppflags
3908         shift
3909         cppflags=''
3910         $cat >cpp.c <<'EOM'
3911 #define BLURFL foo
3912
3913 BLURFL xx LFRULB
3914 EOM
3915         previous=''
3916         for flag in $*
3917         do
3918                 case "$flag" in
3919                 -*) ftry="$flag";;
3920                 *) ftry="$previous $flag";;
3921                 esac
3922                 if $cppstdin -DLFRULB=bar $cppflags $ftry $cppminus <cpp.c \
3923                         >cpp1.out 2>/dev/null && \
3924                         $cpprun -DLFRULB=bar $cppflags $ftry $cpplast <cpp.c \
3925                         >cpp2.out 2>/dev/null && \
3926                         $contains 'foo.*xx.*bar' cpp1.out >/dev/null 2>&1 && \
3927                         $contains 'foo.*xx.*bar' cpp2.out >/dev/null 2>&1
3928                 then
3929                         cppflags="$cppflags $ftry"
3930                         previous=''
3931                 else
3932                         previous="$flag"
3933                 fi
3934         done
3935         set X $cppflags
3936         shift
3937         cppflags=${1+"$@"}
3938         case "$cppflags" in
3939         *-*)  echo "They appear to be: $cppflags";;
3940         esac
3941         $rm -f cpp.c cpp?.out
3942         ;;
3943 esac
3944
3945 : flags used in final linking phase
3946 case "$ldflags" in
3947 '') if ./venix; then
3948                 dflt='-i -z'
3949         else
3950                 dflt=''
3951         fi
3952         case "$ccflags" in
3953         *-posix*) dflt="$dflt -posix" ;;
3954         esac
3955         ;;
3956 *) dflt="$ldflags";;
3957 esac
3958
3959 : Try to guess additional flags to pick up local libraries.
3960 for thislibdir in $libpth; do
3961         case " $loclibpth " in
3962         *" $thislibdir "*)
3963                 case "$dflt " in 
3964                 *"-L$thislibdir "*) ;;
3965                 *)  dflt="$dflt -L$thislibdir" ;;
3966                 esac
3967                 ;;
3968         esac
3969 done
3970
3971 case "$dflt" in
3972 '') dflt='none' ;;
3973 esac
3974
3975 $cat <<EOH
3976
3977 Your C linker may need flags.  For this question you should
3978 include -L/whatever and any other flags used by the C linker, but you
3979 should NOT include libraries like -lwhatever.
3980
3981 Make sure you include the appropriate -L/path flags if your C linker
3982 does not normally search all of the directories you specified above,
3983 namely
3984         $libpth
3985 To use no flags, specify the word "none".
3986
3987 EOH
3988
3989 rp="Any additional ld flags (NOT including libraries)?"
3990 . ./myread
3991 case "$ans" in
3992 none) ldflags='';;
3993 *) ldflags="$ans";;
3994 esac
3995 rmlist="$rmlist pdp11"
3996
3997 : coherency check
3998 echo " "
3999 echo "Checking your choice of C compiler and flags for coherency..." >&4
4000 $cat > try.c <<'EOF'
4001 #include <stdio.h>
4002 int main() { printf("Ok\n"); exit(0); }
4003 EOF
4004 set X $cc $optimize $ccflags -o try $ldflags try.c $libs
4005 shift
4006 $cat >try.msg <<'EOM'
4007 I've tried to compile and run the following simple program:
4008
4009 EOM
4010 $cat try.c >> try.msg
4011
4012 $cat >> try.msg <<EOM
4013
4014 I used the command:
4015
4016         $*
4017         ./try
4018
4019 and I got the following output:
4020
4021 EOM
4022 dflt=y
4023 if sh -c "$cc $optimize $ccflags -o try $ldflags try.c $libs" >>try.msg 2>&1; then
4024         if sh -c './try' >>try.msg 2>&1; then
4025                 xxx=`./try`
4026                 case "$xxx" in
4027                 "Ok") dflt=n ;;
4028                 *)      echo 'The program compiled OK, but produced no output.' >> try.msg
4029                         case " $libs " in
4030                         *" -lsfio "*)
4031                                 cat >> try.msg <<'EOQS'
4032 If $libs contains -lsfio, and sfio is mis-configured, then it
4033 sometimes (apparently) runs and exits with a 0 status, but with no
4034 output!  It may have to do with sfio's use of _exit vs. exit.
4035
4036 EOQS
4037                                 rp="You have a big problem.  Shall I abort Configure"
4038                                 dflt=y
4039                                 ;;
4040                         esac
4041                         ;;
4042                 esac
4043         else
4044                 echo "The program compiled OK, but exited with status $?." >>try.msg
4045                 rp="You have a problem.  Shall I abort Configure"
4046                 dflt=y
4047         fi
4048 else
4049         echo "I can't compile the test program." >>try.msg
4050         rp="You have a BIG problem.  Shall I abort Configure"
4051         dflt=y
4052 fi
4053 case "$dflt" in
4054 y)
4055         $cat try.msg >&4
4056         case "$knowitall" in
4057         '')
4058                 echo "(The supplied flags or libraries might be incorrect.)"
4059                 ;;
4060         *) dflt=n;;
4061         esac
4062         echo " "
4063         . ./myread
4064         case "$ans" in
4065         n*|N*) ;;
4066         *)      echo "Ok.  Stopping Configure." >&4
4067                 exit 1
4068                 ;;
4069         esac
4070         ;;
4071 n) echo "OK, that should do.";;
4072 esac
4073 $rm -f try try.* core
4074
4075 : define an is-a-typedef? function
4076 typedef='type=$1; var=$2; def=$3; shift; shift; shift; inclist=$@;
4077 case "$inclist" in
4078 "") inclist="sys/types.h";;
4079 esac;
4080 eval "varval=\$$var";
4081 case "$varval" in
4082 "")
4083         $rm -f temp.c;
4084         for inc in $inclist; do
4085                 echo "#include <$inc>" >>temp.c;
4086         done;
4087         echo "#ifdef $type" >> temp.c;
4088         echo "printf(\"We have $type\");" >> temp.c;
4089         echo "#endif" >> temp.c;
4090         $cppstdin $cppflags $cppminus < temp.c >temp.E 2>/dev/null;
4091         if $contains $type temp.E >/dev/null 2>&1; then
4092                 eval "$var=\$type";
4093         else
4094                 eval "$var=\$def";
4095         fi;
4096         $rm -f temp.?;;
4097 *) eval "$var=\$varval";;
4098 esac'
4099
4100 : define an is-a-typedef? function that prompts if the type is not available.
4101 typedef_ask='type=$1; var=$2; def=$3; shift; shift; shift; inclist=$@;
4102 case "$inclist" in
4103 "") inclist="sys/types.h";;
4104 esac;
4105 eval "varval=\$$var";
4106 case "$varval" in
4107 "")
4108         $rm -f temp.c;
4109         for inc in $inclist; do
4110                 echo "#include <$inc>" >>temp.c;
4111         done;
4112         echo "#ifdef $type" >> temp.c;
4113         echo "printf(\"We have $type\");" >> temp.c;
4114         echo "#endif" >> temp.c;
4115         $cppstdin $cppflags $cppminus < temp.c >temp.E 2>/dev/null;
4116         echo " " ;
4117         echo "$rp" | $sed -e "s/What is/Looking for/" -e "s/?/./";
4118         if $contains $type temp.E >/dev/null 2>&1; then
4119                 echo "$type found." >&4;
4120                 eval "$var=\$type";
4121         else
4122                 echo "$type NOT found." >&4;
4123                 dflt="$def";
4124                 . ./myread ;
4125                 eval "$var=\$ans";
4126         fi;
4127         $rm -f temp.?;;
4128 *) eval "$var=\$varval";;
4129 esac'
4130
4131 : define a shorthand compile call
4132 compile='
4133 mc_file=$1;
4134 shift;
4135 $cc $optimize $ccflags $ldflags -o ${mc_file} $* ${mc_file}.c $libs > /dev/null 2>&1;'
4136 : define a shorthand compile call for compilations that should be ok.
4137 compile_ok='
4138 mc_file=$1;
4139 shift;
4140 $cc $optimize $ccflags $ldflags -o ${mc_file} $* ${mc_file}.c $libs;'
4141
4142 : check for lengths of integral types
4143 echo " "
4144 case "$intsize" in
4145 '')
4146         echo "Checking to see how big your integers are..." >&4
4147         $cat >intsize.c <<'EOCP'
4148 #include <stdio.h>
4149 int main()
4150 {
4151         printf("intsize=%d;\n", (int)sizeof(int));
4152         printf("longsize=%d;\n", (int)sizeof(long));
4153         printf("shortsize=%d;\n", (int)sizeof(short));
4154         exit(0);
4155 }
4156 EOCP
4157         set intsize
4158         if eval $compile_ok && ./intsize > /dev/null; then
4159                 eval `./intsize`
4160                 echo "Your integers are $intsize bytes long."
4161                 echo "Your long integers are $longsize bytes long."
4162                 echo "Your short integers are $shortsize bytes long."
4163         else
4164                 $cat >&4 <<EOM
4165 !
4166 Help! I can't compile and run the intsize test program: please enlighten me!
4167 (This is probably a misconfiguration in your system or libraries, and
4168 you really ought to fix it.  Still, I'll try anyway.)
4169 !
4170 EOM
4171                 dflt=4
4172                 rp="What is the size of an integer (in bytes)?"
4173                 . ./myread
4174                 intsize="$ans"
4175                 dflt=$intsize
4176                 rp="What is the size of a long integer (in bytes)?"
4177                 . ./myread
4178                 longsize="$ans"
4179                 dflt=2
4180                 rp="What is the size of a short integer (in bytes)?"
4181                 . ./myread
4182                 shortsize="$ans"
4183         fi
4184         ;;
4185 esac
4186 $rm -f intsize intsize.*
4187
4188 : see what type lseek is declared as in the kernel
4189 rp="What is the type used for lseek's offset on this system?"
4190 set off_t lseektype long stdio.h sys/types.h
4191 eval $typedef_ask
4192
4193 echo " "
4194 $echo $n "Checking to see how big your file offsets are...$c" >&4
4195 $cat >try.c <<EOCP
4196 #include <sys/types.h>
4197 #include <stdio.h>
4198 int main()
4199 {
4200     printf("%d\n", (int)sizeof($lseektype));
4201     return(0); 
4202 }
4203 EOCP
4204 set try
4205 if eval $compile_ok; then
4206         lseeksize=`./try`
4207         $echo " $lseeksize bytes." >&4
4208 else
4209         dflt=$longsize
4210         echo " "
4211         echo "(I can't seem to compile the test program.  Guessing...)"
4212         rp="What is the size of your file offsets (in bytes)?"
4213         . ./myread
4214         lseeksize="$ans"
4215 fi
4216 $rm -f try.c try
4217
4218 : see what type file positions are declared as in the library
4219 rp="What is the type for file position used by fsetpos()?"
4220 set fpos_t fpostype long stdio.h sys/types.h
4221 eval $typedef_ask
4222
4223 echo " "
4224 case "$fpostype" in
4225 *_t) zzz="$fpostype"    ;;
4226 *)   zzz="fpos_t"       ;;
4227 esac
4228 $echo $n "Checking the size of $zzz...$c" >&4 
4229 cat > try.c <<EOCP
4230 #include <sys/types.h>
4231 #include <stdio.h>
4232 int main() {
4233     printf("%d\n", (int)sizeof($fpostype));
4234     exit(0);
4235 }
4236 EOCP
4237 set try
4238 if eval $compile_ok; then
4239         yyy=`./try`
4240         case "$yyy" in
4241         '')     fpossize=4
4242                 echo " "
4243                 echo "(I can't execute the test program--guessing $fpossize.)" >&4
4244                 ;;
4245         *)      fpossize=$yyy
4246                 echo " $fpossize bytes."
4247                 ;;
4248         esac
4249 else
4250         dflt="$longsize"
4251         echo " "
4252         echo "(I can't compile the test program.  Guessing...)" >&4
4253         rp="What is the size of your file positions (in bytes)?"
4254         . ./myread
4255         fpossize="$ans"
4256 fi
4257
4258
4259
4260 case "$lseeksize:$fpossize" in
4261 8:8) cat <<EOM
4262
4263 You can have files larger than 2 gigabytes.
4264 EOM
4265    val="$define" ;;
4266 *) cat <<EOM
4267
4268 Perl can be built to understand large files (files larger than 2 gigabytes)
4269 on some systems.  To do so, Configure must be run with -Duselargefiles.
4270
4271 If this doesn't make any sense to you, just accept the default 'y'.
4272 EOM
4273    case "$uselargefiles" in
4274    "$undef"|false|[nN]*) dflt='n' ;;
4275    *)   dflt='y' ;;
4276    esac
4277    rp='Try to understand large files, if available?'
4278    . ./myread
4279    case "$ans" in
4280    y|Y)         val="$define" ;;
4281    *)           val="$undef"  ;;
4282    esac
4283    ;;
4284 esac
4285 set uselargefiles
4286 eval $setvar
4287 case "$uselargefiles" in
4288 "$define")
4289 : Look for a hint-file generated 'call-back-unit'.  If the
4290 : user has specified that a large files perl is to be built,
4291 : we may need to set or change some other defaults.
4292         if $test -f uselfs.cbu; then
4293                 echo "Your platform has some specific hints for large file builds, using them..."
4294                 . ./uselfs.cbu
4295                 echo " "
4296                 $echo $n "Rechecking to see how big your file offsets are...$c" >&4
4297                 $cat >try.c <<EOCP
4298 #include <sys/types.h>
4299 #include <stdio.h>
4300 int main()
4301 {
4302     printf("%d\n", (int)sizeof($lseektype));
4303     return(0); 
4304 }
4305 EOCP
4306                 set try
4307                 if eval $compile_ok; then
4308                         lseeksize=`./try`
4309                         $echo " $lseeksize bytes." >&4
4310                 else
4311                         dflt="$lseeksize"
4312                         echo " "
4313                         echo "(I can't seem to compile the test program.  Guessing...)"
4314                         rp="What is the size of your file offsets (in bytes)?"
4315                         . ./myread
4316                         lseeksize="$ans"
4317                 fi
4318                 case "$fpostype" in
4319                 *_t) zzz="$fpostype"    ;;
4320                 *)   zzz="fpos_t"       ;;
4321                 esac
4322                 $echo $n "Rechecking the size of $zzz...$c" >&4 
4323                 $cat > try.c <<EOCP
4324 #include <sys/types.h>
4325 #include <stdio.h>
4326 int main() {
4327     printf("%d\n", (int)sizeof($fpostype));
4328     exit(0);
4329 }
4330 EOCP
4331                 set try
4332                 if eval $compile_ok; then
4333                         yyy=`./try`
4334                         dflt="$lseeksize"
4335                         case "$yyy" in
4336                         '')     echo " "
4337                                 echo "(I can't execute the test program--guessing $fpossize.)" >&4
4338                                 ;;
4339                         *)      fpossize=$yyy
4340                                 echo " $fpossize bytes."
4341                                 ;;
4342                         esac
4343                 else
4344                         dflt="$fpossize"
4345                         echo " "
4346                         echo "(I can't compile the test program.  Guessing...)" >&4
4347                         rp="What is the size of your file positions (in bytes)?"
4348                         . ./myread
4349                         fpossize="$ans"
4350                 fi
4351                 $rm -f try.c try
4352         fi
4353         ;;
4354 esac
4355
4356
4357 case "$usemorebits" in
4358 "$define"|true|[yY]*)
4359         use64bits="$define"
4360         uselongdouble="$define"
4361         usemorebits="$define"
4362         ;;
4363 *)      usemorebits="$undef"
4364         ;;
4365 esac
4366
4367
4368 case "$intsize:$longsize" in
4369 8:*|*:8) cat <<EOM
4370
4371 You have natively 64-bit integers.
4372 EOM
4373    val="$define"
4374    ;;
4375 *) case "$ccflags" in
4376    *-DUSE_64_BITS*|*-DUSE_LONG_LONG*) use64bits="$define";;
4377    *) case "$uselonglong" in
4378       $define|true|[yY]*) use64bits="$define";;
4379       esac
4380       ;;
4381    esac
4382    case "$use64bits" in
4383    $define|true|[yY]*) dflt='y';;
4384    *) dflt='n';;
4385    esac
4386 cat <<EOM
4387
4388 Perl can be built to take advantage of 64-bit integer types
4389 on some systems.  To do so, Configure must be run with -Duse64bits.
4390
4391 If this doesn't make any sense to you, just accept the default '$dflt'.
4392 EOM
4393    rp='Try to use 64-bit integers, if available?'
4394    . ./myread
4395    case "$ans" in
4396    [yY]*) val="$define" ;;
4397    *)     val="$undef"  ;;
4398    esac
4399    ;;
4400 esac
4401 set use64bits
4402 eval $setvar
4403
4404 case "$archname64" in
4405 '') archname64='' ;;    # not a typo
4406 esac
4407
4408 case "$use64bits" in
4409 "$define"|true|[yY]*)
4410 : Look for a hint-file generated 'call-back-unit'.  If the
4411 : user has specified that a 64-bit perl is to be built,
4412 : we may need to set or change some other defaults.
4413         if $test -f use64bits.cbu; then
4414                 echo "Your platform has some specific hints for 64-bit builds, using them..."
4415                 . ./use64bits.cbu
4416         else
4417                 $cat <<EOM
4418 (Your platform doesn't have any specific hints for 64-bit builds.)
4419 EOM
4420                 case "$intsize:$longsize" in
4421 8:*|*:8) cat <<EOM
4422 (This is probably okay, as your system is a natively 64-bit system.)
4423 EOM
4424                   ;;
4425                 esac
4426                 case "$gccversion" in
4427                 '')     ;;
4428                 *)      case "$ccflags" in
4429                         *-DUSE_LONG_LONG*) ;;
4430                         *) $cat <<EOM
4431 But since you seem to be using gcc, I will now add -DUSE_LONG_LONG
4432 to the compilation flags.
4433 EOM
4434                            ccflags="$ccflags -DUSE_LONG_LONG"
4435                            ;;
4436                         esac
4437                         ;;
4438                 esac
4439         fi
4440         ;;
4441 esac
4442
4443 : determine the architecture name
4444 echo " "
4445 if xxx=`./loc arch blurfl $pth`; $test -f "$xxx"; then
4446         tarch=`arch`"-$osname"
4447 elif xxx=`./loc uname blurfl $pth`; $test -f "$xxx" ; then
4448         if uname -m > tmparch 2>&1 ; then
4449                 tarch=`$sed -e 's/ *$//' -e 's/ /_/g' \
4450                         -e 's/$/'"-$osname/" tmparch`
4451         else
4452                 tarch="$osname"
4453         fi
4454         $rm -f tmparch
4455 else
4456         tarch="$osname"
4457 fi
4458 case "$myarchname" in
4459 ''|"$tarch") ;;
4460 *)
4461         echo "(Your architecture name used to be $myarchname.)"
4462         archname=''
4463         ;;
4464 esac
4465 myarchname="$tarch"
4466 case "$archname" in
4467 '') dflt="$tarch";;
4468 *) dflt="$archname";;
4469 esac
4470 rp='What is your architecture name'
4471 . ./myread
4472 archname="$ans"
4473 case "$usethreads" in
4474 $define)
4475         echo "Threads selected." >&4
4476         case "$archname" in
4477         *-thread*) echo "...and architecture name already has -thread." >&4
4478                 ;;
4479         *)      archname="$archname-thread"
4480                 echo "...setting architecture name to $archname." >&4
4481                 ;;
4482         esac
4483         ;;
4484 esac
4485 case "$usemultiplicity" in
4486 $define)
4487         echo "Multiplicity selected." >&4
4488         case "$archname" in
4489         *-multi*) echo "...and architecture name already has -multi." >&4
4490                 ;;
4491         *)      archname="$archname-multi"
4492                 echo "...setting architecture name to $archname." >&4
4493                 ;;
4494         esac
4495         ;;
4496 esac
4497 case "$use64bits" in
4498 $define)
4499         case "$archname64" in
4500         '')
4501                 ;;
4502         *)
4503                 case "$archname" in
4504                 *-$archname64*) echo "...and architecture name already has $archname64." >&4
4505                         ;;
4506                 *)      archname="$archname-$archname64"
4507                         echo "...setting architecture name to $archname." >&4
4508                         ;;
4509                 esac
4510                 ;;
4511         esac
4512 esac
4513
4514 : determine root of directory hierarchy where package will be installed.
4515 case "$prefix" in
4516 '')
4517         dflt=`./loc . /usr/local /usr/local /local /opt /usr`
4518         ;;
4519 *)
4520         dflt="$prefix"
4521         ;;
4522 esac
4523 $cat <<EOM
4524
4525 By default, $package will be installed in $dflt/bin, manual pages
4526 under $dflt/man, etc..., i.e. with $dflt as prefix for all
4527 installation directories. Typically this is something like /usr/local.
4528 If you wish to have binaries under /usr/bin but other parts of the
4529 installation under /usr/local, that's ok: you will be prompted
4530 separately for each of the installation directories, the prefix being
4531 only used to set the defaults.
4532
4533 EOM
4534 fn=d~
4535 rp='Installation prefix to use?'
4536 . ./getfile
4537 oldprefix=''
4538 case "$prefix" in
4539 '') ;;
4540 *)
4541         case "$ans" in
4542         "$prefix") ;;
4543         *) oldprefix="$prefix";;
4544         esac
4545         ;;
4546 esac
4547 prefix="$ans"
4548 prefixexp="$ansexp"
4549
4550 : is AFS running?
4551 echo " "
4552 case "$afs" in
4553 $define|true)   afs=true ;;
4554 $undef|false)   afs=false ;;
4555 *)      if test -d /afs; then
4556                 afs=true
4557         else
4558                 afs=false
4559         fi
4560         ;;
4561 esac
4562 if $afs; then
4563         echo "AFS may be running... I'll be extra cautious then..." >&4
4564 else
4565         echo "AFS does not seem to be running..." >&4
4566 fi
4567
4568 : determine installation prefix for where package is to be installed.
4569 if $afs; then 
4570 $cat <<EOM
4571
4572 Since you are running AFS, I need to distinguish the directory in which
4573 files will reside from the directory in which they are installed (and from
4574 which they are presumably copied to the former directory by occult means).
4575
4576 EOM
4577         case "$installprefix" in
4578         '') dflt=`echo $prefix | sed 's#^/afs/#/afs/.#'`;;
4579         *) dflt="$installprefix";;
4580         esac
4581 else
4582 $cat <<EOM
4583
4584 In some special cases, particularly when building $package for distribution,
4585 it is convenient to distinguish between the directory in which files should 
4586 be installed from the directory ($prefix) in which they 
4587 will eventually reside.  For most users, these two directories are the same.
4588
4589 EOM
4590         case "$installprefix" in
4591         '') dflt=$prefix ;;
4592         *) dflt=$installprefix;;
4593         esac
4594 fi
4595 fn=d~
4596 rp='What installation prefix should I use for installing files?'
4597 . ./getfile
4598 installprefix="$ans"
4599 installprefixexp="$ansexp"
4600
4601 : set the prefixit variable, to compute a suitable default value
4602 prefixit='case "$3" in
4603 ""|none)
4604         case "$oldprefix" in
4605         "") eval "$1=\"\$$2\"";;
4606         *)
4607                 case "$3" in
4608                 "") eval "$1=";;
4609                 none)
4610                         eval "tp=\"\$$2\"";
4611                         case "$tp" in
4612                         ""|" ") eval "$1=\"\$$2\"";;
4613                         *) eval "$1=";;
4614                         esac;;
4615                 esac;;
4616         esac;;
4617 *)
4618         eval "tp=\"$oldprefix-\$$2-\""; eval "tp=\"$tp\"";
4619         case "$tp" in
4620         --|/*--|\~*--) eval "$1=\"$prefix/$3\"";;
4621         /*-$oldprefix/*|\~*-$oldprefix/*)
4622                 eval "$1=\`echo \$$2 | sed \"s,^$oldprefix,$prefix,\"\`";;
4623         *) eval "$1=\"\$$2\"";;
4624         esac;;
4625 esac'
4626
4627 : set the base revision
4628 baserev=5.0
4629
4630
4631 : get the patchlevel
4632 echo " "
4633 echo "Getting the current patchlevel..." >&4
4634 if $test -r $rsrc/patchlevel.h;then
4635         patchlevel=`awk '/define[       ]+PERL_VERSION/ {print $3}' $rsrc/patchlevel.h`
4636         subversion=`awk '/define[       ]+PERL_SUBVERSION/ {print $3}' $rsrc/patchlevel.h`
4637         api_revision=`awk '/define[     ]+PERL_API_REVISION/ {print $3}' $rsrc/patchlevel.h`
4638         api_version=`awk '/define[      ]+PERL_API_VERSION/ {print $3}' $rsrc/patchlevel.h`
4639         api_subversion=`awk '/define[   ]+PERL_API_SUBVERSION/ {print $3}' $rsrc/patchlevel.h`
4640 else
4641         patchlevel=0
4642         subversion=0
4643         api_revision=0
4644         api_version=0
4645         api_subversion=0
4646 fi
4647 $echo $n "(You have $package" $c
4648 case "$package" in
4649 "*$baserev")    ;;
4650 *)              $echo $n " $baserev" $c ;;
4651 esac
4652 $echo $n " patchlevel $patchlevel" $c
4653 test 0 -eq "$subversion" || $echo $n " subversion $subversion" $c
4654 echo ".)"
4655 case "$osname" in
4656 dos|vms)
4657         : XXX Should be a Configure test for double-dots in filenames.
4658         version=`echo $baserev $patchlevel $subversion | \
4659                  $awk '{ printf "%d_%d_%d\n", $1, $2, $3 }'`
4660         api_versionstring=`echo $api_revision $api_version $api_subversion | \
4661                  $awk '{ printf "%d_%d_%d\n", $1, $2, $3 }'`
4662         ;;
4663 *)
4664         version=`echo $baserev $patchlevel $subversion | \
4665                  $awk '{ printf "%d.%d.%d\n", $1, $2, $3 }'`
4666         api_versionstring=`echo $api_revision $api_version $api_subversion | \
4667                  $awk '{ printf "%d.%d.%d\n", $1, $2, $3 }'`
4668         ;;
4669 esac
4670 : Special case the 5.005_xx maintenance series, which used 5.005
4671 : without any subversion label as a subdirectory in $sitelib
4672 if test "${api_revision}${api_version}${api_subversion}" = "550"; then
4673         api_versionstring='5.005'
4674 fi
4675
4676 : determine installation style
4677 : For now, try to deduce it from prefix unless it is already set.
4678 : Reproduce behavior of 5.005 and earlier, maybe drop that in 5.7.
4679 case "$installstyle" in
4680 '')     case "$prefix" in
4681                 *perl*) dflt='lib';;
4682                 *) dflt='lib/perl5' ;;
4683         esac
4684         ;;
4685 *)      dflt='lib/perl5' ;;
4686 esac
4687 : Probably not worth prompting for this since we prompt for all
4688 : the directories individually, and the prompt would be too long and
4689 : confusing anyway.
4690 installstyle=$dflt
4691
4692 : determine where private library files go
4693 : Usual default is /usr/local/lib/perl5/$version.
4694 : Also allow things like /opt/perl/lib/$version, since 
4695 : /opt/perl/lib/perl5... would be redundant.
4696 : The default "style" setting is made in installstyle.U
4697 case "$installstyle" in
4698 *lib/perl5*) set dflt privlib lib/$package/$version ;;
4699 *)       set dflt privlib lib/$version ;;
4700 esac
4701 eval $prefixit
4702 $cat <<EOM
4703
4704 There are some auxiliary files for $package that need to be put into a
4705 private library directory that is accessible by everyone.
4706
4707 EOM
4708 fn=d~+
4709 rp='Pathname where the private library files will reside?'
4710 . ./getfile
4711 privlib="$ans"
4712 privlibexp="$ansexp"
4713 : Change installation prefix, if necessary.
4714 if $test X"$prefix" != X"$installprefix"; then
4715         installprivlib=`echo $privlibexp | sed "s#^$prefix#$installprefix#"`
4716 else
4717         installprivlib="$privlibexp"
4718 fi
4719
4720 : set the prefixup variable, to restore leading tilda escape
4721 prefixup='case "$prefixexp" in
4722 "$prefix") ;;
4723 *) eval "$1=\`echo \$$1 | sed \"s,^$prefixexp,$prefix,\"\`";;
4724 esac'
4725
4726 : determine where public architecture dependent libraries go
4727 set archlib archlib
4728 eval $prefixit
4729 : privlib default is /usr/local/lib/$package/$version
4730 : archlib default is /usr/local/lib/$package/$version/$archname
4731 : privlib may have an optional trailing /share.
4732 tdflt=`echo $privlib | $sed 's,/share$,,'`
4733 tdflt=$tdflt/$archname
4734 case "$archlib" in
4735 '')     dflt=$tdflt
4736         ;;
4737 *)      dflt="$archlib"
4738     ;;
4739 esac
4740 $cat <<EOM
4741
4742 $spackage contains architecture-dependent library files.  If you are
4743 sharing libraries in a heterogeneous environment, you might store
4744 these files in a separate location.  Otherwise, you can just include
4745 them with the rest of the public library files.
4746
4747 EOM
4748 fn=d+~
4749 rp='Where do you want to put the public architecture-dependent libraries?'
4750 . ./getfile
4751 archlib="$ans"
4752 archlibexp="$ansexp"
4753 if $test X"$archlib" = X"$privlib"; then
4754         d_archlib="$undef"
4755 else
4756         d_archlib="$define"
4757 fi
4758 : Change installation prefix, if necessary.
4759 if $test X"$prefix" != X"$installprefix"; then
4760         installarchlib=`echo $archlibexp | sed "s#^$prefix#$installprefix#"`
4761 else
4762         installarchlib="$archlibexp"
4763 fi
4764
4765
4766 : Binary compatibility with 5.005 is not possible for builds
4767 : with advanced features
4768 case "$usethreads$usemultiplicity" in
4769 *define*)
4770         bincompat5005="$undef"
4771         d_bincompat5005="$undef"
4772         ;;
4773 *)      $cat <<EOM
4774
4775 Perl 5.006 can be compiled for binary compatibility with 5.005.
4776 If you decide to do so, you will be able to continue using most
4777 of the extensions that were compiled for Perl 5.005.
4778
4779 EOM
4780         case "$bincompat5005$d_bincompat5005" in
4781         *"$undef"*) dflt=n ;;
4782         *) dflt=y ;;
4783         esac
4784         rp='Binary compatibility with Perl 5.005?'
4785         . ./myread
4786         case "$ans" in
4787         y*) val="$define" ;;
4788         *)  val="$undef" ;;
4789         esac
4790         set d_bincompat5005
4791         eval $setvar
4792         case "$d_bincompat5005" in
4793         "$define")
4794                 bincompat5005="$define"
4795                 ;;
4796         *)      bincompat5005="$undef"
4797                 d_bincompat5005="$undef"
4798                 ;;
4799         esac
4800         ;;
4801 esac
4802
4803
4804 : see if setuid scripts can be secure
4805 $cat <<EOM
4806
4807 Some kernels have a bug that prevents setuid #! scripts from being
4808 secure.  Some sites have disabled setuid #! scripts because of this.
4809
4810 First let's decide if your kernel supports secure setuid #! scripts.
4811 (If setuid #! scripts would be secure but have been disabled anyway,
4812 don't say that they are secure if asked.)
4813
4814 EOM
4815
4816 val="$undef"
4817 if $test -d /dev/fd; then
4818         echo "#!$ls" >reflect
4819         chmod +x,u+s reflect
4820         ./reflect >flect 2>&1
4821         if $contains "/dev/fd" flect >/dev/null; then
4822                 echo "Congratulations, your kernel has secure setuid scripts!" >&4
4823                 val="$define"
4824         else
4825                 $cat <<EOM
4826 If you are not sure if they are secure, I can check but I'll need a
4827 username and password different from the one you are using right now.
4828 If you don't have such a username or don't want me to test, simply
4829 enter 'none'.
4830
4831 EOM
4832                 rp='Other username to test security of setuid scripts with?'
4833                 dflt='none'
4834                 . ./myread
4835                 case "$ans" in
4836                 n|none)
4837                         case "$d_suidsafe" in
4838                         '')     echo "I'll assume setuid scripts are *not* secure." >&4
4839                                 dflt=n;;
4840                         "$undef")
4841                                 echo "Well, the $hint value is *not* secure." >&4
4842                                 dflt=n;;
4843                         *)      echo "Well, the $hint value *is* secure." >&4
4844                                 dflt=y;;
4845                         esac
4846                         ;;
4847                 *)
4848                         $rm -f reflect flect
4849                         echo "#!$ls" >reflect
4850                         chmod +x,u+s reflect
4851                         echo >flect
4852                         chmod a+w flect
4853                         echo '"su" will (probably) prompt you for '"$ans's password."
4854                         su $ans -c './reflect >flect'
4855                         if $contains "/dev/fd" flect >/dev/null; then
4856                                 echo "Okay, it looks like setuid scripts are secure." >&4
4857                                 dflt=y
4858                         else
4859                                 echo "I don't think setuid scripts are secure." >&4
4860                                 dflt=n
4861                         fi
4862                         ;;
4863                 esac
4864                 rp='Does your kernel have *secure* setuid scripts?'
4865                 . ./myread
4866                 case "$ans" in
4867                 [yY]*)  val="$define";;
4868                 *)      val="$undef";;
4869                 esac
4870         fi
4871 else
4872         echo "I don't think setuid scripts are secure (no /dev/fd directory)." >&4
4873         echo "(That's for file descriptors, not floppy disks.)"
4874         val="$undef"
4875 fi
4876 set d_suidsafe
4877 eval $setvar
4878
4879 $rm -f reflect flect
4880
4881 : now see if they want to do setuid emulation
4882 echo " "
4883 val="$undef"
4884 case "$d_suidsafe" in
4885 "$define")
4886         val="$undef"
4887         echo "No need to emulate SUID scripts since they are secure here." >& 4
4888         ;;
4889 *)
4890         $cat <<EOM
4891 Some systems have disabled setuid scripts, especially systems where
4892 setuid scripts cannot be secure.  On systems where setuid scripts have
4893 been disabled, the setuid/setgid bits on scripts are currently
4894 useless.  It is possible for $package to detect those bits and emulate
4895 setuid/setgid in a secure fashion.  This emulation will only work if
4896 setuid scripts have been disabled in your kernel.
4897
4898 EOM
4899         case "$d_dosuid" in
4900         "$define") dflt=y ;;
4901         *) dflt=n ;;
4902         esac
4903         rp="Do you want to do setuid/setgid emulation?"
4904         . ./myread
4905         case "$ans" in
4906         [yY]*)  val="$define";;
4907         *)      val="$undef";;
4908         esac
4909         ;;
4910 esac
4911 set d_dosuid
4912 eval $setvar
4913
4914 : determine filename position in cpp output
4915 echo " "
4916 echo "Computing filename position in cpp output for #include directives..." >&4
4917 echo '#include <stdio.h>' > foo.c
4918 $cat >fieldn <<EOF
4919 $startsh
4920 $cppstdin $cppflags $cppminus <foo.c 2>/dev/null | \
4921 $grep '^[       ]*#.*stdio\.h' | \
4922 while read cline; do
4923         pos=1
4924         set \$cline
4925         while $test \$# -gt 0; do
4926                 if $test -r \`echo \$1 | $tr -d '"'\`; then
4927                         echo "\$pos"
4928                         exit 0
4929                 fi
4930                 shift
4931                 pos=\`expr \$pos + 1\`
4932         done
4933 done
4934 EOF
4935 chmod +x fieldn
4936 fieldn=`./fieldn`
4937 $rm -f foo.c fieldn
4938 case $fieldn in
4939 '') pos='???';;
4940 1) pos=first;;
4941 2) pos=second;;
4942 3) pos=third;;
4943 *) pos="${fieldn}th";;
4944 esac
4945 echo "Your cpp writes the filename in the $pos field of the line."
4946
4947 : locate header file
4948 $cat >findhdr <<EOF
4949 $startsh
4950 wanted=\$1
4951 name=''
4952 for usrincdir in $usrinc
4953 do
4954         if test -f \$usrincdir/\$wanted; then
4955                 echo "\$usrincdir/\$wanted"
4956                 exit 0
4957         fi
4958 done
4959 awkprg='{ print \$$fieldn }'
4960 echo "#include <\$wanted>" > foo\$\$.c
4961 $cppstdin $cppminus $cppflags < foo\$\$.c 2>/dev/null | \
4962 $grep "^[       ]*#.*\$wanted" | \
4963 while read cline; do
4964         name=\`echo \$cline | $awk "\$awkprg" | $tr -d '"'\`
4965         case "\$name" in
4966         *[/\\\\]\$wanted) echo "\$name"; exit 1;;
4967         *[\\\\/]\$wanted) echo "\$name"; exit 1;;
4968         *) exit 2;;
4969         esac;
4970 done;
4971 #
4972 # status = 0: grep returned 0 lines, case statement not executed
4973 # status = 1: headerfile found
4974 # status = 2: while loop executed, no headerfile found
4975 #
4976 status=\$?
4977 $rm -f foo\$\$.c;
4978 if test \$status -eq 1; then
4979         exit 0;
4980 fi
4981 exit 1
4982 EOF
4983 chmod +x findhdr
4984
4985 : define an alternate in-header-list? function
4986 inhdr='echo " "; td=$define; tu=$undef; yyy=$@;
4987 cont=true; xxf="echo \"<\$1> found.\" >&4";
4988 case $# in 2) xxnf="echo \"<\$1> NOT found.\" >&4";;
4989 *) xxnf="echo \"<\$1> NOT found, ...\" >&4";;
4990 esac;
4991 case $# in 4) instead=instead;; *) instead="at last";; esac;
4992 while $test "$cont"; do
4993         xxx=`./findhdr $1`
4994         var=$2; eval "was=\$$2";
4995         if $test "$xxx" && $test -r "$xxx";
4996         then eval $xxf;
4997         eval "case \"\$$var\" in $undef) . ./whoa; esac"; eval "$var=\$td";
4998                 cont="";
4999         else eval $xxnf;
5000         eval "case \"\$$var\" in $define) . ./whoa; esac"; eval "$var=\$tu"; fi;
5001         set $yyy; shift; shift; yyy=$@;
5002         case $# in 0) cont="";;
5003         2) xxf="echo \"but I found <\$1> $instead.\" >&4";
5004                 xxnf="echo \"and I did not find <\$1> either.\" >&4";;
5005         *) xxf="echo \"but I found <\$1\> instead.\" >&4";
5006                 xxnf="echo \"there is no <\$1>, ...\" >&4";;
5007         esac;
5008 done;
5009 while $test "$yyy";
5010 do set $yyy; var=$2; eval "was=\$$2";
5011         eval "case \"\$$var\" in $define) . ./whoa; esac"; eval "$var=\$tu";
5012         set $yyy; shift; shift; yyy=$@;
5013 done'
5014
5015 : see if this is a malloc.h system
5016 set malloc.h i_malloc
5017 eval $inhdr
5018
5019 : see if stdlib is available
5020 set stdlib.h i_stdlib
5021 eval $inhdr
5022
5023 : determine which malloc to compile in
5024 echo " "
5025 case "$usemymalloc" in
5026 ''|[yY]*|true|$define)  dflt='y' ;;
5027 *)      dflt='n' ;;
5028 esac
5029 rp="Do you wish to attempt to use the malloc that comes with $package?"
5030 . ./myread
5031 usemymalloc="$ans"
5032 case "$ans" in
5033 y*|true)
5034         usemymalloc='y'
5035         mallocsrc='malloc.c'
5036         mallocobj="malloc$_o"
5037         d_mymalloc="$define"
5038         case "$libs" in
5039         *-lmalloc*)
5040                 : Remove malloc from list of libraries to use
5041                 echo "Removing unneeded -lmalloc from library list" >&4
5042                 set `echo X $libs | $sed -e 's/-lmalloc / /' -e 's/-lmalloc$//'`
5043                 shift
5044                 libs="$*"
5045                 echo "libs = $libs" >&4
5046                 ;;
5047         esac
5048         ;;
5049 *)
5050         usemymalloc='n'
5051         mallocsrc=''
5052         mallocobj=''
5053         d_mymalloc="$undef"
5054         ;;
5055 esac
5056
5057 : compute the return types of malloc and free
5058 echo " "
5059 $cat >malloc.c <<END
5060 #$i_malloc I_MALLOC
5061 #$i_stdlib I_STDLIB
5062 #include <stdio.h>
5063 #include <sys/types.h>
5064 #ifdef I_MALLOC
5065 #include <malloc.h>
5066 #endif
5067 #ifdef I_STDLIB
5068 #include <stdlib.h>
5069 #endif
5070 #ifdef TRY_MALLOC
5071 void *malloc();
5072 #endif
5073 #ifdef TRY_FREE
5074 void free();
5075 #endif
5076 END
5077 case "$malloctype" in
5078 '')
5079         if $cc $ccflags -c -DTRY_MALLOC malloc.c >/dev/null 2>&1; then
5080                 malloctype='void *'
5081         else
5082                 malloctype='char *'
5083         fi
5084         ;;
5085 esac
5086 echo "Your system wants malloc to return '$malloctype', it would seem." >&4
5087
5088 case "$freetype" in
5089 '')
5090         if $cc $ccflags -c -DTRY_FREE malloc.c >/dev/null 2>&1; then
5091                 freetype='void'
5092         else
5093                 freetype='int'
5094         fi
5095         ;;
5096 esac
5097 echo "Your system uses $freetype free(), it would seem." >&4
5098 $rm -f malloc.[co]
5099 $cat <<EOM
5100
5101 The installation process will also create a directory for
5102 vendor-supplied add-ons.  Vendors who supply perl with their system
5103 may find it convenient to place all vendor-supplied files in this
5104 directory rather than in the main distribution directory.  This will
5105 ease upgrades between binary-compatible maintenance versions of perl.
5106
5107 Of course you may also use these directories in whatever way you see
5108 fit.  For example, you might use them to access modules shared over a
5109 company-wide network.
5110
5111 The default answer should be fine for most people.
5112 This causes further questions about vendor add-ons to be skipped
5113 and no vendor-specific directories will be configured for perl.
5114
5115 EOM
5116 rp='Do you want to configure vendor-specific add-on directories?'
5117 case "$usevendorprefix" in
5118 define|true|[yY]*) dflt=y ;;
5119 *) dflt=n ;;
5120 esac
5121 . ./myread
5122 case "$ans" in
5123 [yY]*)  fn=d~+
5124         rp='Installation prefix to use for vendor-supplied add-ons?'
5125         case "$vendorprefix" in
5126         '') dflt='' ;;
5127         *)  dflt=$vendorprefix ;;
5128         esac
5129         . ./getfile
5130         oldvendorprefix=''
5131         case "$vendorprefix" in
5132         '') ;;
5133         *)      case "$ans" in
5134                 "$prefix") ;;
5135                 *) oldvendorprefix="$prefix";;
5136                 esac
5137                 ;;
5138         esac
5139         usevendorprefix="$define"
5140         vendorprefix="$ans"
5141         vendorprefixexp="$ansexp"
5142         ;;
5143 *)      usevendorprefix="$undef"
5144         vendorprefix=''
5145         vendorprefixexp=''
5146         ;;
5147 esac
5148
5149 case "$vendorprefix" in
5150 '')     d_vendorlib="$undef"
5151         vendorlib=''
5152         vendorlibexp=''
5153         ;;
5154 *)      d_vendorlib="$define"
5155         : determine where vendor-supplied modules go.
5156         : Usual default is /usr/local/lib/perl5/vendor_perl/$version
5157         prog=`echo $package | $sed 's/-*[0-9.]*$//'`
5158         case "$installstyle" in
5159         *lib/perl5*) dflt=$vendorprefix/lib/$package/vendor_$prog/$version ;;
5160         *)           dflt=$vendorprefix/lib/vendor_$prog/$version ;;
5161         esac
5162         fn=d~+
5163         rp='Pathname for the vendor-supplied library files?'
5164         . ./getfile
5165         vendorlib="$ans"
5166         vendorlibexp="$ansexp"
5167         : Change installation prefix, if necessary.
5168         if $test X"$prefix" != X"$installprefix"; then
5169                 installvendorlib=`echo $vendorlibexp | $sed "s#^$prefix#$installprefix#"`
5170         else
5171                 installvendorlib="$vendorlibexp"
5172         fi
5173         ;;
5174 esac
5175
5176 : Cruising for prototypes
5177 echo " "
5178 echo "Checking out function prototypes..." >&4
5179 $cat >prototype.c <<'EOCP'
5180 int main(int argc, char *argv[]) {
5181         exit(0);}
5182 EOCP
5183 if $cc $ccflags -c prototype.c >prototype.out 2>&1 ; then
5184         echo "Your C compiler appears to support function prototypes."
5185         val="$define"
5186 else
5187         echo "Your C compiler doesn't seem to understand function prototypes."
5188         val="$undef"
5189 fi
5190 set prototype
5191 eval $setvar
5192 $rm -f prototype*
5193
5194 case "$prototype" in
5195 "$define") ;;
5196 *)      ansi2knr='ansi2knr'
5197         echo " "
5198         cat <<EOM >&4
5199
5200 $me:  FATAL ERROR:
5201 This version of $package can only be compiled by a compiler that 
5202 understands function prototypes.  Unfortunately, your C compiler 
5203         $cc $ccflags
5204 doesn't seem to understand them.  Sorry about that.
5205
5206 If GNU cc is available for your system, perhaps you could try that instead.  
5207
5208 Eventually, we hope to support building Perl with pre-ANSI compilers.
5209 If you would like to help in that effort, please contact <perlbug@perl.org>.
5210
5211 Aborting Configure now.
5212 EOM
5213         exit 2
5214         ;;
5215 esac
5216
5217 : determine where public executables go
5218 echo " "
5219 set dflt bin bin
5220 eval $prefixit
5221 fn=d~
5222 rp='Pathname where the public executables will reside?'
5223 . ./getfile
5224 if $test "X$ansexp" != "X$binexp"; then
5225         installbin=''
5226 fi
5227 bin="$ans"
5228 binexp="$ansexp"
5229 : Change installation prefix, if necessary.
5230 : XXX Bug? -- ignores Configure -Dinstallprefix setting.
5231 if $test X"$prefix" != X"$installprefix"; then
5232         installbin=`echo $binexp | sed "s#^$prefix#$installprefix#"`
5233 else
5234         installbin="$binexp"
5235 fi
5236
5237 $cat <<EOM
5238
5239 After $package is installed, you may wish to install various
5240 add-on modules and utilities.  Typically, these add-ons will
5241 be installed under $prefix with the rest
5242 of this package.  However, you may wish to install such add-ons
5243 elsewhere under a different prefix.
5244
5245 If you do not wish to put everything under a single prefix, that's
5246 ok.  You will be prompted for the individual locations; this siteprefix
5247 is only used to suggest the defaults.
5248
5249 The default should be fine for most people.
5250
5251 EOM
5252 fn=d~+
5253 rp='Installation prefix to use for add-on modules and utilities?'
5254 : XXX Here might be another good place for an installstyle setting.
5255 case "$siteprefix" in
5256 '') dflt=$prefix ;;
5257 *)  dflt=$siteprefix ;;
5258 esac
5259 . ./getfile
5260 oldsiteprefix=''
5261 case "$siteprefix" in
5262 '') ;;
5263 *)
5264         case "$ans" in
5265         "$prefix") ;;
5266         *) oldsiteprefix="$prefix";;
5267         esac
5268         ;;
5269 esac
5270 siteprefix="$ans"
5271 siteprefixexp="$ansexp"
5272
5273 : determine where site specific libraries go.
5274 : Usual default is /usr/local/lib/perl5/site_perl/$version
5275 : The default "style" setting is made in installstyle.U
5276 : XXX No longer works with Prefixit stuff.
5277 prog=`echo $package | $sed 's/-*[0-9.]*$//'`
5278 case "$installstyle" in
5279 *lib/perl5*) dflt=$siteprefix/lib/$package/site_$prog/$version ;;
5280 *)       dflt=$siteprefix/lib/site_$prog/$version ;;
5281 esac
5282 $cat <<EOM
5283
5284 The installation process will create a directory for
5285 site-specific extensions and modules.  Most users find it convenient
5286 to place all site-specific files in this directory rather than in the
5287 main distribution directory.
5288
5289 EOM
5290 fn=d~+
5291 rp='Pathname for the site-specific library files?'
5292 . ./getfile
5293 sitelib="$ans"
5294 sitelibexp="$ansexp"
5295 : Change installation prefix, if necessary.
5296 if $test X"$prefix" != X"$installprefix"; then
5297         installsitelib=`echo $sitelibexp | sed "s#^$prefix#$installprefix#"`
5298 else
5299         installsitelib="$sitelibexp"
5300 fi
5301
5302 : Determine list of previous versions to include in @INC
5303 $cat > getverlist <<EOPL
5304 #!$perl -w
5305 use File::Basename;
5306 \$api_versionstring = "$api_versionstring";
5307 \$version = "$version";
5308 \$sitelib = "$sitelib";
5309 \$archname = "$archname";
5310 EOPL
5311         $cat >> getverlist <<'EOPL'
5312 # Can't have leading @ because metaconfig interprets it as a command!
5313 ;@inc_version_list=();
5314 $stem=dirname($sitelib);
5315 # Redo to do opendir/readdir? 
5316 if (-d $stem) {
5317     chdir($stem);
5318     ;@candidates = glob("5.*");
5319 }
5320 else {
5321     ;@candidates = ();
5322 }
5323
5324 # XXX ToDo:  These comparisons must be reworked when two-digit
5325 # subversions come along, so that 5.7.10 compares as greater than
5326 # 5.7.3!  By that time, hope that 5.6.x is sufficiently
5327 # widespread that we can use the built-in version vectors rather
5328 # than reinventing them here.  For 5.6.0, however, we must
5329 # assume this script will likely be run by 5.005_0x.  --AD 1/2000.
5330 foreach $d (@candidates) {
5331     if ($d lt $version) {
5332         if ($d ge $api_versionstring) {
5333             unshift(@inc_version_list, "$d/$archname", $d);
5334         }
5335         elsif ($d ge "5.005") {
5336             unshift(@inc_version_list, $d);
5337         }
5338     }
5339     else {
5340         # Skip newer version.  I.e. don't look in
5341         # 5.7.0 if we're installing 5.6.1.
5342     }
5343 }
5344
5345 if (@inc_version_list) {
5346     print join(' ', @inc_version_list);
5347 }
5348 else {
5349     # Blank space to preserve value for next Configure run.
5350     print " ";
5351 }
5352 EOPL
5353 chmod +x getverlist
5354 case "$inc_version_list" in
5355 '')     if test -x $perl; then
5356                 dflt=`$perl getverlist`
5357         else
5358                 dflt='none'
5359         fi
5360         ;;
5361 $undef) dflt='none' ;;
5362 *)  dflt="$inc_version_list" ;;
5363 esac
5364 $cat <<'EOM'
5365
5366 In order to ease the process of upgrading, this version of perl 
5367 can be configured to use modules built and installed with earlier 
5368 versions of perl that were installed under $prefix.  Specify here
5369 the list of earlier versions that this version of perl should check.
5370 If Configure detected no earlier versions of perl installed under
5371 $prefix, then the list will be empty.  Answer 'none' to tell perl
5372 to not search earlier versions.
5373
5374 The default should almost always be sensible, so if you're not sure,
5375 just accept the default.
5376 EOM
5377
5378 rp='List of earlier versions to include in @INC?'
5379 . ./myread
5380 case "$ans" in
5381 [Nn]one) inc_version_list=' ' ;;
5382 *) inc_version_list="$ans" ;;
5383 esac
5384 case "$inc_version_list" in
5385 ''|' ') 
5386         inc_version_list_init='0';;
5387 *)      inc_version_list_init=`echo $inc_version_list |
5388                 $sed -e 's/^/"/' -e 's/ /","/g' -e 's/$/",0/'`
5389         ;;
5390 esac
5391 $rm -f getverlist
5392
5393 : determine whether to install perl also as /usr/bin/perl
5394
5395 echo " "
5396 if $test -d /usr/bin -a "X$installbin" != X/usr/bin; then
5397         $cat <<EOM
5398 Many scripts expect to perl to be installed as /usr/bin/perl.
5399 I can install the perl you are about to compile also as /usr/bin/perl
5400 (in addition to $installbin/perl).
5401 EOM
5402         case "$installusrbinperl" in
5403         "$undef"|[nN]*) dflt='n';;
5404         *)              dflt='y';;
5405         esac
5406         rp="Do you want to install perl as /usr/bin/perl?"
5407         . ./myread
5408         case "$ans" in
5409         [yY]*)  val="$define";;
5410         *)      val="$undef" ;;
5411         esac
5412 else
5413         val="$undef"
5414 fi
5415 set installusrbinperl
5416 eval $setvar
5417
5418 echo " "
5419 echo "Checking for GNU C Library..." >&4
5420 cat >gnulibc.c <<EOM
5421 #include <stdio.h>
5422 int main()
5423 {
5424 #ifdef __GLIBC__
5425     exit(0);
5426 #else
5427     exit(1);
5428 #endif
5429 }
5430 EOM
5431 set gnulibc
5432 if eval $compile_ok && ./gnulibc; then
5433         val="$define"
5434         echo "You are using the GNU C Library"
5435 else
5436         val="$undef"
5437         echo "You are not using the GNU C Library"
5438 fi
5439 $rm -f gnulibc*
5440 set d_gnulibc
5441 eval $setvar
5442
5443 : see if nm is to be used to determine whether a symbol is defined or not
5444 case "$usenm" in
5445 '')
5446         dflt=''
5447         case "$d_gnulibc" in
5448         "$define")
5449                 echo " "
5450                 echo "nm probably won't work on the GNU C Library." >&4
5451                 dflt=n
5452                 ;;
5453         esac
5454         case "$dflt" in
5455         '') 
5456                 if $test "$osname" = aix -a ! -f /lib/syscalls.exp; then
5457                         echo " "
5458                         echo "Whoops!  This is an AIX system without /lib/syscalls.exp!" >&4
5459                         echo "'nm' won't be sufficient on this sytem." >&4
5460                         dflt=n
5461                 fi
5462                 ;;
5463         esac
5464         case "$dflt" in
5465         '') dflt=`$egrep 'inlibc|csym' $rsrc/Configure | wc -l 2>/dev/null`
5466                 if $test $dflt -gt 20; then
5467                         dflt=y
5468                 else
5469                         dflt=n
5470                 fi
5471                 ;;
5472         esac
5473         ;;
5474 *)
5475         case "$usenm" in
5476         true|$define) dflt=y;;
5477         *) dflt=n;;
5478         esac
5479         ;;
5480 esac
5481 $cat <<EOM
5482
5483 I can use $nm to extract the symbols from your C libraries. This
5484 is a time consuming task which may generate huge output on the disk (up
5485 to 3 megabytes) but that should make the symbols extraction faster. The
5486 alternative is to skip the 'nm' extraction part and to compile a small
5487 test program instead to determine whether each symbol is present. If
5488 you have a fast C compiler and/or if your 'nm' output cannot be parsed,
5489 this may be the best solution.
5490
5491 You probably shouldn't let me use 'nm' if you are using the GNU C Library.
5492
5493 EOM
5494 rp="Shall I use $nm to extract C symbols from the libraries?"
5495 . ./myread
5496 case "$ans" in
5497 [Nn]*) usenm=false;;
5498 *) usenm=true;;
5499 esac
5500
5501 runnm=$usenm
5502 case "$reuseval" in
5503 true) runnm=false;;
5504 esac
5505
5506 : nm options which may be necessary
5507 case "$nm_opt" in
5508 '') if $test -f /mach_boot; then
5509                 nm_opt=''       # Mach
5510         elif $test -d /usr/ccs/lib; then
5511                 nm_opt='-p'     # Solaris (and SunOS?)
5512         elif $test -f /dgux; then
5513                 nm_opt='-p'     # DG-UX
5514         elif $test -f /lib64/rld; then
5515                 nm_opt='-p'     # 64-bit Irix
5516         else
5517                 nm_opt=''
5518         fi;;
5519 esac
5520
5521 : nm options which may be necessary for shared libraries but illegal
5522 : for archive libraries.  Thank you, Linux.
5523 case "$nm_so_opt" in
5524 '')     case "$myuname" in
5525         *linux*)
5526                 if $nm --help | $grep 'dynamic' > /dev/null 2>&1; then
5527                         nm_so_opt='--dynamic'
5528                 fi
5529                 ;;
5530         esac
5531         ;;
5532 esac
5533
5534 case "$runnm" in
5535 true)
5536 : get list of predefined functions in a handy place
5537 echo " "
5538 case "$libc" in
5539 '') libc=unknown
5540         case "$libs" in
5541         *-lc_s*) libc=`./loc libc_s$_a $libc $libpth`
5542         esac
5543         ;;
5544 esac
5545 libnames='';
5546 case "$libs" in
5547 '') ;;
5548 *)  for thislib in $libs; do
5549         case "$thislib" in
5550         -lc|-lc_s)
5551                 : Handle C library specially below.
5552                 ;;
5553         -l*)
5554                 thislib=`echo $thislib | $sed -e 's/^-l//'`
5555                 if try=`./loc lib$thislib.$so.'*' X $libpth`; $test -f "$try"; then
5556                         :
5557                 elif try=`./loc lib$thislib.$so X $libpth`; $test -f "$try"; then
5558                         :
5559                 elif try=`./loc lib$thislib$_a X $libpth`; $test -f "$try"; then
5560                         :
5561                 elif try=`./loc $thislib$_a X $libpth`; $test -f "$try"; then
5562                         :
5563                 elif try=`./loc lib$thislib X $libpth`; $test -f "$try"; then
5564                         :
5565                 elif try=`./loc $thislib X $libpth`; $test -f "$try"; then
5566                         :
5567                 elif try=`./loc Slib$thislib$_a X $xlibpth`; $test -f "$try"; then
5568                         :
5569                 else
5570                         try=''
5571                 fi
5572                 libnames="$libnames $try"
5573                 ;;
5574         *) libnames="$libnames $thislib" ;;
5575         esac
5576         done
5577         ;;
5578 esac
5579 xxx=normal
5580 case "$libc" in
5581 unknown)
5582         set /lib/libc.$so
5583         for xxx in $libpth; do
5584                 $test -r $1 || set $xxx/libc.$so
5585                 : The messy sed command sorts on library version numbers.
5586                 $test -r $1 || \
5587                         set `echo blurfl; echo $xxx/libc.$so.[0-9]* | \
5588                         tr ' ' $trnl | egrep -v '\.[A-Za-z]*$' | $sed -e '
5589                                 h
5590                                 s/[0-9][0-9]*/0000&/g
5591                                 s/0*\([0-9][0-9][0-9][0-9][0-9]\)/\1/g
5592                                 G
5593                                 s/\n/ /' | \
5594                          sort | $sed -e 's/^.* //'`
5595                 eval set \$$#
5596         done
5597         $test -r $1 || set /usr/ccs/lib/libc.$so
5598         $test -r $1 || set /lib/libsys_s$_a
5599         ;;
5600 *)
5601         set blurfl
5602         ;;
5603 esac
5604 if $test -r "$1"; then
5605         echo "Your (shared) C library seems to be in $1."
5606         libc="$1"
5607 elif $test -r /lib/libc && $test -r /lib/clib; then
5608         echo "Your C library seems to be in both /lib/clib and /lib/libc."
5609         xxx=apollo
5610         libc='/lib/clib /lib/libc'
5611         if $test -r /lib/syslib; then
5612                 echo "(Your math library is in /lib/syslib.)"
5613                 libc="$libc /lib/syslib"
5614         fi
5615 elif $test -r "$libc" || (test -h "$libc") >/dev/null 2>&1; then
5616         echo "Your C library seems to be in $libc, as you said before."
5617 elif $test -r $incpath/usr/lib/libc$_a; then
5618         libc=$incpath/usr/lib/libc$_a;
5619         echo "Your C library seems to be in $libc.  That's fine."
5620 elif $test -r /lib/libc$_a; then
5621         libc=/lib/libc$_a;
5622         echo "Your C library seems to be in $libc.  You're normal."
5623 else
5624         if tans=`./loc libc$_a blurfl/dyick $libpth`; $test -r "$tans"; then
5625                 :
5626         elif tans=`./loc libc blurfl/dyick $libpth`; $test -r "$tans"; then
5627                 libnames="$libnames "`./loc clib blurfl/dyick $libpth`
5628         elif tans=`./loc clib blurfl/dyick $libpth`; $test -r "$tans"; then
5629                 :
5630         elif tans=`./loc Slibc$_a blurfl/dyick $xlibpth`; $test -r "$tans"; then
5631                 :
5632         elif tans=`./loc Mlibc$_a blurfl/dyick $xlibpth`; $test -r "$tans"; then
5633                 :
5634         else
5635                 tans=`./loc Llibc$_a blurfl/dyick $xlibpth`
5636         fi
5637         if $test -r "$tans"; then
5638                 echo "Your C library seems to be in $tans, of all places."
5639                 libc=$tans
5640         else
5641                 libc='blurfl'
5642         fi
5643 fi
5644 if $test $xxx = apollo -o -r "$libc" || (test -h "$libc") >/dev/null 2>&1; then
5645         dflt="$libc"
5646         cat <<EOM
5647
5648 If the guess above is wrong (which it might be if you're using a strange
5649 compiler, or your machine supports multiple models), you can override it here.
5650
5651 EOM
5652 else
5653         dflt=''
5654         echo $libpth | tr ' ' $trnl | sort | uniq > libpath
5655         cat >&4 <<EOM
5656 I can't seem to find your C library.  I've looked in the following places:
5657
5658 EOM
5659         $sed 's/^/      /' libpath
5660         cat <<EOM
5661
5662 None of these seems to contain your C library. I need to get its name...
5663
5664 EOM
5665 fi
5666 fn=f
5667 rp='Where is your C library?'
5668 . ./getfile
5669 libc="$ans"
5670
5671 echo " "
5672 echo $libc $libnames | tr ' ' $trnl | sort | uniq > libnames
5673 set X `cat libnames`
5674 shift
5675 xxx=files
5676 case $# in 1) xxx=file; esac
5677 echo "Extracting names from the following $xxx for later perusal:" >&4
5678 echo " "
5679 $sed 's/^/      /' libnames >&4
5680 echo " "
5681 $echo $n "This may take a while...$c" >&4
5682
5683 for file in $*; do
5684         case $file in
5685         *$so*) $nm $nm_so_opt $nm_opt $file 2>/dev/null;;
5686         *) $nm $nm_opt $file 2>/dev/null;;
5687         esac
5688 done >libc.tmp
5689
5690 $echo $n ".$c"
5691 $grep fprintf libc.tmp > libc.ptf
5692 xscan='eval "<libc.ptf $com >libc.list"; $echo $n ".$c" >&4'
5693 xrun='eval "<libc.tmp $com >libc.list"; echo "done" >&4'
5694 xxx='[ADTSIW]'
5695 if com="$sed -n -e 's/__IO//' -e 's/^.* $xxx  *_[_.]*//p' -e 's/^.* $xxx  *//p'";\
5696         eval $xscan;\
5697         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5698                 eval $xrun
5699 elif com="$sed -n -e 's/^__*//' -e 's/^\([a-zA-Z_0-9$]*\).*xtern.*/\1/p'";\
5700         eval $xscan;\
5701         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5702                 eval $xrun
5703 elif com="$sed -n -e '/|UNDEF/d' -e '/FUNC..GL/s/^.*|__*//p'";\
5704         eval $xscan;\
5705         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5706                 eval $xrun
5707 elif com="$sed -n -e 's/^.* D __*//p' -e 's/^.* D //p'";\
5708         eval $xscan;\
5709         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5710                 eval $xrun
5711 elif com="$sed -n -e 's/^_//' -e 's/^\([a-zA-Z_0-9]*\).*xtern.*text.*/\1/p'";\
5712         eval $xscan;\
5713         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5714                 eval $xrun
5715 elif com="$sed -n -e 's/^.*|FUNC |GLOB .*|//p'";\
5716         eval $xscan;\
5717         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5718                 eval $xrun
5719 elif com="$grep '|' | $sed -n -e '/|COMMON/d' -e '/|DATA/d' \
5720                                 -e '/ file/d' -e 's/^\([^       ]*\).*/\1/p'";\
5721         eval $xscan;\
5722         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5723                 eval $xrun
5724 elif com="$sed -n -e 's/^.*|FUNC |GLOB .*|//p' -e 's/^.*|FUNC |WEAK .*|//p'";\
5725         eval $xscan;\
5726         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5727                 eval $xrun
5728 elif com="$sed -n -e 's/^__//' -e '/|Undef/d' -e '/|Proc/s/ .*//p'";\
5729         eval $xscan;\
5730         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5731                 eval $xrun
5732 elif com="$sed -n -e 's/^.*|Proc .*|Text *| *//p'";\
5733         eval $xscan;\
5734         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5735                 eval $xrun
5736 elif com="$sed -n -e '/Def. Text/s/.* \([^ ]*\)\$/\1/p'";\
5737         eval $xscan;\
5738         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5739                 eval $xrun
5740 elif com="$sed -n -e 's/^[-0-9a-f ]*_\(.*\)=.*/\1/p'";\
5741         eval $xscan;\
5742         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5743                 eval $xrun
5744 elif com="$sed -n -e 's/.*\.text n\ \ \ \.//p'";\
5745         eval $xscan;\
5746         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5747                 eval $xrun
5748 elif com="sed -n -e 's/^__.*//' -e 's/[       ]*D[    ]*[0-9]*.*//p'";\
5749         eval $xscan;\
5750         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5751                 eval $xrun
5752 else
5753         $nm -p $* 2>/dev/null >libc.tmp
5754         $grep fprintf libc.tmp > libc.ptf
5755         if com="$sed -n -e 's/^.* [ADTSIW]  *_[_.]*//p' -e 's/^.* [ADTSIW] //p'";\
5756                 eval $xscan; $contains '^fprintf$' libc.list >/dev/null 2>&1
5757         then
5758                 nm_opt='-p'
5759                 eval $xrun
5760         else
5761                 echo " "
5762                 echo "$nm didn't seem to work right. Trying $ar instead..." >&4
5763                 com=''
5764                 if $ar t $libc > libc.tmp && $contains '^fprintf$' libc.tmp >/dev/null 2>&1; then
5765                         for thisname in $libnames $libc; do
5766                                 $ar t $thisname >>libc.tmp
5767                         done
5768                         $sed -e "s/\\$_o\$//" < libc.tmp > libc.list
5769                         echo "Ok." >&4
5770                 elif test "X$osname" = "Xos2" && $ar tv $libc > libc.tmp; then
5771                         # Repeat libc to extract forwarders to DLL entries too
5772                         for thisname in $libnames $libc; do
5773                                 $ar tv $thisname >>libc.tmp
5774                                 # Revision 50 of EMX has bug in $ar.
5775                                 # it will not extract forwarders to DLL entries
5776                                 # Use emximp which will extract exactly them.
5777                                 emximp -o tmp.imp $thisname \
5778                                     2>/dev/null && \
5779                                     $sed -e 's/^\([_a-zA-Z0-9]*\) .*$/\1/p' \
5780                                     < tmp.imp >>libc.tmp
5781                                 $rm tmp.imp
5782                         done
5783                         $sed -e "s/\\$_o\$//" -e 's/^ \+//' < libc.tmp > libc.list
5784                         echo "Ok." >&4
5785                 else
5786                         echo "$ar didn't seem to work right." >&4
5787                         echo "Maybe this is a Cray...trying bld instead..." >&4
5788                         if bld t $libc | $sed -e 's/.*\///' -e "s/\\$_o:.*\$//" > libc.list
5789                         then
5790                                 for thisname in $libnames; do
5791                                         bld t $libnames | \
5792                                         $sed -e 's/.*\///' -e "s/\\$_o:.*\$//" >>libc.list
5793                                         $ar t $thisname >>libc.tmp
5794                                 done
5795                                 echo "Ok." >&4
5796                         else
5797                                 echo "That didn't work either.  Giving up." >&4
5798                                 exit 1
5799                         fi
5800                 fi
5801         fi
5802 fi
5803 nm_extract="$com"
5804 if $test -f /lib/syscalls.exp; then
5805         echo " "
5806         echo "Also extracting names from /lib/syscalls.exp for good ole AIX..." >&4
5807         $sed -n 's/^\([^        ]*\)[   ]*syscall[0-9]*$/\1/p' /lib/syscalls.exp >>libc.list
5808 fi
5809 ;;
5810 esac
5811 $rm -f libnames libpath
5812
5813 : see if dld is available
5814 set dld.h i_dld
5815 eval $inhdr
5816
5817 : is a C symbol defined?
5818 csym='tlook=$1;
5819 case "$3" in
5820 -v) tf=libc.tmp; tc=""; tdc="";;
5821 -a) tf=libc.tmp; tc="[0]"; tdc="[]";;
5822 *) tlook="^$1\$"; tf=libc.list; tc="()"; tdc="()";;
5823 esac;
5824 tx=yes;
5825 case "$reuseval-$4" in
5826 true-) ;;
5827 true-*) tx=no; eval "tval=\$$4"; case "$tval" in "") tx=yes;; esac;;
5828 esac;
5829 case "$tx" in
5830 yes)
5831         case "$runnm" in
5832         true)
5833                 if $contains $tlook $tf >/dev/null 2>&1;
5834                 then tval=true;
5835                 else tval=false;
5836                 fi;;
5837         *)
5838                 echo "int main() { extern short $1$tdc; printf(\"%hd\", $1$tc); }" > t.c;
5839                 if $cc $optimize $ccflags $ldflags -o t t.c $libs >/dev/null 2>&1;
5840                 then tval=true;
5841                 else tval=false;
5842                 fi;
5843                 $rm -f t t.c;;
5844         esac;;
5845 *)
5846         case "$tval" in
5847         $define) tval=true;;
5848         *) tval=false;;
5849         esac;;
5850 esac;
5851 eval "$2=$tval"'
5852
5853 : define an is-in-libc? function
5854 inlibc='echo " "; td=$define; tu=$undef;
5855 sym=$1; var=$2; eval "was=\$$2";
5856 tx=yes;
5857 case "$reuseval$was" in
5858 true) ;;
5859 true*) tx=no;;
5860 esac;
5861 case "$tx" in
5862 yes)
5863         set $sym tres -f;
5864         eval $csym;
5865         case "$tres" in
5866         true)
5867                 echo "$sym() found." >&4;
5868                 case "$was" in $undef) . ./whoa; esac; eval "$var=\$td";;
5869         *)
5870                 echo "$sym() NOT found." >&4;
5871                 case "$was" in $define) . ./whoa; esac; eval "$var=\$tu";;
5872         esac;;
5873 *)
5874         case "$was" in
5875         $define) echo "$sym() found." >&4;;
5876         *) echo "$sym() NOT found." >&4;;
5877         esac;;
5878 esac'
5879
5880 : see if dlopen exists
5881 xxx_runnm="$runnm"
5882 runnm=false
5883 set dlopen d_dlopen
5884 eval $inlibc
5885 runnm="$xxx_runnm"
5886
5887 : determine which dynamic loading, if any, to compile in
5888 echo " "
5889 dldir="ext/DynaLoader"
5890 case "$usedl" in
5891 $define|y|true)
5892         dflt='y'
5893         usedl="$define"
5894         ;;
5895 $undef|n|false)
5896         dflt='n'
5897         usedl="$undef"
5898         ;;
5899 *) 
5900         dflt='n'
5901         case "$d_dlopen" in
5902             $define) dflt='y' ;;
5903         esac
5904         case "$i_dld" in
5905             $define) dflt='y' ;;
5906         esac
5907         : Does a dl_xxx.xs file exist for this operating system
5908         $test -f $rsrc/$dldir/dl_${osname}.xs && dflt='y'
5909         ;;
5910 esac
5911 rp="Do you wish to use dynamic loading?"
5912 . ./myread
5913 usedl="$ans"
5914 case "$ans" in
5915 y*) usedl="$define"
5916         case "$dlsrc" in
5917         '')
5918                 if $test -f $rsrc/$dldir/dl_${osname}.xs ; then
5919                         dflt="$dldir/dl_${osname}.xs"
5920                 elif $test "$d_dlopen" = "$define" ; then
5921                         dflt="$dldir/dl_dlopen.xs"
5922                 elif $test "$i_dld" = "$define" ; then
5923                         dflt="$dldir/dl_dld.xs"
5924                 else
5925                         dflt=''
5926                 fi
5927                 ;;
5928         *)      dflt="$dldir/$dlsrc"
5929                 ;;
5930         esac
5931     echo "The following dynamic loading files are available:"
5932         : Can not go over to $dldir because getfile has path hard-coded in.
5933         tdir=`pwd`; cd $rsrc; $ls -C $dldir/dl*.xs; cd $tdir
5934         rp="Source file to use for dynamic loading"
5935         fn="fne"
5936         gfpth="$src"
5937         . ./getfile
5938         usedl="$define"
5939         : emulate basename
5940         dlsrc=`echo $ans | $sed -e 's@.*/\([^/]*\)$@\1@'`
5941
5942         $cat << EOM
5943
5944 Some systems may require passing special flags to $cc -c to
5945 compile modules that will be used to create a shared library.
5946 To use no flags, say "none".
5947
5948 EOM
5949     case "$cccdlflags" in
5950     '') case "$gccversion" in
5951                 '') case "$osname" in
5952                         hpux)   dflt='+z' ;;
5953                         next)   dflt='none' ;;
5954                         irix*)  dflt='-KPIC' ;;
5955                         svr4*|esix*|solaris) dflt='-KPIC' ;;
5956                         sunos)  dflt='-pic' ;;
5957                         *)      dflt='none' ;;
5958                     esac
5959                         ;;
5960                 *)  case "$osname" in
5961                         svr4*|esix*|solaris) dflt='-fPIC' ;;
5962                         *)      dflt='-fpic' ;;
5963                     esac ;;
5964             esac ;;
5965         ' ') dflt='none' ;;
5966     *)  dflt="$cccdlflags" ;;
5967     esac
5968     rp="Any special flags to pass to $cc -c to compile shared library modules?"
5969     . ./myread
5970     case "$ans" in
5971     none) cccdlflags=' ' ;;
5972     *) cccdlflags="$ans" ;;
5973     esac
5974
5975     cat << EOM
5976
5977 Some systems use ld to create libraries that can be dynamically loaded,
5978 while other systems (such as those using ELF) use $cc.
5979
5980 EOM
5981         case "$ld" in
5982         '')     $cat >try.c <<'EOM'
5983 /* Test for whether ELF binaries are produced */
5984 #include <fcntl.h>
5985 #include <stdlib.h>
5986 int main() {
5987         char b[4];
5988         int i = open("a.out",O_RDONLY);
5989         if(i == -1) 
5990                 exit(1); /* fail */
5991         if(read(i,b,4)==4 && b[0]==127 && b[1]=='E' && b[2]=='L' && b[3]=='F')
5992                 exit(0); /* succeed (yes, it's ELF) */
5993         else
5994                 exit(1); /* fail */
5995 }
5996 EOM
5997                 if $cc $ccflags try.c >/dev/null 2>&1 && ./a.out; then
5998                         cat <<EOM
5999 You appear to have ELF support.  I'll use $cc to build dynamic libraries.
6000 EOM
6001                         dflt="$cc"
6002                 else
6003                         echo "I'll use ld to build dynamic libraries."
6004                         dflt='ld'
6005                 fi
6006                 rm -f try.c a.out
6007                 ;;
6008         *)      dflt="$ld"
6009                 ;;
6010         esac
6011
6012     rp="What command should be used to create dynamic libraries?"
6013     . ./myread
6014         ld="$ans"
6015
6016     cat << EOM
6017
6018 Some systems may require passing special flags to $ld to create a
6019 library that can be dynamically loaded.  If your ld flags include
6020 -L/other/path options to locate libraries outside your loader's normal
6021 search path, you may need to specify those -L options here as well.  To
6022 use no flags, say "none".
6023
6024 EOM
6025     case "$lddlflags" in
6026     '') case "$osname" in
6027                         beos) dflt='-nostart' ;;
6028                         hpux)  dflt='-b' ;;
6029                         linux|irix*)    dflt='-shared' ;;
6030                         next)  dflt='none' ;;
6031                         solaris) dflt='-G' ;;
6032                         sunos) dflt='-assert nodefinitions' ;;
6033                         svr4*|esix*) dflt="-G $ldflags" ;;
6034                 *)     dflt='none' ;;
6035                         esac
6036                         ;;
6037     *) dflt="$lddlflags" ;;
6038     esac
6039
6040         : Try to guess additional flags to pick up local libraries.
6041         : Be careful not to append to a plain 'none'
6042         case "$dflt" in
6043         none) dflt='' ;;
6044         esac
6045         for thisflag in $ldflags; do
6046                 case "$thisflag" in
6047                 -L*)
6048                         case " $dflt " in
6049                         *" $thisflag "*) ;;
6050                         *) dflt="$dflt $thisflag" ;;
6051                         esac
6052                         ;;
6053                 esac
6054         done
6055
6056         case "$dflt" in
6057         ''|' ') dflt='none' ;;
6058         esac
6059
6060     rp="Any special flags to pass to $ld to create a dynamically loaded library?"
6061     . ./myread
6062     case "$ans" in
6063     none) lddlflags=' ' ;;
6064     *) lddlflags="$ans" ;;
6065     esac
6066
6067         cat <<EOM
6068
6069 Some systems may require passing special flags to $cc to indicate that
6070 the resulting executable will use dynamic linking.  To use no flags,
6071 say "none".
6072
6073 EOM
6074     case "$ccdlflags" in
6075     '') case "$osname" in
6076                 hpux)   dflt='-Wl,-E' ;;
6077                 linux)  dflt='-rdynamic' ;;
6078                 next)   dflt='none' ;;
6079                 sunos)  dflt='none' ;;
6080                 *)      dflt='none' ;;
6081             esac ;;
6082     ' ')  dflt='none' ;;
6083     *)  dflt="$ccdlflags" ;;
6084     esac
6085     rp="Any special flags to pass to $cc to use dynamic linking?"
6086     . ./myread
6087     case "$ans" in
6088     none) ccdlflags=' ' ;;
6089     *) ccdlflags="$ans" ;;
6090     esac
6091     ;;
6092 *)  usedl="$undef"
6093         ld='ld'
6094     dlsrc='dl_none.xs'
6095     lddlflags=''
6096     ccdlflags=''
6097     ;;
6098 esac
6099
6100 also=''
6101 case "$usedl" in
6102 $undef)
6103         # No dynamic loading being used, so don't bother even to prompt.
6104         useshrplib='false'
6105         ;;
6106 *)      case "$useshrplib" in
6107         '')     case "$osname" in
6108                 svr4*|dgux|dynixptx|esix|powerux|beos|cygwin*)
6109                         dflt=y
6110                         also='Building a shared libperl is required for dynamic loading to work on your system.'
6111                         ;;
6112                 next*)
6113                         case "$osvers" in
6114                         4*)     dflt=y
6115                                 also='Building a shared libperl is needed for MAB support.'
6116                                 ;;
6117                         *)      dflt=n
6118                                 ;;
6119                         esac
6120                         ;;
6121                 *)      dflt=n
6122                         ;;
6123                 esac
6124                 ;;
6125         $define|true|[Yy]*)
6126                 dflt=y
6127                 ;;
6128         *)      dflt=n
6129                 ;;
6130         esac
6131         $cat << EOM
6132
6133 The perl executable is normally obtained by linking perlmain.c with
6134 libperl${_a}, any static extensions (usually just DynaLoader), and
6135 any other libraries needed on this system (such as -lm, etc.).  Since
6136 your system supports dynamic loading, it is probably possible to build
6137 a shared libperl.$so.  If you will have more than one executable linked
6138 to libperl.$so, this will significantly reduce the size of each
6139 executable, but it may have a noticeable affect on performance.  The
6140 default is probably sensible for your system.
6141 $also
6142
6143 EOM
6144         rp="Build a shared libperl.$so (y/n)"
6145         . ./myread
6146         case "$ans" in
6147         true|$define|[Yy]*)
6148                 useshrplib='true'  ;;
6149         *)      useshrplib='false' ;;
6150         esac
6151         ;;
6152 esac
6153
6154 case "$useshrplib" in
6155 true)
6156         case "$libperl" in
6157         '')
6158                 # Figure out a good name for libperl.so.  Since it gets stored in
6159                 # a version-specific architecture-dependent library, the version
6160                 # number isn't really that important, except for making cc/ld happy.
6161                 #
6162                 # A name such as libperl.so.3.1
6163                 majmin="libperl.$so.$patchlevel.$subversion"
6164                 # A name such as libperl.so.301
6165                 majonly=`echo $patchlevel $subversion |
6166                         $awk '{printf "%d%02d", $1, $2}'`
6167                 majonly=libperl.$so.$majonly
6168                 # I'd prefer to keep the os-specific stuff here to a minimum, and
6169                 # rely on figuring it out from the naming of libc.
6170                 case "${osname}${osvers}" in
6171                 next4*)
6172                         dflt=libperl.5.$so
6173                         # XXX How handle the --version stuff for MAB?
6174                         ;;
6175                 linux*)  # ld won't link with a bare -lperl otherwise.
6176                         dflt=libperl.$so
6177                         ;;
6178                 cygwin*) # include version
6179                         dflt=`echo libperl$version | sed -e 's/\./_/g'`$lib_ext
6180                         ;;
6181                 *)      # Try to guess based on whether libc has major.minor.
6182                         case "$libc" in
6183                         *libc.$so.[0-9]*.[0-9]*) dflt=$majmin ;;
6184                         *libc.$so.[0-9]*) dflt=$majonly ;;
6185                         *)      dflt=libperl.$so ;;
6186                         esac
6187                         ;;
6188                 esac
6189                 ;;
6190         *)      dflt=$libperl
6191                 ;;
6192         esac
6193         cat << EOM
6194
6195 I need to select a good name for the shared libperl.  If your system uses
6196 library names with major and minor numbers, then you might want something
6197 like $majmin.  Alternatively, if your system uses a single version
6198 number for shared libraries, then you might want to use $majonly.
6199 Or, your system might be quite happy with a simple libperl.$so.
6200
6201 Since the shared libperl will get installed into a version-specific
6202 architecture-dependent directory, the version number of the shared perl
6203 library probably isn't important, so the default should be o.k.
6204
6205 EOM
6206         rp='What name do you want to give to the shared libperl?'
6207         . ./myread
6208         libperl=$ans
6209         echo "Ok, I'll use $libperl"
6210         ;;
6211 *)
6212         libperl="libperl${_a}"
6213         ;;
6214 esac
6215
6216 # Detect old use of shrpdir via undocumented Configure -Dshrpdir
6217 case "$shrpdir" in
6218 '') ;;
6219 *)      $cat >&4 <<EOM
6220 WARNING:  Use of the shrpdir variable for the installation location of
6221 the shared $libperl is not supported.  It was never documented and
6222 will not work in this version.  Let me (perlbug@perl.com)
6223 know of any problems this may cause.
6224
6225 EOM
6226         case "$shrpdir" in
6227         "$archlibexp/CORE")
6228                 $cat >&4 <<EOM
6229 But your current setting of $shrpdir is
6230 the default anyway, so it's harmless.
6231 EOM
6232                 ;;
6233         *)
6234                 $cat >&4 <<EOM
6235 Further, your current attempted setting of $shrpdir
6236 conflicts with the value of $archlibexp/CORE
6237 that installperl will use.
6238 EOM
6239                 ;;
6240         esac
6241         ;;
6242 esac
6243
6244 # How will the perl executable find the installed shared $libperl?
6245 # Add $xxx to ccdlflags.
6246 # If we can't figure out a command-line option, use $shrpenv to
6247 # set env LD_RUN_PATH.  The main perl makefile uses this.
6248 shrpdir=$archlibexp/CORE
6249 xxx=''
6250 tmp_shrpenv=''
6251 if "$useshrplib"; then
6252     case "$osname" in 
6253         aix)
6254                 # We'll set it in Makefile.SH...
6255                 ;;
6256         solaris|netbsd)
6257                 xxx="-R $shrpdir"
6258                 ;;
6259         freebsd)
6260                 xxx="-Wl,-R$shrpdir"
6261                 ;;
6262         linux|irix*|dec_osf)
6263                 xxx="-Wl,-rpath,$shrpdir"
6264                 ;;
6265         next)
6266                 # next doesn't like the default...
6267                 ;;
6268         beos)
6269                 # beos doesn't like the default, either.
6270                 ;;
6271         hpux*)
6272                 # hpux doesn't like the default, either.
6273                 tmp_shrpenv="env LDOPTS=\"+s +b${shrpdir}\""
6274                 ;;
6275         *)
6276                 tmp_shrpenv="env LD_RUN_PATH=$shrpdir"
6277                 ;;
6278         esac
6279         case "$xxx" in
6280         '') ;;
6281         *)      
6282                 # Only add $xxx if it isn't already in ccdlflags.
6283                 case " $ccdlflags " in
6284                 *" $xxx "*)     ;;
6285                 *)      ccdlflags="$ccdlflags $xxx"
6286                         cat <<EOM >&4
6287
6288 Adding $xxx to the flags
6289 passed to $ld so that the perl executable will find the 
6290 installed shared $libperl.
6291
6292 EOM
6293                         ;;
6294                 esac
6295                 ;;
6296         esac
6297 fi
6298 # Fix ccdlflags in AIX for building external extensions.
6299 # (For building Perl itself bare -bE:perl.exp is needed,
6300 #  Makefile.SH takes care of this.)
6301 case "$osname" in
6302 aix) ccdlflags="$ccdlflags -bE:$installarchlib/CORE/perl.exp" ;;
6303 esac
6304 # Respect a hint or command-line value.
6305 case "$shrpenv" in
6306 '') shrpenv="$tmp_shrpenv" ;;
6307 esac
6308 case "$ldlibpthname" in
6309 '')     ldlibpthname=LD_LIBRARY_PATH ;;
6310 none)   ldlibpthname='' ;;
6311 esac
6312
6313 : determine where manual pages go
6314 set man1dir man1dir none
6315 eval $prefixit
6316 $cat <<EOM
6317
6318 $spackage has manual pages available in source form.
6319 EOM
6320 case "$nroff" in
6321 nroff)
6322         echo "However, you don't have nroff, so they're probably useless to you."
6323         case "$man1dir" in
6324         '') man1dir="none";;
6325         esac;;
6326 esac
6327 echo "If you don't want the manual sources installed, answer 'none'."
6328 case "$man1dir" in
6329 ' ') dflt=none
6330         ;;
6331 '')
6332         lookpath="$prefixexp/man/man1 $prefixexp/man/l_man/man1"
6333         lookpath="$lookpath $prefixexp/man/p_man/man1"
6334         lookpath="$lookpath $prefixexp/man/u_man/man1"
6335         lookpath="$lookpath $prefixexp/man/man.1"
6336         case "$sysman" in
6337         */?_man*)       dflt=`./loc . $prefixexp/l_man/man1 $lookpath` ;;
6338         *)      dflt=`./loc . $prefixexp/man/man1 $lookpath` ;;
6339         esac
6340         set dflt
6341         eval $prefixup
6342         ;;
6343 *)  dflt="$man1dir"
6344         ;;
6345 esac
6346 echo " "
6347 fn=dn+~
6348 rp="Where do the main $spackage manual pages (source) go?"
6349 . ./getfile
6350 if $test "X$man1direxp" != "X$ansexp"; then
6351         installman1dir=''
6352 fi
6353 man1dir="$ans"
6354 man1direxp="$ansexp"
6355 case "$man1dir" in
6356 '')     man1dir=' '
6357         installman1dir='';;
6358 esac
6359
6360 : Change installation prefix, if necessary.
6361 if $test X"$prefix" != X"$installprefix"; then
6362         installman1dir=`echo $man1direxp | $sed "s#^$prefix#$installprefix#"`
6363 else
6364         installman1dir="$man1direxp"
6365 fi
6366
6367 : What suffix to use on installed man pages
6368
6369 case "$man1dir" in
6370 ' ')
6371         man1ext='0'
6372         ;;
6373 *)
6374         rp="What suffix should be used for the main $spackage man pages?"
6375         case "$man1ext" in
6376         '')     case "$man1dir" in
6377                 *1)  dflt=1 ;;
6378                 *1p) dflt=1p ;;
6379                 *1pm) dflt=1pm ;;
6380                 *l) dflt=l;;
6381                 *n) dflt=n;;
6382                 *o) dflt=o;;
6383                 *p) dflt=p;;
6384                 *C) dflt=C;;
6385                 *L) dflt=L;;
6386                 *L1) dflt=L1;;
6387                 *) dflt=1;;
6388                 esac
6389                 ;;
6390         *)      dflt="$man1ext";;
6391         esac
6392         . ./myread
6393         man1ext="$ans"
6394         ;;
6395 esac
6396
6397 : see if we can have long filenames
6398 echo " "
6399 rmlist="$rmlist /tmp/cf$$"
6400 $test -d /tmp/cf$$ || mkdir /tmp/cf$$
6401 first=123456789abcdef
6402 second=/tmp/cf$$/$first
6403 $rm -f $first $second
6404 if (echo hi >$first) 2>/dev/null; then
6405         if $test -f 123456789abcde; then
6406                 echo 'You cannot have filenames longer than 14 characters.  Sigh.' >&4
6407                 val="$undef"
6408         else
6409                 if (echo hi >$second) 2>/dev/null; then
6410                         if $test -f /tmp/cf$$/123456789abcde; then
6411                                 $cat <<'EOM'
6412 That's peculiar... You can have filenames longer than 14 characters, but only
6413 on some of the filesystems.  Maybe you are using NFS.  Anyway, to avoid problems
6414 I shall consider your system cannot support long filenames at all.
6415 EOM
6416                                 val="$undef"
6417                         else
6418                                 echo 'You can have filenames longer than 14 characters.' >&4
6419                                 val="$define"
6420                         fi
6421                 else
6422                         $cat <<'EOM'
6423 How confusing! Some of your filesystems are sane enough to allow filenames
6424 longer than 14 characters but some others like /tmp can't even think about them.
6425 So, for now on, I shall assume your kernel does not allow them at all.
6426 EOM
6427                         val="$undef"
6428                 fi
6429         fi
6430 else
6431         $cat <<'EOM'
6432 You can't have filenames longer than 14 chars.  You can't even think about them!
6433 EOM
6434         val="$undef"
6435 fi 
6436 set d_flexfnam
6437 eval $setvar
6438 $rm -rf /tmp/cf$$ 123456789abcde*
6439
6440 : determine where library module manual pages go
6441 set man3dir man3dir none
6442 eval $prefixit
6443 $cat <<EOM
6444
6445 $spackage has manual pages for many of the library modules.
6446 EOM
6447
6448 case "$nroff" in
6449 nroff)
6450         $cat <<'EOM'
6451 However, you don't have nroff, so they're probably useless to you.
6452 EOM
6453         case "$man3dir" in
6454         '') man3dir="none";;
6455         esac;;
6456 esac
6457
6458 case "$d_flexfnam" in
6459 undef)
6460         $cat <<'EOM'
6461 However, your system can't handle the long file names like File::Basename.3. 
6462 EOM
6463         case "$man3dir" in
6464         '') man3dir="none";;
6465         esac;;
6466 esac
6467
6468 echo "If you don't want the manual sources installed, answer 'none'."
6469 prog=`echo $package | $sed 's/-*[0-9.]*$//'`
6470 case "$man3dir" in
6471 '')     dflt=`echo $man1dir | $sed -e 's/man1/man3/g' -e 's/man\.1/man\.3/g'`
6472         if $test -d "$privlib/man/man3"; then
6473                 cat <<EOM >&4
6474
6475 WARNING:  Previous versions of perl installed man3 pages into
6476 $privlib/man/man3.  This version will suggest a 
6477 new default of $dflt.  
6478 EOM
6479                 tdflt=$dflt
6480                 dflt='n'
6481                 rp='Do you wish to preserve the old behavior?(y/n)'
6482                 . ./myread
6483                 case "$ans" in
6484                 y*) dflt="$privlib/man/man3" ;;
6485                 *)  dflt=$tdflt ;;
6486                 esac
6487     fi
6488         ;;
6489 ' ') dflt=none;;
6490 *)      dflt="$man3dir" ;;
6491 esac
6492 echo " "
6493 fn=dn+~
6494 rp="Where do the $package library man pages (source) go?"
6495 . ./getfile
6496 man3dir="$ans"
6497 man3direxp="$ansexp"
6498 case "$man1dir" in
6499 '')     man3dir=' '
6500         installman3dir='';;
6501 esac
6502
6503 : Change installation prefix, if necessary.
6504 if $test X"$prefix" != X"$installprefix"; then
6505         installman3dir=`echo $man3direxp | $sed "s#^$prefix#$installprefix#"`
6506 else
6507         installman3dir="$man3direxp"
6508 fi
6509
6510 : What suffix to use on installed man pages
6511 case "$man3dir" in
6512 ' ')
6513         man3ext='0'
6514         ;;
6515 *)
6516         rp="What suffix should be used for the $package library man pages?"
6517         case "$man3ext" in
6518         '')     case "$man3dir" in
6519                 *3)  dflt=3 ;;
6520                 *3p) dflt=3p ;;
6521                 *3pm) dflt=3pm ;;
6522                 *l) dflt=l;;
6523                 *n) dflt=n;;
6524                 *o) dflt=o;;
6525                 *p) dflt=p;;
6526                 *C) dflt=C;;
6527                 *L) dflt=L;;
6528                 *L3) dflt=L3;;
6529                 *) dflt=3;;
6530                 esac
6531                 ;;
6532         *)      dflt="$man3ext";;
6533         esac
6534         . ./myread
6535         man3ext="$ans"
6536         ;;
6537 esac
6538
6539 : see if we have to deal with yellow pages, now NIS.
6540 if $test -d /usr/etc/yp || $test -d /etc/yp; then
6541         if $test -f /usr/etc/nibindd; then
6542                 echo " "
6543                 echo "I'm fairly confident you're on a NeXT."
6544                 echo " "
6545                 rp='Do you get the hosts file via NetInfo?'
6546                 dflt=y
6547                 case "$hostcat" in
6548                 nidump*) ;;
6549                 '') ;;
6550                 *) dflt=n;;
6551                 esac
6552                 . ./myread
6553                 case "$ans" in
6554                 y*) hostcat='nidump hosts .';;
6555                 *)      case "$hostcat" in
6556                         nidump*) hostcat='';;
6557                         esac
6558                         ;;
6559                 esac
6560         fi
6561         case "$hostcat" in
6562         nidump*) ;;
6563         *)
6564                 case "$hostcat" in
6565                 *ypcat*) dflt=y;;
6566                 '') if $contains '^\+' /etc/passwd >/dev/null 2>&1; then
6567                                 dflt=y
6568                         else
6569                                 dflt=n
6570                         fi;;
6571                 *) dflt=n;;
6572                 esac
6573                 echo " "
6574                 rp='Are you getting the hosts file via yellow pages?'
6575                 . ./myread
6576                 case "$ans" in
6577                 y*) hostcat='ypcat hosts';;
6578                 *) hostcat='cat /etc/hosts';;
6579                 esac
6580                 ;;
6581         esac
6582 fi
6583 case "$hostcat" in
6584 '') test -f /etc/hosts && hostcat='cat /etc/hosts';;
6585 esac
6586 case "$groupcat" in
6587 '') test -f /etc/group && groupcat='cat /etc/group';;
6588 esac
6589 case "$passcat" in
6590 '') test -f /etc/passwd && passcat='cat /etc/passwd';;
6591 esac
6592
6593 : now get the host name
6594 echo " "
6595 echo "Figuring out host name..." >&4
6596 case "$myhostname" in
6597 '') cont=true
6598         echo 'Maybe "hostname" will work...'
6599         if tans=`sh -c hostname 2>&1` ; then
6600                 myhostname=$tans
6601                 phostname=hostname
6602                 cont=''
6603         fi
6604         ;;
6605 *) cont='';;
6606 esac
6607 if $test "$cont"; then
6608         if ./xenix; then
6609                 echo 'Oh, dear.  Maybe "/etc/systemid" is the key...'
6610                 if tans=`cat /etc/systemid 2>&1` ; then
6611                         myhostname=$tans
6612                         phostname='cat /etc/systemid'
6613                         echo "Whadyaknow.  Xenix always was a bit strange..."
6614                         cont=''
6615                 fi
6616         elif $test -r /etc/systemid; then
6617                 echo "(What is a non-Xenix system doing with /etc/systemid?)"
6618         fi
6619 fi
6620 if $test "$cont"; then
6621         echo 'No, maybe "uuname -l" will work...'
6622         if tans=`sh -c 'uuname -l' 2>&1` ; then
6623                 myhostname=$tans
6624                 phostname='uuname -l'
6625         else
6626                 echo 'Strange.  Maybe "uname -n" will work...'
6627                 if tans=`sh -c 'uname -n' 2>&1` ; then
6628                         myhostname=$tans
6629                         phostname='uname -n'
6630                 else
6631                         echo 'Oh well, maybe I can mine it out of whoami.h...'
6632                         if tans=`sh -c $contains' sysname $usrinc/whoami.h' 2>&1` ; then
6633                                 myhostname=`echo "$tans" | $sed 's/^.*"\(.*\)"/\1/'`
6634                                 phostname="sed -n -e '"'/sysname/s/^.*\"\\(.*\\)\"/\1/{'"' -e p -e q -e '}' <$usrinc/whoami.h"
6635                         else
6636                                 case "$myhostname" in
6637                                 '') echo "Does this machine have an identity crisis or something?"
6638                                         phostname='';;
6639                                 *)
6640                                         echo "Well, you said $myhostname before..."
6641                                         phostname='echo $myhostname';;
6642                                 esac
6643                         fi
6644                 fi
6645         fi
6646 fi
6647 : you do not want to know about this
6648 set $myhostname
6649 myhostname=$1
6650
6651 : verify guess
6652 if $test "$myhostname" ; then
6653         dflt=y
6654         rp='Your host name appears to be "'$myhostname'".'" Right?"
6655         . ./myread
6656         case "$ans" in
6657         y*) ;;
6658         *) myhostname='';;
6659         esac
6660 fi
6661
6662 : bad guess or no guess
6663 while $test "X$myhostname" = X ; do
6664         dflt=''
6665         rp="Please type the (one word) name of your host:"
6666         . ./myread
6667         myhostname="$ans"
6668 done
6669
6670 : translate upper to lower if necessary
6671 case "$myhostname" in
6672 *[A-Z]*)
6673         echo "(Normalizing case in your host name)"
6674         myhostname=`echo $myhostname | ./tr '[A-Z]' '[a-z]'`
6675         ;;
6676 esac
6677
6678 case "$myhostname" in
6679 *.*)
6680         dflt=`expr "X$myhostname" : "X[^.]*\(\..*\)"`
6681         myhostname=`expr "X$myhostname" : "X\([^.]*\)\."`
6682         echo "(Trimming domain name from host name--host name is now $myhostname)"
6683         ;;
6684 *) case "$mydomain" in
6685         '')
6686                 {
6687                         test "X$hostcat" = "Xypcat hosts" &&
6688                         ypmatch "$myhostname" hosts 2>/dev/null |\
6689                                 $sed -e 's/[     ]*#.*//; s/$/ /' > hosts && \
6690                         $test -s hosts
6691                 } || {
6692                         test "X$hostcat" != "X" &&
6693                         $hostcat | $sed -n -e "s/[       ]*#.*//; s/\$/ /
6694                                         /[       ]$myhostname[  . ]/p" > hosts
6695                 }
6696                 tmp_re="[       . ]"
6697                 $test x`$awk "/[0-9].*[  ]$myhostname$tmp_re/ { sum++ }
6698                              END { print sum }" hosts` = x1 || tmp_re="[         ]"
6699                 dflt=.`$awk "/[0-9].*[   ]$myhostname$tmp_re/ {for(i=2; i<=NF;i++) print \\\$i}" \
6700                         hosts | $sort | $uniq | \
6701                         $sed -n -e "s/$myhostname\.\([-a-zA-Z0-9_.]\)/\1/p"`
6702                 case `$echo X$dflt` in
6703                 X*\ *)  echo "(Several hosts in /etc/hosts matched hostname)"
6704                         dflt=.
6705                         ;;
6706                 X.) echo "(You do not have fully-qualified names in /etc/hosts)"
6707                         ;;
6708                 esac
6709                 case "$dflt" in
6710                 .)
6711                         tans=`./loc resolv.conf X /etc /usr/etc`
6712                         if $test -f "$tans"; then
6713                                 echo "(Attempting domain name extraction from $tans)"
6714                                 dflt=.`$sed -n -e 's/   / /g' \
6715                                   -e 's/^search  *\([^ ]*\).*/\1/p' $tans \
6716                                   | ./tr '[A-Z]' '[a-z]' 2>/dev/null`
6717                                 case "$dflt" in
6718                                 .) dflt=.`$sed -n -e 's/        / /g' \
6719                                      -e 's/^domain  *\([^ ]*\).*/\1/p' $tans \
6720                                      | ./tr '[A-Z]' '[a-z]' 2>/dev/null`
6721                                         ;;
6722                                 esac
6723                         fi
6724                         ;;
6725                 esac
6726                 case "$dflt" in
6727                 .) echo "(No help from resolv.conf either -- attempting clever guess)"
6728                         dflt=.`sh -c domainname 2>/dev/null`
6729                         case "$dflt" in
6730                         '') dflt='.';;
6731                         .nis.*|.yp.*|.main.*) dflt=`echo $dflt | $sed -e 's/^\.[^.]*//'`;;
6732                         esac
6733                         ;;
6734                 esac
6735                 case "$dflt" in
6736                 .) echo "(Lost all hope -- silly guess then)"
6737                         dflt='.uucp'
6738                         ;;
6739                 esac
6740                 $rm -f hosts
6741                 ;;
6742         *) dflt="$mydomain";;
6743         esac;;
6744 esac
6745 echo " "
6746 rp="What is your domain name?"
6747 . ./myread
6748 tans="$ans"
6749 case "$ans" in
6750 '') ;;
6751 .*) ;;
6752 *) tans=".$tans";;
6753 esac
6754 mydomain="$tans"
6755
6756 : translate upper to lower if necessary
6757 case "$mydomain" in
6758 *[A-Z]*)
6759         echo "(Normalizing case in your domain name)"
6760         mydomain=`echo $mydomain | ./tr '[A-Z]' '[a-z]'`
6761         ;;
6762 esac
6763
6764 : a little sanity check here
6765 case "$phostname" in
6766 '') ;;
6767 *)
6768         case `$phostname | ./tr '[A-Z]' '[a-z]'` in
6769         $myhostname$mydomain|$myhostname) ;;
6770         *)
6771                 case "$phostname" in
6772                 sed*)
6773                         echo "(That doesn't agree with your whoami.h file, by the way.)"
6774                         ;;
6775                 *)
6776                         echo "(That doesn't agree with your $phostname command, by the way.)"
6777                         ;;
6778                 esac
6779         ;;
6780         esac
6781         ;;
6782 esac
6783
6784 $cat <<EOM
6785
6786 I need to get your e-mail address in Internet format if possible, i.e.
6787 something like user@host.domain. Please answer accurately since I have
6788 no easy means to double check it. The default value provided below
6789 is most probably close to reality but may not be valid from outside
6790 your organization...
6791
6792 EOM
6793 cont=x
6794 while test "$cont"; do
6795         case "$cf_email" in
6796         '') dflt="$cf_by@$myhostname$mydomain";;
6797         *) dflt="$cf_email";;
6798         esac
6799         rp='What is your e-mail address?'
6800         . ./myread
6801         cf_email="$ans"
6802         case "$cf_email" in
6803         *@*.*) cont='' ;;
6804         *)
6805                 rp='Address does not look like an Internet one.  Use it anyway?'
6806                 case "$fastread" in
6807                 yes) dflt=y ;;
6808                 *) dflt=n ;;
6809                 esac
6810                 . ./myread
6811                 case "$ans" in
6812                 y*) cont='' ;;
6813                 *) echo " " ;;
6814                 esac
6815                 ;;
6816         esac
6817 done
6818
6819 $cat <<EOM
6820
6821 If you or somebody else will be maintaining perl at your site, please
6822 fill in the correct e-mail address here so that they may be contacted
6823 if necessary. Currently, the "perlbug" program included with perl
6824 will send mail to this address in addition to perlbug@perl.com. You may
6825 enter "none" for no administrator.
6826
6827 EOM
6828 case "$perladmin" in
6829 '') dflt="$cf_email";;
6830 *) dflt="$perladmin";;
6831 esac
6832 rp='Perl administrator e-mail address'
6833 . ./myread
6834 perladmin="$ans"
6835
6836 : figure out how to guarantee perl startup
6837 case "$startperl" in
6838 '')
6839         case "$sharpbang" in
6840         *!)
6841                 $cat <<EOH
6842
6843 I can use the #! construct to start perl on your system. This will
6844 make startup of perl scripts faster, but may cause problems if you
6845 want to share those scripts and perl is not in a standard place
6846 ($binexp/perl) on all your platforms. The alternative is to force
6847 a shell by starting the script with a single ':' character.
6848
6849 EOH
6850                 dflt="$binexp/perl"
6851                 rp='What shall I put after the #! to start up perl ("none" to not use #!)?'
6852                 . ./myread
6853                 case "$ans" in
6854                 none)   startperl=": # use perl";;
6855                 *)      startperl="#!$ans"
6856                         if $test 30 -lt `echo "$ans" | wc -c`; then
6857                                 $cat >&4 <<EOM
6858
6859 WARNING:  Some systems limit the #! command to 32 characters.
6860 If you experience difficulty running Perl scripts with #!, try
6861 installing Perl in a directory with a shorter pathname.
6862
6863 EOM
6864                         fi ;;
6865                 esac
6866                 ;;
6867         *) startperl=": # use perl"
6868                 ;;
6869         esac
6870         ;;
6871 esac
6872 echo "I'll use $startperl to start perl scripts."
6873
6874 : figure best path for perl in scripts
6875 case "$perlpath" in
6876 '')
6877         perlpath="$binexp/perl"
6878         case "$startperl" in
6879         *!*) ;;
6880         *)
6881                 $cat <<EOH
6882
6883 I will use the "eval 'exec'" idiom to start Perl on your system.
6884 I can use the full path of your Perl binary for this purpose, but
6885 doing so may cause problems if you want to share those scripts and
6886 Perl is not always in a standard place ($binexp/perl).
6887
6888 EOH
6889                 dflt="$binexp/perl"
6890                 rp="What path shall I use in \"eval 'exec'\"?"
6891                 . ./myread
6892                 perlpath="$ans"
6893                 ;;
6894         esac
6895         ;;
6896 esac
6897 case "$startperl" in
6898 *!*)    ;;
6899 *)      echo "I'll use $perlpath in \"eval 'exec'\"" ;;
6900 esac
6901
6902 : determine where public executable scripts go
6903 set scriptdir scriptdir
6904 eval $prefixit
6905 case "$scriptdir" in
6906 '')
6907         dflt="$bin"
6908         : guess some guesses
6909         $test -d /usr/share/scripts && dflt=/usr/share/scripts
6910         $test -d /usr/share/bin     && dflt=/usr/share/bin
6911         $test -d /usr/local/script  && dflt=/usr/local/script
6912         $test -d /usr/local/scripts && dflt=/usr/local/scripts
6913         $test -d $prefixexp/script  && dflt=$prefixexp/script
6914         set dflt
6915         eval $prefixup
6916         ;;
6917 *)  dflt="$scriptdir"
6918         ;;
6919 esac
6920 $cat <<EOM
6921  
6922 Some installations have a separate directory just for executable scripts so
6923 that they can mount it across multiple architectures but keep the scripts in
6924 one spot.  You might, for example, have a subdirectory of /usr/share for this.
6925 Or you might just lump your scripts in with all your other executables.
6926  
6927 EOM
6928 fn=d~
6929 rp='Where do you keep publicly executable scripts?'
6930 . ./getfile
6931 if $test "X$ansexp" != "X$scriptdirexp"; then
6932         installscript=''
6933 fi
6934 scriptdir="$ans"
6935 scriptdirexp="$ansexp"
6936 : Change installation prefix, if necessary.
6937 if $test X"$prefix" != X"$installprefix"; then
6938         installscript=`echo $scriptdirexp | sed "s#^$prefix#$installprefix#"`
6939 else
6940         installscript="$scriptdirexp"
6941 fi
6942
6943 : determine where site specific architecture-dependent libraries go.
6944 : sitelib  default is /usr/local/lib/perl5/site_perl/$version
6945 : sitearch default is /usr/local/lib/perl5/site_perl/$version/$archname
6946 : sitelib may have an optional trailing /share.
6947 tdflt=`echo $sitelib | $sed 's,/share$,,'`
6948 tdflt="$tdflt/$archname"
6949 set sitearch sitearch none
6950 eval $prefixit
6951 case "$sitearch" in
6952 '')     dflt="$tdflt" ;;
6953 *)      dflt="$sitearch" ;;
6954 esac
6955 $cat <<EOM
6956
6957 The installation process will also create a directory for
6958 architecture-dependent site-specific extensions and modules.
6959
6960 EOM
6961 fn=nd~+
6962 rp='Pathname for the site-specific architecture-dependent library files?'
6963 . ./getfile
6964 sitearch="$ans"
6965 sitearchexp="$ansexp"
6966 : Change installation prefix, if necessary.
6967 if $test X"$prefix" != X"$installprefix"; then
6968         installsitearch=`echo $sitearchexp | sed "s#^$prefix#$installprefix#"`
6969 else
6970         installsitearch="$sitearchexp"
6971 fi
6972
6973 : determine where add-on public executables go
6974 case "$sitebin" in
6975 '')     dflt=$siteprefix/bin ;;
6976 *)      dflt=$sitebin ;;
6977 esac
6978 fn=d~
6979 rp='Pathname where the add-on public executables should be installed?'
6980 . ./getfile
6981 sitebin="$ans"
6982 sitebinexp="$ansexp"
6983 : Change installation prefix, if necessary.
6984 if $test X"$prefix" != X"$installprefix"; then
6985         installsitebin=`echo $sitebinexp | sed "s#^$prefix#$installprefix#"`
6986 else
6987         installsitebin="$sitebinexp"
6988 fi
6989
6990 : see if sqrtl exists
6991 set sqrtl d_sqrtl
6992 eval $inlibc
6993
6994 cat <<EOM
6995
6996 Perl can be built to take advantage of long doubles which
6997 (if available) may give more accuracy and range for floating point numbers.
6998
6999 If this doesn't make any sense to you, just accept the default 'n'.
7000 EOM
7001
7002 case "$ccflags" in
7003 *-DUSE_LONG_DOUBLE*|*-DUSE_MORE_BITS*) uselongdouble="$define" ;;
7004 esac
7005
7006 case "$uselongdouble" in
7007 $define|true|[yY]*)     dflt='y';;
7008 *) dflt='n';;
7009 esac
7010 rp='Try to use long doubles if available?'
7011 . ./myread
7012 case "$ans" in
7013 y|Y)    val="$define"   ;;
7014 *)      val="$undef"    ;;
7015 esac
7016 set uselongdouble
7017 eval $setvar
7018
7019 case "$uselongdouble" in
7020 true|[yY]*) uselongdouble="$define" ;;
7021 esac
7022
7023 case "$uselongdouble" in
7024 $define)
7025 : Look for a hint-file generated 'call-back-unit'.  If the
7026 : user has specified that long doubles should be used,
7027 : we may need to set or change some other defaults.
7028         if $test -f uselongdouble.cbu; then
7029                 echo "Your platform has some specific hints for long doubles, using them..."
7030                 . ./uselongdouble.cbu
7031         else
7032                 $cat <<EOM
7033 (Your platform doesn't have any specific hints for long doubles.)
7034 EOM
7035         fi
7036         ;;
7037 esac
7038
7039 case "$uselongdouble:$d_sqrtl" in
7040 $define:$undef)
7041                 $cat <<EOM >&4
7042
7043 You requested the use of long doubles but you do not seem to have
7044 the mathematic functions for long doubles.  I'm disabling the use
7045 of long doubles.
7046 EOM
7047         uselongdouble=$undef
7048         ;;
7049 esac
7050
7051 cat <<EOM
7052
7053 Previous version of $package used the standard IO mechanisms as defined
7054 in <stdio.h>.  Versions 5.003_02 and later of perl allow alternate IO
7055 mechanisms via a "PerlIO" abstraction, but the stdio mechanism is still
7056 the default.  This abstraction layer can use AT&T's sfio (if you already
7057 have sfio installed) or regular stdio.  Using PerlIO with sfio may cause
7058 problems with some extension modules.  Using PerlIO with stdio is safe,
7059 but it is slower than plain stdio and therefore is not the default.
7060
7061 If this doesn't make any sense to you, just accept the default 'n'.
7062 EOM
7063 case "$useperlio" in
7064 $define|true|[yY]*)     dflt='y';;
7065 *) dflt='n';;
7066 esac
7067 rp='Use the experimental PerlIO abstraction layer?'
7068 . ./myread
7069 case "$ans" in
7070 y|Y) 
7071         val="$define"
7072         ;;     
7073 *)      
7074         echo "Ok, doing things the stdio way"
7075         val="$undef"
7076         ;;
7077 esac
7078 set useperlio
7079 eval $setvar 
7080
7081 case "$vendorprefix" in
7082 '')     d_vendorbin="$undef"
7083         vendorbin=''
7084         vendorbinexp=''
7085         ;;
7086 *)      d_vendorbin="$define"
7087         : determine where vendor-supplied executables go.
7088         dflt=$vendorprefix/bin
7089         fn=d~+
7090         rp='Pathname for the vendor-supplied executables directory?'
7091         . ./getfile
7092         vendorbin="$ans"
7093         vendorbinexp="$ansexp"
7094         : Change installation prefix, if necessary.
7095         if $test X"$prefix" != X"$installprefix"; then
7096                 installvendorbin=`echo $vendorbinexp | $sed "s#^$prefix#$installprefix#"`
7097         else
7098                 installvendorbin="$vendorbinexp"
7099         fi
7100         ;;
7101 esac
7102
7103 : check for length of double
7104 echo " "
7105 case "$doublesize" in
7106 '')
7107         $echo $n "Checking to see how big your double precision numbers are...$c" >&4
7108         $cat >try.c <<'EOCP'
7109 #include <stdio.h>
7110 int main()
7111 {
7112     printf("%d\n", (int)sizeof(double));
7113     exit(0);
7114 }
7115 EOCP
7116         set try
7117         if eval $compile_ok; then
7118                 doublesize=`./try`
7119                 $echo " $doublesize bytes." >&4
7120         else
7121                 dflt='8'
7122                 echo "(I can't seem to compile the test program.  Guessing...)"
7123                 rp="What is the size of a double precision number (in bytes)?"
7124                 . ./myread
7125                 doublesize="$ans"
7126         fi
7127         ;;
7128 esac
7129 $rm -f try.c try
7130
7131 : check for long doubles
7132 echo " "
7133 $echo $n "Checking to see if your system supports long double..." $c >&4
7134 echo 'int main() { long double x = 7.0; }' > try.c
7135 set try
7136 if eval $compile; then
7137         val="$define"
7138         echo " Yes, it does." >&4
7139 else
7140         val="$undef"
7141         echo " No, it doesn't." >&4
7142 fi
7143 $rm try.*
7144 set d_longdbl
7145 eval $setvar
7146
7147 : check for length of long double
7148 case "${d_longdbl}${longdblsize}" in
7149 $define)
7150         echo " "
7151         $echo $n "Checking to see how big your long doubles are..." $c >&4
7152         $cat >try.c <<'EOCP'
7153 #include <stdio.h>
7154 int main()
7155 {
7156         printf("%d\n", sizeof(long double));
7157 }
7158 EOCP
7159         set try
7160         set try
7161         if eval $compile; then
7162                 longdblsize=`./try$exe_ext`
7163                 $echo " $longdblsize bytes." >&4
7164         else
7165                 dflt='8'
7166                 echo " "
7167                 echo "(I can't seem to compile the test program.  Guessing...)" >&4
7168                 rp="What is the size of a long double (in bytes)?"
7169                 . ./myread
7170                 longdblsize="$ans"
7171         fi
7172         if $test "X$doublesize" = "X$longdblsize"; then
7173                 echo "(That isn't any different from an ordinary double.)"
7174         fi      
7175         ;;
7176 esac
7177 $rm -f try.* try
7178
7179 : Check how to convert floats to strings.
7180 if test "X$d_Gconvert" = X; then
7181         echo " "
7182         echo "Checking for an efficient way to convert floats to strings."
7183         $cat >try.c <<EOP
7184 #ifdef TRY_gconvert
7185 #define Gconvert(x,n,t,b) gconvert((x),(n),(t),(b))
7186 char *myname = "gconvert";
7187 #endif
7188 #ifdef TRY_gcvt
7189 #define Gconvert(x,n,t,b) gcvt((x),(n),(b))
7190 char *myname = "gcvt";
7191 #endif
7192 #ifdef TRY_qgcvt
7193 #define Gconvert(x,n,t,b) qgcvt((x),(n),(b))
7194 char *myname = "qgcvt";
7195 #define DOUBLETYPE long double
7196 #endif
7197 #ifdef TRY_sprintf
7198 #define Gconvert(x,n,t,b) sprintf((b),"%.*g",(n),(x))
7199 char *myname = "sprintf";
7200 #endif
7201
7202 #ifndef DOUBLETYPE
7203 #define DOUBLETYPE double
7204 #endif
7205
7206 #include <stdio.h>
7207
7208 #define I_STDLIB $i_stdlib
7209 #ifdef I_STDLIB
7210 #include <stdlib.h>
7211 #endif
7212
7213 int
7214 checkit(expect, got)
7215 char *expect;
7216 char *got;
7217 {
7218     if (strcmp(expect, got)) {
7219                 printf("%s oddity:  Expected %s, got %s\n",
7220                         myname, expect, got);
7221                 exit(1);
7222         }
7223 }
7224
7225 int main()
7226
7227         char buf[64]; 
7228         buf[63] = '\0';
7229
7230         /* This must be 1st test on (which?) platform */
7231         /* Alan Burlison <AlanBurlsin@unn.unisys.com> */
7232         Gconvert((DOUBLETYPE)0.1, 8, 0, buf);
7233         checkit("0.1", buf);
7234
7235         Gconvert((DOUBLETYPE)1.0, 8, 0, buf); 
7236         checkit("1", buf);
7237
7238         Gconvert((DOUBLETYPE)0.0, 8, 0, buf); 
7239         checkit("0", buf);
7240
7241         Gconvert((DOUBLETYPE)-1.0, 8, 0, buf); 
7242         checkit("-1", buf);
7243
7244         /* Some Linux gcvt's give 1.e+5 here. */
7245         Gconvert((DOUBLETYPE)100000.0, 8, 0, buf); 
7246         checkit("100000", buf);
7247         
7248         /* Some Linux gcvt's give -1.e+5 here. */
7249         Gconvert((DOUBLETYPE)-100000.0, 8, 0, buf); 
7250         checkit("-100000", buf);
7251
7252         exit(0);
7253 }
7254 EOP
7255         case "$d_Gconvert" in
7256         gconvert*) xxx_list='gconvert gcvt sprintf' ;;
7257         gcvt*) xxx_list='gcvt gconvert sprintf' ;;
7258         sprintf*) xxx_list='sprintf gconvert gcvt' ;;
7259         *) xxx_list='gconvert gcvt sprintf' ;;
7260         esac
7261
7262         case "$d_longdbl$uselongdouble" in
7263         definedefine) xxx_list="`echo $xxx_list|sed 's/gcvt/qgcvt gcvt/'`" ;;
7264         esac
7265
7266         for xxx_convert in $xxx_list; do
7267                 echo "Trying $xxx_convert..."
7268                 $rm -f try try$_o
7269                 set try -DTRY_$xxx_convert
7270                 if eval $compile; then
7271                         echo "$xxx_convert() found." >&4
7272                         if ./try; then
7273                                 echo "I'll use $xxx_convert to convert floats into a string." >&4
7274                                 break;
7275                         else
7276                                 echo "...But $xxx_convert didn't work as I expected."
7277                         fi
7278                 else
7279                         echo "$xxx_convert NOT found." >&4
7280                 fi
7281         done
7282                 
7283         case "$xxx_convert" in
7284         gconvert) d_Gconvert='gconvert((x),(n),(t),(b))' ;;
7285         gcvt) d_Gconvert='gcvt((x),(n),(b))' ;;
7286         qgcvt) d_Gconvert='qgcvt((x),(n),(b))' ;;
7287         *) d_Gconvert='sprintf((b),"%.*g",(n),(x))' ;;
7288         esac
7289 fi
7290
7291 echo " "
7292
7293 if $test X"$d_longdbl" = X"$define"; then
7294
7295 echo "Checking how to print long doubles..." >&4
7296
7297 if $test X"$sPRIfldbl" = X -a X"$doublesize" = X"$longdblsize"; then
7298         $cat >try.c <<'EOCP'
7299 #include <sys/types.h>
7300 #include <stdio.h>
7301 int main() {
7302   double d = 123.456;
7303   printf("%.3f\n", d);
7304 }
7305 EOCP
7306         set try
7307         if eval $compile; then
7308                 yyy=`./try$exe_ext`
7309                 case "$yyy" in
7310                 123.456)
7311                         sPRIfldbl='"f"'; sPRIgldbl='"g"'; sPRIeldbl='"e"';
7312                         sPRIFldbl='"F"'; sPRIGldbl='"G"'; sPRIEldbl='"E"';
7313                         echo "We will use %f."
7314                         ;;
7315                 esac
7316         fi
7317 fi
7318
7319 if $test X"$sPRIfldbl" = X; then
7320         $cat >try.c <<'EOCP'
7321 #include <sys/types.h>
7322 #include <stdio.h>
7323 int main() {
7324   long double d = 123.456;
7325   printf("%.3llf\n", d);
7326 }
7327 EOCP
7328         set try
7329         if eval $compile; then
7330                 yyy=`./try$exe_ext`
7331                 case "$yyy" in
7332                 123.456)
7333                         sPRIfldbl='"llf"'; sPRIgldbl='"llg"'; sPRIeldbl='"lle"';
7334                         sPRIFldbl='"llF"'; sPRIGldbl='"llG"'; sPRIEldbl='"llE"';
7335                         echo "We will use %llf."
7336                         ;;
7337                 esac
7338         fi
7339 fi
7340
7341 if $test X"$sPRIfldbl" = X; then
7342         $cat >try.c <<'EOCP'
7343 #include <sys/types.h>
7344 #include <stdio.h>
7345 int main() {
7346   long double d = 123.456;
7347   printf("%.3Lf\n", d);
7348 }
7349 EOCP
7350         set try
7351         if eval $compile; then
7352                 yyy=`./try$exe_ext`
7353                 case "$yyy" in
7354                 123.456)
7355                         sPRIfldbl='"Lf"'; sPRIgldbl='"Lg"'; sPRIeldbl='"Le"';
7356                         sPRIFldbl='"LF"'; sPRIGldbl='"LG"'; sPRIEldbl='"LE"';
7357                         echo "We will use %Lf."
7358                         ;;
7359                 esac
7360         fi
7361 fi
7362
7363 if $test X"$sPRIfldbl" = X; then
7364         $cat >try.c <<'EOCP'
7365 #include <sys/types.h>
7366 #include <stdio.h>
7367 int main() {
7368   long double d = 123.456;
7369   printf("%.3lf\n", d);
7370 }
7371 EOCP
7372         set try
7373         if eval $compile; then
7374                 yyy=`./try$exe_ext`
7375                 case "$yyy" in
7376                 123.456)
7377                         sPRIfldbl='"lf"'; sPRIgldbl='"lg"'; sPRIeldbl='"le"';
7378                         sPRIFldbl='"lF"'; sPRIGldbl='"lG"'; sPRIEldbl='"lE"';
7379                         echo "We will use %lf."
7380                         ;;
7381                 esac
7382         fi
7383 fi
7384
7385 if $test X"$sPRIfldbl" = X; then
7386         echo "Cannot figure out how to print long doubles." >&4
7387 fi
7388
7389 $rm -f try try.*
7390
7391 fi # d_longdbl
7392
7393 case "$sPRIfldbl" in
7394 '')     d_PRIfldbl="$undef"; d_PRIgldbl="$undef"; d_PRIeldbl="$undef"; 
7395         d_PRIFldbl="$undef"; d_PRIGldbl="$undef"; d_PRIEldbl="$undef"; 
7396         ;;
7397 *)      d_PRIfldbl="$define"; d_PRIgldbl="$define"; d_PRIeldbl="$define"; 
7398         d_PRIFldbl="$define"; d_PRIGldbl="$define"; d_PRIEldbl="$define"; 
7399         ;;
7400 esac
7401
7402 : Initialize h_fcntl
7403 h_fcntl=false
7404
7405 : Initialize h_sysfile
7406 h_sysfile=false
7407
7408 : access call always available on UNIX
7409 set access d_access
7410 eval $inlibc
7411
7412 : locate the flags for 'access()'
7413 case "$d_access" in
7414 "$define")
7415         echo " "
7416         $cat >access.c <<'EOCP'
7417 #include <sys/types.h>
7418 #ifdef I_FCNTL
7419 #include <fcntl.h>
7420 #endif
7421 #ifdef I_SYS_FILE
7422 #include <sys/file.h>
7423 #endif
7424 #ifdef I_UNISTD
7425 #include <unistd.h>
7426 #endif
7427 int main() {
7428         exit(R_OK);
7429 }
7430 EOCP
7431         : check sys/file.h first, no particular reason here
7432         if $test `./findhdr sys/file.h` && \
7433                 $cc $cppflags -DI_SYS_FILE -o access access.c >/dev/null 2>&1 ; then
7434                 h_sysfile=true;
7435                 echo "<sys/file.h> defines the *_OK access constants." >&4
7436         elif $test `./findhdr fcntl.h` && \
7437                 $cc $cppflags -DI_FCNTL -o access access.c >/dev/null 2>&1 ; then
7438                 h_fcntl=true;
7439                 echo "<fcntl.h> defines the *_OK access constants." >&4
7440         elif $test `./findhdr unistd.h` && \
7441                 $cc $cppflags -DI_UNISTD -o access access.c >/dev/null 2>&1 ; then
7442                 echo "<unistd.h> defines the *_OK access constants." >&4
7443         else
7444                 echo "I can't find the four *_OK access constants--I'll use mine." >&4
7445         fi
7446         ;;
7447 esac
7448 $rm -f access*
7449
7450 : see if accessx exists
7451 set accessx d_accessx
7452 eval $inlibc
7453
7454 : see if alarm exists
7455 set alarm d_alarm
7456 eval $inlibc
7457
7458 : see if atolf exists
7459 set atolf d_atolf
7460 eval $inlibc
7461
7462 : see if atoll exists
7463 set atoll d_atoll
7464 eval $inlibc
7465
7466 : Look for GNU-cc style attribute checking
7467 echo " "
7468 echo "Checking whether your compiler can handle __attribute__ ..." >&4
7469 $cat >attrib.c <<'EOCP'
7470 #include <stdio.h>
7471 void croak (char* pat,...) __attribute__((format(printf,1,2),noreturn));
7472 EOCP
7473 if $cc $ccflags -c attrib.c >attrib.out 2>&1 ; then
7474         if $contains 'warning' attrib.out >/dev/null 2>&1; then
7475                 echo "Your C compiler doesn't fully support __attribute__."
7476                 val="$undef"
7477         else
7478                 echo "Your C compiler supports __attribute__."
7479                 val="$define"
7480         fi
7481 else
7482         echo "Your C compiler doesn't seem to understand __attribute__ at all."
7483         val="$undef"
7484 fi
7485 set d_attribut
7486 eval $setvar
7487 $rm -f attrib*
7488
7489 : see if bcmp exists
7490 set bcmp d_bcmp
7491 eval $inlibc
7492
7493 : see if bcopy exists
7494 set bcopy d_bcopy
7495 eval $inlibc
7496
7497 : see if this is a unistd.h system
7498 set unistd.h i_unistd
7499 eval $inhdr
7500
7501 : see if getpgrp exists
7502 set getpgrp d_getpgrp
7503 eval $inlibc
7504
7505 case "$d_getpgrp" in
7506 "$define")
7507         echo " "
7508         echo "Checking to see which flavor of getpgrp is in use..."
7509         $cat >set.c <<EOP
7510 #$i_unistd I_UNISTD
7511 #include <sys/types.h>
7512 #ifdef I_UNISTD
7513 #  include <unistd.h>
7514 #endif
7515 int main()
7516 {
7517         if (getuid() == 0) {
7518                 printf("(I see you are running Configure as super-user...)\n");
7519                 setuid(1);
7520         }
7521 #ifdef TRY_BSD_PGRP
7522         if (getpgrp(1) == 0)
7523                 exit(0);
7524 #else
7525         if (getpgrp() > 0)
7526                 exit(0);
7527 #endif
7528         exit(1);
7529 }
7530 EOP
7531         if $cc -DTRY_BSD_PGRP $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1 && ./set; then
7532                 echo "You have to use getpgrp(pid) instead of getpgrp()." >&4
7533                 val="$define"
7534         elif $cc $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1 && ./set; then
7535                 echo "You have to use getpgrp() instead of getpgrp(pid)." >&4
7536                 val="$undef"
7537         else
7538                 echo "I can't seem to compile and run the test program."
7539                 if ./usg; then
7540                         xxx="a USG one, i.e. you use getpgrp()."
7541                 else
7542                         # SVR4 systems can appear rather BSD-ish.
7543                         case "$i_unistd" in
7544                         $undef)
7545                                 xxx="a BSD one, i.e. you use getpgrp(pid)."
7546                                 val="$define"
7547                                 ;;
7548                         $define)
7549                                 xxx="probably a USG one, i.e. you use getpgrp()."
7550                                 val="$undef"
7551                                 ;;
7552                         esac
7553                 fi
7554                 echo "Assuming your getpgrp is $xxx" >&4
7555         fi
7556         ;;
7557 *) val="$undef";;
7558 esac
7559 set d_bsdgetpgrp
7560 eval $setvar
7561 $rm -f set set.c
7562
7563 : see if setpgrp exists
7564 set setpgrp d_setpgrp
7565 eval $inlibc
7566
7567 case "$d_setpgrp" in
7568 "$define")
7569         echo " "
7570         echo "Checking to see which flavor of setpgrp is in use..."
7571         $cat >set.c <<EOP
7572 #$i_unistd I_UNISTD
7573 #include <sys/types.h>
7574 #ifdef I_UNISTD
7575 #  include <unistd.h>
7576 #endif
7577 int main()
7578 {
7579         if (getuid() == 0) {
7580                 printf("(I see you are running Configure as super-user...)\n");
7581                 setuid(1);
7582         }
7583 #ifdef TRY_BSD_PGRP
7584         if (-1 == setpgrp(1, 1))
7585                 exit(0);
7586 #else
7587         if (setpgrp() != -1)
7588                 exit(0);
7589 #endif
7590         exit(1);
7591 }
7592 EOP
7593         if $cc -DTRY_BSD_PGRP $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1 && ./set; then
7594                 echo 'You have to use setpgrp(pid,pgrp) instead of setpgrp().' >&4
7595                 val="$define"
7596         elif $cc $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1 && ./set; then
7597                 echo 'You have to use setpgrp() instead of setpgrp(pid,pgrp).' >&4
7598                 val="$undef"
7599         else
7600                 echo "(I can't seem to compile and run the test program.)"
7601                 if ./usg; then
7602                         xxx="a USG one, i.e. you use setpgrp()."
7603                 else
7604                         # SVR4 systems can appear rather BSD-ish.
7605                         case "$i_unistd" in
7606                         $undef)
7607                                 xxx="a BSD one, i.e. you use setpgrp(pid,pgrp)."
7608                                 val="$define"
7609                                 ;;
7610                         $define)
7611                                 xxx="probably a USG one, i.e. you use setpgrp()."
7612                                 val="$undef"
7613                                 ;;
7614                         esac
7615                 fi
7616                 echo "Assuming your setpgrp is $xxx" >&4
7617         fi
7618         ;;
7619 *) val="$undef";;
7620 esac
7621 set d_bsdsetpgrp
7622 eval $setvar
7623 $rm -f set set.c
7624 : see if bzero exists
7625 set bzero d_bzero
7626 eval $inlibc
7627
7628 : see if signal is declared as pointer to function returning int or void
7629 echo " "
7630 xxx=`./findhdr signal.h`
7631 $test "$xxx" && $cppstdin $cppminus $cppflags < $xxx >$$.tmp 2>/dev/null
7632 if $contains 'int.*\*[  ]*signal' $$.tmp >/dev/null 2>&1 ; then
7633         echo "You have int (*signal())() instead of void." >&4
7634         val="$undef"
7635 elif $contains 'void.*\*[       ]*signal' $$.tmp >/dev/null 2>&1 ; then
7636         echo "You have void (*signal())()." >&4
7637         val="$define"
7638 elif $contains 'extern[         ]*[(\*]*signal' $$.tmp >/dev/null 2>&1 ; then
7639         echo "You have int (*signal())() instead of void." >&4
7640         val="$undef"
7641 elif $contains 'void.*\*.*sig' $$.tmp >/dev/null 2>&1 ; then
7642         echo "You have void (*signal())()." >&4
7643         val="$define"
7644 else
7645         case "$d_voidsig" in
7646         '')
7647         echo "I can't determine whether signal handler returns void or int..." >&4
7648                 dflt=void
7649                 rp="What type does your signal handler return?"
7650                 . ./myread
7651                 case "$ans" in
7652                 v*) val="$define";;
7653                 *) val="$undef";;
7654                 esac;;
7655         "$define")
7656                 echo "As you already told me, signal handler returns void." >&4
7657                 val="$define"
7658                 ;;
7659         *)      echo "As you already told me, signal handler returns int." >&4
7660                 val="$undef"
7661                 ;;
7662         esac
7663 fi
7664 set d_voidsig
7665 eval $setvar
7666 case "$d_voidsig" in
7667 "$define") signal_t="void";;
7668 *) signal_t="int";;
7669 esac
7670 $rm -f $$.tmp
7671
7672 : check for ability to cast large floats to 32-bit ints.
7673 echo " "
7674 echo 'Checking whether your C compiler can cast large floats to int32.' >&4
7675 if $test "$intsize" -ge 4; then
7676         xxx=int
7677 else
7678         xxx=long
7679 fi
7680 $cat >try.c <<EOCP
7681 #include <stdio.h>
7682 #include <sys/types.h>
7683 #include <signal.h>
7684 $signal_t blech(s) int s; { exit(3); }
7685 int main()
7686 {
7687         $xxx i32;
7688         double f, g;
7689         int result = 0;
7690         char str[16];
7691         signal(SIGFPE, blech);
7692
7693         /* Don't let compiler optimize the test away.  Store the number 
7694            in a writable string for gcc to pass to sscanf under HP/UX.
7695         */
7696         sprintf(str, "2147483647");
7697         sscanf(str, "%lf", &f); /* f = (double) 0x7fffffff; */
7698         g = 10 * f;
7699         i32  = ($xxx) g;
7700
7701         /* x86 processors will probably give 0x8000 0000, which is a
7702        sign change.  We don't want that.  We want to mimic SPARC
7703            behavior here, which is to preserve the sign and give
7704            back 0x7fff ffff.
7705         */
7706         if (i32 != ($xxx) f)
7707                 result |= 1;
7708         exit(result);
7709 }
7710 EOCP
7711 set try
7712 if eval $compile_ok; then
7713         ./try
7714         yyy=$?
7715 else
7716         echo "(I can't seem to compile the test program--assuming it can't)"
7717         yyy=1
7718 fi
7719 case "$yyy" in
7720 0)      val="$define"
7721         echo "Yup, it can."
7722         ;;
7723 *)      val="$undef"
7724         echo "Nope, it can't."
7725         ;;
7726 esac
7727 set d_casti32
7728 eval $setvar
7729 $rm -f try try.*
7730
7731 : check for ability to cast negative floats to unsigned
7732 echo " "
7733 echo 'Checking whether your C compiler can cast negative float to unsigned.' >&4
7734 $cat >try.c <<EOCP
7735 #include <stdio.h>
7736 #include <sys/types.h>
7737 #include <signal.h>
7738 $signal_t blech(s) int s; { exit(7); }
7739 $signal_t blech_in_list(s) int s; { exit(4); }
7740 unsigned long dummy_long(p) unsigned long p; { return p; }
7741 unsigned int dummy_int(p) unsigned int p; { return p; }
7742 unsigned short dummy_short(p) unsigned short p; { return p; }
7743 int main()
7744 {
7745         double f;
7746         unsigned long along;
7747         unsigned int aint;
7748         unsigned short ashort;
7749         int result = 0;
7750         char str[16];
7751         
7752         /* Frustrate gcc-2.7.2's optimizer which failed this test with
7753            a direct f = -123. assignment.  gcc-2.8.0 reportedly
7754            optimized the whole file away
7755         */
7756         /* Store the number in a writable string for gcc to pass to 
7757            sscanf under HP/UX.
7758         */
7759         sprintf(str, "-123");
7760         sscanf(str, "%lf", &f);  /* f = -123.; */
7761
7762         signal(SIGFPE, blech);
7763         along = (unsigned long)f;
7764         aint = (unsigned int)f;
7765         ashort = (unsigned short)f;
7766         if (along != (unsigned long)-123)
7767                 result |= 1;
7768         if (aint != (unsigned int)-123)
7769                 result |= 1;
7770         if (ashort != (unsigned short)-123)
7771                 result |= 1;
7772         sprintf(str, "1073741824.");
7773         sscanf(str, "%lf", &f); /* f = (double)0x40000000; */
7774         f = f + f;
7775         along = 0;
7776         along = (unsigned long)f;
7777         if (along != 0x80000000)
7778                 result |= 2;
7779         f -= 1.;
7780         along = 0;
7781         along = (unsigned long)f;
7782         if (along != 0x7fffffff)
7783                 result |= 1;
7784         f += 2.;
7785         along = 0;
7786         along = (unsigned long)f;
7787         if (along != 0x80000001)
7788                 result |= 2;
7789         if (result)
7790                 exit(result);
7791         signal(SIGFPE, blech_in_list);
7792         sprintf(str, "123.");
7793         sscanf(str, "%lf", &f);  /* f = 123.; */
7794         along = dummy_long((unsigned long)f);
7795         aint = dummy_int((unsigned int)f);
7796         ashort = dummy_short((unsigned short)f);
7797         if (along != (unsigned long)123)
7798                 result |= 4;
7799         if (aint != (unsigned int)123)
7800                 result |= 4;
7801         if (ashort != (unsigned short)123)
7802                 result |= 4;
7803         exit(result);
7804
7805 }
7806 EOCP
7807 set try
7808 if eval $compile_ok; then
7809         ./try
7810         castflags=$?
7811 else
7812         echo "(I can't seem to compile the test program--assuming it can't)"
7813         castflags=7
7814 fi
7815 case "$castflags" in
7816 0)      val="$define"
7817         echo "Yup, it can."
7818         ;;
7819 *)      val="$undef"
7820         echo "Nope, it can't."
7821         ;;
7822 esac
7823 set d_castneg
7824 eval $setvar
7825 $rm -f try.*
7826
7827 : see if vprintf exists
7828 echo " "
7829 if set vprintf val -f d_vprintf; eval $csym; $val; then
7830         echo 'vprintf() found.' >&4
7831         val="$define"
7832         $cat >vprintf.c <<'EOF'
7833 #include <varargs.h>
7834
7835 int main() { xxx("foo"); }
7836
7837 xxx(va_alist)
7838 va_dcl
7839 {
7840         va_list args;
7841         char buf[10];
7842
7843         va_start(args);
7844         exit((unsigned long)vsprintf(buf,"%s",args) > 10L);
7845 }
7846 EOF
7847         set vprintf
7848         if eval $compile && ./vprintf; then
7849                 echo "Your vsprintf() returns (int)." >&4
7850                 val2="$undef"
7851         else
7852                 echo "Your vsprintf() returns (char*)." >&4
7853                 val2="$define"
7854         fi
7855 else
7856         echo 'vprintf() NOT found.' >&4
7857                 val="$undef"
7858                 val2="$undef"
7859 fi
7860 set d_vprintf
7861 eval $setvar
7862 val=$val2
7863 set d_charvspr
7864 eval $setvar
7865
7866 : see if chown exists
7867 set chown d_chown
7868 eval $inlibc
7869
7870 : see if chroot exists
7871 set chroot d_chroot
7872 eval $inlibc
7873
7874 : see if chsize exists
7875 set chsize d_chsize
7876 eval $inlibc
7877
7878 : check for const keyword
7879 echo " "
7880 echo 'Checking to see if your C compiler knows about "const"...' >&4
7881 $cat >const.c <<'EOCP'
7882 typedef struct spug { int drokk; } spug;
7883 int main()
7884 {
7885         const char *foo;
7886         const spug y;
7887 }
7888 EOCP
7889 if $cc -c $ccflags const.c >/dev/null 2>&1 ; then
7890         val="$define"
7891         echo "Yup, it does."
7892 else
7893         val="$undef"
7894         echo "Nope, it doesn't."
7895 fi
7896 set d_const
7897 eval $setvar
7898
7899 : see if crypt exists
7900 echo " "
7901 if set crypt val -f d_crypt; eval $csym; $val; then
7902         echo 'crypt() found.' >&4
7903         val="$define"
7904         cryptlib=''
7905 else
7906         cryptlib=`./loc Slibcrypt$_a "" $xlibpth`
7907         if $test -z "$cryptlib"; then
7908                 cryptlib=`./loc Mlibcrypt$_a "" $xlibpth`
7909         else
7910                 cryptlib=-lcrypt
7911         fi
7912         if $test -z "$cryptlib"; then
7913                 cryptlib=`./loc Llibcrypt$_a "" $xlibpth`
7914         else
7915                 cryptlib=-lcrypt
7916         fi
7917         if $test -z "$cryptlib"; then
7918                 cryptlib=`./loc libcrypt$_a "" $libpth`
7919         else
7920                 cryptlib=-lcrypt
7921         fi
7922         if $test -z "$cryptlib"; then
7923                 echo 'crypt() NOT found.' >&4
7924                 val="$undef"
7925         else
7926                 val="$define"
7927         fi
7928 fi
7929 set d_crypt
7930 eval $setvar
7931
7932 : get csh whereabouts
7933 case "$csh" in
7934 'csh') val="$undef" ;;
7935 *) val="$define" ;;
7936 esac
7937 set d_csh
7938 eval $setvar
7939 : Respect a hint or command line value for full_csh.
7940 case "$full_csh" in
7941 '') full_csh=$csh ;;
7942 esac
7943
7944 : see if cuserid exists
7945 set cuserid d_cuserid
7946 eval $inlibc
7947
7948 : see if this is a limits.h system
7949 set limits.h i_limits
7950 eval $inhdr
7951
7952 : see if this is a float.h system
7953 set float.h i_float
7954 eval $inhdr
7955
7956 : See if number of significant digits in a double precision number is known
7957 echo " "
7958 $cat >dbl_dig.c <<EOM
7959 #$i_limits I_LIMITS
7960 #$i_float I_FLOAT
7961 #ifdef I_LIMITS
7962 #include <limits.h>
7963 #endif
7964 #ifdef I_FLOAT
7965 #include <float.h>
7966 #endif
7967 #ifdef DBL_DIG
7968 printf("Contains DBL_DIG");
7969 #endif
7970 EOM
7971 $cppstdin $cppflags $cppminus < dbl_dig.c >dbl_dig.E 2>/dev/null
7972 if $contains 'DBL_DIG' dbl_dig.E >/dev/null 2>&1; then
7973         echo "DBL_DIG found." >&4
7974         val="$define"
7975 else
7976         echo "DBL_DIG NOT found." >&4
7977         val="$undef"
7978 fi
7979 $rm -f dbl_dig.?
7980 set d_dbl_dig
7981 eval $setvar
7982
7983 : see if difftime exists
7984 set difftime d_difftime
7985 eval $inlibc
7986
7987 : see if this is a dirent system
7988 echo " "
7989 if xinc=`./findhdr dirent.h`; $test "$xinc"; then
7990         val="$define"
7991         echo "<dirent.h> found." >&4
7992 else
7993         val="$undef"
7994         if xinc=`./findhdr sys/dir.h`; $test "$xinc"; then
7995                 echo "<sys/dir.h> found." >&4
7996                 echo " "
7997         else
7998                 xinc=`./findhdr sys/ndir.h`
7999         fi
8000         echo "<dirent.h> NOT found." >&4
8001 fi
8002 set i_dirent
8003 eval $setvar
8004
8005 : Look for type of directory structure.
8006 echo " "
8007 $cppstdin $cppflags $cppminus < "$xinc" > try.c
8008
8009 case "$direntrytype" in
8010 ''|' ')
8011         case "$i_dirent" in
8012         $define) guess1='struct dirent' ;;
8013         *) guess1='struct direct'  ;;
8014         esac
8015         ;;
8016 *)      guess1="$direntrytype"
8017         ;;
8018 esac
8019
8020 case "$guess1" in
8021 'struct dirent') guess2='struct direct' ;;
8022 *) guess2='struct dirent' ;;
8023 esac
8024                 
8025 if $contains "$guess1" try.c >/dev/null 2>&1; then
8026         direntrytype="$guess1"
8027         echo "Your directory entries are $direntrytype." >&4
8028 elif $contains "$guess2" try.c >/dev/null 2>&1; then
8029         direntrytype="$guess2"
8030         echo "Your directory entries seem to be $direntrytype." >&4
8031 else
8032         echo "I don't recognize your system's directory entries." >&4
8033         rp="What type is used for directory entries on this system?"
8034         dflt="$guess1"
8035         . ./myread
8036         direntrytype="$ans"
8037 fi
8038 $rm -f try.c
8039
8040
8041 : see if the directory entry stores field length
8042 echo " "
8043 $cppstdin $cppflags $cppminus < "$xinc" > try.c
8044 if $contains 'd_namlen' try.c >/dev/null 2>&1; then
8045         echo "Good, your directory entry keeps length information in d_namlen." >&4
8046         val="$define"
8047 else
8048         echo "Your directory entry does not know about the d_namlen field." >&4
8049         val="$undef"
8050 fi
8051 set d_dirnamlen
8052 eval $setvar
8053 $rm -f try.c
8054
8055 : see if dlerror exists
8056 xxx_runnm="$runnm"
8057 runnm=false
8058 set dlerror d_dlerror
8059 eval $inlibc
8060 runnm="$xxx_runnm"
8061
8062 : see if dlfcn is available
8063 set dlfcn.h i_dlfcn
8064 eval $inhdr
8065
8066 case "$usedl" in
8067 $define|y|true)
8068         $cat << EOM
8069
8070 On a few systems, the dynamically loaded modules that perl generates and uses
8071 will need a different extension than shared libs. The default will probably
8072 be appropriate.
8073
8074 EOM
8075         case "$dlext" in
8076         '')     dflt="$so" ;;
8077         *)      dflt="$dlext" ;;
8078         esac
8079         rp='What is the extension of dynamically loaded modules'
8080         . ./myread
8081         dlext="$ans"
8082         ;;
8083 *)
8084         dlext="none"
8085         ;;
8086 esac
8087
8088 : Check if dlsym need a leading underscore
8089 echo " "
8090 val="$undef"
8091
8092 case "$dlsrc" in
8093 dl_dlopen.xs)
8094         echo "Checking whether your dlsym() needs a leading underscore ..." >&4
8095         $cat >dyna.c <<'EOM'
8096 fred () { }
8097 EOM
8098
8099 $cat >fred.c<<EOM
8100
8101 #include <stdio.h>
8102 #$i_dlfcn I_DLFCN
8103 #ifdef I_DLFCN
8104 #include <dlfcn.h>      /* the dynamic linker include file for Sunos/Solaris */
8105 #else
8106 #include <sys/types.h>
8107 #include <nlist.h>
8108 #include <link.h>
8109 #endif
8110
8111 extern int fred() ;
8112
8113 int main()
8114 {
8115     void * handle ;
8116     void * symbol ;
8117 #ifndef RTLD_LAZY
8118     int mode = 1 ;
8119 #else
8120     int mode = RTLD_LAZY ;
8121 #endif
8122     handle = dlopen("./dyna.$dlext", mode) ;
8123     if (handle == NULL) {
8124         printf ("1\n") ;
8125         fflush (stdout) ;
8126         exit(0);
8127     }
8128     symbol = dlsym(handle, "fred") ;
8129     if (symbol == NULL) {
8130         /* try putting a leading underscore */
8131         symbol = dlsym(handle, "_fred") ;
8132         if (symbol == NULL) {
8133             printf ("2\n") ;
8134             fflush (stdout) ;
8135             exit(0);
8136         }
8137         printf ("3\n") ;
8138     }
8139     else
8140         printf ("4\n") ;
8141     fflush (stdout) ;
8142     exit(0);
8143 }
8144 EOM
8145         : Call the object file tmp-dyna.o in case dlext=o.
8146         if $cc $ccflags $cccdlflags -c dyna.c > /dev/null 2>&1 && 
8147                 mv dyna${_o} tmp-dyna${_o} > /dev/null 2>&1 && 
8148                 $ld $lddlflags -o dyna.$dlext tmp-dyna${_o} > /dev/null 2>&1 && 
8149                 $cc $ccflags -o fred $ldflags $cccdlflags $ccdlflags fred.c $libs > /dev/null 2>&1; then
8150                 xxx=`./fred`
8151                 case $xxx in
8152                 1)      echo "Test program failed using dlopen." >&4
8153                         echo "Perhaps you should not use dynamic loading." >&4;;
8154                 2)      echo "Test program failed using dlsym." >&4
8155                         echo "Perhaps you should not use dynamic loading." >&4;;
8156                 3)      echo "dlsym needs a leading underscore" >&4
8157                         val="$define" ;;
8158                 4)      echo "dlsym doesn't need a leading underscore." >&4;;
8159                 esac
8160         else
8161                 echo "I can't compile and run the test program." >&4
8162                 echo "I'm guessing that dlsym doesn't need a leading underscore." >&4
8163         fi
8164         ;;
8165 esac
8166                 
8167 $rm -f fred fred.? dyna.$dlext dyna.? tmp-dyna.?
8168
8169 set d_dlsymun
8170 eval $setvar
8171
8172 hasproto='varname=$1; func=$2; shift; shift;
8173 while $test $# -ge 2; do
8174         case "$1" in
8175         $define) echo "#include <$2>";;
8176         esac ;
8177     shift 2;
8178 done > try.c;
8179 $cppstdin $cppflags $cppminus < try.c > tryout.c 2>/dev/null;
8180 if $contains "$func.*(" tryout.c >/dev/null 2>&1; then
8181         echo "$func() prototype found.";
8182         val="$define";
8183 else
8184         echo "$func() prototype NOT found.";
8185         val="$undef";
8186 fi;
8187 set $varname;
8188 eval $setvar;
8189 $rm -f try.c tryout.c'
8190
8191 : see if prototype for drand48 is available
8192 echo " "
8193 set d_drand48proto drand48 $i_stdlib stdlib.h $i_unistd unistd.h
8194 eval $hasproto
8195
8196 : see if dup2 exists
8197 set dup2 d_dup2
8198 eval $inlibc
8199
8200 : see if eaccess exists
8201 set eaccess d_eaccess
8202 eval $inlibc
8203
8204 : see if endgrent exists
8205 set endgrent d_endgrent
8206 eval $inlibc
8207
8208 : see if endhostent exists
8209 set endhostent d_endhent
8210 eval $inlibc
8211
8212 : see if endnetent exists
8213 set endnetent d_endnent
8214 eval $inlibc
8215
8216 : see if endprotoent exists
8217 set endprotoent d_endpent
8218 eval $inlibc
8219
8220 : see if endpwent exists
8221 set endpwent d_endpwent
8222 eval $inlibc
8223
8224 : see if endservent exists
8225 set endservent d_endsent
8226 eval $inlibc
8227
8228 : see if endspent exists
8229 set endspent d_endspent
8230 eval $inlibc
8231
8232 : Locate the flags for 'open()'
8233 echo " "
8234 $cat >open3.c <<'EOCP'
8235 #include <sys/types.h>
8236 #ifdef I_FCNTL
8237 #include <fcntl.h>
8238 #endif
8239 #ifdef I_SYS_FILE
8240 #include <sys/file.h>
8241 #endif
8242 int main() {
8243         if(O_RDONLY);
8244 #ifdef O_TRUNC
8245         exit(0);
8246 #else
8247         exit(1);
8248 #endif
8249 }
8250 EOCP
8251 : check sys/file.h first to get FREAD on Sun
8252 if $test `./findhdr sys/file.h` && \
8253                 set open3 -DI_SYS_FILE && eval $compile; then
8254         h_sysfile=true;
8255         echo "<sys/file.h> defines the O_* constants..." >&4
8256         if ./open3; then
8257                 echo "and you have the 3 argument form of open()." >&4
8258                 val="$define"
8259         else
8260                 echo "but not the 3 argument form of open().  Oh, well." >&4
8261                 val="$undef"
8262         fi
8263 elif $test `./findhdr fcntl.h` && \
8264                 set open3 -DI_FCNTL && eval $compile; then
8265         h_fcntl=true;
8266         echo "<fcntl.h> defines the O_* constants..." >&4
8267         if ./open3; then
8268                 echo "and you have the 3 argument form of open()." >&4
8269                 val="$define"
8270         else
8271                 echo "but not the 3 argument form of open().  Oh, well." >&4
8272                 val="$undef"
8273         fi
8274 else
8275         val="$undef"
8276         echo "I can't find the O_* constant definitions!  You got problems." >&4
8277 fi
8278 set d_open3
8279 eval $setvar
8280 $rm -f open3*
8281
8282 : see which of string.h or strings.h is needed
8283 echo " "
8284 strings=`./findhdr string.h`
8285 if $test "$strings" && $test -r "$strings"; then
8286         echo "Using <string.h> instead of <strings.h>." >&4
8287         val="$define"
8288 else
8289         val="$undef"
8290         strings=`./findhdr strings.h`
8291         if $test "$strings" && $test -r "$strings"; then
8292                 echo "Using <strings.h> instead of <string.h>." >&4
8293         else
8294                 echo "No string header found -- You'll surely have problems." >&4
8295         fi
8296 fi
8297 set i_string
8298 eval $setvar
8299 case "$i_string" in
8300 "$undef") strings=`./findhdr strings.h`;;
8301 *)        strings=`./findhdr string.h`;;
8302 esac
8303
8304 : check for non-blocking I/O stuff
8305 case "$h_sysfile" in
8306 true) echo "#include <sys/file.h>" > head.c;;
8307 *)
8308         case "$h_fcntl" in
8309         true) echo "#include <fcntl.h>" > head.c;;
8310         *) echo "#include <sys/fcntl.h>" > head.c;;
8311         esac
8312         ;;
8313 esac
8314 echo " "
8315 echo "Figuring out the flag used by open() for non-blocking I/O..." >&4
8316 case "$o_nonblock" in
8317 '')
8318         $cat head.c > try.c
8319         $cat >>try.c <<'EOCP'
8320 #include <stdio.h>
8321 int main() {
8322 #ifdef O_NONBLOCK
8323         printf("O_NONBLOCK\n");
8324         exit(0);
8325 #endif
8326 #ifdef O_NDELAY
8327         printf("O_NDELAY\n");
8328         exit(0);
8329 #endif
8330 #ifdef FNDELAY
8331         printf("FNDELAY\n");
8332         exit(0);
8333 #endif
8334         exit(0);
8335 }
8336 EOCP
8337         set try
8338         if eval $compile_ok; then
8339                 o_nonblock=`./try`
8340                 case "$o_nonblock" in
8341                 '') echo "I can't figure it out, assuming O_NONBLOCK will do.";;
8342                 *) echo "Seems like we can use $o_nonblock.";;
8343                 esac
8344         else
8345                 echo "(I can't compile the test program; pray O_NONBLOCK is right!)"
8346         fi
8347         ;;
8348 *) echo "Using $hint value $o_nonblock.";;
8349 esac
8350 $rm -f try try.* .out core
8351
8352 echo " "
8353 echo "Let's see what value errno gets from read() on a $o_nonblock file..." >&4
8354 case "$eagain" in
8355 '')
8356         $cat head.c > try.c
8357         $cat >>try.c <<EOCP
8358 #include <errno.h>
8359 #include <sys/types.h>
8360 #include <signal.h>
8361 #include <stdio.h> 
8362 #define MY_O_NONBLOCK $o_nonblock
8363 #ifndef errno  /* XXX need better Configure test */
8364 extern int errno;
8365 #endif
8366 #$i_unistd I_UNISTD
8367 #ifdef I_UNISTD
8368 #include <unistd.h>
8369 #endif
8370 #ifdef $i_string
8371 #include <string.h>
8372 #else
8373 #include <strings.h>
8374 #endif
8375 $signal_t blech(x) int x; { exit(3); }
8376 EOCP
8377         $cat >> try.c <<'EOCP'
8378 int main()
8379 {
8380         int pd[2];
8381         int pu[2];
8382         char buf[1];
8383         char string[100];
8384
8385         pipe(pd);       /* Down: child -> parent */
8386         pipe(pu);       /* Up: parent -> child */
8387         if (0 != fork()) {
8388                 int ret;
8389                 close(pd[1]);   /* Parent reads from pd[0] */
8390                 close(pu[0]);   /* Parent writes (blocking) to pu[1] */
8391                 if (-1 == fcntl(pd[0], F_SETFL, MY_O_NONBLOCK))
8392                         exit(1);
8393                 signal(SIGALRM, blech);
8394                 alarm(5);
8395                 if ((ret = read(pd[0], buf, 1)) > 0)    /* Nothing to read! */
8396                         exit(2);
8397                 sprintf(string, "%d\n", ret);
8398                 write(2, string, strlen(string));
8399                 alarm(0);
8400 #ifdef EAGAIN
8401                 if (errno == EAGAIN) {
8402                         printf("EAGAIN\n");
8403                         goto ok;
8404                 }
8405 #endif
8406 #ifdef EWOULDBLOCK
8407                 if (errno == EWOULDBLOCK)
8408                         printf("EWOULDBLOCK\n");
8409 #endif
8410         ok:
8411                 write(pu[1], buf, 1);   /* Unblocks child, tell it to close our pipe */
8412                 sleep(2);                               /* Give it time to close our pipe */
8413                 alarm(5);
8414                 ret = read(pd[0], buf, 1);      /* Should read EOF */
8415                 alarm(0);
8416                 sprintf(string, "%d\n", ret);
8417                 write(3, string, strlen(string));
8418                 exit(0);
8419         }
8420
8421         close(pd[0]);                   /* We write to pd[1] */
8422         close(pu[1]);                   /* We read from pu[0] */
8423         read(pu[0], buf, 1);    /* Wait for parent to signal us we may continue */
8424         close(pd[1]);                   /* Pipe pd is now fully closed! */
8425         exit(0);                                /* Bye bye, thank you for playing! */
8426 }
8427 EOCP
8428         set try
8429         if eval $compile_ok; then
8430                 echo "$startsh" >mtry
8431                 echo "./try >try.out 2>try.ret 3>try.err || exit 4" >>mtry
8432                 chmod +x mtry
8433                 ./mtry >/dev/null 2>&1
8434                 case $? in
8435                 0) eagain=`$cat try.out`;;
8436                 1) echo "Could not perform non-blocking setting!";;
8437                 2) echo "I did a successful read() for something that was not there!";;
8438                 3) echo "Hmm... non-blocking I/O does not seem to be working!";;
8439                 *) echo "Something terribly wrong happened during testing.";;
8440                 esac
8441                 rd_nodata=`$cat try.ret`
8442                 echo "A read() system call with no data present returns $rd_nodata."
8443                 case "$rd_nodata" in
8444                 0|-1) ;;
8445                 *)
8446                         echo "(That's peculiar, fixing that to be -1.)"
8447                         rd_nodata=-1
8448                         ;;
8449                 esac
8450                 case "$eagain" in
8451                 '')
8452                         echo "Forcing errno EAGAIN on read() with no data available."
8453                         eagain=EAGAIN
8454                         ;;
8455                 *)
8456                         echo "Your read() sets errno to $eagain when no data is available."
8457                         ;;
8458                 esac
8459                 status=`$cat try.err`
8460                 case "$status" in
8461                 0) echo "And it correctly returns 0 to signal EOF.";;
8462                 -1) echo "But it also returns -1 to signal EOF, so be careful!";;
8463                 *) echo "However, your read() returns '$status' on EOF??";;
8464                 esac
8465                 val="$define"
8466                 if test "$status" = "$rd_nodata"; then
8467                         echo "WARNING: you can't distinguish between EOF and no data!"
8468                         val="$undef"
8469                 fi
8470         else
8471                 echo "I can't compile the test program--assuming errno EAGAIN will do."
8472                 eagain=EAGAIN
8473         fi
8474         set d_eofnblk
8475         eval $setvar
8476         ;;
8477 *)
8478         echo "Using $hint value $eagain."
8479         echo "Your read() returns $rd_nodata when no data is present."
8480         case "$d_eofnblk" in
8481         "$define") echo "And you can see EOF because read() returns 0.";;
8482         "$undef") echo "But you can't see EOF status from read() returned value.";;
8483         *)
8484                 echo "(Assuming you can't see EOF status from read anyway.)"
8485                 d_eofnblk=$undef
8486                 ;;
8487         esac
8488         ;;
8489 esac
8490 $rm -f try try.* .out core head.c mtry
8491
8492 : see if fchmod exists
8493 set fchmod d_fchmod
8494 eval $inlibc
8495
8496 : see if fchown exists
8497 set fchown d_fchown
8498 eval $inlibc
8499
8500 : see if this is an fcntl system
8501 set fcntl d_fcntl
8502 eval $inlibc
8503
8504 hasfield='varname=$1; struct=$2; field=$3; shift; shift; shift;
8505 while $test $# -ge 2; do
8506         case "$1" in
8507         $define) echo "#include <$2>";;
8508         esac ;
8509     shift 2;
8510 done > try.c;
8511 echo "int main () { struct $struct foo; char* bar; bar = (char*)foo.$field; }" >> try.c;
8512 set try;
8513 if eval $compile; then
8514         val="$define";
8515 else
8516         val="$undef";
8517 fi;
8518 set $varname;
8519 eval $setvar;
8520 $rm -f try.c try.o'
8521
8522 socketlib=''
8523 sockethdr=''
8524 : see whether socket exists
8525 echo " "
8526 $echo $n "Hmm... $c" >&4
8527 if set socket val -f d_socket; eval $csym; $val; then
8528         echo "Looks like you have Berkeley networking support." >&4
8529         d_socket="$define"
8530         if set setsockopt val -f; eval $csym; $val; then
8531                 d_oldsock="$undef"
8532         else
8533                 echo "...but it uses the old BSD 4.1c interface, rather than 4.2." >&4
8534                 d_oldsock="$define"
8535         fi
8536 else
8537         if $contains socklib libc.list >/dev/null 2>&1; then
8538                 echo "Looks like you have Berkeley networking support." >&4
8539                 d_socket="$define"
8540                 : we will have to assume that it supports the 4.2 BSD interface
8541                 d_oldsock="$undef"
8542         else
8543                 echo "You don't have Berkeley networking in libc$_a..." >&4
8544                 if test "X$d_socket" = "X$define"; then
8545                    echo "...but you seem to believe that you have sockets." >&4
8546                 else
8547                         for net in net socket
8548                         do
8549                                 if test -f /usr/lib/lib$net$_a; then
8550                                         ( ($nm $nm_opt /usr/lib/lib$net$_a | eval $nm_extract) ||  \
8551                                         $ar t /usr/lib/lib$net$_a) 2>/dev/null >> libc.list
8552                                         if $contains socket libc.list >/dev/null 2>&1; then
8553                                                 d_socket="$define"
8554                                                 socketlib="-l$net"
8555                                                 case "$net" in
8556                                                 net)
8557                                                         echo "...but the Wollongong group seems to have hacked it in." >&4
8558                                                         sockethdr="-I/usr/netinclude"
8559                                                         ;;
8560                                                 esac
8561                                                 echo "Found Berkeley sockets interface in lib$net." >& 4 
8562                                                 if $contains setsockopt libc.list >/dev/null 2>&1; then
8563                                                         d_oldsock="$undef"
8564                                                 else
8565                                                         echo "...using the old BSD 4.1c interface, rather than 4.2." >&4
8566                                                         d_oldsock="$define"
8567                                                 fi
8568                                                 break
8569                                         fi
8570                                 fi
8571                         done
8572                         if test "X$d_socket" != "X$define"; then
8573                            echo "or anywhere else I see." >&4
8574                            d_socket="$undef"
8575                            d_oldsock="$undef"
8576                         fi
8577                 fi
8578         fi
8579 fi
8580
8581 : see if socketpair exists
8582 set socketpair d_sockpair
8583 eval $inlibc
8584
8585
8586 echo " "
8587 echo "Checking the availability of certain socket constants..." >& 4
8588 for ENUM in MSG_CTRUNC MSG_DONTROUTE MSG_OOB MSG_PEEK MSG_PROXY SCM_RIGHTS; do
8589         enum=`$echo $ENUM|./tr '[A-Z]' '[a-z]'`
8590         $cat >try.c <<EOF
8591 #include <sys/types.h>
8592 #include <sys/socket.h>
8593 int main() {
8594     int i = $ENUM;
8595 }
8596 EOF
8597         val="$undef"
8598         set try; if eval $compile; then
8599                 val="$define"
8600         fi
8601         set d_${enum}; eval $setvar
8602         $rm -f try.c try
8603 done
8604
8605 : see if sys/select.h has to be included
8606 set sys/select.h i_sysselct
8607 eval $inhdr
8608
8609 : see if we should include time.h, sys/time.h, or both
8610 echo " "
8611 if test "X$timeincl" = X; then
8612         echo "Testing to see if we should include <time.h>, <sys/time.h> or both." >&4
8613         $echo $n "I'm now running the test program...$c"
8614         $cat >try.c <<'EOCP'
8615 #include <sys/types.h>
8616 #ifdef I_TIME
8617 #include <time.h>
8618 #endif
8619 #ifdef I_SYSTIME
8620 #ifdef SYSTIMEKERNEL
8621 #define KERNEL
8622 #endif
8623 #include <sys/time.h>
8624 #endif
8625 #ifdef I_SYSSELECT
8626 #include <sys/select.h>
8627 #endif
8628 int main()
8629 {
8630         struct tm foo;
8631 #ifdef S_TIMEVAL
8632         struct timeval bar;
8633 #endif
8634 #ifdef S_TIMEZONE
8635         struct timezone tzp;
8636 #endif
8637         if (foo.tm_sec == foo.tm_sec)
8638                 exit(0);
8639 #ifdef S_TIMEVAL
8640         if (bar.tv_sec == bar.tv_sec)
8641                 exit(0);
8642 #endif
8643         exit(1);
8644 }
8645 EOCP
8646         flags=''
8647         for s_timezone in '-DS_TIMEZONE' ''; do
8648         sysselect=''
8649         for s_timeval in '-DS_TIMEVAL' ''; do
8650         for i_systimek in '' '-DSYSTIMEKERNEL'; do
8651         for i_time in '' '-DI_TIME'; do
8652         for i_systime in '-DI_SYSTIME' ''; do
8653                 case "$flags" in
8654                 '') $echo $n ".$c"
8655                         set try $i_time $i_systime $i_systimek $sysselect $s_timeval $s_timezone
8656                         if eval $compile; then
8657                                 set X $i_time $i_systime $i_systimek $sysselect $s_timeval
8658                                 shift
8659                                 flags="$*"
8660                                 echo " "
8661                                 $echo $n "Succeeded with $flags$c"
8662                         fi
8663                         ;;
8664                 esac
8665         done
8666         done
8667         done
8668         done
8669         done
8670         timeincl=''
8671         echo " "
8672         case "$flags" in
8673         *SYSTIMEKERNEL*) i_systimek="$define"
8674                 timeincl=`./findhdr sys/time.h`
8675                 echo "We'll include <sys/time.h> with KERNEL defined." >&4;;
8676         *) i_systimek="$undef";;
8677         esac
8678         case "$flags" in
8679         *I_TIME*) i_time="$define"
8680                 timeincl=`./findhdr time.h`" $timeincl"
8681                 echo "We'll include <time.h>." >&4;;
8682         *) i_time="$undef";;
8683         esac
8684         case "$flags" in
8685         *I_SYSTIME*) i_systime="$define"
8686                 timeincl=`./findhdr sys/time.h`" $timeincl"
8687                 echo "We'll include <sys/time.h>." >&4;;
8688         *) i_systime="$undef";;
8689         esac
8690         $rm -f try.c try
8691 fi
8692
8693 : check for fd_set items
8694 $cat <<EOM
8695
8696 Checking to see how well your C compiler handles fd_set and friends ...
8697 EOM
8698 $cat >fd_set.c <<EOCP
8699 #$i_systime I_SYS_TIME
8700 #$i_sysselct I_SYS_SELECT
8701 #$d_socket HAS_SOCKET
8702 #include <sys/types.h>
8703 #ifdef HAS_SOCKET
8704 #include <sys/socket.h> /* Might include <sys/bsdtypes.h> */
8705 #endif
8706 #ifdef I_SYS_TIME
8707 #include <sys/time.h>
8708 #endif
8709 #ifdef I_SYS_SELECT
8710 #include <sys/select.h>
8711 #endif
8712 int main() {
8713         fd_set fds;
8714
8715 #ifdef TRYBITS
8716         if(fds.fds_bits);
8717 #endif
8718
8719 #if defined(FD_SET) && defined(FD_CLR) && defined(FD_ISSET) && defined(FD_ZERO)
8720         exit(0);
8721 #else
8722         exit(1);
8723 #endif
8724 }
8725 EOCP
8726 set fd_set -DTRYBITS
8727 if eval $compile; then
8728         d_fds_bits="$define"
8729         d_fd_set="$define"
8730         echo "Well, your system knows about the normal fd_set typedef..." >&4
8731         if ./fd_set; then
8732                 echo "and you have the normal fd_set macros (just as I'd expect)." >&4
8733                 d_fd_macros="$define"
8734         else
8735                 $cat >&4 <<'EOM'
8736 but not the normal fd_set macros!  Gaaack!  I'll have to cover for you.
8737 EOM
8738                 d_fd_macros="$undef"
8739         fi
8740 else
8741         $cat <<'EOM'
8742 Hmm, your compiler has some difficulty with fd_set.  Checking further...
8743 EOM
8744         set fd_set
8745         if eval $compile; then
8746                 d_fds_bits="$undef"
8747                 d_fd_set="$define"
8748                 echo "Well, your system has some sort of fd_set available..." >&4
8749                 if ./fd_set; then
8750                         echo "and you have the normal fd_set macros." >&4
8751                         d_fd_macros="$define"
8752                 else
8753                         $cat <<'EOM'
8754 but not the normal fd_set macros!  Gross!  More work for me...
8755 EOM
8756                         d_fd_macros="$undef"
8757                 fi
8758         else
8759         echo "Well, you got zip.  That's OK, I can roll my own fd_set stuff." >&4
8760                 d_fd_set="$undef"
8761                 d_fds_bits="$undef"
8762                 d_fd_macros="$undef"
8763         fi
8764 fi
8765 $rm -f fd_set*
8766
8767 : see if fgetpos exists
8768 set fgetpos d_fgetpos
8769 eval $inlibc
8770
8771 : see if flock exists
8772 set flock d_flock
8773 eval $inlibc
8774
8775 : see if fork exists
8776 set fork d_fork
8777 eval $inlibc
8778
8779 : see if pathconf exists
8780 set pathconf d_pathconf
8781 eval $inlibc
8782
8783 : see if fpathconf exists
8784 set fpathconf d_fpathconf
8785 eval $inlibc
8786
8787
8788 : check for off64_t
8789 echo " "
8790 echo "Checking to see if your system supports off64_t..." >&4
8791 $cat >try.c <<EOCP
8792 #include <sys/types.h>
8793 #include <unistd.h>
8794 int main() { off64_t x = 7; }'
8795 EOCP
8796 set try
8797 if eval $compile; then
8798         val="$define"
8799         echo "Yes, it does."
8800 else
8801         val="$undef"
8802         echo "No, it doesn't."
8803         case "$lseeksize" in
8804         8) echo "(Your off_t is 64 bits, so you could use that.)" ;;
8805         esac
8806 fi
8807 $rm -f try.* try
8808 set d_off64_t
8809 eval $setvar
8810
8811 : check for fpos64_t
8812 echo " "
8813 echo "Checking to see if your system supports fpos64_t..." >&4
8814 $cat >try.c <<EOCP
8815 #include <sys/stdio.h>
8816 int main() { fpos64_t x x = 7; }'
8817 EOCP
8818 set try
8819 if eval $compile; then
8820         val="$define"
8821         echo "Yes, it does."
8822 else
8823         val="$undef"
8824         echo "No, it doesn't."
8825         case "$fpossize" in
8826         8) echo "(Your fpos_t is 64 bits, so you could use that.)" ;;
8827         esac
8828 fi
8829 $rm -f try.* try
8830 set d_fpos64_t
8831 eval $setvar
8832
8833 hasstruct='varname=$1; struct=$2; shift; shift;
8834 while $test $# -ge 2; do
8835         case "$1" in
8836         $define) echo "#include <$2>";;
8837         esac ;
8838     shift 2;
8839 done > try.c;
8840 echo "int main () { struct $struct foo; }" >> try.c;
8841 set try;
8842 if eval $compile; then
8843         val="$define";
8844 else
8845         val="$undef";
8846 fi;
8847 set $varname;
8848 eval $setvar;
8849 $rm -f try.c try.o'
8850
8851 : see if this is a sys/param system
8852 set sys/param.h i_sysparam
8853 eval $inhdr
8854
8855 : see if this is a sys/mount.h system
8856 set sys/mount.h i_sysmount
8857 eval $inhdr
8858
8859 : see if sys/types.h has to be included
8860 set sys/types.h i_systypes
8861 eval $inhdr
8862
8863
8864 echo " "
8865 echo "Checking to see if your system supports struct fs_data..." >&4
8866 set d_fs_data_s fs_data $i_systypes sys/types.h $i_sysparam sys/param.h $i_sysmount sys/mount.h
8867 eval $hasstruct
8868 case "$d_fs_data_s" in
8869 "$define")      echo "Yes, it does."   ;;
8870 *)              echo "No, it doesn't." ;;
8871 esac
8872
8873 : see if fseeko exists
8874 set fseeko d_fseeko
8875 eval $inlibc
8876 case "$longsize" in
8877 8) echo "(Your long is 64 bits, so you could use fseek.)" ;;
8878 esac
8879
8880 : see if fsetpos exists
8881 set fsetpos d_fsetpos
8882 eval $inlibc
8883
8884
8885 : see if fstatfs exists
8886 set fstatfs d_fstatfs
8887 eval $inlibc
8888
8889
8890 : see if statvfs exists
8891 set statvfs d_statvfs
8892 eval $inlibc
8893
8894 : see if fstatvfs exists
8895 set fstatvfs d_fstatvfs
8896 eval $inlibc
8897
8898
8899 : see if ftello exists
8900 set ftello d_ftello
8901 eval $inlibc
8902 case "$longsize" in
8903 8) echo "(Your long is 64 bits, so you could use ftell.)" ;;
8904 esac
8905
8906 : see if getcwd exists
8907 set getcwd d_getcwd
8908 eval $inlibc
8909
8910 : see if getgrent exists
8911 set getgrent d_getgrent
8912 eval $inlibc
8913
8914 : see if gethostbyaddr exists
8915 set gethostbyaddr d_gethbyaddr
8916 eval $inlibc
8917
8918 : see if gethostbyname exists
8919 set gethostbyname d_gethbyname
8920 eval $inlibc
8921
8922 : see if gethostent exists
8923 set gethostent d_gethent
8924 eval $inlibc
8925
8926 : see how we will look up host name
8927 echo " "
8928 call=''
8929 if set gethostname val -f d_gethname; eval $csym; $val; then
8930         echo 'gethostname() found.' >&4
8931         d_gethname="$define"
8932         call=gethostname
8933 fi
8934 if set uname val -f d_uname; eval $csym; $val; then
8935         if ./xenix; then
8936                 $cat <<'EOM'
8937 uname() was found, but you're running xenix, and older versions of xenix
8938 have a broken uname(). If you don't really know whether your xenix is old
8939 enough to have a broken system call, use the default answer.
8940
8941 EOM
8942                 dflt=y
8943                 case "$d_uname" in
8944                 "$define") dflt=n;;
8945                 esac
8946                 rp='Is your uname() broken?'
8947                 . ./myread
8948                 case "$ans" in
8949                 n*) d_uname="$define"; call=uname;;
8950                 esac
8951         else
8952                 echo 'uname() found.' >&4
8953                 d_uname="$define"
8954                 case "$call" in
8955                 '') call=uname ;;
8956                 esac
8957         fi
8958 fi
8959 case "$d_gethname" in
8960 '') d_gethname="$undef";;
8961 esac
8962 case "$d_uname" in
8963 '') d_uname="$undef";;
8964 esac
8965 case "$d_uname$d_gethname" in
8966 *define*)
8967         dflt=n
8968         cat <<EOM
8969  
8970 Every now and then someone has a $call() that lies about the hostname
8971 but can't be fixed for political or economic reasons.  If you wish, I can
8972 pretend $call() isn't there and maybe compute hostname at run-time
8973 thanks to the '$phostname' command.
8974
8975 EOM
8976         rp="Shall I ignore $call() from now on?"
8977         . ./myread
8978         case "$ans" in
8979         y*) d_uname="$undef" d_gethname="$undef"; $echo $n "Okay...$c";;
8980         esac;;
8981 esac
8982 case "$phostname" in
8983 '') aphostname='';;
8984 *) case "$aphostname" in
8985         /*) ;;
8986         *) set X $phostname
8987                 shift
8988                 file=$1
8989                 shift
8990                 file=`./loc $file $file $pth`
8991                 aphostname=`echo $file $*`
8992                 ;;
8993         esac
8994         ;;
8995 esac
8996 case "$d_uname$d_gethname" in
8997 *define*) ;;
8998 *)
8999         case "$phostname" in
9000         '')
9001                 echo "There will be no way for $package to get your hostname." >&4;;
9002         *)
9003         echo "I'll use 'popen("'"'$aphostname'", "r")'"' to get your hostname." >&4
9004                 ;;
9005         esac;;
9006 esac
9007 case "$d_phostname" in
9008 '') d_phostname="$undef";;
9009 esac
9010
9011 : see if this is a netdb.h system
9012 set netdb.h i_netdb
9013 eval $inhdr
9014
9015 : see if prototypes for various gethostxxx netdb.h functions are available
9016 echo " "
9017 set d_gethostprotos gethostent $i_netdb netdb.h
9018 eval $hasproto
9019
9020 : see if getlogin exists
9021 set getlogin d_getlogin
9022 eval $inlibc
9023
9024 : see if getmnt exists
9025 set getmnt d_getmnt
9026 eval $inlibc
9027
9028 : see if getmntent exists
9029 set getmntent d_getmntent
9030 eval $inlibc
9031
9032 : see if getnetbyaddr exists
9033 set getnetbyaddr d_getnbyaddr
9034 eval $inlibc
9035
9036 : see if getnetbyname exists
9037 set getnetbyname d_getnbyname
9038 eval $inlibc
9039
9040 : see if getnetent exists
9041 set getnetent d_getnent
9042 eval $inlibc
9043
9044 : see if prototypes for various getnetxxx netdb.h functions are available
9045 echo " "
9046 set d_getnetprotos getnetent $i_netdb netdb.h
9047 eval $hasproto
9048
9049
9050 : see if getprotobyname exists
9051 set getprotobyname d_getpbyname
9052 eval $inlibc
9053
9054 : see if getprotobynumber exists
9055 set getprotobynumber d_getpbynumber
9056 eval $inlibc
9057
9058 : see if getprotoent exists
9059 set getprotoent d_getpent
9060 eval $inlibc
9061
9062 : see if getpgid exists
9063 set getpgid d_getpgid
9064 eval $inlibc
9065
9066 : see if getpgrp2 exists
9067 set getpgrp2 d_getpgrp2
9068 eval $inlibc
9069
9070 : see if getppid exists
9071 set getppid d_getppid
9072 eval $inlibc
9073
9074 : see if getpriority exists
9075 set getpriority d_getprior
9076 eval $inlibc
9077
9078 : see if prototypes for various getprotoxxx netdb.h functions are available
9079 echo " "
9080 set d_getprotoprotos getprotoent $i_netdb netdb.h
9081 eval $hasproto
9082
9083 : see if getpwent exists
9084 set getpwent d_getpwent
9085 eval $inlibc
9086
9087
9088 : see if getservbyname exists
9089 set getservbyname d_getsbyname
9090 eval $inlibc
9091
9092 : see if getservbyport exists
9093 set getservbyport d_getsbyport
9094 eval $inlibc
9095
9096 : see if getservent exists
9097 set getservent d_getsent
9098 eval $inlibc
9099
9100 : see if prototypes for various getservxxx netdb.h functions are available
9101 echo " "
9102 set d_getservprotos getservent $i_netdb netdb.h
9103 eval $hasproto
9104
9105 : see if getspent exists
9106 set getspent d_getspent
9107 eval $inlibc
9108
9109 : see if getspnam exists
9110 set getspnam d_getspnam
9111 eval $inlibc
9112
9113 : see if gettimeofday or ftime exists
9114 set gettimeofday d_gettimeod
9115 eval $inlibc
9116 case "$d_gettimeod" in
9117 "$undef")
9118         set ftime d_ftime 
9119         eval $inlibc
9120         ;;
9121 *)
9122         val="$undef"; set d_ftime; eval $setvar
9123         ;;
9124 esac
9125 case "$d_gettimeod$d_ftime" in
9126 "$undef$undef")
9127         echo " "
9128         echo 'No ftime() nor gettimeofday() -- timing may be less accurate.' >&4
9129         ;;
9130 esac
9131
9132 : see if this is an grp system
9133 set grp.h i_grp
9134 eval $inhdr
9135
9136 case "$i_grp" in
9137 $define)
9138         xxx=`./findhdr grp.h`
9139         $cppstdin $cppflags $cppminus < $xxx >$$.h
9140
9141         if $contains 'gr_passwd' $$.h >/dev/null 2>&1; then
9142                 val="$define"
9143         else
9144                 val="$undef"
9145         fi
9146         set d_grpasswd
9147         eval $setvar
9148
9149         $rm -f $$.h
9150         ;;
9151 *)
9152         val="$undef";
9153         set d_grpasswd; eval $setvar
9154         ;;
9155 esac
9156
9157 : see if hasmntopt exists
9158 set hasmntopt d_hasmntopt
9159 eval $inlibc
9160
9161 : see if this is a netinet/in.h or sys/in.h system
9162 set netinet/in.h i_niin sys/in.h i_sysin
9163 eval $inhdr
9164
9165 : see if arpa/inet.h has to be included
9166 set arpa/inet.h i_arpainet
9167 eval $inhdr
9168
9169 : see if htonl --and friends-- exists
9170 val=''
9171 set htonl val
9172 eval $inlibc
9173
9174 : Maybe they are macros.
9175 case "$val" in
9176 $undef)
9177         $cat >htonl.c <<EOM
9178 #include <stdio.h>
9179 #include <sys/types.h>
9180 #$i_niin I_NETINET_IN
9181 #$i_sysin I_SYS_IN
9182 #$i_arpainet I_ARPA_INET
9183 #ifdef I_NETINET_IN
9184 #include <netinet/in.h>
9185 #endif
9186 #ifdef I_SYS_IN
9187 #include <sys/in.h>
9188 #endif
9189 #ifdef I_ARPA_INET
9190 #include <arpa/inet.h>
9191 #endif
9192 #ifdef htonl
9193 printf("Defined as a macro.");
9194 #endif
9195 EOM
9196         $cppstdin $cppflags $cppminus < htonl.c >htonl.E 2>/dev/null
9197         if $contains 'Defined as a macro' htonl.E >/dev/null 2>&1; then
9198                 val="$define"
9199                 echo "But it seems to be defined as a macro." >&4
9200         fi
9201         $rm -f htonl.?
9202         ;;
9203 esac
9204 set d_htonl
9205 eval $setvar
9206
9207 : see if iconv exists
9208 set iconv d_iconv
9209 eval $inlibc
9210
9211 : index or strchr
9212 echo " "
9213 if set index val -f; eval $csym; $val; then
9214         if set strchr val -f d_strchr; eval $csym; $val; then
9215                 if $contains strchr "$strings" >/dev/null 2>&1 ; then
9216                         val="$define"
9217                         vali="$undef"
9218                         echo "strchr() found." >&4
9219                 else
9220                         val="$undef"
9221                         vali="$define"
9222                         echo "index() found." >&4
9223                 fi
9224         else
9225                 val="$undef"
9226                 vali="$define"
9227                 echo "index() found." >&4
9228         fi
9229 else
9230         if set strchr val -f d_strchr; eval $csym; $val; then
9231                 val="$define"
9232                 vali="$undef"
9233                 echo "strchr() found." >&4
9234         else
9235                 echo "No index() or strchr() found!" >&4
9236                 val="$undef"
9237                 vali="$undef"
9238         fi
9239 fi
9240 set d_strchr; eval $setvar
9241 val="$vali"
9242 set d_index; eval $setvar
9243
9244 : check whether inet_aton exists
9245 set inet_aton d_inetaton
9246 eval $inlibc
9247
9248 : see if inttypes.h is available
9249 : we want a real compile instead of Inhdr because some systems
9250 : have an inttypes.h which includes non-existent headers
9251 echo " "
9252 $cat >try.c <<EOCP
9253 #include <inttypes.h>
9254 int main() {
9255         static int32_t foo32 = 0x12345678;
9256 }
9257 EOCP
9258 set try
9259 if eval $compile; then
9260         echo "<inttypes.h> found." >&4
9261         val="$define"
9262 else
9263         echo "<inttypes.h> NOT found." >&4
9264         val="$undef"
9265 fi
9266 $rm -f try.c try
9267 set i_inttypes
9268 eval $setvar
9269
9270 : check for int64_t
9271 echo " "
9272 $echo $n "Checking to see if your system supports int64_t...$c" >&4
9273 $cat >try.c <<EOCP
9274 #include <sys/types.h>
9275 #$i_inttypes I_INTTYPES
9276 #ifdef I_INTTYPES
9277 #include <inttypes.h>
9278 #endif
9279 int main() { int64_t x = 7; }
9280 EOCP
9281 set try
9282 if eval $compile; then
9283         val="$define"
9284         echo " Yes, it does." >&4
9285 else
9286         val="$undef"
9287         echo " No, it doesn't." >&4
9288 fi
9289 $rm -f try try.*
9290 set d_int64t
9291 eval $setvar
9292
9293 : Look for isascii
9294 echo " "
9295 $cat >isascii.c <<'EOCP'
9296 #include <stdio.h>
9297 #include <ctype.h>
9298 int main() {
9299         int c = 'A';
9300         if (isascii(c))
9301                 exit(0);
9302         else
9303                 exit(1);
9304 }
9305 EOCP
9306 set isascii
9307 if eval $compile; then
9308         echo "isascii() found." >&4
9309         val="$define"
9310 else
9311         echo "isascii() NOT found." >&4
9312         val="$undef"
9313 fi
9314 set d_isascii
9315 eval $setvar
9316 $rm -f isascii*
9317
9318 : see if killpg exists
9319 set killpg d_killpg
9320 eval $inlibc
9321
9322 : see if lchown exists
9323 echo " "
9324 $cat > try.c <<'EOCP'
9325 /* System header to define __stub macros and hopefully few prototypes,
9326     which can conflict with char lchown(); below.  */
9327 #include <assert.h>
9328 /* Override any gcc2 internal prototype to avoid an error.  */
9329 /* We use char because int might match the return type of a gcc2
9330    builtin and then its argument prototype would still apply.  */
9331 char lchown();
9332 int main() {
9333     /*  The GNU C library defines this for functions which it implements
9334         to always fail with ENOSYS.  Some functions are actually named
9335         something starting with __ and the normal name is an alias.  */
9336 #if defined (__stub_lchown) || defined (__stub___lchown)
9337 choke me
9338 #else
9339 lchown();
9340 #endif
9341 ; return 0; }
9342 EOCP
9343 set try
9344 if eval $compile; then
9345     $echo "lchown() found." >&4
9346     val="$define"
9347 else
9348     $echo "lchown() NOT found." >&4
9349     val="$undef"
9350 fi
9351 set d_lchown
9352 eval $setvar
9353
9354 : See if number of significant digits in a double precision number is known
9355 echo " "
9356 $cat >ldbl_dig.c <<EOM
9357 #$i_limits I_LIMITS
9358 #$i_float I_FLOAT
9359 #ifdef I_LIMITS
9360 #include <limits.h>
9361 #endif
9362 #ifdef I_FLOAT
9363 #include <float.h>
9364 #endif
9365 #ifdef LDBL_DIG
9366 printf("Contains LDBL_DIG");
9367 #endif
9368 EOM
9369 $cppstdin $cppflags $cppminus < ldbl_dig.c >ldbl_dig.E 2>/dev/null
9370 if $contains 'LDBL_DIG' ldbl_dig.E >/dev/null 2>&1; then
9371         echo "LDBL_DIG found." >&4
9372         val="$define"
9373 else
9374         echo "LDBL_DIG NOT found." >&4
9375         val="$undef"
9376 fi
9377 $rm -f ldbl_dig.?
9378 set d_ldbl_dig
9379 eval $setvar
9380
9381 : see if link exists
9382 set link d_link
9383 eval $inlibc
9384
9385 : see if localeconv exists
9386 set localeconv d_locconv
9387 eval $inlibc
9388
9389 : see if lockf exists
9390 set lockf d_lockf
9391 eval $inlibc
9392
9393 : check for long long
9394 echo " "
9395 $echo $n "Checking to see if your system supports long long..." $c >&4
9396 echo 'int main() { long long x = 7; return 0; }' > try.c
9397 set try
9398 if eval $compile; then
9399         val="$define"
9400         echo " Yes, it does." >&4
9401 else
9402         val="$undef"
9403         echo " No, it doesn't." >&4
9404 fi
9405 $rm try.*
9406 set d_longlong
9407 eval $setvar
9408
9409 : check for length of long long
9410 case "${d_longlong}${longlongsize}" in
9411 $define)
9412         echo " "
9413         $echo $n "Checking to see how big your long longs are..." $c >&4
9414         $cat >try.c <<'EOCP'
9415 #include <stdio.h>
9416 int main()
9417 {
9418     printf("%d\n", (int)sizeof(long long));
9419     return(0);
9420 }
9421 EOCP
9422         set try
9423         if eval $compile_ok; then
9424                 longlongsize=`./try$exe_ext`
9425                 $echo " $longlongsize bytes." >&4
9426         else
9427                 dflt='8'
9428                 echo " "
9429                 echo "(I can't seem to compile the test program.  Guessing...)"
9430                 rp="What is the size of a long long (in bytes)?"
9431                 . ./myread
9432                 longlongsize="$ans"
9433         fi
9434         if $test "X$longsize" = "X$longlongsize"; then
9435                 echo "(That isn't any different from an ordinary long.)"
9436         fi      
9437         ;;
9438 esac
9439 $rm -f try.* try
9440
9441 : see if lstat exists
9442 set lstat d_lstat
9443 eval $inlibc
9444
9445 : see if mblen exists
9446 set mblen d_mblen
9447 eval $inlibc
9448
9449 : see if mbstowcs exists
9450 set mbstowcs d_mbstowcs
9451 eval $inlibc
9452
9453 : see if mbtowc exists
9454 set mbtowc d_mbtowc
9455 eval $inlibc
9456
9457 : see if memchr exists
9458 set memchr d_memchr
9459 eval $inlibc
9460
9461 : see if memcmp exists
9462 set memcmp d_memcmp
9463 eval $inlibc
9464
9465 : see if memcpy exists
9466 set memcpy d_memcpy
9467 eval $inlibc
9468
9469 : see if memmove exists
9470 set memmove d_memmove
9471 eval $inlibc
9472
9473 : see if memset exists
9474 set memset d_memset
9475 eval $inlibc
9476
9477 : see if mkdir exists
9478 set mkdir d_mkdir
9479 eval $inlibc
9480
9481 : see if mkdtemp exists
9482 set mkdtemp d_mkdtemp
9483 eval $inlibc
9484
9485 : see if mkfifo exists
9486 set mkfifo d_mkfifo
9487 eval $inlibc
9488
9489 : see if mkstemp exists
9490 set mkstemp d_mkstemp
9491 eval $inlibc
9492
9493 : see if mkstemps exists
9494 set mkstemps d_mkstemps
9495 eval $inlibc
9496
9497 : see if mktime exists
9498 set mktime d_mktime
9499 eval $inlibc
9500
9501 : see if mprotect exists
9502 set mprotect d_mprotect
9503 eval $inlibc
9504
9505 : see if msgctl exists
9506 set msgctl d_msgctl
9507 eval $inlibc
9508
9509 : see if msgget exists
9510 set msgget d_msgget
9511 eval $inlibc
9512
9513 : see if msgsnd exists
9514 set msgsnd d_msgsnd
9515 eval $inlibc
9516
9517 : see if msgrcv exists
9518 set msgrcv d_msgrcv
9519 eval $inlibc
9520
9521 : see how much of the 'msg*(2)' library is present.
9522 h_msg=true
9523 echo " "
9524 case "$d_msgctl$d_msgget$d_msgsnd$d_msgrcv" in
9525 *"$undef"*) h_msg=false;;
9526 esac
9527 case "$osname" in
9528 freebsd)
9529     case "`ipcs 2>&1`" in
9530     "SVID messages"*"not configured"*)
9531         echo "Your $osname does not have the msg*(2) configured." >&4
9532         h_msg=false
9533         val="$undef"
9534         set msgctl d_msgctl
9535         eval $setvar
9536         set msgget d_msgget
9537         eval $setvar
9538         set msgsnd d_msgsnd
9539         eval $setvar
9540         set msgrcv d_msgrcv
9541         eval $setvar
9542         ;;
9543     esac
9544     ;;
9545 esac
9546 : we could also check for sys/ipc.h ...
9547 if $h_msg && $test `./findhdr sys/msg.h`; then
9548         echo "You have the full msg*(2) library." >&4
9549         val="$define"
9550 else
9551         echo "You don't have the full msg*(2) library." >&4
9552         val="$undef"
9553 fi
9554 set d_msg
9555 eval $setvar
9556
9557 : see if msync exists
9558 set msync d_msync
9559 eval $inlibc
9560
9561 : see if munmap exists
9562 set munmap d_munmap
9563 eval $inlibc
9564
9565 : see if nice exists
9566 set nice d_nice
9567 eval $inlibc
9568
9569
9570 echo " "
9571 echo "Checking which 64-bit integer type we could use..." >&4
9572
9573 case "$intsize" in
9574 8) val=int
9575    set quadtype
9576    eval $setvar
9577    val='"unsigned int"'
9578    set uquadtype
9579    eval $setvar
9580    quadkind=1
9581    ;;
9582 *) case "$longsize" in
9583    8) val=long
9584       set quadtype
9585       eval $setvar
9586       val='"unsigned long"'
9587       set uquadtype
9588       eval $setvar
9589       quadkind=2
9590       ;;
9591    *) case "$d_longlong:$longlongsize" in
9592       define:8)
9593         val='"long long"'
9594         set quadtype
9595         eval $setvar
9596         val='"unsigned long long"'
9597         set uquadtype
9598         eval $setvar
9599         quadkind=3
9600         ;;
9601       *) case "$d_int64t" in
9602          define)
9603            val=int64_t
9604            set quadtype
9605            eval $setvar
9606            val=uint64_t
9607            set uquadtype
9608            eval $setvar
9609            quadkind=4
9610            ;;
9611          esac
9612          ;;
9613       esac
9614       ;;
9615    esac
9616    ;;
9617 esac
9618
9619 case "$quadtype" in
9620 '')     echo "Alas, no 64-bit integer types in sight." >&4
9621         d_quad="$undef"
9622         ;;
9623 *)      if test X"$use64bits" = Xdefine -o X"$longsize" = X8; then
9624             verb="will"
9625         else
9626             verb="could"
9627         fi
9628         echo "We $verb use '$quadtype' for 64-bit integers." >&4
9629         d_quad="$define"
9630         ;;
9631 esac
9632
9633 : check for length of character
9634 echo " "
9635 case "$charsize" in
9636 '')
9637         echo "Checking to see how big your characters are (hey, you never know)..." >&4
9638         $cat >try.c <<'EOCP'
9639 #include <stdio.h>
9640 int main()
9641 {
9642     printf("%d\n", (int)sizeof(char));
9643     exit(0);
9644 }
9645 EOCP
9646         set try
9647         if eval $compile_ok; then
9648                 dflt=`./try`
9649         else
9650                 dflt='1'
9651                 echo "(I can't seem to compile the test program.  Guessing...)"
9652         fi
9653         ;;
9654 *)
9655         dflt="$charsize"
9656         ;;
9657 esac
9658 rp="What is the size of a character (in bytes)?"
9659 . ./myread
9660 charsize="$ans"
9661 $rm -f try.c try
9662
9663
9664 echo " "
9665 $echo "Choosing the C types to be used for Perl's internal types..." >&4
9666
9667 case "$use64bits:$d_quad:$quadtype" in
9668 define:define:?*)
9669         ivtype="$quadtype"
9670         uvtype="$uquadtype"
9671         ivsize=8
9672         uvsize=8
9673         ;;
9674 *)      ivtype="long"
9675         uvtype="unsigned long"
9676         ivsize=$longsize
9677         uvsize=$longsize
9678         ;;
9679 esac
9680
9681 case "$uselongdouble:$d_longdbl" in
9682 define:define)
9683         nvtype="long double"
9684         nvsize=$longdblsize
9685         ;;
9686 *)      nvtype=double
9687         nvsize=$doublesize
9688         ;;
9689 esac
9690
9691 $echo "(IV will be "$ivtype", $ivsize bytes)"
9692 $echo "(UV will be "$uvtype", $uvsize bytes)"
9693 $echo "(NV will be "$nvtype", $nvsize bytes)"
9694
9695 $cat >try.c <<EOCP
9696 #$i_inttypes I_INTTYPES
9697 #ifdef I_INTTYPES
9698 #include <inttypes.h>
9699 #endif
9700 #include <stdio.h>
9701 int main() {
9702 #ifdef INT8
9703    int8_t i =  INT8_MAX;
9704   uint8_t u = UINT8_MAX;
9705   printf("int8_t\n");
9706 #endif
9707 #ifdef INT16
9708    int16_t i =  INT16_MAX;
9709   uint16_t i = UINT16_MAX;
9710   printf("int16_t\n");
9711 #endif
9712 #ifdef INT32
9713    int32_t i =  INT32_MAX;
9714   uint32_t u = UINT32_MAX;
9715   printf("int32_t\n");
9716 #endif
9717 }
9718 EOCP
9719
9720 case "$i8type" in
9721 '')     case "$charsize" in
9722         1)      i8type=char
9723                 u8type="unsigned char"
9724                 i8size=$charsize
9725                 u8size=$charsize
9726                 ;;
9727         esac
9728         ;;
9729 esac
9730 case "$i8type" in
9731 '')     set try -DINT8
9732         if eval $compile; then
9733                 case "`./try$exe_ext`" in
9734                 int8_t) i8type=int8_t
9735                         u8type=uint8_t
9736                         i8size=1
9737                         u8size=1
9738                         ;;
9739                 esac
9740         fi
9741         ;;
9742 esac
9743 case "$i8type" in
9744 '')     if $test $charsize -ge 1; then
9745                 i8type=char
9746                 u8type="unsigned char"
9747                 i8size=$charsize
9748                 u8size=$charsize
9749         fi
9750         ;;
9751 esac
9752
9753 case "$i16type" in
9754 '')     case "$shortsize" in
9755         2)      i16type=short
9756                 u16type="unsigned short"
9757                 i16size=$shortsize
9758                 u16size=$shortsize
9759                 ;;
9760         esac
9761         ;;
9762 esac
9763 case "$i16type" in
9764 '')     set try -DINT16
9765         if eval $compile; then
9766                 case "`./try$exe_ext`" in
9767                 int16_t)
9768                         i16type=int16_t
9769                         u16type=uint16_t
9770                         i16size=2
9771                         u16size=2
9772                         ;;
9773                 esac
9774         fi
9775         ;;
9776 esac
9777 case "$i16type" in
9778 '')     if $test $shortsize -ge 2; then
9779                 i16type=short
9780                 u16type="unsigned short"
9781                 i16size=$shortsize
9782                 u16size=$shortsize
9783         fi
9784         ;;
9785 esac
9786
9787 case "$i32type" in
9788 '')     case "$longsize" in
9789         4)      i32type=long
9790                 u32type="unsigned long"
9791                 i32size=$longsize
9792                 u32size=$longsize
9793                 ;;
9794         *)      case "$intsize" in
9795                 4)      i32type=int
9796                         u32type="unsigned int"
9797                         i32size=$intsize
9798                         u32size=$intsize
9799                         ;;
9800                 esac
9801                 ;;
9802         esac
9803         ;;
9804 esac
9805 case "$i32type" in
9806 '')     set try -DINT32
9807         if eval $compile; then
9808                 case "`./try$exe_ext`" in
9809                 int32_t)
9810                         i32type=int32_t
9811                         u32type=uint32_t
9812                         i32size=4
9813                         u32size=4
9814                         ;;
9815                 esac
9816         fi
9817         ;;
9818 esac
9819 case "$i32type" in
9820 '')     if $test $intsize -ge 4; then
9821                 i32type=int
9822                 u32type="unsigned int"
9823                 i32size=$intsize
9824                 u32size=$intsize
9825         fi
9826         ;;
9827 esac
9828
9829 case "$i64type" in
9830 '')     case "$d_quad:$quadtype" in
9831         define:?*)
9832                 i64type="$quadtype"
9833                 u64type="$uquadtype"
9834                 i64size=8
9835                 u64size=8
9836                 ;;
9837         esac
9838         ;;
9839 esac
9840
9841 $echo "Checking whether your NVs can preserve your UVs..." >&4
9842 $cat <<EOP >try.c
9843 #include <stdio.h>
9844 int main() {
9845     $uvtype k = ($uvtype)~0, l;
9846     $nvtype d;
9847     l = k;
9848     d = ($nvtype)l;
9849     l = ($uvtype)d;
9850     if (l == k)
9851        printf("preserve\n");
9852     exit(0);
9853 }
9854 EOP
9855 set try
9856 if eval $compile; then
9857         case "`./try$exe_ext`" in
9858         preserve) d_nv_preserves_uv="$define" ;;
9859         esac
9860 fi      
9861 case "$d_nv_preserves_uv" in
9862 $define) $echo "Yes, they can."  2>&1 ;;
9863 *)       $echo "No, they can't." 2>&1
9864          d_nv_preserves_uv="$undef"
9865          ;;
9866 esac
9867
9868 $rm -f try.* try
9869
9870 : see if POSIX threads are available
9871 set pthread.h i_pthread
9872 eval $inhdr
9873
9874
9875
9876
9877 : how to create joinable pthreads
9878 if test "X$usethreads" = "X$define" -a "X$i_pthread" = "X$define"; then
9879         echo " "
9880         echo "Checking what constant to use for creating joinable pthreads..." >&4 
9881         $cat >try.c <<'EOCP'
9882 #include <pthread.h>
9883 int main() {
9884     int detachstate = JOINABLE;
9885 }
9886 EOCP
9887         set try -DJOINABLE=PTHREAD_CREATE_JOINABLE
9888         if eval $compile; then
9889                 echo "You seem to use PTHREAD_CREATE_JOINABLE." >&4
9890                 val="$undef" # Yes, undef.
9891                 set d_old_pthread_create_joinable
9892                 eval $setvar
9893                 val=""
9894                 set old_pthread_create_joinable
9895                 eval $setvar
9896         else
9897                 set try -DJOINABLE=PTHREAD_CREATE_UNDETACHED
9898                 if eval $compile; then
9899                         echo "You seem to use PTHREAD_CREATE_UNDETACHED." >&4
9900                         val="$define"
9901                         set d_old_pthread_create_joinable
9902                         eval $setvar
9903                         val=PTHREAD_CREATE_UNDETACHED
9904                         set old_pthread_create_joinable
9905                         eval $setvar
9906                 else            
9907                         set try -DJOINABLE=__UNDETACHED
9908                         if eval $compile; then
9909                                 echo "You seem to use __UNDETACHED." >&4
9910                                 val="$define"
9911                                 set d_old_pthread_create_joinable
9912                                 eval $setvar
9913                                 val=__UNDETACHED
9914                                 set old_pthread_create_joinable
9915                                 eval $setvar
9916                         else
9917                                 echo "Egads, nothing obvious found.  Guessing that you use 0." >&4
9918                                 val="$define"
9919                                 set d_old_pthread_create_joinable
9920                                 eval $setvar
9921                                 val=0
9922                                 set old_pthread_create_joinable
9923                                 eval $setvar
9924                         fi
9925                 fi
9926         fi
9927         $rm -f try try.*
9928 else
9929     d_old_pthread_create_joinable="$undef"
9930     old_pthread_create_joinable=""
9931 fi
9932
9933 : see if pause exists
9934 set pause d_pause
9935 eval $inlibc
9936
9937 : see if pipe exists
9938 set pipe d_pipe
9939 eval $inlibc
9940
9941 : see if poll exists
9942 set poll d_poll
9943 eval $inlibc
9944
9945
9946 : see whether the various POSIXish _yields exist
9947 $cat >try.c <<EOP
9948 #include <pthread.h>
9949 #include <stdio.h>
9950 int main() {
9951 #ifdef SCHED_YIELD
9952         sched_yield();
9953 #else
9954 #ifdef PTHREAD_YIELD
9955         pthread_yield();
9956 #else
9957 #ifdef PTHREAD_YIELD_NULL
9958         pthread_yield(NULL);
9959 #endif
9960 #endif
9961 #endif
9962 }
9963 EOP
9964 : see if sched_yield exists
9965 set try -DSCHED_YIELD
9966 if eval $compile; then
9967     val="$define"
9968     sched_yield='sched_yield()'
9969 else
9970     val="$undef"
9971 fi
9972 case "$usethreads" in
9973 $define)
9974         case "$val" in
9975         $define) echo 'sched_yield() found.' >&4        ;;
9976         *)       echo 'sched_yield() NOT found.' >&4    ;;
9977         esac
9978 esac
9979 set d_sched_yield
9980 eval $setvar
9981
9982 : see if pthread_yield exists
9983 set try -DPTHREAD_YIELD
9984 if eval $compile; then
9985     val="$define"
9986     case "$sched_yield" in
9987     '') sched_yield='pthread_yield()' ;;
9988     esac
9989 else
9990     set try -DPTHREAD_YIELD_NULL
9991     if eval $compile; then
9992         val="$define"
9993         case "$sched_yield" in
9994         '') sched_yield='pthread_yield(NULL)' ;;
9995         esac
9996     else
9997         val="$undef"
9998     fi
9999 fi
10000 case "$usethreads" in
10001 $define)
10002         case "$val" in
10003         $define) echo 'pthread_yield() found.' >&4      ;;
10004         *)       echo 'pthread_yield() NOT found.' >&4  ;;
10005         esac
10006         ;;
10007 esac
10008 set d_pthread_yield
10009 eval $setvar
10010
10011 case "$sched_yield" in
10012 '') sched_yield=undef ;;
10013 esac
10014
10015 $rm -f try try.*
10016
10017 : see if this is a pwd.h system
10018 set pwd.h i_pwd
10019 eval $inhdr
10020
10021 case "$i_pwd" in
10022 $define)
10023         xxx=`./findhdr pwd.h`
10024         $cppstdin $cppflags $cppminus < $xxx >$$.h
10025
10026         if $contains 'pw_quota' $$.h >/dev/null 2>&1; then
10027                 val="$define"
10028         else
10029                 val="$undef"
10030         fi
10031         set d_pwquota
10032         eval $setvar
10033
10034         if $contains 'pw_age' $$.h >/dev/null 2>&1; then
10035                 val="$define"
10036         else
10037                 val="$undef"
10038         fi
10039         set d_pwage
10040         eval $setvar
10041
10042         if $contains 'pw_change' $$.h >/dev/null 2>&1; then
10043                 val="$define"
10044         else
10045                 val="$undef"
10046         fi
10047         set d_pwchange
10048         eval $setvar
10049
10050         if $contains 'pw_class' $$.h >/dev/null 2>&1; then
10051                 val="$define"
10052         else
10053                 val="$undef"
10054         fi
10055         set d_pwclass
10056         eval $setvar
10057
10058         if $contains 'pw_expire' $$.h >/dev/null 2>&1; then
10059                 val="$define"
10060         else
10061                 val="$undef"
10062         fi
10063         set d_pwexpire
10064         eval $setvar
10065
10066         if $contains 'pw_comment' $$.h >/dev/null 2>&1; then
10067                 val="$define"
10068         else
10069                 val="$undef"
10070         fi
10071         set d_pwcomment
10072         eval $setvar
10073
10074         if $contains 'pw_gecos' $$.h >/dev/null 2>&1; then
10075                 val="$define"
10076         else
10077                 val="$undef"
10078         fi
10079         set d_pwgecos
10080         eval $setvar
10081
10082         if $contains 'pw_passwd' $$.h >/dev/null 2>&1; then
10083                 val="$define"
10084         else
10085                 val="$undef"
10086         fi
10087         set d_pwpasswd
10088         eval $setvar
10089
10090         $rm -f $$.h
10091         ;;
10092 *)
10093         val="$undef"; 
10094         set d_pwquota; eval $setvar
10095         set d_pwage; eval $setvar
10096         set d_pwchange; eval $setvar
10097         set d_pwclass; eval $setvar
10098         set d_pwexpire; eval $setvar
10099         set d_pwcomment; eval $setvar
10100         set d_pwgecos; eval $setvar
10101         set d_pwpasswd; eval $setvar
10102         ;;
10103 esac
10104
10105 : see if readdir and friends exist
10106 set readdir d_readdir
10107 eval $inlibc
10108 set seekdir d_seekdir
10109 eval $inlibc
10110 set telldir d_telldir
10111 eval $inlibc
10112 set rewinddir d_rewinddir
10113 eval $inlibc
10114
10115 : see if readlink exists
10116 set readlink d_readlink
10117 eval $inlibc
10118
10119 : see if rename exists
10120 set rename d_rename
10121 eval $inlibc
10122
10123 : see if rmdir exists
10124 set rmdir d_rmdir
10125 eval $inlibc
10126
10127 : see if memory.h is available.
10128 val=''
10129 set memory.h val
10130 eval $inhdr
10131
10132 : See if it conflicts with string.h
10133 case "$val" in
10134 $define)
10135         case "$strings" in
10136         '') ;;
10137         *)
10138                 $cppstdin $cppflags $cppminus < $strings > mem.h
10139                 if $contains 'memcpy' mem.h >/dev/null 2>&1; then
10140                         echo " "
10141                         echo "We won't be including <memory.h>."
10142                         val="$undef"
10143                 fi
10144                 $rm -f mem.h
10145                 ;;
10146         esac
10147 esac
10148 set i_memory
10149 eval $setvar
10150
10151 : can bcopy handle overlapping blocks?
10152 val="$undef"
10153 case "$d_bcopy" in
10154 "$define")
10155         echo " "
10156         echo "Checking to see if your bcopy() can do overlapping copies..." >&4
10157         $cat >try.c <<EOCP
10158 #$i_memory I_MEMORY
10159 #$i_stdlib I_STDLIB
10160 #$i_string I_STRING
10161 #$i_unistd I_UNISTD
10162 EOCP
10163         $cat >>try.c <<'EOCP'
10164 #include <stdio.h>
10165 #ifdef I_MEMORY
10166 #  include <memory.h>
10167 #endif
10168 #ifdef I_STDLIB
10169 #  include <stdlib.h>
10170 #endif
10171 #ifdef I_STRING
10172 #  include <string.h>
10173 #else
10174 #  include <strings.h>
10175 #endif
10176 #ifdef I_UNISTD
10177 #  include <unistd.h>  /* Needed for NetBSD */
10178 #endif
10179 int main()
10180 {
10181 char buf[128], abc[128];
10182 char *b;
10183 int len;
10184 int off;
10185 int align;
10186
10187 bcopy("abcdefghijklmnopqrstuvwxyz0123456789", abc, 36);
10188
10189 for (align = 7; align >= 0; align--) {
10190         for (len = 36; len; len--) {
10191                 b = buf+align;
10192                 bcopy(abc, b, len);
10193                 for (off = 1; off <= len; off++) {
10194                         bcopy(b, b+off, len);
10195                         bcopy(b+off, b, len);
10196                         if (bcmp(b, abc, len))
10197                                 exit(1);
10198                 }
10199         }
10200 }
10201 exit(0);
10202 }
10203 EOCP
10204         set try
10205         if eval $compile_ok; then
10206                 if ./try 2>/dev/null; then
10207                         echo "Yes, it can."
10208                         val="$define"
10209                 else
10210                         echo "It can't, sorry."
10211                         case "$d_memmove" in
10212                         "$define") echo "But that's Ok since you have memmove()." ;;
10213                         esac
10214                 fi
10215         else
10216                 echo "(I can't compile the test program, so we'll assume not...)"
10217                 case "$d_memmove" in
10218                 "$define") echo "But that's Ok since you have memmove()." ;;
10219                 esac
10220         fi
10221         ;;
10222 esac
10223 $rm -f try.* try core
10224 set d_safebcpy
10225 eval $setvar
10226
10227 : can memcpy handle overlapping blocks?
10228 val="$undef"
10229 case "$d_memcpy" in
10230 "$define")
10231         echo " "
10232         echo "Checking to see if your memcpy() can do overlapping copies..." >&4
10233         $cat >try.c <<EOCP
10234 #$i_memory I_MEMORY
10235 #$i_stdlib I_STDLIB
10236 #$i_string I_STRING
10237 #$i_unistd I_UNISTD
10238 EOCP
10239         $cat >>try.c <<'EOCP'
10240 #include <stdio.h>
10241 #ifdef I_MEMORY
10242 #  include <memory.h>
10243 #endif
10244 #ifdef I_STDLIB
10245 #  include <stdlib.h>
10246 #endif
10247 #ifdef I_STRING
10248 #  include <string.h>
10249 #else
10250 #  include <strings.h>
10251 #endif
10252 #ifdef I_UNISTD
10253 #  include <unistd.h>  /* Needed for NetBSD */
10254 #endif
10255 int main()
10256 {
10257 char buf[128], abc[128];
10258 char *b;
10259 int len;
10260 int off;
10261 int align;
10262
10263 /* Copy "abcde..." string to char abc[] so that gcc doesn't
10264    try to store the string in read-only memory. */
10265 memcpy(abc, "abcdefghijklmnopqrstuvwxyz0123456789", 36);
10266
10267 for (align = 7; align >= 0; align--) {
10268         for (len = 36; len; len--) {
10269                 b = buf+align;
10270                 memcpy(b, abc, len);
10271                 for (off = 1; off <= len; off++) {
10272                         memcpy(b+off, b, len);
10273                         memcpy(b, b+off, len);
10274                         if (memcmp(b, abc, len))
10275                                 exit(1);
10276                 }
10277         }
10278 }
10279 exit(0);
10280 }
10281 EOCP
10282         set try
10283         if eval $compile_ok; then
10284                 if ./try 2>/dev/null; then
10285                         echo "Yes, it can."
10286                         val="$define"
10287                 else
10288                         echo "It can't, sorry."
10289                         case "$d_memmove" in
10290                         "$define") echo "But that's Ok since you have memmove()." ;;
10291                         esac
10292                 fi
10293         else
10294                 echo "(I can't compile the test program, so we'll assume not...)"
10295                 case "$d_memmove" in
10296                 "$define") echo "But that's Ok since you have memmove()." ;;
10297                 esac
10298         fi
10299         ;;
10300 esac
10301 $rm -f try.* try core
10302 set d_safemcpy
10303 eval $setvar
10304
10305 : can memcmp be trusted to compare relative magnitude?
10306 val="$undef"
10307 case "$d_memcmp" in
10308 "$define")
10309         echo " "
10310         echo "Checking if your memcmp() can compare relative magnitude..." >&4
10311         $cat >try.c <<EOCP
10312 #$i_memory I_MEMORY
10313 #$i_stdlib I_STDLIB
10314 #$i_string I_STRING
10315 #$i_unistd I_UNISTD
10316 EOCP
10317         $cat >>try.c <<'EOCP'
10318 #include <stdio.h>
10319 #ifdef I_MEMORY
10320 #  include <memory.h>
10321 #endif
10322 #ifdef I_STDLIB
10323 #  include <stdlib.h>
10324 #endif
10325 #ifdef I_STRING
10326 #  include <string.h>
10327 #else
10328 #  include <strings.h>
10329 #endif
10330 #ifdef I_UNISTD
10331 #  include <unistd.h>  /* Needed for NetBSD */
10332 #endif
10333 int main()
10334 {
10335 char a = -1;
10336 char b = 0;
10337 if ((a < b) && memcmp(&a, &b, 1) < 0)
10338         exit(1);
10339 exit(0);
10340 }
10341 EOCP
10342         set try
10343         if eval $compile_ok; then
10344                 if ./try 2>/dev/null; then
10345                         echo "Yes, it can."
10346                         val="$define"
10347                 else
10348                         echo "No, it can't (it uses signed chars)."
10349                 fi
10350         else
10351                 echo "(I can't compile the test program, so we'll assume not...)"
10352         fi
10353         ;;
10354 esac
10355 $rm -f try.* try core
10356 set d_sanemcmp
10357 eval $setvar
10358
10359 : see if select exists
10360 set select d_select
10361 eval $inlibc
10362
10363 : see if semctl exists
10364 set semctl d_semctl
10365 eval $inlibc
10366
10367 : see if semget exists
10368 set semget d_semget
10369 eval $inlibc
10370
10371 : see if semop exists
10372 set semop d_semop
10373 eval $inlibc
10374
10375 : see how much of the 'sem*(2)' library is present.
10376 h_sem=true
10377 echo " "
10378 case "$d_semctl$d_semget$d_semop" in
10379 *"$undef"*) h_sem=false;;
10380 esac
10381 case "$osname" in
10382 freebsd)
10383     case "`ipcs 2>&1`" in
10384     "SVID messages"*"not configured"*)
10385         echo "Your $osname does not have the sem*(2) configured." >&4
10386         h_sem=false
10387         val="$undef"
10388         set semctl d_semctl
10389         eval $setvar
10390         set semget d_semget
10391         eval $setvar
10392         set semop d_semop
10393         eval $setvar
10394         ;;
10395     esac
10396     ;;
10397 esac
10398 : we could also check for sys/ipc.h ...
10399 if $h_sem && $test `./findhdr sys/sem.h`; then
10400         echo "You have the full sem*(2) library." >&4
10401         val="$define"
10402 else
10403         echo "You don't have the full sem*(2) library." >&4
10404         val="$undef"
10405 fi
10406 set d_sem
10407 eval $setvar
10408
10409 : see whether sys/sem.h defines union semun
10410 echo " "
10411 $cat > try.c <<'END'
10412 #include <sys/types.h>
10413 #include <sys/ipc.h>
10414 #include <sys/sem.h>
10415 int main () { union semun semun; semun.buf = 0; }
10416 END
10417 set try
10418 if eval $compile; then
10419     echo "You have union semun in <sys/sem.h>." >&4
10420     val="$define"
10421 else
10422     echo "You do not have union semun in <sys/sem.h>." >&4
10423     val="$undef"
10424 fi
10425 $rm -f try try.c try.h
10426 set d_union_semun
10427 eval $setvar
10428
10429 : see how to do semctl IPC_STAT
10430 case "$d_sem" in
10431 $define)
10432     : see whether semctl IPC_STAT can use union semun
10433     echo " "
10434     $cat > try.h <<END
10435 #ifndef S_IRUSR
10436 #   ifdef S_IREAD
10437 #       define S_IRUSR S_IREAD
10438 #       define S_IWUSR S_IWRITE
10439 #       define S_IXUSR S_IEXEC
10440 #   else
10441 #       define S_IRUSR 0400
10442 #       define S_IWUSR 0200
10443 #       define S_IXUSR 0100
10444 #   endif
10445 #   define S_IRGRP (S_IRUSR>>3)
10446 #   define S_IWGRP (S_IWUSR>>3)
10447 #   define S_IXGRP (S_IXUSR>>3)
10448 #   define S_IROTH (S_IRUSR>>6)
10449 #   define S_IWOTH (S_IWUSR>>6)
10450 #   define S_IXOTH (S_IXUSR>>6)
10451 #endif
10452 #ifndef S_IRWXU
10453 #   define S_IRWXU (S_IRUSR|S_IWUSR|S_IXUSR)
10454 #   define S_IRWXG (S_IRGRP|S_IWGRP|S_IXGRP)
10455 #   define S_IRWXO (S_IROTH|S_IWOTH|S_IXOTH)
10456 #endif
10457 END
10458
10459     $cat > try.c <<END
10460 #include <sys/types.h>
10461 #include <sys/ipc.h>
10462 #include <sys/sem.h>
10463 #include <sys/stat.h>
10464 #include <stdio.h>
10465 #include <errno.h>
10466 #include "try.h"
10467 #ifndef errno
10468 extern int errno;
10469 #endif
10470 #$d_union_semun HAS_UNION_SEMUN
10471 int main() {
10472     union semun
10473 #ifndef HAS_UNION_SEMUN
10474     {
10475         int val;
10476         struct semid_ds *buf;
10477         unsigned short *array;
10478     }
10479 #endif
10480     arg;
10481     int sem, st;
10482
10483 #if defined(IPC_PRIVATE) && defined(S_IRWXU) && defined(S_IRWXG) && defined(S_IRWXO) && defined(IPC_CREAT)
10484     sem = semget(IPC_PRIVATE, 1, S_IRWXU|S_IRWXG|S_IRWXO|IPC_CREAT);
10485     if (sem > -1) {
10486         struct semid_ds argbuf;
10487         arg.buf = &argbuf;
10488 #       ifdef IPC_STAT
10489         st = semctl(sem, 0, IPC_STAT, arg);
10490         if (st == 0)
10491             printf("semun\n");
10492         else
10493 #       endif /* IPC_STAT */
10494             printf("semctl IPC_STAT failed: errno = %d\n", errno);
10495 #       ifdef IPC_RMID
10496         if (semctl(sem, 0, IPC_RMID, arg) != 0)
10497 #       endif /* IPC_RMID */
10498             printf("semctl IPC_RMID failed: errno = %d\n", errno);
10499     } else
10500 #endif /* IPC_PRIVATE && ... */
10501         printf("semget failed: errno = %d\n", errno);
10502   return 0;
10503 }
10504 END
10505     val="$undef"
10506     set try
10507     if eval $compile; then
10508         xxx=`./try`
10509         case "$xxx" in
10510         semun) val="$define" ;;
10511         esac
10512     fi
10513     $rm -f try try.c
10514     set d_semctl_semun
10515     eval $setvar
10516     case "$d_semctl_semun" in
10517     $define)
10518         echo "You can use union semun for semctl IPC_STAT." >&4
10519         also='also'
10520         ;;
10521     *)  echo "You cannot use union semun for semctl IPC_STAT." >&4
10522         also=''
10523         ;;
10524     esac
10525
10526     : see whether semctl IPC_STAT can use struct semid_ds pointer
10527     $cat > try.c <<'END'
10528 #include <sys/types.h>
10529 #include <sys/ipc.h>
10530 #include <sys/sem.h>
10531 #include <sys/stat.h>
10532 #include "try.h"
10533 #include <stdio.h>
10534 #include <errno.h>
10535 #ifndef errno
10536 extern int errno;
10537 #endif
10538 int main() {
10539     struct semid_ds arg;
10540     int sem, st;
10541
10542 #if defined(IPC_PRIVATE) && defined(S_IRWXU) && defined(S_IRWXG) &&  defined(S_IRWXO) && defined(IPC_CREAT)
10543     sem = semget(IPC_PRIVATE, 1, S_IRWXU|S_IRWXG|S_IRWXO|IPC_CREAT);
10544     if (sem > -1) {
10545 #       ifdef IPC_STAT
10546         st = semctl(sem, 0, IPC_STAT, &arg);
10547         if (st == 0)
10548             printf("semid_ds\n");
10549         else
10550 #       endif /* IPC_STAT */
10551             printf("semctl IPC_STAT failed: errno = %d\n", errno);
10552 #       ifdef IPC_RMID
10553         if (semctl(sem, 0, IPC_RMID, &arg) != 0)
10554 #       endif /* IPC_RMID */
10555             printf("semctl IPC_RMID failed: errno = %d\n", errno);
10556     } else
10557 #endif /* IPC_PRIVATE && ... */
10558         printf("semget failed: errno = %d\n", errno);
10559
10560     return 0;
10561 }
10562 END
10563     val="$undef"
10564     set try
10565     if eval $compile; then
10566         xxx=`./try`
10567         case "$xxx" in
10568         semid_ds) val="$define" ;;
10569         esac
10570     fi
10571     $rm -f try try.c
10572     set d_semctl_semid_ds
10573     eval $setvar
10574     case "$d_semctl_semid_ds" in
10575     $define)
10576         echo "You can $also use struct semid_ds* for semctl IPC_STAT." >&4
10577         ;;
10578     *)  echo "You cannot use struct semid_ds* for semctl IPC_STAT." >&4
10579         ;;
10580     esac
10581     $rm -f try.h
10582     ;;
10583 *)  val="$undef"
10584
10585     # We do not have the full sem*(2) library, so assume we can not
10586     # use either.
10587
10588     set d_semctl_semun
10589     eval $setvar
10590
10591     set d_semctl_semid_ds
10592     eval $setvar
10593     ;;
10594 esac
10595
10596 : see if setegid exists
10597 set setegid d_setegid
10598 eval $inlibc
10599
10600 : see if seteuid exists
10601 set seteuid d_seteuid
10602 eval $inlibc
10603
10604 : see if setgrent exists
10605 set setgrent d_setgrent
10606 eval $inlibc
10607
10608 : see if sethostent exists
10609 set sethostent d_sethent
10610 eval $inlibc
10611
10612 : see if setlinebuf exists
10613 set setlinebuf d_setlinebuf
10614 eval $inlibc
10615
10616 : see if setlocale exists
10617 set setlocale d_setlocale
10618 eval $inlibc
10619
10620 : see if setnetent exists
10621 set setnetent d_setnent
10622 eval $inlibc
10623
10624 : see if setprotoent exists
10625 set setprotoent d_setpent
10626 eval $inlibc
10627
10628 : see if setpgid exists
10629 set setpgid d_setpgid
10630 eval $inlibc
10631
10632 : see if setpgrp2 exists
10633 set setpgrp2 d_setpgrp2
10634 eval $inlibc
10635
10636 : see if setpriority exists
10637 set setpriority d_setprior
10638 eval $inlibc
10639
10640 : see if setpwent exists
10641 set setpwent d_setpwent
10642 eval $inlibc
10643
10644 : see if setregid exists
10645 set setregid d_setregid
10646 eval $inlibc
10647 set setresgid d_setresgid
10648 eval $inlibc
10649
10650 : see if setreuid exists
10651 set setreuid d_setreuid
10652 eval $inlibc
10653 set setresuid d_setresuid
10654 eval $inlibc
10655
10656 : see if setrgid exists
10657 set setrgid d_setrgid
10658 eval $inlibc
10659
10660 : see if setruid exists
10661 set setruid d_setruid
10662 eval $inlibc
10663
10664 : see if setservent exists
10665 set setservent d_setsent
10666 eval $inlibc
10667
10668 : see if setsid exists
10669 set setsid d_setsid
10670 eval $inlibc
10671
10672 : see if setspent exists
10673 set setspent d_setspent
10674 eval $inlibc
10675
10676 : see if setvbuf exists
10677 set setvbuf d_setvbuf
10678 eval $inlibc
10679
10680 : see if sfio.h is available
10681 set sfio.h i_sfio
10682 eval $inhdr
10683
10684
10685 : see if sfio library is available
10686 case "$i_sfio" in
10687 $define)
10688         val=''
10689         set sfreserve val
10690         eval $inlibc
10691         ;;
10692 *)
10693         val="$undef"
10694         ;;
10695 esac
10696 : Ok, but do we want to use it.
10697 case "$val" in
10698 $define)
10699         case "$usesfio" in
10700         true|$define|[yY]*) dflt='y';;
10701         *) dflt='n';;
10702         esac
10703         echo "$package can use the sfio library, but it is experimental."
10704         rp="You seem to have sfio available, do you want to try using it?"
10705         . ./myread
10706         case "$ans" in
10707         y|Y) ;;
10708         *)      echo "Ok, avoiding sfio this time.  I'll use stdio instead."
10709                 val="$undef"
10710                 : Remove sfio from list of libraries to use
10711                 set `echo X $libs | $sed -e 's/-lsfio / /' -e 's/-lsfio$//'`
10712                 shift
10713                 libs="$*"
10714                 echo "libs = $libs" >&4
10715                 ;;
10716         esac
10717         ;;
10718 *)      case "$usesfio" in
10719         true|$define|[yY]*)
10720                 echo "Sorry, cannot find sfio on this machine" >&4
10721                 echo "Ignoring your setting of usesfio=$usesfio" >&4
10722                 ;;
10723         esac
10724         ;;
10725 esac
10726 set d_sfio
10727 eval $setvar
10728 case "$d_sfio" in
10729 $define) usesfio='true';;
10730 *) usesfio='false';;
10731 esac
10732
10733 : see if shmctl exists
10734 set shmctl d_shmctl
10735 eval $inlibc
10736
10737 : see if shmget exists
10738 set shmget d_shmget
10739 eval $inlibc
10740
10741 : see if shmat exists
10742 set shmat d_shmat
10743 eval $inlibc
10744 : see what shmat returns
10745 case "$d_shmat" in
10746 "$define")
10747         $cat >shmat.c <<'END'
10748 #include <sys/shm.h>
10749 void *shmat();
10750 END
10751         if $cc $ccflags -c shmat.c >/dev/null 2>&1; then
10752                 shmattype='void *'
10753         else
10754                 shmattype='char *'
10755         fi
10756         echo "and it returns ($shmattype)." >&4
10757         : see if a prototype for shmat is available
10758         xxx=`./findhdr sys/shm.h`
10759         $cppstdin $cppflags $cppminus < $xxx > shmat.c 2>/dev/null
10760         if $contains 'shmat.*(' shmat.c >/dev/null 2>&1; then
10761                 val="$define"
10762         else
10763                 val="$undef"
10764         fi
10765         $rm -f shmat.[co]
10766         ;;
10767 *)
10768         val="$undef"
10769         ;;
10770 esac
10771 set d_shmatprototype
10772 eval $setvar
10773
10774 : see if shmdt exists
10775 set shmdt d_shmdt
10776 eval $inlibc
10777
10778 : see how much of the 'shm*(2)' library is present.
10779 h_shm=true
10780 echo " "
10781 case "$d_shmctl$d_shmget$d_shmat$d_shmdt" in
10782 *"$undef"*) h_shm=false;;
10783 esac
10784 case "$osname" in
10785 freebsd)
10786     case "`ipcs 2>&1`" in
10787     "SVID shared memory"*"not configured"*)
10788         echo "Your $osname does not have the shm*(2) configured." >&4
10789         h_shm=false
10790         val="$undef"
10791         set shmctl d_shmctl
10792         evat $setvar
10793         set shmget d_shmget
10794         evat $setvar
10795         set shmat d_shmat
10796         evat $setvar
10797         set shmdt d_shmdt
10798         evat $setvar
10799         ;;
10800     esac
10801     ;;
10802 esac
10803 : we could also check for sys/ipc.h ...
10804 if $h_shm && $test `./findhdr sys/shm.h`; then
10805         echo "You have the full shm*(2) library." >&4
10806         val="$define"
10807 else
10808         echo "You don't have the full shm*(2) library." >&4
10809         val="$undef"
10810 fi
10811 set d_shm
10812 eval $setvar
10813
10814 echo " "
10815 : see if we have sigaction
10816 if set sigaction val -f d_sigaction; eval $csym; $val; then
10817         echo 'sigaction() found.' >&4
10818         $cat > try.c <<'EOP'
10819 #include <stdio.h>
10820 #include <sys/types.h>
10821 #include <signal.h>
10822 int main()
10823 {
10824     struct sigaction act, oact;
10825     act.sa_flags = 0;
10826     oact.sa_handler = 0;
10827     /* so that act and oact are used */
10828     exit(act.sa_flags == 0 &&  oact.sa_handler == 0);
10829 }
10830 EOP
10831         set try
10832         if eval $compile_ok; then
10833                 val="$define"
10834         else
10835                 echo "But you don't seem to have a useable struct sigaction." >&4
10836                 val="$undef"
10837         fi
10838 else
10839         echo 'sigaction NOT found.' >&4
10840         val="$undef"
10841 fi
10842 set d_sigaction; eval $setvar
10843 $rm -f try try$_o try.c
10844
10845 : see if sigsetjmp exists
10846 echo " "
10847 case "$d_sigsetjmp" in
10848 '')
10849         $cat >try.c <<'EOP'
10850 #include <setjmp.h>
10851 sigjmp_buf env;
10852 int set = 1;
10853 int main()
10854 {
10855         if (sigsetjmp(env,1))
10856                 exit(set);
10857         set = 0;
10858         siglongjmp(env, 1);
10859         exit(1);
10860 }
10861 EOP
10862         set try
10863         if eval $compile; then
10864                 if ./try >/dev/null 2>&1; then
10865                         echo "POSIX sigsetjmp found." >&4
10866                         val="$define"
10867                 else
10868                         $cat >&4 <<EOM
10869 Uh-Oh! You have POSIX sigsetjmp and siglongjmp, but they do not work properly!!
10870 I'll ignore them.
10871 EOM
10872                         val="$undef"
10873                 fi
10874         else
10875                 echo "sigsetjmp not found." >&4
10876                 val="$undef"
10877         fi
10878         ;;
10879 *) val="$d_sigsetjmp"
10880         case "$d_sigsetjmp" in
10881         $define) echo "POSIX sigsetjmp found." >&4;;
10882         $undef) echo "sigsetjmp not found." >&4;;
10883         esac
10884         ;;
10885 esac
10886 set d_sigsetjmp
10887 eval $setvar
10888 $rm -f try.c try
10889
10890 : see if sys/stat.h is available
10891 set sys/stat.h i_sysstat
10892 eval $inhdr
10893
10894
10895 : see if stat knows about block sizes
10896 echo " "
10897 echo "Checking to see if your struct stat has st_blocks field..." >&4
10898 set d_statblks stat st_blocks $i_sysstat sys/stat.h
10899 eval $hasfield
10900
10901
10902 : see if this is a sys/vfs.h system
10903 set sys/vfs.h i_sysvfs
10904 eval $inhdr
10905
10906
10907 : see if this is a sys/statfs.h system
10908 set sys/statfs.h i_sysstatfs
10909 eval $inhdr
10910
10911
10912 echo " "
10913 echo "Checking to see if your system supports struct statfs..." >&4
10914 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
10915 eval $hasstruct
10916 case "$d_statfs_s" in
10917 "$define")      echo "Yes, it does."   ;;
10918 *)              echo "No, it doesn't." ;;
10919 esac
10920
10921
10922
10923 : see if struct statfs knows about f_flags
10924 case "$d_statfs_s" in
10925 define) 
10926         echo " "
10927         echo "Checking to see if your struct statfs has f_flags field..." >&4
10928         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
10929         eval $hasfield
10930         ;;
10931 *)      val="$undef"
10932         set d_statfs_f_flags
10933         eval $setvar
10934         ;;
10935 esac
10936 case "$d_statfs_f_flags" in
10937 "$define")      echo "Yes, it does."   ;;
10938 *)              echo "No, it doesn't." ;;
10939 esac
10940
10941 : see if _ptr and _cnt from stdio act std
10942 echo " "
10943 if $contains '_IO_fpos_t' `./findhdr stdio.h` `./findhdr libio.h` >/dev/null 2>&1 ; then
10944         echo "(Looks like you have stdio.h from Linux.)"
10945         case "$stdio_ptr" in
10946         '') stdio_ptr='((fp)->_IO_read_ptr)'
10947                 ptr_lval=$define
10948                 ;;
10949         *)      ptr_lval=$d_stdio_ptr_lval;;
10950         esac
10951         case "$stdio_cnt" in
10952         '') stdio_cnt='((fp)->_IO_read_end - (fp)->_IO_read_ptr)'
10953                 cnt_lval=$undef
10954                 ;;
10955         *)      cnt_lval=$d_stdio_cnt_lval;;
10956         esac
10957         case "$stdio_base" in
10958         '') stdio_base='((fp)->_IO_read_base)';;
10959         esac
10960         case "$stdio_bufsiz" in
10961         '') stdio_bufsiz='((fp)->_IO_read_end - (fp)->_IO_read_base)';;
10962         esac
10963 else
10964         case "$stdio_ptr" in
10965         '') stdio_ptr='((fp)->_ptr)'
10966                 ptr_lval=$define
10967                 ;;
10968         *)      ptr_lval=$d_stdio_ptr_lval;;
10969         esac
10970         case "$stdio_cnt" in
10971         '') stdio_cnt='((fp)->_cnt)'
10972                 cnt_lval=$define
10973                 ;;
10974         *)      cnt_lval=$d_stdio_cnt_lval;;
10975         esac
10976         case "$stdio_base" in
10977         '') stdio_base='((fp)->_base)';;
10978         esac
10979         case "$stdio_bufsiz" in
10980         '') stdio_bufsiz='((fp)->_cnt + (fp)->_ptr - (fp)->_base)';;
10981         esac
10982 fi
10983 : test whether _ptr and _cnt really work
10984 echo "Checking how std your stdio is..." >&4
10985 $cat >try.c <<EOP
10986 #include <stdio.h>
10987 #define FILE_ptr(fp)    $stdio_ptr
10988 #define FILE_cnt(fp)    $stdio_cnt
10989 int main() {
10990         FILE *fp = fopen("try.c", "r");
10991         char c = getc(fp);
10992         if (
10993                 18 <= FILE_cnt(fp) &&
10994                 strncmp(FILE_ptr(fp), "include <stdio.h>\n", 18) == 0
10995         )
10996                 exit(0);
10997         exit(1);
10998 }
10999 EOP
11000 val="$undef"
11001 set try
11002 if eval $compile; then
11003         if ./try; then
11004                 echo "Your stdio acts pretty std."
11005                 val="$define"
11006         else
11007                 echo "Your stdio isn't very std."
11008         fi
11009 else
11010         echo "Your stdio doesn't appear very std."
11011 fi
11012 $rm -f try.c try
11013 set d_stdstdio
11014 eval $setvar
11015
11016 : Can _ptr be used as an lvalue?
11017 case "$d_stdstdio$ptr_lval" in
11018 $define$define) val=$define ;;
11019 *) val=$undef ;;
11020 esac
11021 set d_stdio_ptr_lval
11022 eval $setvar
11023
11024 : Can _cnt be used as an lvalue?
11025 case "$d_stdstdio$cnt_lval" in
11026 $define$define) val=$define ;;
11027 *) val=$undef ;;
11028 esac
11029 set d_stdio_cnt_lval
11030 eval $setvar
11031
11032 : see if _base is also standard
11033 val="$undef"
11034 case "$d_stdstdio" in
11035 $define)
11036         $cat >try.c <<EOP
11037 #include <stdio.h>
11038 #define FILE_base(fp)   $stdio_base
11039 #define FILE_bufsiz(fp) $stdio_bufsiz
11040 int main() {
11041         FILE *fp = fopen("try.c", "r");
11042         char c = getc(fp);
11043         if (
11044                 19 <= FILE_bufsiz(fp) &&
11045                 strncmp(FILE_base(fp), "#include <stdio.h>\n", 19) == 0
11046         )
11047                 exit(0);
11048         exit(1);
11049 }
11050 EOP
11051         set try
11052         if eval $compile; then
11053                 if ./try; then
11054                         echo "And its _base field acts std."
11055                         val="$define"
11056                 else
11057                         echo "But its _base field isn't std."
11058                 fi
11059         else
11060                 echo "However, it seems to be lacking the _base field."
11061         fi
11062         $rm -f try.c try
11063         ;;
11064 esac
11065 set d_stdiobase
11066 eval $setvar
11067
11068 $cat >&4 <<EOM
11069 Checking how to access stdio streams by file descriptor number...
11070 EOM
11071 case "$stdio_stream_array" in
11072 '')     $cat >try.c <<EOCP
11073 #include <stdio.h>
11074 int main() {
11075   if (&STDIO_STREAM_ARRAY[fileno(stdin)] == stdin)
11076     printf("yes\n");
11077 }
11078 EOCP
11079         for s in _iob __iob __sF
11080         do
11081                 set try -DSTDIO_STREAM_ARRAY=$s
11082                 if eval $compile; then
11083                         case "`./try$exe_ext`" in
11084                         yes)    stdio_stream_array=$s; break ;;
11085                         esac
11086                 fi
11087         done
11088         $rm -f try.* try$exe_ext
11089 esac
11090 case "$stdio_stream_array" in
11091 '')     $cat >&4 <<EOM
11092 I can't figure out how to access stdio streams by file descriptor number.
11093 EOM
11094         d_stdio_stream_array="$undef"
11095         ;;
11096 *)      $cat >&4 <<EOM
11097 You can access stdio streams by file descriptor number by the $stdio_stream_array array.
11098 EOM
11099         d_stdio_stream_array="$define"
11100         ;;
11101 esac
11102
11103 : see if strcoll exists
11104 set strcoll d_strcoll
11105 eval $inlibc
11106
11107 : check for structure copying
11108 echo " "
11109 echo "Checking to see if your C compiler can copy structs..." >&4
11110 $cat >try.c <<'EOCP'
11111 int main()
11112 {
11113         struct blurfl {
11114                 int dyick;
11115         } foo, bar;
11116
11117         foo = bar;
11118 }
11119 EOCP
11120 if $cc -c try.c >/dev/null 2>&1 ; then
11121         val="$define"
11122         echo "Yup, it can."
11123 else
11124         val="$undef"
11125         echo "Nope, it can't."
11126 fi
11127 set d_strctcpy
11128 eval $setvar
11129 $rm -f try.*
11130
11131 : see if strerror and/or sys_errlist[] exist
11132 echo " "
11133 if test "X$d_strerror" = X -o "X$d_syserrlst" = X; then
11134     if set strerror val -f d_strerror; eval $csym; $val; then
11135                 echo 'strerror() found.' >&4
11136                 d_strerror="$define"
11137                 d_strerrm='strerror(e)'
11138                 if set sys_errlist val -a d_syserrlst; eval $csym; $val; then   
11139                         echo "(You also have sys_errlist[], so we could roll our own strerror.)" 
11140                         d_syserrlst="$define"
11141                 else
11142                         echo "(Since you don't have sys_errlist[], sterror() is welcome.)"
11143                         d_syserrlst="$undef"
11144                 fi
11145     elif xxx=`./findhdr string.h`; test "$xxx" || xxx=`./findhdr strings.h`; \
11146                         $contains '#[   ]*define.*strerror' "$xxx" >/dev/null 2>&1; then
11147                 echo 'strerror() found in string header.' >&4
11148                 d_strerror="$define"
11149                 d_strerrm='strerror(e)'
11150                 if set sys_errlist val -a d_syserrlst; eval $csym; $val; then   
11151                         echo "(Most probably, strerror() uses sys_errlist[] for descriptions.)"
11152                                 d_syserrlst="$define"
11153                 else
11154                         echo "(You don't appear to have any sys_errlist[], how can this be?)"
11155                         d_syserrlst="$undef"
11156                 fi
11157     elif set sys_errlist val -a d_syserrlst; eval $csym; $val; then
11158                 echo "strerror() not found, but you have sys_errlist[] so we'll use that." >&4
11159                 d_strerror="$undef"
11160                 d_syserrlst="$define"
11161                 d_strerrm='((e)<0||(e)>=sys_nerr?"unknown":sys_errlist[e])'
11162     else
11163                 echo 'strerror() and sys_errlist[] NOT found.' >&4
11164                 d_strerror="$undef"
11165                 d_syserrlst="$undef"
11166                 d_strerrm='"unknown"'
11167     fi
11168 fi
11169
11170 : see if strtod exists
11171 set strtod d_strtod
11172 eval $inlibc
11173
11174 : see if strtol exists
11175 set strtol d_strtol
11176 eval $inlibc
11177
11178 : see if strtold exists
11179 set strtold d_strtold
11180 eval $inlibc
11181
11182 : see if strtoll exists
11183 set strtoll d_strtoll
11184 eval $inlibc
11185
11186 : see if strtoul exists
11187 set strtoul d_strtoul
11188 eval $inlibc
11189
11190 : see if strtoull exists
11191 set strtoull d_strtoull
11192 eval $inlibc
11193
11194 : see if strtouq exists
11195 set strtouq d_strtouq
11196 eval $inlibc
11197
11198 : see if strxfrm exists
11199 set strxfrm d_strxfrm
11200 eval $inlibc
11201
11202 : see if symlink exists
11203 set symlink d_symlink
11204 eval $inlibc
11205
11206 : see if syscall exists
11207 set syscall d_syscall
11208 eval $inlibc
11209
11210 : see if sysconf exists
11211 set sysconf d_sysconf
11212 eval $inlibc
11213
11214 : see if system exists
11215 set system d_system
11216 eval $inlibc
11217
11218 : see if tcgetpgrp exists
11219 set tcgetpgrp d_tcgetpgrp
11220 eval $inlibc
11221
11222 : see if tcsetpgrp exists
11223 set tcsetpgrp d_tcsetpgrp
11224 eval $inlibc
11225
11226 : see if prototype for telldir is available
11227 echo " "
11228 set d_telldirproto telldir $i_systypes sys/types.h $i_dirent dirent.h
11229 eval $hasproto
11230
11231 : see if this is a sys/times.h system
11232 set sys/times.h i_systimes
11233 eval $inhdr
11234
11235 : see if times exists
11236 echo " "
11237 if set times val -f d_times; eval $csym; $val; then
11238         echo 'times() found.' >&4
11239         d_times="$define"
11240         inc=''
11241         case "$i_systimes" in
11242         "$define") inc='sys/times.h';;
11243         esac
11244         rp="What is the type returned by times() on this system?"
11245         set clock_t clocktype long stdio.h sys/types.h $inc
11246         eval $typedef_ask
11247 else
11248         echo 'times() NOT found, hope that will do.' >&4
11249         d_times="$undef"
11250         clocktype='int'
11251 fi
11252
11253 : see if truncate exists
11254 set truncate d_truncate
11255 eval $inlibc
11256
11257 : see if tzname[] exists
11258 echo " "
11259 if set tzname val -a d_tzname; eval $csym; $val; then
11260         val="$define"
11261         echo 'tzname[] found.' >&4
11262 else
11263         val="$undef"
11264         echo 'tzname[] NOT found.' >&4
11265 fi
11266 set d_tzname
11267 eval $setvar
11268
11269 : see if umask exists
11270 set umask d_umask
11271 eval $inlibc
11272
11273 : see if ustat exists
11274 set ustat d_ustat
11275 eval $inlibc
11276
11277 : backward compatibility for d_hvfork
11278 if test X$d_hvfork != X; then
11279         d_vfork="$d_hvfork"
11280         d_hvfork=''
11281 fi
11282 : see if there is a vfork
11283 val=''
11284 set vfork val
11285 eval $inlibc
11286
11287 : Ok, but do we want to use it. vfork is reportedly unreliable in 
11288 : perl on Solaris 2.x, and probably elsewhere.
11289 case "$val" in
11290 $define)
11291         echo " "
11292         case "$usevfork" in
11293         false) dflt='n';;
11294         *) dflt='y';;
11295         esac
11296         cat <<'EOM'
11297  
11298 Perl can only use a vfork() that doesn't suffer from strict
11299 restrictions on calling functions or modifying global data in
11300 the child.  For example, glibc-2.1 contains such a vfork()
11301 that is unsuitable.  If your system provides a proper fork()
11302 call, chances are that you do NOT want perl to use vfork().
11303
11304 EOM
11305         rp="Do you still want to use vfork()?"
11306         . ./myread
11307         case "$ans" in
11308         y|Y) ;;
11309         *)
11310                 echo "Ok, we won't use vfork()."
11311                 val="$undef"
11312                 ;;
11313         esac
11314         ;;
11315 esac
11316 set d_vfork
11317 eval $setvar
11318 case "$d_vfork" in
11319 $define) usevfork='true';;
11320 *) usevfork='false';;
11321 esac
11322
11323 : see if this is an sysdir system
11324 set sys/dir.h i_sysdir
11325 eval $inhdr
11326
11327 : see if this is an sysndir system
11328 set sys/ndir.h i_sysndir
11329 eval $inhdr
11330
11331 : see if closedir exists
11332 set closedir d_closedir
11333 eval $inlibc
11334
11335 case "$d_closedir" in
11336 "$define")
11337         echo " "
11338         echo "Checking whether closedir() returns a status..." >&4
11339         cat > closedir.c <<EOM
11340 #$i_dirent I_DIRENT             /**/
11341 #$i_sysdir I_SYS_DIR            /**/
11342 #$i_sysndir I_SYS_NDIR          /**/
11343 #$i_systypes I_SYS_TYPES        /**/
11344
11345 #if defined(I_SYS_TYPES)
11346 #include <sys/types.h>
11347 #endif
11348 #if defined(I_DIRENT)
11349 #include <dirent.h>
11350 #if defined(NeXT) && defined(I_SYS_DIR) /* NeXT needs dirent + sys/dir.h */
11351 #include <sys/dir.h>
11352 #endif
11353 #else
11354 #ifdef I_SYS_NDIR
11355 #include <sys/ndir.h>
11356 #else
11357 #ifdef I_SYS_DIR
11358 #ifdef hp9000s500
11359 #include <ndir.h>       /* may be wrong in the future */
11360 #else
11361 #include <sys/dir.h>
11362 #endif
11363 #endif
11364 #endif
11365 #endif 
11366 int main() { return closedir(opendir(".")); }
11367 EOM
11368         set closedir
11369         if eval $compile_ok; then
11370                 if ./closedir > /dev/null 2>&1 ; then
11371                         echo "Yes, it does."
11372                         val="$undef"
11373                 else
11374                         echo "No, it doesn't."
11375                         val="$define"
11376                 fi
11377         else
11378                 echo "(I can't seem to compile the test program--assuming it doesn't)"
11379                 val="$define"
11380         fi
11381         ;;
11382 *)
11383         val="$undef";
11384         ;;
11385 esac
11386 set d_void_closedir
11387 eval $setvar
11388 $rm -f closedir*
11389 : check for volatile keyword
11390 echo " "
11391 echo 'Checking to see if your C compiler knows about "volatile"...' >&4
11392 $cat >try.c <<'EOCP'
11393 int main()
11394 {
11395         typedef struct _goo_struct goo_struct;
11396         goo_struct * volatile goo = ((goo_struct *)0);
11397         struct _goo_struct {
11398                 long long_int;
11399                 int reg_int;
11400                 char char_var;
11401         };
11402         typedef unsigned short foo_t;
11403         char *volatile foo;
11404         volatile int bar;
11405         volatile foo_t blech;
11406         foo = foo;
11407 }
11408 EOCP
11409 if $cc -c $ccflags try.c >/dev/null 2>&1 ; then
11410         val="$define"
11411         echo "Yup, it does."
11412 else
11413         val="$undef"
11414         echo "Nope, it doesn't."
11415 fi
11416 set d_volatile
11417 eval $setvar
11418 $rm -f try.*
11419
11420 : see if there is a wait4
11421 set wait4 d_wait4
11422 eval $inlibc
11423
11424 : see if waitpid exists
11425 set waitpid d_waitpid
11426 eval $inlibc
11427
11428 : see if wcstombs exists
11429 set wcstombs d_wcstombs
11430 eval $inlibc
11431
11432 : see if wctomb exists
11433 set wctomb d_wctomb
11434 eval $inlibc
11435
11436 : preserve RCS keywords in files with variable substitution, grrr
11437 Date='$Date'
11438 Id='$Id'
11439 Log='$Log'
11440 RCSfile='$RCSfile'
11441 Revision='$Revision'
11442
11443 case "$crosscompile" in
11444 ''|[nN]*) crosscompile="$undef" ;;
11445 esac
11446
11447 case "$osname" in
11448 next|rhapsody) multiarch="$define" ;;
11449 esac
11450 case "$multiarch" in
11451 ''|[nN]*) multiarch="$undef" ;;
11452 esac
11453
11454 : check for alignment requirements
11455 echo " "
11456 case "$crosscompile$multiarch" in
11457 *$define*)
11458         $cat <<EOM
11459 You seem to be either cross-compiling or doing a multiarchitecture build,
11460 skipping the memory alignment check.
11461
11462 EOM
11463         case "$alignbytes" in
11464         '') alignbytes=8 ;;
11465         esac
11466         ;;
11467 *)
11468         case "$alignbytes" in
11469         '') echo "Checking alignment constraints..." >&4
11470                 $cat >try.c <<'EOCP'
11471 #include <stdio.h>
11472 struct foobar {
11473         char foo;
11474         double bar;
11475 } try_algn;
11476 int main()
11477 {
11478     printf("%d\n", (int)((char *)&try_algn.bar - (char *)&try_algn.foo));
11479     return(0);
11480 }
11481 EOCP
11482                 set try
11483                 if eval $compile_ok; then
11484                         dflt=`./try`
11485                 else
11486                         dflt='8'
11487                         echo "(I can't seem to compile the test program...)"
11488                 fi
11489                 ;;
11490         *) dflt="$alignbytes"
11491                 ;;
11492         esac
11493         rp="Doubles must be aligned on a how-many-byte boundary?"
11494         . ./myread
11495         alignbytes="$ans"
11496         $rm -f try.c try
11497         ;;
11498 esac
11499
11500
11501 : check for ordering of bytes in a long
11502 echo " "
11503 case "$crosscompile$multiarch" in
11504 *$define*)
11505         $cat <<EOM
11506 You seem to be either cross-compiling or doing a multiarchitecture build,
11507 skipping the byteorder check.
11508
11509 EOM
11510         byteorder='0xffff'
11511         ;;
11512 *)
11513         case "$byteorder" in
11514         '')
11515                 $cat <<'EOM'
11516 In the following, larger digits indicate more significance.  A big-endian
11517 machine like a Pyramid or a Motorola 680?0 chip will come out to 4321. A
11518 little-endian machine like a Vax or an Intel 80?86 chip would be 1234. Other
11519 machines may have weird orders like 3412.  A Cray will report 87654321,
11520 an Alpha will report 12345678. If the test program works the default is
11521 probably right.
11522 I'm now running the test program...
11523 EOM
11524                 $cat >try.c <<'EOCP'
11525 #include <stdio.h>
11526 int main()
11527 {
11528         int i;
11529         union {
11530                 unsigned long l;
11531                 char c[sizeof(long)];
11532         } u;
11533
11534         if (sizeof(long) > 4)
11535                 u.l = (0x08070605L << 32) | 0x04030201L;
11536         else
11537                 u.l = 0x04030201L;
11538         for (i = 0; i < sizeof(long); i++)
11539                 printf("%c", u.c[i]+'0');
11540         printf("\n");
11541         exit(0);
11542 }
11543 EOCP
11544                 xxx_prompt=y
11545                 set try
11546                 if eval $compile && ./try > /dev/null; then
11547                         dflt=`./try`
11548                         case "$dflt" in
11549                         [1-4][1-4][1-4][1-4]|12345678|87654321)
11550                                 echo "(The test program ran ok.)"
11551                                 echo "byteorder=$dflt"
11552                                 xxx_prompt=n
11553                         ;;
11554                         ????|????????) echo "(The test program ran ok.)" ;;
11555                         *) echo "(The test program didn't run right for some reason.)" ;;
11556                         esac
11557                 else
11558                         dflt='4321'
11559                         cat <<'EOM'
11560 (I can't seem to compile the test program.  Guessing big-endian...)
11561 EOM
11562                 fi
11563                 case "$xxx_prompt" in
11564                 y)
11565                         rp="What is the order of bytes in a long?"
11566                         . ./myread
11567                         byteorder="$ans"
11568                         ;;
11569                 *)      byteorder=$dflt
11570                         ;;
11571                 esac
11572                 ;;
11573         esac
11574         $rm -f try.c try
11575         ;;
11576 esac
11577
11578
11579 : how do we catenate cpp tokens here?
11580 echo " "
11581 echo "Checking to see how your cpp does stuff like catenate tokens..." >&4
11582 $cat >cpp_stuff.c <<'EOCP'
11583 #define RCAT(a,b)a/**/b
11584 #define ACAT(a,b)a ## b
11585 RCAT(Rei,ser)
11586 ACAT(Cir,cus)
11587 EOCP
11588 $cppstdin $cppflags $cppminus <cpp_stuff.c >cpp_stuff.out 2>&1
11589 if $contains 'Circus' cpp_stuff.out >/dev/null 2>&1; then
11590         echo "Oh!  Smells like ANSI's been here." >&4
11591         echo "We can catify or stringify, separately or together!"
11592         cpp_stuff=42
11593 elif $contains 'Reiser' cpp_stuff.out >/dev/null 2>&1; then
11594         echo "Ah, yes!  The good old days!" >&4
11595         echo "However, in the good old days we don't know how to stringify and"
11596         echo "catify at the same time."
11597         cpp_stuff=1
11598 else
11599         $cat >&4 <<EOM
11600 Hmm, I don't seem to be able to catenate tokens with your cpp.  You're going
11601 to have to edit the values of CAT[2-5] in config.h...
11602 EOM
11603         cpp_stuff="/* Help! How do we handle cpp_stuff? */*/"
11604 fi
11605 $rm -f cpp_stuff.*
11606
11607 : see if this is a db.h system
11608 set db.h i_db
11609 eval $inhdr
11610
11611 case "$i_db" in
11612 $define)
11613         : Check db version.
11614         echo " "
11615         echo "Checking Berkeley DB version ..." >&4
11616         $cat >try.c <<EOCP
11617 #$d_const HASCONST
11618 #ifndef HASCONST
11619 #define const
11620 #endif
11621 #include <sys/types.h>
11622 #include <stdio.h>
11623 #include <db.h>
11624 int main()
11625 {
11626 #ifdef DB_VERSION_MAJOR /* DB version >= 2 */
11627     int Major, Minor, Patch ;
11628     unsigned long Version ;
11629     (void)db_version(&Major, &Minor, &Patch) ;
11630     printf("You have Berkeley DB Version 2 or greater\n");
11631
11632     printf("db.h is from Berkeley DB Version %d.%d.%d\n",
11633                 DB_VERSION_MAJOR, DB_VERSION_MINOR, DB_VERSION_PATCH);
11634     printf("libdb is from Berkeley DB Version %d.%d.%d\n",
11635                 Major, Minor, Patch) ;
11636
11637     /* check that db.h & libdb are compatible */
11638     if (DB_VERSION_MAJOR != Major || DB_VERSION_MINOR != Minor || DB_VERSION_PATCH != Patch) {
11639         printf("db.h and libdb are incompatible\n") ;
11640         exit(3);        
11641     }
11642
11643     printf("db.h and libdb are compatible\n") ;
11644
11645     Version = DB_VERSION_MAJOR * 1000000 + DB_VERSION_MINOR * 1000
11646                 + DB_VERSION_PATCH ;
11647
11648     /* needs to be >= 2.3.4 */
11649     if (Version < 2003004) {
11650     /* if (DB_VERSION_MAJOR == 2 && DB_VERSION_MINOR == 0 && DB_VERSION_PATCH < 5) { */
11651         printf("but Perl needs Berkeley DB 2.3.4 or greater\n") ;
11652         exit(2);        
11653     }
11654
11655     exit(0);
11656 #else
11657 #if defined(_DB_H_) && defined(BTREEMAGIC) && defined(HASHMAGIC)
11658     printf("You have Berkeley DB Version 1\n");
11659     exit(0);    /* DB version < 2: the coast is clear. */
11660 #else
11661     exit(1);    /* <db.h> not Berkeley DB? */
11662 #endif
11663 #endif
11664 }
11665 EOCP
11666         set try
11667         if eval $compile_ok && ./try; then
11668                 echo 'Looks OK.' >&4
11669         else
11670                 echo "I can't use Berkeley DB with your <db.h>.  I'll disable Berkeley DB." >&4
11671                 i_db=$undef
11672                 case " $libs " in
11673                 *"-ldb "*)
11674                         : Remove db from list of libraries to use
11675                         echo "Removing unusable -ldb from library list" >&4
11676                         set `echo X $libs | $sed -e 's/-ldb / /' -e 's/-ldb$//'`
11677                         shift
11678                         libs="$*"
11679                         echo "libs = $libs" >&4
11680                         ;;
11681                 esac
11682         fi
11683         $rm -f try.*
11684         ;;
11685 esac
11686
11687 case "$i_db" in
11688 define)
11689         : Check the return type needed for hash 
11690         echo " "
11691         echo "Checking return type needed for hash for Berkeley DB ..." >&4
11692         $cat >try.c <<EOCP
11693 #$d_const HASCONST
11694 #ifndef HASCONST
11695 #define const
11696 #endif
11697 #include <sys/types.h>
11698 #include <db.h>
11699
11700 #ifndef DB_VERSION_MAJOR
11701 u_int32_t hash_cb (ptr, size)
11702 const void *ptr;
11703 size_t size;
11704 {
11705 }
11706 HASHINFO info;
11707 int main()
11708 {
11709         info.hash = hash_cb;
11710 }
11711 #endif
11712 EOCP
11713         if $cc $ccflags -c try.c >try.out 2>&1 ; then
11714                 if $contains warning try.out >>/dev/null 2>&1 ; then
11715                         db_hashtype='int'
11716                 else
11717                         db_hashtype='u_int32_t'
11718                 fi
11719         else
11720                 : XXX Maybe we should just give up here.
11721                 db_hashtype=u_int32_t
11722                 $cat try.out >&4
11723                 echo "Help:  I can't seem to compile the db test program." >&4
11724                 echo "Something's wrong, but I'll assume you use $db_hashtype." >&4
11725         fi
11726         $rm -f try.*
11727         echo "Your version of Berkeley DB uses $db_hashtype for hash."
11728         ;;
11729 *)      db_hashtype=u_int32_t
11730         ;;
11731 esac
11732 case "$i_db" in
11733 define)
11734         : Check the return type needed for prefix 
11735         echo " "
11736         echo "Checking return type needed for prefix for Berkeley DB ..." >&4
11737         cat >try.c <<EOCP
11738 #$d_const HASCONST
11739 #ifndef HASCONST
11740 #define const
11741 #endif
11742 #include <sys/types.h>
11743 #include <db.h>
11744
11745 #ifndef DB_VERSION_MAJOR
11746 size_t prefix_cb (key1, key2)
11747 const DBT *key1;
11748 const DBT *key2;
11749 {
11750 }
11751 BTREEINFO info;
11752 int main()
11753 {
11754         info.prefix = prefix_cb;
11755 }
11756 #endif
11757 EOCP
11758         if $cc $ccflags -c try.c  >try.out 2>&1 ; then
11759                 if $contains warning try.out >>/dev/null 2>&1 ; then
11760                         db_prefixtype='int'
11761                 else
11762                         db_prefixtype='size_t'
11763                 fi
11764         else
11765                 db_prefixtype='size_t'
11766                 : XXX Maybe we should just give up here.
11767                 $cat try.out >&4
11768                 echo "Help:  I can't seem to compile the db test program." >&4
11769                 echo "Something's wrong, but I'll assume you use $db_prefixtype." >&4
11770         fi
11771         $rm -f try.*
11772         echo "Your version of Berkeley DB uses $db_prefixtype for prefix."
11773         ;;
11774 *)      db_prefixtype='size_t'
11775         ;;
11776 esac
11777
11778 : check for void type
11779 echo " "
11780 echo "Checking to see how well your C compiler groks the void type..." >&4
11781 case "$voidflags" in
11782 '')
11783         $cat >try.c <<'EOCP'
11784 #if TRY & 1
11785 void sub() {
11786 #else
11787 sub() {
11788 #endif
11789         extern void moo();      /* function returning void */
11790         void (*goo)();          /* ptr to func returning void */
11791 #if TRY & 8
11792         void *hue;              /* generic ptr */
11793 #endif
11794 #if TRY & 2
11795         void (*foo[10])();
11796 #endif
11797
11798 #if TRY & 4
11799         if(goo == moo) {
11800                 exit(0);
11801         }
11802 #endif
11803         exit(0);
11804 }
11805 int main() { sub(); }
11806 EOCP
11807         if $cc $ccflags -c -DTRY=$defvoidused try.c >.out 2>&1 ; then
11808                 voidflags=$defvoidused
11809         echo "Good.  It appears to support void to the level $package wants.">&4
11810                 if $contains warning .out >/dev/null 2>&1; then
11811                         echo "However, you might get some warnings that look like this:"
11812                         $cat .out
11813                 fi
11814         else
11815 echo "Hmm, your compiler has some difficulty with void. Checking further..." >&4
11816                 if $cc $ccflags -c -DTRY=1 try.c >/dev/null 2>&1; then
11817                         echo "It supports 1..."
11818                         if $cc $ccflags -c -DTRY=3 try.c >/dev/null 2>&1; then
11819                                 echo "It also supports 2..."
11820                                 if $cc $ccflags -c -DTRY=7 try.c >/dev/null 2>&1; then
11821                                         voidflags=7
11822                                         echo "And it supports 4 but not 8 definitely."
11823                                 else
11824                                         echo "It doesn't support 4..."
11825                                         if $cc $ccflags -c -DTRY=11 try.c >/dev/null 2>&1; then
11826                                                 voidflags=11
11827                                                 echo "But it supports 8."
11828                                         else
11829                                                 voidflags=3
11830                                                 echo "Neither does it support 8."
11831                                         fi
11832                                 fi
11833                         else
11834                                 echo "It does not support 2..."
11835                                 if $cc $ccflags -c -DTRY=13 try.c >/dev/null 2>&1; then
11836                                         voidflags=13
11837                                         echo "But it supports 4 and 8."
11838                                 else
11839                                         if $cc $ccflags -c -DTRY=5 try.c >/dev/null 2>&1; then
11840                                                 voidflags=5
11841                                                 echo "And it supports 4 but has not heard about 8."
11842                                         else
11843                                                 echo "However it supports 8 but not 4."
11844                                         fi
11845                                 fi
11846                         fi
11847                 else
11848                         echo "There is no support at all for void."
11849                         voidflags=0
11850                 fi
11851         fi
11852 esac
11853 case "$voidflags" in
11854 "$defvoidused") ;;
11855 *)      $cat >&4 <<'EOM'
11856   Support flag bits are:
11857     1: basic void declarations.
11858     2: arrays of pointers to functions returning void.
11859     4: operations between pointers to and addresses of void functions.
11860     8: generic void pointers.
11861 EOM
11862         dflt="$voidflags";
11863         rp="Your void support flags add up to what?"
11864         . ./myread
11865         voidflags="$ans"
11866         ;;
11867 esac
11868 $rm -f try.* .out
11869
11870
11871 : How can we generate normalized random numbers ?
11872 echo " "
11873 echo "Looking for a random number function..." >&4
11874 case "$randfunc" in
11875 '')
11876         if set drand48 val -f; eval $csym; $val; then
11877                 dflt="drand48"
11878                 echo "Good, found drand48()." >&4
11879         elif set random val -f; eval $csym; $val; then
11880                 dflt="random"
11881                 echo "OK, found random()." >&4
11882         else
11883                 dflt="rand"
11884                 echo "Yick, looks like I have to use rand()." >&4
11885         fi
11886         echo " "
11887         ;;
11888 *)
11889         dflt="$randfunc"
11890         ;;
11891 esac
11892 cont=true
11893
11894 case "$ccflags" in
11895 *-Dmy_rand=*|*-Dmy_srand=*)
11896         echo "Removing obsolete -Dmy_rand, -Dmy_srand, and -Drandbits from ccflags." >&4
11897         ccflags="`echo $ccflags | sed -e 's/-Dmy_rand=random/ /'`"
11898         ccflags="`echo $ccflags | sed -e 's/-Dmy_srand=srandom/ /'`"
11899         ccflags="`echo $ccflags | sed -e 's/-Drandbits=[0-9][0-9]*/ /'`"
11900         ;;
11901 esac
11902
11903 while $test "$cont"; do
11904         rp="Use which function to generate random numbers?"
11905         . ./myread
11906         if $test "$ans" = "$dflt"; then
11907                 : null
11908         else
11909                 randbits=''
11910         fi
11911         randfunc="$ans"
11912         if set $ans val -f; eval $csym; $val; then
11913                 cont=''
11914         else
11915                 dflt=y
11916                 rp="I cannot find function $ans. Use that name anyway?"
11917                 . ./myread
11918                 dflt=rand
11919                 case "$ans" in
11920                         [yY]*) cont='';;
11921                 esac
11922         fi
11923         case "$cont" in
11924         '')
11925                 case "$randfunc" in
11926                 drand48)
11927                         drand01="drand48()"
11928                         seedfunc="srand48"
11929                         randbits=48
11930                         randseedtype=long
11931                         ;;
11932                 rand|random)
11933                         case "$randbits" in
11934                         '')
11935 echo "Checking to see how many bits your $randfunc() function produces..." >&4
11936                                 $cat >try.c <<EOCP
11937 #$i_unistd I_UNISTD
11938 #$i_stdlib I_STDLIB
11939 #include <stdio.h>
11940 #ifdef I_UNISTD
11941 #  include <unistd.h>
11942 #endif
11943 #ifdef I_STDLIB
11944 #  include <stdlib.h>
11945 #endif
11946 int main()
11947 {
11948         register int i;
11949         register unsigned long tmp;
11950         register unsigned long max = 0L;
11951
11952         for (i = 1000; i; i--) {
11953                 tmp = (unsigned long) $randfunc();
11954                 if (tmp > max) max = tmp;
11955         }
11956         for (i = 0; max; i++)
11957                 max /= 2;
11958         printf("%d\n",i);
11959 }
11960 EOCP
11961                                 set try
11962                                 if eval $compile_ok; then
11963                                         dflt=`try`
11964                                 else
11965                                         dflt='?'
11966                                         echo "(I can't seem to compile the test program...)"
11967                                 fi
11968                                 ;;
11969                         *)
11970                                 dflt="$randbits"
11971                                 ;;
11972                         esac
11973                         rp="How many bits does your $randfunc() function produce?"
11974                         . ./myread
11975                         randbits="$ans"
11976                         $rm -f try.c try
11977                         drand01="($randfunc() / (double) ((unsigned long)1 << $randbits))"
11978                         seedfunc="s$randfunc"
11979                         randseedtype=unsigned
11980                         ;;
11981                 *)
11982                         dflt="31"
11983                         rp="How many bits does your $randfunc() function produce?"
11984                         . ./myread
11985                         randbits="$ans"
11986                         seedfunc="s$randfunc"
11987                         drand01="($randfunc() / (double) ((unsigned long)1 << $randbits))"
11988                         if set $seedfunc val -f; eval $csym; $val; then
11989                                 echo "(Using $seedfunc() to seed random generator)"
11990                         else
11991                                 echo "(Warning: no $seedfunc() to seed random generator)"
11992                                 seedfunc=rand
11993                         fi
11994                         randseedtype=unsigned
11995                         ;;
11996                 esac
11997                 ;;
11998         esac
11999 done
12000
12001 echo " "
12002 echo "Determining whether or not we are on an EBCDIC system..." >&4
12003 $cat >tebcdic.c <<'EOM'
12004 int main()
12005 {
12006   if ('M'==0xd4) return 0;
12007   return 1;
12008 }
12009 EOM
12010
12011 val=$undef
12012 set tebcdic
12013 if eval $compile_ok; then
12014         if ./tebcdic; then
12015                 echo "You have EBCDIC." >&4
12016                 val="$define"
12017         else
12018                 echo "Nope, no EBCDIC, probably ASCII or some ISO Latin." >&4
12019         fi
12020 else
12021         echo "I'm unable to compile the test program." >&4
12022         echo "I'll assume ASCII or some ISO Latin." >&4
12023 fi
12024 $rm -f tebcdic.c tebcdic
12025 set ebcdic
12026 eval $setvar
12027
12028 echo " "
12029 $cat >&4 <<EOM
12030 Checking how to flush all pending stdio output...
12031 EOM
12032 # I only know how to find the first 32 possibly open files on SunOS.
12033 # See also hints/sunos_4_1.sh and util.c  --AD
12034 case "$osname" in
12035 sunos) $echo '#define PERL_FFLUSH_ALL_FOPEN_MAX 32' > try.c ;;
12036 esac
12037 $cat >>try.c <<EOCP
12038 #include <stdio.h>
12039 #$i_unistd I_UNISTD
12040 #ifdef I_UNISTD
12041 # include <unistd.h>
12042 #endif
12043 #$d_sysconf HAS_SYSCONF
12044 #$d_stdio_stream_array HAS_STDIO_STREAM_ARRAY
12045 #ifdef HAS_STDIO_STREAM_ARRAY
12046 # define STDIO_STREAM_ARRAY $stdio_stream_array
12047 #endif
12048 int main() {
12049   FILE* p = fopen("try.out", "w");
12050 #ifdef TRY_FPUTC
12051   fputc('x', p);
12052 #else
12053 # ifdef TRY_FPRINTF
12054   fprintf(p, "x");
12055 # endif
12056 #endif
12057 #ifdef TRY_FFLUSH_NULL
12058   fflush(NULL);
12059 #endif
12060 #ifdef TRY_FFLUSH_ALL
12061   {
12062     long open_max = -1;
12063 # ifdef PERL_FFLUSH_ALL_FOPEN_MAX
12064     open_max = PERL_FFLUSH_ALL_FOPEN_MAX;
12065 # else
12066 #  if defined(HAS_SYSCONF) && defined(_SC_OPEN_MAX)
12067     open_max = sysconf(_SC_OPEN_MAX);
12068 #  else
12069 #   ifdef FOPEN_MAX
12070     open_max = FOPEN_MAX;
12071 #   else
12072 #    ifdef OPEN_MAX
12073     open_max = OPEN_MAX;
12074 #    else
12075 #     ifdef _NFILE
12076     open_max = _NFILE;
12077 #     endif
12078 #    endif
12079 #   endif
12080 #  endif
12081 # endif 
12082 # ifdef HAS_STDIO_STREAM_ARRAY
12083     if (open_max > 0) {
12084       long i;
12085       for (i = 0; i < open_max; i++)
12086             if (STDIO_STREAM_ARRAY[i]._file >= 0 &&
12087                 STDIO_STREAM_ARRAY[i]._file < open_max &&
12088                 STDIO_STREAM_ARRAY[i]._flag)
12089                 fflush(&STDIO_STREAM_ARRAY[i]);
12090     }   
12091   }
12092 # endif
12093 #endif
12094   _exit(42);
12095 }
12096 EOCP
12097 : first we have to find out how _not_ to flush
12098 if $test "X$fflushNULL" = X -o "X$fflushall" = X; then
12099     output=''
12100     set try -DTRY_FPUTC
12101     if eval $compile; then
12102             $rm -f try.out
12103             ./try$exe_ext 2>/dev/null
12104             if $test ! -s try.out -a "X$?" = X42; then
12105                 output=-DTRY_FPUTC
12106             fi
12107     fi
12108     case "$output" in
12109     '')
12110             set try -DTRY_FPRINTF
12111             $rm -f try.out
12112             if eval $compile; then
12113                     $rm -f try.out
12114                     ./try$exe_ext 2>/dev/null
12115                     if $test ! -s try.out -a "X$?" = X42; then
12116                         output=-DTRY_FPRINTF
12117                     fi
12118             fi
12119         ;;
12120     esac
12121 fi
12122 : check for fflush NULL behaviour
12123 case "$fflushNULL" in
12124 '')     set try -DTRY_FFLUSH_NULL $output
12125         if eval $compile; then
12126                 $rm -f try.out
12127                 ./try$exe_ext 2>/dev/null
12128                 code="$?"
12129                 if $test -s try.out -a "X$code" = X42; then
12130                         fflushNULL="`$cat try.out`"
12131                 else
12132                         if $test "X$code" != X42; then
12133                                 $cat >&4 <<EOM
12134 (If this test failed, don't worry, we'll try another method shortly.)
12135 EOM
12136                         fi
12137                 fi
12138         fi
12139         $rm -f core try.core core.try.*
12140         case "$fflushNULL" in
12141         x)      $cat >&4 <<EOM
12142 Your fflush(NULL) works okay.
12143 EOM
12144                 fflushNULL="$define"
12145                 ;;
12146         '')     $cat >&4 <<EOM
12147 Your fflush(NULL) isn't working (contrary to ANSI C).
12148 EOM
12149                 fflushNULL="$undef"
12150                 ;;
12151         *)      $cat >&4 <<EOM
12152 Cannot figure out whether your fflush(NULL) works or not.
12153 I'm assuming it doesn't (contrary to ANSI C).
12154 EOM
12155                 fflushNULL="$undef"
12156                 ;;
12157         esac
12158         ;;
12159 $define|true|[yY]*)
12160         fflushNULL="$define"
12161         ;;
12162 *)
12163         fflushNULL="$undef"
12164         ;;
12165 esac
12166 : check explicit looping only if NULL did not work
12167 case "$fflushNULL" in
12168 "$undef")
12169         : check for fflush all behaviour
12170         case "$fflushall" in
12171         '')     set try -DTRY_FFLUSH_ALL $output
12172                 if eval $compile; then
12173                         $cat >&4 <<EOM
12174 (Now testing the other method--but note that also this may fail.)
12175 EOM
12176                         $rm -f try.out
12177                         ./try$exe_ext 2>/dev/null
12178                         if $test -s try.out -a "X$?" = X42; then
12179                                 fflushall="`$cat try.out`"
12180                         fi
12181                 fi
12182                 $rm -f core try.core core.try.*
12183                 case "$fflushall" in
12184                 x)      $cat >&4 <<EOM
12185 Whew. Flushing explicitly all the stdio streams works.
12186 EOM
12187                         fflushall="$define"
12188                         ;;
12189                 '')     $cat >&4 <<EOM
12190 Sigh. Flushing explicitly all the stdio streams doesn't work.
12191 EOM
12192                         fflushall="$undef"
12193                         ;;
12194                 *)      $cat >&4 <<EOM
12195 Cannot figure out whether flushing stdio streams explicitly works or not.
12196 I'm assuming it doesn't.
12197 EOM
12198                         fflushall="$undef"
12199                         ;;
12200                 esac
12201                 ;;
12202         "$define"|true|[yY]*)
12203                 fflushall="$define"
12204                 ;;
12205         *)
12206                 fflushall="$undef"
12207                 ;;
12208         esac
12209         ;;
12210 *)      fflushall="$undef"      
12211         ;;
12212 esac
12213 case "$fflushNULL$fflushall" in
12214 undefundef)
12215         $cat <<EOM
12216 I cannot figure out how to flush pending stdio output.
12217 EOM
12218         ;;
12219 esac
12220 $rm -f try.* try$exe_ext
12221
12222 : Store the full pathname to the ar program for use in the C program
12223 : Respect a hint or command line value for full_ar.
12224 case "$full_ar" in
12225 '') full_ar=$ar ;;
12226 esac
12227
12228 : Store the full pathname to the sed program for use in the C program
12229 full_sed=$sed
12230
12231 : see what type gids are declared as in the kernel
12232 echo " "
12233 echo "Looking for the type for group ids returned by getgid()."
12234 set gid_t gidtype xxx stdio.h sys/types.h
12235 eval $typedef
12236 case "$gidtype" in
12237 xxx)
12238         xxx=`./findhdr sys/user.h`
12239         set `grep 'groups\[NGROUPS\];' "$xxx" 2>/dev/null` unsigned short
12240         case $1 in
12241         unsigned) dflt="$1 $2" ;;
12242         *) dflt="$1" ;;
12243         esac
12244         ;;
12245 *) dflt="$gidtype";;
12246 esac
12247 case "$gidtype" in
12248 gid_t) echo "gid_t found." ;;
12249 *)      rp="What is the type for group ids returned by getgid()?"
12250         . ./myread
12251         gidtype="$ans"
12252         ;;
12253 esac
12254
12255 echo " "
12256 case "$gidtype" in
12257 *_t) zzz="$gidtype"     ;;
12258 *)   zzz="gid"          ;;
12259 esac
12260 echo "Checking the size of $zzz..." >&4 
12261 cat > try.c <<EOCP
12262 #include <sys/types.h>
12263 #include <stdio.h>
12264 int main() {
12265     printf("%d\n", (int)sizeof($gidtype));
12266     exit(0);
12267 }
12268 EOCP
12269 set try
12270 if eval $compile_ok; then
12271         yyy=`./try`
12272         case "$yyy" in
12273         '')     gidsize=4
12274                 echo "(I can't execute the test program--guessing $gidsize.)" >&4
12275                 ;;
12276         *)      gidsize=$yyy
12277                 echo "Your $zzz size is $gidsize bytes."
12278                 ;;
12279         esac
12280 else
12281         gidsize=4
12282         echo "(I can't compile the test program--guessing $gidsize.)" >&4
12283 fi
12284
12285
12286 echo " "
12287 case "$gidtype" in
12288 *_t) zzz="$gidtype"     ;;
12289 *)   zzz="gid"          ;;
12290 esac
12291 echo "Checking the sign of $zzz..." >&4 
12292 cat > try.c <<EOCP
12293 #include <sys/types.h>
12294 #include <stdio.h>
12295 int main() {
12296         $gidtype foo = -1;
12297         if (foo < 0)
12298                 printf("-1\n");
12299         else
12300                 printf("1\n");
12301 }
12302 EOCP
12303 set try
12304 if eval $compile; then
12305         yyy=`./try`
12306         case "$yyy" in
12307         '')     gidsign=1
12308                 echo "(I can't execute the test program--guessing unsigned.)" >&4
12309                 ;;
12310         *)      gidsign=$yyy
12311                 case "$gidsign" in
12312                  1) echo "Your $zzz is unsigned." ;;
12313                 -1) echo "Your $zzz is signed."   ;;
12314                 esac
12315                 ;;
12316         esac
12317 else
12318         gidsign=1
12319         echo "(I can't compile the test program--guessing unsigned.)" >&4
12320 fi
12321
12322
12323 echo " "
12324
12325 if $test X"$quadtype" != X; then
12326
12327 echo "Checking how to print 64-bit integers..." >&4
12328
12329 if $test X"$sPRId64" = X -a X"$quadtype" = Xint; then
12330         $cat >try.c <<'EOCP'
12331 #include <sys/types.h>
12332 #include <stdio.h>
12333 int main() {
12334   int q = 12345678901;
12335   printf("%ld\n", q);
12336 }
12337 EOCP
12338         set try
12339         if eval $compile; then
12340                 yyy=`./try$exe_ext`
12341                 case "$yyy" in
12342                 12345678901)
12343                         sPRId64='"d"'; sPRIi64='"i"'; sPRIu64='"u"';
12344                         sPRIo64='"o"'; sPRIx64='"x"'; sPRIX64='"X"';
12345                         echo "We will use %d."
12346                         ;;
12347                 esac
12348         fi
12349 fi
12350
12351 if $test X"$sPRId64" = X -a X"$quadtype" = Xlong; then
12352         $cat >try.c <<'EOCP'
12353 #include <sys/types.h>
12354 #include <stdio.h>
12355 int main() {
12356   long q = 12345678901;
12357   printf("%ld\n", q);
12358 }
12359 EOCP
12360         set try
12361         if eval $compile; then
12362                 yyy=`./try$exe_ext`
12363                 case "$yyy" in
12364                 12345678901)
12365                         sPRId64='"ld"'; sPRIi64='"li"'; sPRIu64='"lu"';
12366                         sPRIo64='"lo"'; sPRIx64='"lx"'; sPRIX64='"lX"';
12367                         echo "We will use %ld."
12368                         ;;
12369                 esac
12370         fi
12371 fi
12372
12373 if $test X"$sPRId64" = X -a X"$i_inttypes" = X"$define" -a X"$quadtype" = Xint64_t; then
12374         $cat >try.c <<'EOCP'
12375 #include <sys/types.h>
12376 #include <inttypes.h>
12377 #include <stdio.h>
12378 int main() {
12379   int64_t q = 12345678901;
12380   printf("%" PRId64 "\n", q);
12381 }
12382 EOCP
12383         set try
12384         if eval $compile; then
12385                 yyy=`./try$exe_ext`
12386                 case "$yyy" in
12387                 12345678901)
12388                         sPRId64=PRId64; sPRIi64=PRIi64; sPRIu64=PRIu64;
12389                         sPRIo64=PRIo64; sPRIx64=PRIx64; sPRIX64=PRIX64;
12390                         echo "We will use the C9X style."
12391                         ;;
12392                 esac
12393         fi
12394 fi
12395
12396 if $test X"$sPRId64" = X -a X"$quadtype" = X"long long"; then
12397         $cat >try.c <<'EOCP'
12398 #include <sys/types.h>
12399 #include <stdio.h>
12400 int main() {
12401   long long q = 12345678901LL; /* AIX cc requires the LL prefix. */
12402   printf("%lld\n", q);
12403 }
12404 EOCP
12405         set try
12406         if eval $compile; then
12407                 yyy=`./try$exe_ext`
12408                 case "$yyy" in
12409                 12345678901)
12410                         sPRId64='"lld"'; sPRIi64='"lli"'; sPRIu64='"llu"';
12411                         sPRIo64='"llo"'; sPRIx64='"llx"'; sPRIX64='"llX"';
12412                         echo "We will use the %lld style."
12413                         ;;
12414                 esac
12415         fi
12416 fi
12417
12418 if $test X"$sPRId64" = X -a X"$quadtype" != X; then
12419         $cat >try.c <<EOCP
12420 #include <sys/types.h>
12421 #include <stdio.h>
12422 int main() {
12423   $quadtype q = 12345678901;
12424   printf("%Ld\n", q);
12425 }
12426 EOCP
12427         set try
12428         if eval $compile; then
12429                 yyy=`./try$exe_ext`
12430                 case "$yyy" in
12431                 12345678901)
12432                         sPRId64='"Ld"'; sPRIi64='"Li"'; sPRIu64='"Lu"';
12433                         sPRIo64='"Lo"'; sPRIx64='"Lx"'; sPRIX64='"LX"';
12434                         echo "We will use %Ld."
12435                         ;;
12436                 esac
12437         fi
12438 fi
12439
12440 if $test X"$sPRId64" = X -a X"$quadtype" != X; then
12441         $cat >try.c <<EOCP
12442 #include <sys/types.h>
12443 #include <stdio.h>
12444 int main() {
12445   $quadtype q = 12345678901;
12446   printf("%qd\n", q);
12447 }
12448 EOCP
12449         set try
12450         if eval $compile; then
12451                 yyy=`./try$exe_ext`
12452                 case "$yyy" in
12453                 12345678901)
12454                         sPRId64='"qd"'; sPRIi64='"qi"'; sPRIu64='"qu"';
12455                         sPRIo64='"qo"'; sPRIx64='"qx"'; sPRIX64='"qX"';
12456                         echo "We will use %qd."
12457                         ;;
12458                 esac
12459         fi
12460 fi
12461
12462 if $test X"$sPRId64" = X; then
12463         echo "Cannot figure out how to print 64-bit integers." >&4
12464 fi
12465
12466 $rm -f try try.*
12467
12468 fi
12469
12470 case "$sPRId64" in
12471 '')     d_PRId64="$undef"; d_PRIi64="$undef"; d_PRIu64="$undef"; 
12472         d_PRIo64="$undef"; d_PRIx64="$undef"; d_PRIX64="$undef"; 
12473         ;;
12474 *)      d_PRId64="$define"; d_PRIi64="$define"; d_PRIu64="$define"; 
12475         d_PRIo64="$define"; d_PRIx64="$define"; d_PRIX64="$define"; 
12476         ;;
12477 esac
12478
12479
12480 echo " "
12481 $echo "Checking the format strings to be used for Perl's internal types..." >&4
12482
12483 if $test X"$ivsize" = X8; then
12484         ivdformat="$sPRId64"
12485         uvuformat="$sPRIu64"
12486         uvoformat="$sPRIo64"
12487         uvxformat="$sPRIx64"
12488 else
12489         if $test X"$ivsize" = X"$longsize"; then
12490                 ivdformat='"ld"'
12491                 uvuformat='"lu"'
12492                 uvoformat='"lo"'
12493                 uvxformat='"lx"'
12494         else
12495                 if $test X"$ivsize" = X"$intsize"; then
12496                         ivdformat='"d"'
12497                         uvuformat='"u"'
12498                         uvoformat='"o"'
12499                         uvxformat='"x"'
12500                 else
12501                         : far out
12502                         if $test X"$ivsize" = X"$shortsize"; then
12503                                 ivdformat='"hd"'
12504                                 uvuformat='"hu"'
12505                                 uvoformat='"ho"'
12506                                 uvxformat='"hx"'
12507                         fi
12508                 fi
12509         fi
12510 fi
12511
12512 case "$ivdformat" in
12513 '') echo "$0: Fatal: failed to find format strings, cannot continue." >& 4
12514     exit 1
12515     ;;
12516 esac
12517
12518
12519 echo " "
12520 $echo "Checking the format string to be used for gids..." >&4
12521
12522 case "$gidsign" in
12523 -1)     if $test X"$gidsize" = X"$ivsize"; then
12524                 gidformat="$ivdformat"
12525         else
12526                 if $test X"$gidsize" = X"$longsize"; then
12527                         gidformat='"ld"'
12528                 else
12529                         if $test X"$gidsize" = X"$intsize"; then
12530                                 gidformat='"d"'
12531                         else
12532                                 if $test X"$gidsize" = X"$shortsize"; then
12533                                         gidformat='"hd"'
12534                                 fi
12535                         fi
12536                 fi
12537         fi
12538         ;;
12539 *)      if $test X"$gidsize" = X"$uvsize"; then
12540                 gidformat="$uvuformat"
12541         else
12542                 if $test X"$gidsize" = X"$longsize"; then
12543                         gidformat='"lu"'
12544                 else
12545                         if $test X"$gidsize" = X"$intsize"; then
12546                                 gidformat='"u"'
12547                         else
12548                                 if $test X"$gidsize" = X"$shortsize"; then
12549                                         gidformat='"hu"'
12550                                 fi
12551                         fi
12552                 fi
12553         fi
12554         ;;
12555 esac
12556
12557 : see if getgroups exists
12558 set getgroups d_getgrps
12559 eval $inlibc
12560
12561 : see if setgroups exists
12562 set setgroups d_setgrps
12563 eval $inlibc
12564
12565
12566 : Find type of 2nd arg to 'getgroups()' and 'setgroups()'
12567 echo " "
12568 case "$d_getgrps$d_setgrps" in
12569 *define*)
12570         case "$groupstype" in
12571         '') dflt="$gidtype" ;;
12572         *)  dflt="$groupstype" ;;
12573         esac
12574         $cat <<EOM
12575 What type of pointer is the second argument to getgroups() and setgroups()?
12576 Usually this is the same as group ids, $gidtype, but not always.
12577
12578 EOM
12579         rp='What type pointer is the second argument to getgroups() and setgroups()?'
12580         . ./myread
12581         groupstype="$ans"
12582         ;;
12583 *)  groupstype="$gidtype";;
12584 esac
12585
12586 echo " "
12587 echo "Checking if your $make program sets \$(MAKE)..." >&4
12588 case "$make_set_make" in
12589 '')
12590         $sed 's/^X //' > testmake.mak << 'EOF'
12591 Xall:
12592 X       @echo 'maketemp="$(MAKE)"'
12593 EOF
12594         case "`$make -f testmake.mak 2>/dev/null`" in
12595         *maketemp=*) make_set_make='#' ;;
12596         *)      make_set_make="MAKE=$make" ;;
12597         esac
12598         $rm -f testmake.mak
12599         ;;
12600 esac
12601 case "$make_set_make" in
12602 '#') echo "Yup, it does.";;
12603 *) echo "Nope, it doesn't.";;
12604 esac
12605
12606 : see if this is a sys/mman.h system
12607 set sys/mman.h i_sysmman
12608 eval $inhdr
12609
12610 : see if mmap exists
12611 set mmap d_mmap
12612 eval $inlibc
12613 : see what shmat returns
12614 : default to something harmless
12615 mmaptype='void *'
12616 case "$i_sysmman$d_mmap" in
12617 "$define$define")
12618         $cat >mmap.c <<'END'
12619 #include <sys/mman.h>
12620 void *mmap();
12621 END
12622         if $cc $ccflags -c mmap.c >/dev/null 2>&1; then
12623                 mmaptype='void *'
12624         else
12625                 mmaptype='caddr_t'
12626         fi
12627         echo "and it returns ($mmaptype)." >&4
12628         ;;
12629 esac
12630
12631
12632
12633 : see what type is used for mode_t
12634 rp="What is the type used for file modes for system calls (e.g. fchmod())?"
12635 set mode_t modetype int stdio.h sys/types.h
12636 eval $typedef_ask
12637
12638 : define a fucntion to check prototypes
12639 $cat > protochk <<EOSH
12640 $startsh
12641 cc="$cc"
12642 optimize="$optimize"
12643 ccflags="$ccflags"
12644 prototype="$prototype"
12645 define="$define"
12646 rm=$rm
12647 EOSH
12648
12649 $cat >> protochk <<'EOSH'
12650
12651 $rm -f try.c
12652 foo="$1"
12653 shift
12654 while test $# -ge 2; do
12655         case "$1" in
12656                 $define) echo "#include <$2>" >> try.c ;;
12657                 literal) echo "$2" >> try.c ;;
12658         esac
12659     shift 2
12660 done
12661 test "$prototype" = "$define"  && echo '#define CAN_PROTOTYPE' >> try.c
12662 cat >> try.c <<'EOCP'
12663 #ifdef CAN_PROTOTYPE
12664 #define _(args) args
12665 #else
12666 #define _(args) ()
12667 #endif
12668 EOCP
12669 echo "$foo" >> try.c
12670 echo 'int no_real_function_has_this_name _((void)) { return 0; }' >> try.c
12671 $cc $optimize $ccflags -c try.c > /dev/null 2>&1
12672 status=$?
12673 $rm -f try.[co]
12674 exit $status
12675 EOSH
12676 chmod +x protochk
12677 $eunicefix protochk
12678
12679 : see what type is used for size_t
12680 rp="What is the type used for the length parameter for string functions?"
12681 set size_t sizetype 'unsigned int' stdio.h sys/types.h
12682 eval $typedef_ask
12683
12684 : check for type of arguments to gethostbyaddr. 
12685 if test "X$netdb_host_type" = X -o "X$netdb_hlen_type" = X; then
12686         case "$d_gethbyaddr" in
12687         $define)
12688                 $cat <<EOM
12689
12690 Checking to see what type of arguments are accepted by gethostbyaddr().
12691 EOM
12692                 hdrs="$define sys/types.h
12693                         $d_socket sys/socket.h 
12694                         $i_niin netinet/in.h 
12695                         $i_netdb netdb.h
12696                         $i_unistd unistd.h"
12697                 : The first arg can 'char *' or 'void *'
12698                 : The second arg is some of integral type
12699                 for xxx in in_addr_t 'const void *' 'const char *' 'void *' 'char *'; do
12700                         for yyy in size_t long int; do
12701                                 case "$netdb_host_type" in
12702                                 '')     try="extern struct hostent *gethostbyaddr($xxx, $yyy, int);"
12703                                         if ./protochk "$try" $hdrs; then
12704                                                 echo "Your system accepts $xxx for the first arg."
12705                                                 echo "...and $yyy for the second arg."
12706                                                 netdb_host_type="$xxx"
12707                                                 netdb_hlen_type="$yyy"
12708                                         fi
12709                                         ;;
12710                                 esac
12711                         done
12712                 done
12713                 : In case none of those worked, prompt the user.
12714                 case "$netdb_host_type" in
12715                 '')     rp='What is the type for the 1st argument to gethostbyaddr?'
12716                         dflt='char *'
12717                         . ./myread
12718                         netdb_host_type=$ans
12719                         rp='What is the type for the 2nd argument to gethostbyaddr?'
12720                         dflt="$sizetype"
12721                         . ./myread
12722                         netdb_hlen_type=$ans
12723                         ;;
12724                 esac
12725                 ;;
12726         *)      : no gethostbyaddr, so pick harmless defaults
12727                 netdb_host_type='char *'
12728                 netdb_hlen_type="$sizetype"
12729                 ;;
12730         esac
12731         # Remove the "const" if needed. -- but then we'll have a 
12732         # prototype clash!
12733         # netdb_host_type=`echo "$netdb_host_type" | sed 's/^const //'`
12734 fi
12735
12736 : check for type of argument to gethostbyname. 
12737 if test "X$netdb_name_type" = X ; then
12738         case "$d_gethbyname" in
12739         $define)
12740                 $cat <<EOM
12741
12742 Checking to see what type of argument is accepted by gethostbyname().
12743 EOM
12744                 hdrs="$define sys/types.h
12745                         $d_socket sys/socket.h 
12746                         $i_niin netinet/in.h 
12747                         $i_netdb netdb.h
12748                         $i_unistd unistd.h"
12749                 for xxx in "const char *" "char *"; do
12750                         case "$netdb_name_type" in
12751                         '')     try="extern struct hostent *gethostbyname($xxx);"
12752                                 if ./protochk "$try" $hdrs; then
12753                                         echo "Your system accepts $xxx."
12754                                         netdb_name_type="$xxx"
12755                                 fi
12756                                 ;;
12757                         esac
12758                 done
12759                 : In case none of those worked, prompt the user.
12760                 case "$netdb_name_type" in
12761                 '')     rp='What is the type for the 1st argument to gethostbyname?'
12762                         dflt='char *'
12763                         . ./myread
12764                         netdb_name_type=$ans
12765                         ;;
12766                 esac
12767                 ;;
12768         *)      : no gethostbyname, so pick harmless default
12769                 netdb_name_type='char *'
12770                 ;;
12771         esac
12772 fi
12773
12774 : check for type of 1st argument to getnetbyaddr. 
12775 if test "X$netdb_net_type" = X ; then
12776         case "$d_getnbyaddr" in
12777         $define)
12778                 $cat <<EOM
12779
12780 Checking to see what type of 1st argument is accepted by getnetbyaddr().
12781 EOM
12782                 hdrs="$define sys/types.h
12783                         $d_socket sys/socket.h 
12784                         $i_niin netinet/in.h 
12785                         $i_netdb netdb.h
12786                         $i_unistd unistd.h"
12787                 for xxx in in_addr_t "unsigned long" long "unsigned int" int; do
12788                         case "$netdb_net_type" in
12789                         '')     try="extern struct netent *getnetbyaddr($xxx, int);"
12790                                 if ./protochk "$try" $hdrs; then
12791                                         echo "Your system accepts $xxx."
12792                                         netdb_net_type="$xxx"
12793                                 fi
12794                                 ;;
12795                         esac
12796                 done
12797                 : In case none of those worked, prompt the user.
12798                 case "$netdb_net_type" in
12799                 '')     rp='What is the type for the 1st argument to getnetbyaddr?'
12800                         dflt='long'
12801                         . ./myread
12802                         netdb_net_type=$ans
12803                         ;;
12804                 esac
12805                 ;;
12806         *)      : no getnetbyaddr, so pick harmless default
12807                 netdb_net_type='long'
12808                 ;;
12809         esac
12810 fi
12811 : locate the preferred pager for this system
12812 case "$pager" in
12813 '')
12814         dflt=''
12815         case "$pg" in
12816         /*) dflt=$pg;;
12817         esac
12818         case "$more" in
12819         /*) dflt=$more;;
12820         esac
12821         case "$less" in
12822         /*) dflt=$less;;
12823         esac
12824         case "$dflt" in
12825         '') dflt=/usr/ucb/more;;
12826         esac
12827         ;;
12828 *) dflt="$pager";;
12829 esac
12830 echo " "
12831 fn=f/
12832 rp='What pager is used on your system?'
12833 . ./getfile
12834 pager="$ans"
12835
12836 : see what type pids are declared as in the kernel
12837 rp="What is the type of process ids on this system?"
12838 set pid_t pidtype int stdio.h sys/types.h
12839 eval $typedef_ask
12840
12841 : Find earliest binary compatible site_perl subdirectory perl can use.
12842 case "$bincompat5005" in
12843 "$define") xs_apiversion='5.005' ;;
12844 *) xs_apiversion=$version ;;   # The current site_perl version.
12845 esac
12846 : Find earliest pure perl site_perl subdirectory perl can use.
12847 : The versioned directories started at 5.005.
12848 pm_apiversion='5.005'
12849
12850 : check for length of pointer
12851 echo " "
12852 case "$ptrsize" in
12853 '')
12854         $echo $n "Checking to see how big your pointers are...$c" >&4
12855         if test "$voidflags" -gt 7; then
12856                 echo '#define VOID_PTR char *' > try.c
12857         else
12858                 echo '#define VOID_PTR void *' > try.c
12859         fi
12860         $cat >>try.c <<'EOCP'
12861 #include <stdio.h>
12862 int main()
12863 {
12864     printf("%d\n", (int)sizeof(VOID_PTR));
12865     exit(0);
12866 }
12867 EOCP
12868         set try
12869         if eval $compile_ok; then
12870                 ptrsize=`./try`
12871                 $echo " $ptrsize bytes." >&4
12872         else
12873                 dflt='4'
12874                 echo "(I can't seem to compile the test program.  Guessing...)" >&4
12875                 rp="What is the size of a pointer (in bytes)?"
12876                 . ./myread
12877                 ptrsize="$ans"
12878         fi
12879         ;;
12880 esac
12881 $rm -f try.c try
12882
12883 : see if ar generates random libraries by itself
12884 echo " "
12885 echo "Checking how to generate random libraries on your machine..." >&4
12886 echo 'int bar1() { return bar2(); }' > bar1.c
12887 echo 'int bar2() { return 2; }' > bar2.c
12888 $cat > foo.c <<'EOP'
12889 int main() { printf("%d\n", bar1()); exit(0); }
12890 EOP
12891 $cc $ccflags -c bar1.c >/dev/null 2>&1
12892 $cc $ccflags -c bar2.c >/dev/null 2>&1
12893 $cc $ccflags -c foo.c >/dev/null 2>&1
12894 $ar rc bar$_a bar2$_o bar1$_o >/dev/null 2>&1
12895 if $cc $ccflags $ldflags -o foobar foo$_o bar$_a $libs > /dev/null 2>&1 &&
12896         ./foobar >/dev/null 2>&1; then
12897         echo "$ar appears to generate random libraries itself."
12898         orderlib=false
12899         ranlib=":"
12900 elif $ar ts bar$_a >/dev/null 2>&1 &&
12901         $cc $ccflags $ldflags -o foobar foo$_o bar$_a $libs > /dev/null 2>&1 &&
12902         ./foobar >/dev/null 2>&1; then
12903                 echo "a table of contents needs to be added with '$ar ts'."
12904                 orderlib=false
12905                 ranlib="$ar ts"
12906 else
12907         case "$ranlib" in
12908         :) ranlib='';;
12909         '')
12910                 ranlib=`./loc ranlib X /usr/bin /bin /usr/local/bin`
12911                 $test -f $ranlib || ranlib=''
12912                 ;;
12913         esac
12914         if $test -n "$ranlib"; then
12915                 echo "your system has '$ranlib'; we'll use that."
12916                 orderlib=false
12917         else
12918                 echo "your system doesn't seem to support random libraries"
12919                 echo "so we'll use lorder and tsort to order the libraries."
12920                 orderlib=true
12921                 ranlib=":"
12922         fi
12923 fi
12924 $rm -f foo* bar* 
12925
12926 : check for type of arguments to select. 
12927 case "$selecttype" in
12928 '') case "$d_select" in
12929         $define)
12930                 echo " "
12931                 $cat <<EOM
12932 Checking to see what type of arguments are accepted by select().
12933 EOM
12934                 hdrs="$define sys/types.h
12935                         $i_systime sys/time.h 
12936                         $i_sysselct sys/select.h
12937                         $d_socket sys/socket.h"
12938                 : The first arg can be int, unsigned, or size_t
12939                 : The last arg may or may not be 'const'
12940                 val=''
12941                 : void pointer has been seen but using that
12942                 : breaks the selectminbits test
12943                 for xxx in 'fd_set *' 'int *'; do
12944                         for nfd in 'int' 'size_t' 'unsigned long' 'unsigned' ; do
12945                                 for tmo in 'struct timeval *' 'const struct timeval *'; do
12946                                         case "$val" in
12947                                         '')     try="extern select _(($nfd, $xxx, $xxx, $xxx, $tmo));"
12948                                                 if ./protochk "$try" $hdrs; then
12949                                                         echo "Your system accepts $xxx."
12950                                                         val="$xxx"
12951                                                 fi
12952                                                 ;;
12953                                         esac
12954                                 done
12955                         done
12956                 done
12957                 case "$val" in
12958                 '')     rp='What is the type for the 2nd, 3rd, and 4th arguments to select?'
12959                         case "$d_fd_set" in
12960                                 $define) dflt="fd_set *" ;;
12961                                 *)              dflt="int *" ;;
12962                         esac
12963                         . ./myread
12964                         val=$ans
12965                         ;;
12966                 esac
12967                 selecttype="$val"
12968                 ;;
12969         *)      : no select, so pick a harmless default
12970                 selecttype='int *'
12971                 ;;
12972         esac
12973         ;;
12974 esac
12975
12976 : check for the select 'width'
12977 case "$selectminbits" in
12978 '') case "$d_select" in
12979         $define)
12980                 $cat <<EOM
12981
12982 Checking to see on how many bits at a time your select() operates...
12983 EOM
12984                 $cat >try.c <<EOCP
12985 #include <sys/types.h>
12986 #$i_time I_TIME
12987 #$i_systime I_SYS_TIME
12988 #$i_systimek I_SYS_TIME_KERNEL
12989 #ifdef I_TIME
12990 #   include <time.h>
12991 #endif
12992 #ifdef I_SYS_TIME
12993 #   ifdef I_SYS_TIME_KERNEL
12994 #       define KERNEL
12995 #   endif
12996 #   include <sys/time.h>
12997 #   ifdef I_SYS_TIME_KERNEL
12998 #       undef KERNEL
12999 #   endif
13000 #endif
13001 #$i_sysselct I_SYS_SELECT
13002 #ifdef I_SYS_SELECT
13003 #include <sys/select.h>
13004 #endif
13005 #$d_socket HAS_SOCKET
13006 #ifdef HAS_SOCKET
13007 #   include <sys/socket.h> /* Might include <sys/bsdtypes.h> */
13008 #endif
13009 #include <stdio.h>
13010 $selecttype b;
13011 #define S sizeof(*(b))
13012 #define MINBITS 64
13013 #define NBYTES (S * 8 > MINBITS ? S : MINBITS/8)
13014 #define NBITS  (NBYTES * 8)
13015 int main() {
13016     char s[NBYTES];
13017     struct timeval t;
13018     int i;
13019     FILE* fp;
13020     int fd;
13021
13022     fclose(stdin);
13023     fp = fopen("try.c", "r");
13024     if (fp == 0)
13025       exit(1);
13026     fd = fileno(fp);
13027     if (fd < 0)
13028       exit(2);
13029     b = ($selecttype)s;
13030     for (i = 0; i < NBITS; i++)
13031         FD_SET(i, b);
13032     t.tv_sec  = 0;
13033     t.tv_usec = 0;
13034     select(fd + 1, b, 0, 0, &t);
13035     for (i = NBITS - 1; i > fd && FD_ISSET(i, b); i--);
13036     printf("%d\n", i + 1);
13037     return 0;
13038 }
13039 EOCP
13040                 set try
13041                 if eval $compile_ok; then
13042                         selectminbits=`./try`
13043                         case "$selectminbits" in
13044                         '')     cat >&4 <<EOM
13045 Cannot figure out on how many bits at a time your select() operates.
13046 I'll play safe and guess it is 32 bits.
13047 EOM
13048                                 selectminbits=32
13049                                 bits="32 bits"
13050                                 ;;
13051                         1)      bits="1 bit" ;;
13052                         *)      bits="$selectminbits bits" ;;
13053                         esac
13054                         echo "Your select() operates on $bits at a time." >&4
13055                 else
13056                         rp='What is the minimum number of bits your select() operates on?'
13057                         case "$byteorder" in
13058                         1234|12345678)  dflt=32 ;;
13059                         *)              dflt=1  ;;
13060                         esac
13061                         . ./myread
13062                         val=$ans
13063                         selectminbits="$val"
13064                 fi
13065                 $rm -f try.* try
13066                 ;;
13067         *)      : no select, so pick a harmless default
13068                 selectminbits='32'
13069                 ;;
13070         esac
13071         ;;
13072 esac
13073
13074 : Trace out the files included by signal.h, then look for SIGxxx names.
13075 : Remove SIGARRAYSIZE used by HPUX.
13076 : Remove SIGSTKSIZE used by Linux.
13077 : Remove SIGSTKSZ used by Posix.
13078 : Remove SIGTYP void lines used by OS2.
13079 : Some cpps, like os390, dont give the file name anywhere
13080 if [ "X$fieldn" = X ]; then
13081         : Just make some guesses.  We check them later.
13082         xxx='/usr/include/signal.h /usr/include/sys/signal.h'
13083 else
13084         xxx=`echo '#include <signal.h>' |
13085         $cppstdin $cppminus $cppflags 2>/dev/null |
13086         $grep '^[       ]*#.*include' | 
13087         $awk "{print \\$$fieldn}" | $sed 's!"!!g' | $sort | $uniq`
13088 fi
13089 : Check this list of files to be sure we have parsed the cpp output ok.
13090 : This will also avoid potentially non-existent files, such 
13091 : as ../foo/bar.h
13092 xxxfiles=''
13093 for xx in $xxx /dev/null ; do
13094         $test -f "$xx" && xxxfiles="$xxxfiles $xx"
13095 done
13096 : If we have found no files, at least try signal.h
13097 case "$xxxfiles" in
13098 '')     xxxfiles=`./findhdr signal.h` ;;
13099 esac
13100 xxx=`awk '
13101 $1 ~ /^#define$/ && $2 ~ /^SIG[A-Z0-9]*$/ && $2 !~ /SIGARRAYSIZE/ && $2 !~ /SIGSTKSIZE/ && $2 !~ /SIGSTKSZ/ && $3 !~ /void/ {
13102         print substr($2, 4, 20)
13103 }
13104 $1 == "#" && $2 ~ /^define$/ && $3 ~ /^SIG[A-Z0-9]*$/ && $3 !~ /SIGARRAYSIZE/ && $4 !~ /void/ {
13105         print substr($3, 4, 20)
13106 }' $xxxfiles`
13107 : Append some common names just in case the awk scan failed.
13108 xxx="$xxx ABRT ALRM BUS CANCEL CHLD CLD CONT DIL EMT FPE"
13109 xxx="$xxx FREEZE HUP ILL INT IO IOT KILL LOST LWP PHONE"
13110 xxx="$xxx PIPE POLL PROF PWR QUIT RTMAX RTMIN SEGV STKFLT STOP"
13111 xxx="$xxx SYS TERM THAW TRAP TSTP TTIN TTOU URG USR1 USR2"
13112 xxx="$xxx USR3 USR4 VTALRM WAITING WINCH WIND WINDOW XCPU XFSZ"
13113
13114 : generate a few handy files for later
13115 $cat > signal.c <<'EOCP'
13116 #include <sys/types.h>
13117 #include <signal.h>
13118 #include <stdio.h>
13119 int main() {
13120
13121 /* Strange style to avoid deeply-nested #if/#else/#endif */
13122 #ifndef NSIG
13123 #  ifdef _NSIG
13124 #    define NSIG (_NSIG)
13125 #  endif
13126 #endif
13127
13128 #ifndef NSIG
13129 #  ifdef SIGMAX
13130 #    define NSIG (SIGMAX+1)
13131 #  endif
13132 #endif
13133
13134 #ifndef NSIG
13135 #  ifdef SIG_MAX
13136 #    define NSIG (SIG_MAX+1)
13137 #  endif
13138 #endif
13139
13140 #ifndef NSIG
13141 #  ifdef MAXSIG
13142 #    define NSIG (MAXSIG+1)
13143 #  endif
13144 #endif
13145
13146 #ifndef NSIG
13147 #  ifdef MAX_SIG
13148 #    define NSIG (MAX_SIG+1)
13149 #  endif
13150 #endif
13151
13152 #ifndef NSIG
13153 #  ifdef SIGARRAYSIZE
13154 #    define NSIG (SIGARRAYSIZE+1) /* Not sure of the +1 */
13155 #  endif
13156 #endif
13157
13158 #ifndef NSIG
13159 #  ifdef _sys_nsig
13160 #    define NSIG (_sys_nsig) /* Solaris 2.5 */
13161 #  endif
13162 #endif
13163
13164 /* Default to some arbitrary number that's big enough to get most
13165    of the common signals.
13166 */
13167 #ifndef NSIG
13168 #    define NSIG 50
13169 #endif
13170
13171 printf("NSIG %d\n", NSIG);
13172
13173 #ifndef JUST_NSIG
13174
13175 EOCP
13176
13177 echo $xxx | $tr ' ' $trnl | $sort | $uniq | $awk '
13178 {
13179         printf "#ifdef SIG"; printf $1; printf "\n"
13180         printf "printf(\""; printf $1; printf " %%d\\n\",SIG";
13181         printf $1; printf ");\n"
13182         printf "#endif\n"
13183 }
13184 END {
13185         printf "#endif /* JUST_NSIG */\n";
13186         printf "exit(0);\n}\n";
13187 }
13188 ' >>signal.c
13189 $cat >signal.awk <<'EOP'
13190 BEGIN { ndups = 0 }
13191 $1 ~ /^NSIG$/ { nsig = $2 }
13192 ($1 !~ /^NSIG$/) && (NF == 2) {
13193     if ($2 > maxsig) { maxsig = $2 }
13194     if (sig_name[$2]) {
13195         dup_name[ndups] = $1
13196         dup_num[ndups] = $2
13197         ndups++ 
13198     }
13199     else {
13200         sig_name[$2] = $1
13201         sig_num[$2] = $2
13202     }
13203 }
13204 END { 
13205     if (nsig == 0) {
13206         nsig = maxsig + 1
13207     }
13208     printf("NSIG %d\n", nsig);
13209     for (n = 1; n < nsig; n++) {
13210         if (sig_name[n]) {
13211             printf("%s %d\n", sig_name[n], sig_num[n])
13212         }
13213         else {
13214             printf("NUM%d %d\n", n, n) 
13215         }
13216     }
13217     for (n = 0; n < ndups; n++) {
13218         printf("%s %d\n", dup_name[n], dup_num[n])
13219     }
13220 }
13221 EOP
13222 $cat >signal_cmd <<EOS
13223 $startsh
13224 if $test -s signal.lst; then
13225     echo "Using your existing signal.lst file"
13226         exit 0
13227 fi
13228 xxx="$xxx"
13229 EOS
13230 $cat >>signal_cmd <<'EOS'
13231
13232 set signal
13233 if eval $compile_ok; then
13234         ./signal$_exe | $sort -n +1 | $uniq | $awk -f signal.awk >signal.lst
13235 else
13236         echo "(I can't seem be able to compile the whole test program)" >&4
13237         echo "(I'll try it in little pieces.)" >&4
13238         set signal -DJUST_NSIG
13239         if eval $compile_ok; then
13240                 ./signal$_exe > signal.nsg
13241                 $cat signal.nsg
13242         else
13243                 echo "I can't seem to figure out how many signals you have." >&4
13244                 echo "Guessing 50." >&4
13245                 echo 'NSIG 50' > signal.nsg
13246         fi
13247         : Now look at all the signal names, one at a time.
13248         for xx in `echo $xxx | $tr ' ' $trnl | $sort | $uniq`; do
13249                 $cat > signal.c <<EOCP
13250 #include <sys/types.h>
13251 #include <signal.h>
13252 #include <stdio.h>
13253 int main() {
13254 printf("$xx %d\n", SIG${xx});
13255 return 0;
13256 }
13257 EOCP
13258                 set signal
13259                 if eval $compile; then
13260                         echo "SIG${xx} found."
13261                         ./signal$_exe  >> signal.ls1
13262                 else
13263                         echo "SIG${xx} NOT found."
13264                 fi
13265         done
13266         if $test -s signal.ls1; then
13267                 $cat signal.nsg signal.ls1 |
13268                         $sort -n +1 | $uniq | $awk -f signal.awk >signal.lst
13269         fi
13270
13271 fi
13272 if $test -s signal.lst; then
13273         :
13274 else
13275         echo "(AAK! I can't compile the test programs -- Guessing)" >&4
13276         echo 'kill -l' >signal
13277         set X `csh -f <signal`
13278         $rm -f signal
13279         shift
13280         case $# in
13281         0) set HUP INT QUIT ILL TRAP ABRT EMT FPE KILL BUS SEGV SYS PIPE ALRM TERM;;
13282         esac
13283         echo $@ | $tr ' ' $trnl | \
13284             $awk '{ printf "%s %d\n", $1, ++s; }
13285                   END { printf "NSIG %d\n", ++s }' >signal.lst
13286 fi
13287 $rm -f signal.c signal$_exe signal$_o signal.nsg signal.ls1
13288 EOS
13289 chmod a+x signal_cmd
13290 $eunicefix signal_cmd
13291
13292 : generate list of signal names
13293 echo " "
13294 case "$sig_name_init" in
13295 '') doinit=yes ;;
13296 *)  case "$sig_num_init" in
13297     ''|*,*) doinit=yes ;;
13298     esac ;;
13299 esac
13300 case "$doinit" in
13301 yes)
13302         echo "Generating a list of signal names and numbers..." >&4
13303         . ./signal_cmd
13304         sig_count=`$awk '/^NSIG/ { printf "%d", $2 }' signal.lst`
13305         sig_name=`$awk 'BEGIN { printf "ZERO " }
13306                         !/^NSIG/ { printf "%s ", $1 }' signal.lst`
13307         sig_num=`$awk  'BEGIN { printf "0 " }
13308                         !/^NSIG/ { printf "%d ", $2 }' signal.lst`
13309         sig_name_init=`$awk 'BEGIN      { printf "\"ZERO\", " }
13310                              !/^NSIG/   { printf "\"%s\", ", $1 }
13311                              END        { printf "0\n" }' signal.lst`
13312         sig_num_init=`$awk  'BEGIN      { printf "0, " }
13313                              !/^NSIG/   { printf "%d, ", $2}
13314                              END        { printf "0\n"}' signal.lst`
13315         ;;
13316 esac
13317 echo "The following $sig_count signals are available:"
13318 echo " "
13319 echo $sig_name | $awk \
13320 'BEGIN { linelen = 0 }
13321 {
13322         for (i = 1; i <= NF; i++) {
13323                 name = "SIG" $i " "
13324                 linelen = linelen + length(name)
13325                 if (linelen > 70) {
13326                         printf "\n"
13327                         linelen = length(name)
13328                 }
13329                 printf "%s", name
13330         }
13331         printf "\n"
13332 }'
13333 $rm -f signal signal.c signal.awk signal.lst signal_cmd 
13334
13335 : see what type is used for signed size_t
13336 set ssize_t ssizetype int stdio.h sys/types.h
13337 eval $typedef
13338 dflt="$ssizetype"
13339 $cat > ssize.c <<EOM
13340 #include <stdio.h>
13341 #include <sys/types.h>
13342 #define Size_t $sizetype
13343 #define SSize_t $dflt
13344 int main()
13345 {
13346         if (sizeof(Size_t) == sizeof(SSize_t))
13347                 printf("$dflt\n");
13348         else if (sizeof(Size_t) == sizeof(int))
13349                 printf("int\n");
13350         else 
13351                 printf("long\n");
13352         exit(0);
13353 }
13354 EOM
13355 echo " "
13356 set ssize
13357 if eval $compile_ok && ./ssize > /dev/null; then
13358         ssizetype=`./ssize`
13359         echo "I'll be using $ssizetype for functions returning a byte count." >&4
13360 else
13361         $cat >&4 <<EOM
13362 Help! I can't compile and run the ssize_t test program: please enlighten me!
13363 (This is probably a misconfiguration in your system or libraries, and
13364 you really ought to fix it.  Still, I'll try anyway.)
13365
13366 I need a type that is the same size as $sizetype, but is guaranteed to
13367 be signed.  Common values are ssize_t, int and long.
13368
13369 EOM
13370         rp="What signed type is the same size as $sizetype?"
13371         . ./myread
13372         ssizetype="$ans"
13373 fi
13374 $rm -f ssize ssize.*
13375
13376 : see what type of char stdio uses.
13377 echo " "
13378 if $contains 'unsigned.*char.*_ptr;' `./findhdr stdio.h` >/dev/null 2>&1 ; then
13379         echo "Your stdio uses unsigned chars." >&4
13380         stdchar="unsigned char"
13381 else
13382         echo "Your stdio uses signed chars." >&4
13383         stdchar="char"
13384 fi
13385
13386 : see if time exists
13387 echo " "
13388 if test "X$d_time" = X -o X"$timetype" = X; then
13389     if set time val -f d_time; eval $csym; $val; then
13390                 echo 'time() found.' >&4
13391                 val="$define"
13392                 rp="What is the type returned by time() on this system?"
13393                 set time_t timetype long stdio.h sys/types.h
13394                 eval $typedef_ask
13395     else
13396                 echo 'time() not found, hope that will do.' >&4
13397                 val="$undef"
13398                 timetype='int';
13399     fi
13400     set d_time
13401     eval $setvar
13402 fi
13403
13404 : see what type uids are declared as in the kernel
13405 echo " "
13406 echo "Looking for the type for user ids returned by getuid()."
13407 set uid_t uidtype xxx stdio.h sys/types.h
13408 eval $typedef
13409 case "$uidtype" in
13410 xxx)
13411         xxx=`./findhdr sys/user.h`
13412         set `grep '_ruid;' "$xxx" 2>/dev/null` unsigned short
13413         case $1 in
13414         unsigned) dflt="$1 $2" ;;
13415         *) dflt="$1" ;;
13416         esac
13417         ;;
13418 *) dflt="$uidtype";;
13419 esac
13420 case "$uidtype" in
13421 uid_t)  echo "uid_t found." ;;
13422 *)      rp="What is the type for user ids returned by getuid()?"
13423         . ./myread
13424         uidtype="$ans"
13425         ;;
13426 esac
13427
13428 echo " "
13429 case "$uidtype" in
13430 *_t) zzz="$uidtype"     ;;
13431 *)   zzz="uid"          ;;
13432 esac
13433 echo "Checking the size of $zzz..." >&4 
13434 cat > try.c <<EOCP
13435 #include <sys/types.h>
13436 #include <stdio.h>
13437 int main() {
13438     printf("%d\n", (int)sizeof($uidtype));
13439     exit(0);
13440 }
13441 EOCP
13442 set try
13443 if eval $compile_ok; then
13444         yyy=`./try`
13445         case "$yyy" in
13446         '')     uidsize=4
13447                 echo "(I can't execute the test program--guessing $uidsize.)" >&4
13448                 ;;
13449         *)      uidsize=$yyy
13450                 echo "Your $zzz size is $uidsize bytes."
13451                 ;;
13452         esac
13453 else
13454         uidsize=4
13455         echo "(I can't compile the test program--guessing $uidsize.)" >&4
13456 fi
13457
13458 echo " "
13459 case "$uidtype" in
13460 *_t) zzz="$uidtype"     ;;
13461 *)   zzz="uid"          ;;
13462 esac
13463 echo "Checking the sign of $zzz..." >&4
13464 cat > try.c <<EOCP
13465 #include <sys/types.h>
13466 #include <stdio.h>
13467 int main() {
13468         $uidtype foo = -1;
13469         if (foo < 0)
13470                 printf("-1\n");
13471         else
13472                 printf("1\n");
13473 }
13474 EOCP
13475 set try
13476 if eval $compile; then
13477         yyy=`./try`
13478         case "$yyy" in
13479         '')     uidsign=1
13480                 echo "(I can't execute the test program--guessing unsigned.)" >&4
13481                 ;;
13482         *)      uidsign=$yyy
13483                 case "$uidsign" in
13484                  1) echo "Your $zzz is unsigned." ;;
13485                 -1) echo "Your $zzz is signed."   ;;
13486                 esac
13487                 ;;
13488         esac
13489 else
13490         uidsign=1
13491         echo "(I can't compile the test program--guessing unsigned.)" >&4
13492 fi
13493
13494
13495
13496 echo " "
13497 $echo "Checking the format string to be used for uids..." >&4
13498
13499 case "$uidsign" in
13500 -1)     if $test X"$uidsize" = X"$ivsize"; then
13501                 uidformat="$ivdformat"
13502         else
13503                 if $test X"$uidsize" = X"$longsize"; then
13504                         uidformat='"ld"'
13505                 else
13506                         if $test X"$uidsize" = X"$intsize"; then
13507                                 uidformat='"d"'
13508                         else
13509                                 if $test X"$uidsize" = X"$shortsize"; then
13510                                         uidformat='"hd"'
13511                                 fi
13512                         fi
13513                 fi
13514         fi
13515         ;;
13516 *)      if $test X"$uidsize" = X"$uvsize"; then
13517                 uidformat="$uvuformat"
13518         else
13519                 if $test X"$uidsize" = X"$longsize"; then
13520                         uidformat='"lu"'
13521                 else
13522                         if $test X"$uidsize" = X"$intsize"; then
13523                                 uidformat='"u"'
13524                         else
13525                                 if $test X"$uidsize" = X"$shortsize"; then
13526                                         uidformat='"hu"'
13527                                 fi
13528                         fi
13529                 fi
13530         fi
13531         ;;
13532 esac
13533
13534 : see if dbm.h is available
13535 : see if dbmclose exists
13536 set dbmclose d_dbmclose
13537 eval $inlibc
13538
13539 case "$d_dbmclose" in
13540 $define)
13541         set dbm.h i_dbm
13542         eval $inhdr
13543         case "$i_dbm" in
13544         $define)
13545                 val="$undef"
13546                 set i_rpcsvcdbm
13547                 eval $setvar
13548                 ;;
13549         *)      set rpcsvc/dbm.h i_rpcsvcdbm
13550                 eval $inhdr
13551                 ;;
13552         esac
13553         ;;
13554 *)      echo "We won't be including <dbm.h>"
13555         val="$undef"
13556         set i_dbm
13557         eval $setvar
13558         val="$undef"
13559         set i_rpcsvcdbm
13560         eval $setvar
13561         ;;
13562 esac
13563
13564 : see if this is a sys/file.h system
13565 val=''
13566 set sys/file.h val
13567 eval $inhdr
13568
13569 : do we need to include sys/file.h ?
13570 case "$val" in
13571 "$define")
13572         echo " "
13573         if $h_sysfile; then
13574                 val="$define"
13575                 echo "We'll be including <sys/file.h>." >&4
13576         else
13577                 val="$undef"
13578                 echo "We won't be including <sys/file.h>." >&4
13579         fi
13580         ;;
13581 *)
13582         h_sysfile=false
13583         ;;
13584 esac
13585 set i_sysfile
13586 eval $setvar
13587
13588 : see if fcntl.h is there
13589 val=''
13590 set fcntl.h val
13591 eval $inhdr
13592
13593 : see if we can include fcntl.h
13594 case "$val" in
13595 "$define")
13596         echo " "
13597         if $h_fcntl; then
13598                 val="$define"
13599                 echo "We'll be including <fcntl.h>." >&4
13600         else
13601                 val="$undef"
13602                 if $h_sysfile; then
13603         echo "We don't need to include <fcntl.h> if we include <sys/file.h>." >&4
13604                 else
13605                         echo "We won't be including <fcntl.h>." >&4
13606                 fi
13607         fi
13608         ;;
13609 *)
13610         h_fcntl=false
13611         val="$undef"
13612         ;;
13613 esac
13614 set i_fcntl
13615 eval $setvar
13616
13617 : see if this is a iconv.h system
13618 set iconv.h i_iconv
13619 eval $inhdr
13620
13621 : see if locale.h is available
13622 set locale.h i_locale
13623 eval $inhdr
13624
13625 : see if mach cthreads are available
13626 if test "X$usethreads" = "X$define"; then
13627         set mach/cthreads.h i_machcthr
13628         eval $inhdr
13629 else
13630         i_machcthr="$undef"
13631 fi
13632
13633
13634
13635 : see if this is a math.h system
13636 set math.h i_math
13637 eval $inhdr
13638
13639 : see if this is a mntent.h system
13640 set mntent.h i_mntent
13641 eval $inhdr
13642
13643 : see if ndbm.h is available
13644 set ndbm.h t_ndbm
13645 eval $inhdr
13646 case "$t_ndbm" in
13647 $define)
13648         : see if dbm_open exists
13649         set dbm_open d_dbm_open
13650         eval $inlibc
13651         case "$d_dbm_open" in
13652         $undef)
13653                 t_ndbm="$undef"
13654                 echo "We won't be including <ndbm.h>"
13655                 ;;
13656         esac
13657         ;;
13658 esac
13659 val="$t_ndbm"
13660 set i_ndbm
13661 eval $setvar
13662
13663 : see if net/errno.h is available
13664 val=''
13665 set net/errno.h val
13666 eval $inhdr
13667
13668 : Unfortunately, it causes problems on some systems.  Arrgh.
13669 case "$val" in
13670 $define)
13671         cat > try.c <<'EOM'
13672 #include <stdio.h>
13673 #include <errno.h>
13674 #include <net/errno.h>
13675 int func()
13676 {
13677         return ENOTSOCK;
13678 }
13679 EOM
13680         if $cc $ccflags -c try.c >/dev/null 2>&1; then
13681                 echo "We'll be including <net/errno.h>." >&4
13682         else
13683                 echo "We won't be including <net/errno.h>." >&4
13684                 val="$undef"
13685         fi
13686         $rm -f try.* try
13687         ;;
13688 esac
13689 set i_neterrno
13690 eval $setvar
13691
13692 : see if netinet/tcp.h is available
13693 set netinet/tcp.h i_netinettcp
13694 eval $inhdr
13695
13696 : see if this is a poll.h system
13697 set poll.h i_poll
13698 eval $inhdr
13699
13700 echo " "
13701 $echo "Guessing which symbols your C compiler and preprocessor define..." >&4 
13702 $cat <<'EOSH' > Cppsym.know
13703 a29k ABI64 aegis AES_SOURCE AIX AIX32 AIX370
13704 AIX41 AIX42 AIX43 AIX_SOURCE aixpc ALL_SOURCE
13705 alliant alpha am29000 AM29000 amiga AMIGAOS AMIX
13706 ansi ANSI_C_SOURCE apollo ardent atarist att386 att3b BeOS
13707 BIG_ENDIAN BIT_MSF bsd BSD bsd43 bsd4_2 bsd4_3 BSD4_3 bsd4_4
13708 BSD_4_3 BSD_4_4 BSD_NET2 BSD_TIME BSD_TYPES BSDCOMPAT bsdi
13709 bull c cadmus clipper CMU COFF COMPILER_VERSION
13710 concurrent convex cpu cray CRAY CRAYMPP ctix CX_UX
13711 CYGWIN DGUX DGUX_SOURCE DJGPP dmert DOLPHIN DPX2 DSO
13712 Dynix DynixPTX ELF encore EPI EXTENSIONS FILE_OFFSET_BITS
13713 FreeBSD GCC_NEW_VARARGS gcos gcx gimpel
13714 GNU_SOURCE GNUC GNUC_MINOR GO32 gould GOULD_PN
13715 H3050R H3050RX hbullx20 hcx host_mips
13716 hp200 hp300 hp700 HP700 hp800 hp9000
13717 hp9000s200 hp9000s300 hp9000s400 hp9000s500
13718 hp9000s700 hp9000s800 hp9k8 hp_osf hppa hpux HPUX_SOURCE
13719 i186 i286 i386 i486 i586 i686 i8086 i80960 i860 I960
13720 iAPX286 ibm ibm032 ibmesa IBMR2 ibmrt ILP32 ILP64
13721 INLINE_INTRINSICS INTRINSICS INT64 interdata is68k ksr1
13722 LANGUAGE_C LARGE_FILE_API LARGEFILE64_SOURCE
13723 LARGEFILE_SOURCE LFS64_LARGEFILE LFS_LARGEFILE
13724 Linux LITTLE_ENDIAN LONG64 LONG_DOUBLE LONG_LONG
13725 LONGDOUBLE LONGLONG LP64 luna luna88k Lynx
13726 M68000 m68k m88100 m88k M88KBCS_TARGET M_COFF
13727 M_I186 M_I286 M_I386 M_I8086 M_I86 M_I86SM M_SYS3
13728 M_SYS5 M_SYSIII M_SYSV M_UNIX M_XENIX MACH machine MachTen
13729 MATH_HAS_NO_SIDE_EFFECTS
13730 mc300 mc500 mc68000 mc68010 mc68020 mc68030 mc68040
13731 mc68060 mc68k mc68k32 mc700 mc88000 mc88100 merlin
13732 mert MiNT mips MIPS_FPSET MIPS_ISA MIPS_SIM MIPS_SZINT
13733 MIPS_SZLONG MIPS_SZPTR MIPSEB MIPSEL MODERN_C motorola
13734 mpeix MSDOS MTXINU MULTIMAX mvs MVS n16 ncl_el ncl_mr
13735 NetBSD news1500 news1700 news1800 news1900 news3700
13736 news700 news800 news900 NeXT NLS ns16000 ns32000
13737 ns32016 ns32332 ns32k nsc32000
13738 OCS88 OEMVS OpenBSD os OS2 OS390 osf OSF1 OSF_SOURCE
13739 pa_risc PA_RISC1_1 PA_RISC2_0 PARAGON parisc
13740 pc532 pdp11 PGC PIC plexus PORTAR posix
13741 POSIX1B_SOURCE POSIX2_SOURCE POSIX4_SOURCE
13742 POSIX_C_SOURCE POSIX_SOURCE POWER
13743 PROTOTYPES PWB pyr QNX R3000 REENTRANT RES Rhapsody RISC6000
13744 riscix riscos RT scs SCO sequent sgi SGI_SOURCE sinix
13745 SIZE_INT SIZE_LONG SIZE_PTR SOCKET_SOURCE SOCKETS_SOURCE
13746 sony sony_news sonyrisc sparc sparclite spectrum
13747 stardent stdc STDC_EXT stratos sun sun3 sun386
13748 Sun386i svr3 svr4 SVR4_2 SVR4_SOURCE svr5
13749 SX system SYSTYPE_BSD SYSTYPE_BSD43 SYSTYPE_BSD44
13750 SYSTYPE_SVR4 SYSTYPE_SVR5 SYSTYPE_SYSV SYSV SYSV3 SYSV4 SYSV5
13751 sysV68 sysV88 Tek4132 Tek4300 titan
13752 tower tower32 tower32_200 tower32_600 tower32_700
13753 tower32_800 tower32_850 tss
13754 u370 u3b u3b2 u3b20 u3b200 u3b20d u3b5
13755 ultrix UMAXV UnicomPBB UnicomPBD UNICOS UNICOSMK
13756 unix UNIX95 UNIX99 unixpc unos USGr4 USGr4_2
13757 Utek UTek UTS UWIN uxpm uxps vax venix VMESA vms xenix Xenix286
13758 XOPEN_SOURCE XOPEN_SOURCE_EXTENDED XPG2 XPG2_EXTENDED
13759 XPG3 XPG3_EXTENDED XPG4 XPG4_EXTENDED
13760 z8000
13761 EOSH
13762 # Maybe put other stuff here too.
13763 cat <<EOSH >>Cppsym.know
13764 $osname
13765 EOSH
13766 ./tr '[a-z]' '[A-Z]' < Cppsym.know > Cppsym.a
13767 ./tr '[A-Z]' '[a-z]' < Cppsym.know > Cppsym.b
13768 $cat Cppsym.a Cppsym.b | $tr ' ' $trnl | sort | uniq > Cppsym.know
13769 $rm -f Cppsym.a Cppsym.b
13770 cat <<EOSH > Cppsym
13771 $startsh
13772 if $test \$# -gt 0; then
13773     echo \$* | $tr " " "$trnl" | ./Cppsym.try > Cppsym.got
13774     if $test -s Cppsym.got; then
13775         $rm -f Cppsym.got
13776         exit 0
13777     fi
13778     $rm -f Cppsym.got
13779     exit 1
13780 else
13781     $tr " " "$trnl" | ./Cppsym.try
13782     exit 0
13783 fi
13784 EOSH
13785 chmod +x Cppsym
13786 $eunicefix Cppsym
13787 cat <<EOSH > Cppsym.try
13788 $startsh
13789 cat <<'EOCP' > try.c
13790 #include <stdio.h>
13791 int main() {
13792 EOCP
13793 $awk \\
13794 EOSH
13795 cat <<'EOSH' >> Cppsym.try
13796 'length($1) > 0 {
13797     printf "#ifdef %s\n#if %s+0\nprintf(\"%s=%%ld\\n\", %s);\n#else\nprintf(\"%s\\n\");\n#endif\n#endif\n", $1, $1, $1, $1, $1
13798     printf "#ifdef _%s\n#if _%s+0\nprintf(\"_%s=%%ld\\n\", _%s);\n#else\nprintf(\"_%s\\n\");\n#endif\n#endif\n", $1, $1, $1, $1, $1
13799     printf "#ifdef __%s\n#if __%s+0\nprintf(\"__%s=%%ld\\n\", __%s);\n#else\nprintf(\"__%s\\n\");\n#endif\n#endif\n", $1, $1, $1, $1, $1
13800     printf "#ifdef __%s__\n#if __%s__+0\nprintf(\"__%s__=%%ld\\n\", __%s__);\n#else\nprintf(\"__%s__\\n\");\n#endif\n#endif\n", $1, $1, $1, $1, $1
13801 }'       >> try.c
13802 echo '}' >> try.c
13803 EOSH
13804 cat <<EOSH >> Cppsym.try
13805 cc="$cc"
13806 optimize="$optimize"
13807 ccflags="$ccflags"
13808 ldflags="$ldflags"
13809 libs="$libs"
13810 exe_ext="$exe_ext"
13811 $cc $optimize $ccflags $ldflags -o try try.c $libs && ./try$exe_ext
13812 EOSH
13813 chmod +x Cppsym.try
13814 $eunicefix Cppsym.try
13815 ./Cppsym < Cppsym.know > Cppsym.true
13816 : now check the C compiler for additional symbols
13817 postprocess_cc_v=''
13818 case "$osname" in
13819 aix) postprocess_cc_v="|$tr , ' '" ;;
13820 esac
13821 $cat >ccsym <<EOS
13822 $startsh
13823 $cat >tmp.c <<EOF
13824 extern int foo;
13825 EOF
13826 for i in \`$cc -v -c tmp.c 2>&1 $postprocess_cc_v\`
13827 do
13828         case "\$i" in
13829         -D*) echo "\$i" | $sed 's/^-D//';;
13830         -A*) $test "$gccversion" && echo "\$i" | $sed 's/^-A\(.*\)(\(.*\))/\1=\2/';;
13831         esac
13832 done
13833 $rm -f try.c
13834 EOS
13835 postprocess_cc_v=''
13836 chmod +x ccsym
13837 $eunicefix ccsym
13838 ./ccsym > ccsym1.raw
13839 if $test -s ccsym1.raw; then
13840        $sort ccsym1.raw | $uniq >ccsym.raw
13841 else
13842        mv ccsym1.raw ccsym.raw
13843 fi
13844
13845 $awk '/\=/ { print $0; next }
13846         { print $0"=1" }' ccsym.raw >ccsym.list
13847 $awk '/\=/ { print $0; next }
13848         { print $0"=1" }' Cppsym.true >ccsym.true
13849 $comm -13 ccsym.true ccsym.list >ccsym.own
13850 $comm -12 ccsym.true ccsym.list >ccsym.com
13851 $comm -23 ccsym.true ccsym.list >ccsym.cpp
13852 also=''
13853 if $test -z ccsym.raw; then
13854         echo "Your C compiler doesn't seem to define any symbols!" >&4
13855         echo " "
13856         echo "However, your C preprocessor defines the following symbols:"
13857         $cat Cppsym.true
13858         ccsymbols=''
13859         cppsymbols=`$cat Cppsym.true`
13860         cppsymbols=`echo $cppsymbols`
13861         cppccsymbols="$cppsymbols"
13862 else
13863         if $test -s ccsym.com; then
13864                 echo "Your C compiler and pre-processor define these symbols:"
13865                 $sed -e 's/\(.*\)=.*/\1/' ccsym.com
13866                 also='also '
13867                 symbols='ones'
13868                 cppccsymbols=`$cat ccsym.com`
13869                 cppccsymbols=`echo $cppccsymbols`
13870                 $test "$silent" || sleep 1
13871         fi
13872         if $test -s ccsym.cpp; then
13873                 $test "$also" && echo " "
13874                 echo "Your C pre-processor ${also}defines the following symbols:"
13875                 $sed -e 's/\(.*\)=.*/\1/' ccsym.cpp
13876                 also='further '
13877                 cppsymbols=`$cat ccsym.cpp`
13878                 cppsymbols=`echo $cppsymbols`
13879                 $test "$silent" || sleep 1
13880         fi
13881         if $test -s ccsym.own; then
13882                 $test "$also" && echo " "
13883                 echo "Your C compiler ${also}defines the following cpp symbols:"
13884                 $sed -e 's/\(.*\)=1/\1/' ccsym.own
13885                 $sed -e 's/\(.*\)=.*/\1/' ccsym.own | $uniq >>Cppsym.true
13886                 ccsymbols=`$cat ccsym.own`
13887                 ccsymbols=`echo $ccsymbols`
13888                 $test "$silent" || sleep 1
13889         fi
13890 fi
13891 $rm -f ccsym*
13892
13893 : see if this is a termio system
13894 val="$undef"
13895 val2="$undef"
13896 val3="$undef"
13897 if $test `./findhdr termios.h`; then
13898         set tcsetattr i_termios
13899         eval $inlibc
13900         val3="$i_termios"
13901 fi
13902 echo " "
13903 case "$val3" in
13904 "$define") echo "You have POSIX termios.h... good!" >&4;;
13905 *) if ./Cppsym pyr; then
13906                 case "`/bin/universe`" in
13907                 ucb) if $test `./findhdr sgtty.h`; then
13908                                 val2="$define"
13909                                 echo "<sgtty.h> found." >&4
13910                         else
13911                                 echo "System is pyramid with BSD universe."
13912                                 echo "<sgtty.h> not found--you could have problems." >&4
13913                         fi;;
13914                 *) if $test `./findhdr termio.h`; then
13915                                 val="$define"
13916                                 echo "<termio.h> found." >&4
13917                         else
13918                                 echo "System is pyramid with USG universe."
13919                                 echo "<termio.h> not found--you could have problems." >&4
13920                         fi;;
13921                 esac
13922         elif ./usg; then
13923                 if $test `./findhdr termio.h`; then
13924                         echo "<termio.h> found." >&4
13925                         val="$define"
13926                 elif $test `./findhdr sgtty.h`; then
13927                         echo "<sgtty.h> found." >&4
13928                         val2="$define"
13929                 else
13930 echo "Neither <termio.h> nor <sgtty.h> found--you could have problems." >&4
13931                 fi
13932         else
13933                 if $test `./findhdr sgtty.h`; then
13934                         echo "<sgtty.h> found." >&4
13935                         val2="$define"
13936                 elif $test `./findhdr termio.h`; then
13937                         echo "<termio.h> found." >&4
13938                         val="$define"
13939                 else
13940 echo "Neither <sgtty.h> nor <termio.h> found--you could have problems." >&4
13941                 fi
13942         fi;;
13943 esac
13944 set i_termio; eval $setvar
13945 val=$val2; set i_sgtty; eval $setvar
13946 val=$val3; set i_termios; eval $setvar
13947
13948 : see if this is a shadow.h system
13949 set shadow.h i_shadow
13950 eval $inhdr
13951
13952 : see if this is a socks.h system
13953 set socks.h i_socks
13954 eval $inhdr
13955
13956 : see if stdarg is available
13957 echo " "
13958 if $test `./findhdr stdarg.h`; then
13959         echo "<stdarg.h> found." >&4
13960         valstd="$define"
13961 else
13962         echo "<stdarg.h> NOT found." >&4
13963         valstd="$undef"
13964 fi
13965
13966 : see if varags is available
13967 echo " "
13968 if $test `./findhdr varargs.h`; then
13969         echo "<varargs.h> found." >&4
13970 else
13971         echo "<varargs.h> NOT found, but that's ok (I hope)." >&4
13972 fi
13973
13974 : set up the varargs testing programs
13975 $cat > varargs.c <<EOP
13976 #ifdef I_STDARG
13977 #include <stdarg.h>
13978 #endif
13979 #ifdef I_VARARGS
13980 #include <varargs.h>
13981 #endif
13982
13983 #ifdef I_STDARG
13984 int f(char *p, ...)
13985 #else
13986 int f(va_alist)
13987 va_dcl
13988 #endif
13989 {
13990         va_list ap;
13991 #ifndef I_STDARG
13992         char *p;
13993 #endif
13994 #ifdef I_STDARG
13995         va_start(ap,p);
13996 #else
13997         va_start(ap);
13998         p = va_arg(ap, char *);
13999 #endif
14000         va_end(ap);
14001 }
14002 EOP
14003 $cat > varargs <<EOP
14004 $startsh
14005 if $cc -c $ccflags -D\$1 varargs.c >/dev/null 2>&1; then
14006         echo "true"
14007 else
14008         echo "false"
14009 fi
14010 $rm -f varargs$_o
14011 EOP
14012 chmod +x varargs
14013
14014 : now check which varargs header should be included
14015 echo " "
14016 i_varhdr=''
14017 case "$valstd" in
14018 "$define")
14019         if `./varargs I_STDARG`; then
14020                 val='stdarg.h'
14021         elif `./varargs I_VARARGS`; then
14022                 val='varargs.h'
14023         fi
14024         ;;
14025 *)
14026         if `./varargs I_VARARGS`; then
14027                 val='varargs.h'
14028         fi
14029         ;;
14030 esac
14031 case "$val" in
14032 '')
14033 echo "I could not find the definition for va_dcl... You have problems..." >&4
14034         val="$undef"; set i_stdarg; eval $setvar
14035         val="$undef"; set i_varargs; eval $setvar
14036         ;;
14037 *) 
14038         set i_varhdr
14039         eval $setvar
14040         case "$i_varhdr" in
14041         stdarg.h)
14042                 val="$define"; set i_stdarg; eval $setvar
14043                 val="$undef"; set i_varargs; eval $setvar
14044                 ;;
14045         varargs.h)
14046                 val="$undef"; set i_stdarg; eval $setvar
14047                 val="$define"; set i_varargs; eval $setvar
14048                 ;;
14049         esac
14050         echo "We'll include <$i_varhdr> to get va_dcl definition." >&4;;
14051 esac
14052 $rm -f varargs*
14053
14054 : see if stddef is available
14055 set stddef.h i_stddef
14056 eval $inhdr
14057
14058 : see if sys/access.h is available
14059 set sys/access.h i_sysaccess
14060 eval $inhdr
14061
14062 : see if ioctl defs are in sgtty, termio, sys/filio or sys/ioctl
14063 set sys/filio.h i_sysfilio
14064 eval $inhdr
14065 echo " "
14066 if $test `./findhdr sys/ioctl.h`; then
14067         val="$define"
14068         echo '<sys/ioctl.h> found.' >&4
14069 else
14070         val="$undef"
14071         if $test $i_sysfilio = "$define"; then
14072             echo '<sys/ioctl.h> NOT found.' >&4
14073         else
14074                 $test $i_sgtty = "$define" && xxx="sgtty.h"
14075                 $test $i_termio = "$define" && xxx="termio.h"
14076                 $test $i_termios = "$define" && xxx="termios.h"
14077 echo "No <sys/ioctl.h> found, assuming ioctl args are defined in <$xxx>." >&4
14078         fi
14079 fi
14080 set i_sysioctl
14081 eval $setvar
14082
14083
14084 : see if this is a syslog.h system
14085 set syslog.h i_syslog
14086 eval $inhdr
14087
14088 : see if sys/resource.h has to be included
14089 set sys/resource.h i_sysresrc
14090 eval $inhdr
14091
14092 : see if sys/security.h is available
14093 set sys/security.h i_syssecrt
14094 eval $inhdr
14095
14096 : see if this is a sys/statvfs.h system
14097 set sys/statvfs.h i_sysstatvfs
14098 eval $inhdr
14099
14100 : see if this is a sys/uio.h system
14101 set sys/uio.h i_sysuio
14102 eval $inhdr
14103
14104 : see if this is a sys/un.h system
14105 set sys/un.h i_sysun
14106 eval $inhdr
14107
14108 : see if this is a syswait system
14109 set sys/wait.h i_syswait
14110 eval $inhdr
14111
14112 : see if this is a ustat.h system
14113 set ustat.h i_ustat
14114 eval $inhdr
14115
14116 : see if this is an utime system
14117 set utime.h i_utime
14118 eval $inhdr
14119
14120 : see if this is a values.h system
14121 set values.h i_values
14122 eval $inhdr
14123
14124 : see if this is a vfork system
14125 case "$d_vfork" in
14126 "$define")
14127         set vfork.h i_vfork
14128         eval $inhdr
14129         ;;
14130 *)
14131         i_vfork="$undef"
14132         ;;
14133 esac
14134
14135 : see if gdbm.h is available
14136 set gdbm.h t_gdbm
14137 eval $inhdr
14138 case "$t_gdbm" in
14139 $define)
14140         : see if gdbm_open exists
14141         set gdbm_open d_gdbm_open
14142         eval $inlibc
14143         case "$d_gdbm_open" in
14144         $undef)
14145                 t_gdbm="$undef"
14146                 echo "We won't be including <gdbm.h>"
14147                 ;;
14148         esac
14149         ;;
14150 esac
14151 val="$t_gdbm"
14152 set i_gdbm
14153 eval $setvar
14154
14155 echo " "
14156 echo "Looking for extensions..." >&4
14157 : If we are using the old config.sh, known_extensions may contain
14158 : old or inaccurate or duplicate values.
14159 known_extensions=''
14160 nonxs_extensions=''
14161 : We do not use find because it might not be available.
14162 : We do not just use MANIFEST because the user may have dropped
14163 : some additional extensions into the source tree and expect them
14164 : to be built.
14165
14166 : Function to recursively find available extensions, ignoring DynaLoader
14167 : NOTE: recursion limit of 10 to prevent runaway in case of symlink madness
14168 find_extensions='
14169     for xxx in *; do
14170        case "$xxx" in
14171            DynaLoader|dynaload) ;;
14172            *)
14173            if $test -f $xxx/$xxx.xs; then
14174                known_extensions="$known_extensions $1$xxx";
14175            elif $test -f $xxx/Makefile.PL; then
14176                nonxs_extensions="$nonxs_extensions $1$xxx";
14177            else
14178                if $test -d $xxx -a $# -lt 10; then
14179                    set $1$xxx/ $*;
14180                    cd $xxx;
14181                    eval $find_extensions;
14182                    cd ..;
14183                    shift;
14184                fi;
14185            fi
14186            ;;
14187        esac;
14188     done'
14189 tdir=`pwd`
14190 cd $rsrc/ext
14191 set X
14192 shift
14193 eval $find_extensions
14194 set X $nonxs_extensions
14195 shift
14196 nonxs_extensions="$*"
14197 set X $known_extensions
14198 shift
14199 known_extensions="$*"
14200 cd $tdir
14201
14202 : Now see which are supported on this system.
14203 avail_ext=''
14204 for xxx in $known_extensions ; do
14205         case "$xxx" in
14206         DB_File|db_file)
14207                 case "$i_db" in
14208                 $define) avail_ext="$avail_ext $xxx" ;;
14209                 esac
14210                 ;;
14211         GDBM_File|gdbm_fil)
14212                 case "$i_gdbm" in 
14213                 $define) avail_ext="$avail_ext $xxx" ;;
14214                 esac
14215                 ;;
14216         NDBM_File|ndbm_fil)
14217                 case "$i_ndbm" in
14218                 $define) avail_ext="$avail_ext $xxx" ;;
14219                 esac
14220                 ;;
14221         ODBM_File|odbm_fil) 
14222                 case "${i_dbm}${i_rpcsvcdbm}" in
14223                 *"${define}"*) avail_ext="$avail_ext $xxx" ;;
14224                 esac
14225                 ;;
14226         POSIX|posix)
14227                 case "$useposix" in
14228                 true|define|y) avail_ext="$avail_ext $xxx" ;;
14229                 esac
14230                 ;;
14231         Opcode|opcode)
14232                 case "$useopcode" in
14233                 true|define|y) avail_ext="$avail_ext $xxx" ;;
14234                 esac
14235                 ;;
14236         Socket|socket)
14237                 case "$d_socket" in 
14238                 true|$define|y) avail_ext="$avail_ext $xxx" ;;
14239                 esac
14240                 ;;
14241         Thread|thread)
14242                 case "$usethreads" in 
14243                 true|$define|y) avail_ext="$avail_ext $xxx" ;;
14244                 esac
14245                 ;;
14246         IPC/SysV|ipc/sysv)
14247                 : XXX Do we need a useipcsysv variable here
14248                 case "${d_msg}${d_sem}${d_shm}" in 
14249                 *"${define}"*) avail_ext="$avail_ext $xxx" ;;
14250                 esac
14251                 ;;
14252         *)      avail_ext="$avail_ext $xxx"
14253                 ;;
14254         esac
14255 done
14256
14257 set X $avail_ext
14258 shift
14259 avail_ext="$*"
14260
14261 : Now see which nonxs extensions are supported on this system.
14262 : For now assume all are.
14263 nonxs_ext=''
14264 for xxx in $nonxs_extensions ; do
14265         case "$xxx" in
14266         *)      nonxs_ext="$nonxs_ext $xxx"
14267                 ;;
14268         esac
14269 done
14270
14271 set X $nonxs_ext
14272 shift
14273 nonxs_ext="$*"
14274
14275 case $usedl in
14276 $define)
14277         $cat <<EOM
14278 A number of extensions are supplied with $package.  You may choose to
14279 compile these extensions for dynamic loading (the default), compile
14280 them into the $package executable (static loading), or not include
14281 them at all.  Answer "none" to include no extensions.
14282 Note that DynaLoader is always built and need not be mentioned here.
14283
14284 EOM
14285         case "$dynamic_ext" in
14286         '') dflt="$avail_ext" ;;
14287         *)      dflt="$dynamic_ext"
14288                 # Perhaps we are reusing an old out-of-date config.sh.
14289                 case "$hint" in
14290                 previous)
14291                         if test X"$dynamic_ext" != X"$avail_ext"; then
14292                                 $cat <<EOM
14293 NOTICE:  Your previous config.sh list may be incorrect. 
14294 The extensions now available to you are 
14295         ${avail_ext}
14296 but the default list from your previous config.sh is
14297         ${dynamic_ext} 
14298
14299 EOM
14300                         fi
14301                         ;;
14302                 esac
14303                 ;;
14304         esac
14305         case "$dflt" in
14306         '')     dflt=none;;
14307         esac
14308         rp="What extensions do you wish to load dynamically?"
14309         . ./myread
14310         case "$ans" in
14311         none) dynamic_ext=' ' ;;
14312         *) dynamic_ext="$ans" ;;
14313         esac
14314
14315         case "$static_ext" in
14316         '')
14317                 : Exclude those already listed in dynamic linking
14318                 dflt=''
14319                 for xxx in $avail_ext; do
14320                         case " $dynamic_ext " in
14321                         *" $xxx "*) ;;
14322                         *) dflt="$dflt $xxx" ;;
14323                         esac
14324                 done
14325                 set X $dflt
14326                 shift
14327                 dflt="$*"
14328                 ;;
14329         *)  dflt="$static_ext" 
14330                 ;;
14331         esac
14332
14333         case "$dflt" in
14334         '')     dflt=none;;
14335         esac
14336         rp="What extensions do you wish to load statically?"
14337         . ./myread
14338         case "$ans" in
14339         none) static_ext=' ' ;;
14340         *) static_ext="$ans" ;;
14341         esac
14342         ;;
14343 *)
14344         $cat <<EOM
14345 A number of extensions are supplied with $package.  Answer "none" 
14346 to include no extensions. 
14347 Note that DynaLoader is always built and need not be mentioned here.
14348
14349 EOM
14350         case "$static_ext" in
14351         '') dflt="$avail_ext" ;;
14352         *)      dflt="$static_ext"
14353                 # Perhaps we are reusing an old out-of-date config.sh.
14354                 case "$hint" in
14355                 previous)
14356                         if test X"$static_ext" != X"$avail_ext"; then
14357                                 $cat <<EOM
14358 NOTICE:  Your previous config.sh list may be incorrect. 
14359 The extensions now available to you are 
14360         ${avail_ext}
14361 but the default list from your previous config.sh is
14362         ${static_ext} 
14363
14364 EOM
14365                         fi
14366                         ;;
14367                 esac
14368                 ;;
14369         esac
14370         : Exclude those that are not xs extensions
14371         case "$dflt" in
14372         '')     dflt=none;;
14373         esac
14374         rp="What extensions do you wish to include?"
14375         . ./myread
14376         case "$ans" in
14377         none) static_ext=' ' ;;
14378         *) static_ext="$ans" ;;
14379         esac
14380         ;;
14381 esac
14382
14383 set X $dynamic_ext $static_ext $nonxs_ext
14384 shift
14385 extensions="$*"
14386
14387 : Remove build directory name from cppstdin so it can be used from
14388 : either the present location or the final installed location.
14389 echo " "
14390 : Get out of the UU directory to get correct path name.
14391 cd ..
14392 case "$cppstdin" in
14393 `pwd`/cppstdin)
14394         echo "Stripping down cppstdin path name"
14395         cppstdin=cppstdin
14396         ;;
14397 esac
14398 cd UU
14399
14400 : end of configuration questions
14401 echo " "
14402 echo "End of configuration questions."
14403 echo " "
14404
14405 : back to where it started
14406 if test -d ../UU; then
14407         cd ..
14408 fi
14409
14410 : configuration may be patched via a 'config.over' file
14411 if $test -f config.over; then
14412         echo " "
14413         dflt=y
14414         rp='I see a config.over file.  Do you wish to load it?'
14415         . UU/myread
14416         case "$ans" in
14417         n*) echo "OK, I'll ignore it.";;
14418         *)      . ./config.over
14419                 echo "Configuration override changes have been loaded."
14420                 ;;
14421         esac
14422 fi
14423
14424 : in case they want portability, strip down executable paths
14425 case "$d_portable" in
14426 "$define")
14427         echo " "
14428         echo "Stripping down executable paths..." >&4
14429         for file in $loclist $trylist; do
14430                 eval temp=\$$file
14431                 eval $file=`basename $temp`
14432         done
14433         ;;
14434 esac
14435
14436 : create config.sh file
14437 echo " "
14438 echo "Creating config.sh..." >&4
14439 $spitshell <<EOT >config.sh
14440 $startsh
14441 #
14442 # This file was produced by running the Configure script. It holds all the
14443 # definitions figured out by Configure. Should you modify one of these values,
14444 # do not forget to propagate your changes by running "Configure -der". You may
14445 # instead choose to run each of the .SH files by yourself, or "Configure -S".
14446 #
14447
14448 # Package name      : $package
14449 # Source directory  : $src
14450 # Configuration time: $cf_time
14451 # Configured by     : $cf_by
14452 # Target system     : $myuname
14453
14454 Author='$Author'
14455 Date='$Date'
14456 Header='$Header'
14457 Id='$Id'
14458 Locker='$Locker'
14459 Log='$Log'
14460 Mcc='$Mcc'
14461 RCSfile='$RCSfile'
14462 Revision='$Revision'
14463 Source='$Source'
14464 State='$State'
14465 _a='$_a'
14466 _exe='$_exe'
14467 _o='$_o'
14468 afs='$afs'
14469 alignbytes='$alignbytes'
14470 ansi2knr='$ansi2knr'
14471 aphostname='$aphostname'
14472 api_revision='$api_revision'
14473 api_subversion='$api_subversion'
14474 api_version='$api_version'
14475 api_versionstring='$api_versionstring'
14476 ar='$ar'
14477 archlib='$archlib'
14478 archlibexp='$archlibexp'
14479 archname64='$archname64'
14480 archname='$archname'
14481 archobjs='$archobjs'
14482 awk='$awk'
14483 baserev='$baserev'
14484 bash='$bash'
14485 bin='$bin'
14486 bincompat5005='$bincompat5005'
14487 binexp='$binexp'
14488 bison='$bison'
14489 byacc='$byacc'
14490 byteorder='$byteorder'
14491 c='$c'
14492 castflags='$castflags'
14493 cat='$cat'
14494 cc='$cc'
14495 cccdlflags='$cccdlflags'
14496 ccdlflags='$ccdlflags'
14497 ccflags='$ccflags'
14498 ccsymbols='$ccsymbols'
14499 cf_by='$cf_by'
14500 cf_email='$cf_email'
14501 cf_time='$cf_time'
14502 charsize='$charsize'
14503 chgrp='$chgrp'
14504 chmod='$chmod'
14505 chown='$chown'
14506 clocktype='$clocktype'
14507 comm='$comm'
14508 compress='$compress'
14509 contains='$contains'
14510 cp='$cp'
14511 cpio='$cpio'
14512 cpp='$cpp'
14513 cpp_stuff='$cpp_stuff'
14514 cppccsymbols='$cppccsymbols'
14515 cppflags='$cppflags'
14516 cpplast='$cpplast'
14517 cppminus='$cppminus'
14518 cpprun='$cpprun'
14519 cppstdin='$cppstdin'
14520 cppsymbols='$cppsymbols'
14521 crosscompile='$crosscompile'
14522 cryptlib='$cryptlib'
14523 csh='$csh'
14524 d_Gconvert='$d_Gconvert'
14525 d_PRIEldbl='$d_PRIEldbl'
14526 d_PRIFldbl='$d_PRIFldbl'
14527 d_PRIGldbl='$d_PRIGldbl'
14528 d_PRIX64='$d_PRIX64'
14529 d_PRId64='$d_PRId64'
14530 d_PRIeldbl='$d_PRIeldbl'
14531 d_PRIfldbl='$d_PRIfldbl'
14532 d_PRIgldbl='$d_PRIgldbl'
14533 d_PRIi64='$d_PRIi64'
14534 d_PRIo64='$d_PRIo64'
14535 d_PRIu64='$d_PRIu64'
14536 d_PRIx64='$d_PRIx64'
14537 d_access='$d_access'
14538 d_accessx='$d_accessx'
14539 d_alarm='$d_alarm'
14540 d_archlib='$d_archlib'
14541 d_atolf='$d_atolf'
14542 d_atoll='$d_atoll'
14543 d_attribut='$d_attribut'
14544 d_bcmp='$d_bcmp'
14545 d_bcopy='$d_bcopy'
14546 d_bincompat5005='$d_bincompat5005'
14547 d_bsd='$d_bsd'
14548 d_bsdgetpgrp='$d_bsdgetpgrp'
14549 d_bsdsetpgrp='$d_bsdsetpgrp'
14550 d_bzero='$d_bzero'
14551 d_casti32='$d_casti32'
14552 d_castneg='$d_castneg'
14553 d_charvspr='$d_charvspr'
14554 d_chown='$d_chown'
14555 d_chroot='$d_chroot'
14556 d_chsize='$d_chsize'
14557 d_closedir='$d_closedir'
14558 d_const='$d_const'
14559 d_crypt='$d_crypt'
14560 d_csh='$d_csh'
14561 d_cuserid='$d_cuserid'
14562 d_dbl_dig='$d_dbl_dig'
14563 d_difftime='$d_difftime'
14564 d_dirnamlen='$d_dirnamlen'
14565 d_dlerror='$d_dlerror'
14566 d_dlopen='$d_dlopen'
14567 d_dlsymun='$d_dlsymun'
14568 d_dosuid='$d_dosuid'
14569 d_drand48proto='$d_drand48proto'
14570 d_dup2='$d_dup2'
14571 d_eaccess='$d_eaccess'
14572 d_endgrent='$d_endgrent'
14573 d_endhent='$d_endhent'
14574 d_endnent='$d_endnent'
14575 d_endpent='$d_endpent'
14576 d_endpwent='$d_endpwent'
14577 d_endsent='$d_endsent'
14578 d_endspent='$d_endspent'
14579 d_eofnblk='$d_eofnblk'
14580 d_eunice='$d_eunice'
14581 d_fchmod='$d_fchmod'
14582 d_fchown='$d_fchown'
14583 d_fcntl='$d_fcntl'
14584 d_fd_macros='$d_fd_macros'
14585 d_fd_set='$d_fd_set'
14586 d_fds_bits='$d_fds_bits'
14587 d_fgetpos='$d_fgetpos'
14588 d_flexfnam='$d_flexfnam'
14589 d_flock='$d_flock'
14590 d_fork='$d_fork'
14591 d_fpathconf='$d_fpathconf'
14592 d_fpos64_t='$d_fpos64_t'
14593 d_fs_data_s='$d_fs_data_s'
14594 d_fseeko='$d_fseeko'
14595 d_fsetpos='$d_fsetpos'
14596 d_fstatfs='$d_fstatfs'
14597 d_fstatvfs='$d_fstatvfs'
14598 d_ftello='$d_ftello'
14599 d_ftime='$d_ftime'
14600 d_getcwd='$d_getcwd'
14601 d_getgrent='$d_getgrent'
14602 d_getgrps='$d_getgrps'
14603 d_gethbyaddr='$d_gethbyaddr'
14604 d_gethbyname='$d_gethbyname'
14605 d_gethent='$d_gethent'
14606 d_gethname='$d_gethname'
14607 d_gethostprotos='$d_gethostprotos'
14608 d_getlogin='$d_getlogin'
14609 d_getmnt='$d_getmnt'
14610 d_getmntent='$d_getmntent'
14611 d_getnbyaddr='$d_getnbyaddr'
14612 d_getnbyname='$d_getnbyname'
14613 d_getnent='$d_getnent'
14614 d_getnetprotos='$d_getnetprotos'
14615 d_getpbyname='$d_getpbyname'
14616 d_getpbynumber='$d_getpbynumber'
14617 d_getpent='$d_getpent'
14618 d_getpgid='$d_getpgid'
14619 d_getpgrp2='$d_getpgrp2'
14620 d_getpgrp='$d_getpgrp'
14621 d_getppid='$d_getppid'
14622 d_getprior='$d_getprior'
14623 d_getprotoprotos='$d_getprotoprotos'
14624 d_getpwent='$d_getpwent'
14625 d_getsbyname='$d_getsbyname'
14626 d_getsbyport='$d_getsbyport'
14627 d_getsent='$d_getsent'
14628 d_getservprotos='$d_getservprotos'
14629 d_getspent='$d_getspent'
14630 d_getspnam='$d_getspnam'
14631 d_gettimeod='$d_gettimeod'
14632 d_gnulibc='$d_gnulibc'
14633 d_grpasswd='$d_grpasswd'
14634 d_hasmntopt='$d_hasmntopt'
14635 d_htonl='$d_htonl'
14636 d_iconv='$d_iconv'
14637 d_index='$d_index'
14638 d_inetaton='$d_inetaton'
14639 d_int64t='$d_int64t'
14640 d_isascii='$d_isascii'
14641 d_killpg='$d_killpg'
14642 d_lchown='$d_lchown'
14643 d_ldbl_dig='$d_ldbl_dig'
14644 d_link='$d_link'
14645 d_locconv='$d_locconv'
14646 d_lockf='$d_lockf'
14647 d_longdbl='$d_longdbl'
14648 d_longlong='$d_longlong'
14649 d_lstat='$d_lstat'
14650 d_mblen='$d_mblen'
14651 d_mbstowcs='$d_mbstowcs'
14652 d_mbtowc='$d_mbtowc'
14653 d_memchr='$d_memchr'
14654 d_memcmp='$d_memcmp'
14655 d_memcpy='$d_memcpy'
14656 d_memmove='$d_memmove'
14657 d_memset='$d_memset'
14658 d_mkdir='$d_mkdir'
14659 d_mkdtemp='$d_mkdtemp'
14660 d_mkfifo='$d_mkfifo'
14661 d_mkstemp='$d_mkstemp'
14662 d_mkstemps='$d_mkstemps'
14663 d_mktime='$d_mktime'
14664 d_mmap='$d_mmap'
14665 d_mprotect='$d_mprotect'
14666 d_msg='$d_msg'
14667 d_msg_ctrunc='$d_msg_ctrunc'
14668 d_msg_dontroute='$d_msg_dontroute'
14669 d_msg_oob='$d_msg_oob'
14670 d_msg_peek='$d_msg_peek'
14671 d_msg_proxy='$d_msg_proxy'
14672 d_msgctl='$d_msgctl'
14673 d_msgget='$d_msgget'
14674 d_msgrcv='$d_msgrcv'
14675 d_msgsnd='$d_msgsnd'
14676 d_msync='$d_msync'
14677 d_munmap='$d_munmap'
14678 d_mymalloc='$d_mymalloc'
14679 d_nice='$d_nice'
14680 d_nv_preserves_uv='$d_nv_preserves_uv'
14681 d_off64_t='$d_off64_t'
14682 d_old_pthread_create_joinable='$d_old_pthread_create_joinable'
14683 d_oldpthreads='$d_oldpthreads'
14684 d_oldsock='$d_oldsock'
14685 d_open3='$d_open3'
14686 d_pathconf='$d_pathconf'
14687 d_pause='$d_pause'
14688 d_phostname='$d_phostname'
14689 d_pipe='$d_pipe'
14690 d_poll='$d_poll'
14691 d_portable='$d_portable'
14692 d_pthread_yield='$d_pthread_yield'
14693 d_pwage='$d_pwage'
14694 d_pwchange='$d_pwchange'
14695 d_pwclass='$d_pwclass'
14696 d_pwcomment='$d_pwcomment'
14697 d_pwexpire='$d_pwexpire'
14698 d_pwgecos='$d_pwgecos'
14699 d_pwpasswd='$d_pwpasswd'
14700 d_pwquota='$d_pwquota'
14701 d_quad='$d_quad'
14702 d_readdir='$d_readdir'
14703 d_readlink='$d_readlink'
14704 d_rename='$d_rename'
14705 d_rewinddir='$d_rewinddir'
14706 d_rmdir='$d_rmdir'
14707 d_safebcpy='$d_safebcpy'
14708 d_safemcpy='$d_safemcpy'
14709 d_sanemcmp='$d_sanemcmp'
14710 d_sched_yield='$d_sched_yield'
14711 d_scm_rights='$d_scm_rights'
14712 d_seekdir='$d_seekdir'
14713 d_select='$d_select'
14714 d_sem='$d_sem'
14715 d_semctl='$d_semctl'
14716 d_semctl_semid_ds='$d_semctl_semid_ds'
14717 d_semctl_semun='$d_semctl_semun'
14718 d_semget='$d_semget'
14719 d_semop='$d_semop'
14720 d_setegid='$d_setegid'
14721 d_seteuid='$d_seteuid'
14722 d_setgrent='$d_setgrent'
14723 d_setgrps='$d_setgrps'
14724 d_sethent='$d_sethent'
14725 d_setlinebuf='$d_setlinebuf'
14726 d_setlocale='$d_setlocale'
14727 d_setnent='$d_setnent'
14728 d_setpent='$d_setpent'
14729 d_setpgid='$d_setpgid'
14730 d_setpgrp2='$d_setpgrp2'
14731 d_setpgrp='$d_setpgrp'
14732 d_setprior='$d_setprior'
14733 d_setpwent='$d_setpwent'
14734 d_setregid='$d_setregid'
14735 d_setresgid='$d_setresgid'
14736 d_setresuid='$d_setresuid'
14737 d_setreuid='$d_setreuid'
14738 d_setrgid='$d_setrgid'
14739 d_setruid='$d_setruid'
14740 d_setsent='$d_setsent'
14741 d_setsid='$d_setsid'
14742 d_setspent='$d_setspent'
14743 d_setvbuf='$d_setvbuf'
14744 d_sfio='$d_sfio'
14745 d_shm='$d_shm'
14746 d_shmat='$d_shmat'
14747 d_shmatprototype='$d_shmatprototype'
14748 d_shmctl='$d_shmctl'
14749 d_shmdt='$d_shmdt'
14750 d_shmget='$d_shmget'
14751 d_sigaction='$d_sigaction'
14752 d_sigsetjmp='$d_sigsetjmp'
14753 d_socket='$d_socket'
14754 d_sockpair='$d_sockpair'
14755 d_sqrtl='$d_sqrtl'
14756 d_statblks='$d_statblks'
14757 d_statfs_f_flags='$d_statfs_f_flags'
14758 d_statfs_s='$d_statfs_s'
14759 d_statvfs='$d_statvfs'
14760 d_stdio_cnt_lval='$d_stdio_cnt_lval'
14761 d_stdio_ptr_lval='$d_stdio_ptr_lval'
14762 d_stdio_stream_array='$d_stdio_stream_array'
14763 d_stdiobase='$d_stdiobase'
14764 d_stdstdio='$d_stdstdio'
14765 d_strchr='$d_strchr'
14766 d_strcoll='$d_strcoll'
14767 d_strctcpy='$d_strctcpy'
14768 d_strerrm='$d_strerrm'
14769 d_strerror='$d_strerror'
14770 d_strtod='$d_strtod'
14771 d_strtol='$d_strtol'
14772 d_strtold='$d_strtold'
14773 d_strtoll='$d_strtoll'
14774 d_strtoul='$d_strtoul'
14775 d_strtoull='$d_strtoull'
14776 d_strtouq='$d_strtouq'
14777 d_strxfrm='$d_strxfrm'
14778 d_suidsafe='$d_suidsafe'
14779 d_symlink='$d_symlink'
14780 d_syscall='$d_syscall'
14781 d_sysconf='$d_sysconf'
14782 d_sysernlst='$d_sysernlst'
14783 d_syserrlst='$d_syserrlst'
14784 d_system='$d_system'
14785 d_tcgetpgrp='$d_tcgetpgrp'
14786 d_tcsetpgrp='$d_tcsetpgrp'
14787 d_telldir='$d_telldir'
14788 d_telldirproto='$d_telldirproto'
14789 d_time='$d_time'
14790 d_times='$d_times'
14791 d_truncate='$d_truncate'
14792 d_tzname='$d_tzname'
14793 d_umask='$d_umask'
14794 d_uname='$d_uname'
14795 d_union_semun='$d_union_semun'
14796 d_ustat='$d_ustat'
14797 d_vendorbin='$d_vendorbin'
14798 d_vendorlib='$d_vendorlib'
14799 d_vfork='$d_vfork'
14800 d_void_closedir='$d_void_closedir'
14801 d_voidsig='$d_voidsig'
14802 d_voidtty='$d_voidtty'
14803 d_volatile='$d_volatile'
14804 d_vprintf='$d_vprintf'
14805 d_wait4='$d_wait4'
14806 d_waitpid='$d_waitpid'
14807 d_wcstombs='$d_wcstombs'
14808 d_wctomb='$d_wctomb'
14809 d_xenix='$d_xenix'
14810 date='$date'
14811 db_hashtype='$db_hashtype'
14812 db_prefixtype='$db_prefixtype'
14813 defvoidused='$defvoidused'
14814 direntrytype='$direntrytype'
14815 dlext='$dlext'
14816 dlsrc='$dlsrc'
14817 doublesize='$doublesize'
14818 drand01='$drand01'
14819 dynamic_ext='$dynamic_ext'
14820 eagain='$eagain'
14821 ebcdic='$ebcdic'
14822 echo='$echo'
14823 egrep='$egrep'
14824 emacs='$emacs'
14825 eunicefix='$eunicefix'
14826 exe_ext='$exe_ext'
14827 expr='$expr'
14828 extensions='$extensions'
14829 fflushNULL='$fflushNULL'
14830 fflushall='$fflushall'
14831 find='$find'
14832 firstmakefile='$firstmakefile'
14833 flex='$flex'
14834 fpossize='$fpossize'
14835 fpostype='$fpostype'
14836 freetype='$freetype'
14837 full_ar='$full_ar'
14838 full_csh='$full_csh'
14839 full_sed='$full_sed'
14840 gccversion='$gccversion'
14841 gidformat='$gidformat'
14842 gidsign='$gidsign'
14843 gidsize='$gidsize'
14844 gidtype='$gidtype'
14845 glibpth='$glibpth'
14846 grep='$grep'
14847 groupcat='$groupcat'
14848 groupstype='$groupstype'
14849 gzip='$gzip'
14850 h_fcntl='$h_fcntl'
14851 h_sysfile='$h_sysfile'
14852 hint='$hint'
14853 hostcat='$hostcat'
14854 huge='$huge'
14855 i16size='$i16size'
14856 i16type='$i16type'
14857 i32size='$i32size'
14858 i32type='$i32type'
14859 i64size='$i64size'
14860 i64type='$i64type'
14861 i8size='$i8size'
14862 i8type='$i8type'
14863 i_arpainet='$i_arpainet'
14864 i_bsdioctl='$i_bsdioctl'
14865 i_db='$i_db'
14866 i_dbm='$i_dbm'
14867 i_dirent='$i_dirent'
14868 i_dld='$i_dld'
14869 i_dlfcn='$i_dlfcn'
14870 i_fcntl='$i_fcntl'
14871 i_float='$i_float'
14872 i_gdbm='$i_gdbm'
14873 i_grp='$i_grp'
14874 i_iconv='$i_iconv'
14875 i_inttypes='$i_inttypes'
14876 i_limits='$i_limits'
14877 i_locale='$i_locale'
14878 i_machcthr='$i_machcthr'
14879 i_malloc='$i_malloc'
14880 i_math='$i_math'
14881 i_memory='$i_memory'
14882 i_mntent='$i_mntent'
14883 i_ndbm='$i_ndbm'
14884 i_netdb='$i_netdb'
14885 i_neterrno='$i_neterrno'
14886 i_netinettcp='$i_netinettcp'
14887 i_niin='$i_niin'
14888 i_poll='$i_poll'
14889 i_pthread='$i_pthread'
14890 i_pwd='$i_pwd'
14891 i_rpcsvcdbm='$i_rpcsvcdbm'
14892 i_sfio='$i_sfio'
14893 i_sgtty='$i_sgtty'
14894 i_shadow='$i_shadow'
14895 i_socks='$i_socks'
14896 i_stdarg='$i_stdarg'
14897 i_stddef='$i_stddef'
14898 i_stdlib='$i_stdlib'
14899 i_string='$i_string'
14900 i_sysaccess='$i_sysaccess'
14901 i_sysdir='$i_sysdir'
14902 i_sysfile='$i_sysfile'
14903 i_sysfilio='$i_sysfilio'
14904 i_sysin='$i_sysin'
14905 i_sysioctl='$i_sysioctl'
14906 i_syslog='$i_syslog'
14907 i_sysmman='$i_sysmman'
14908 i_sysmount='$i_sysmount'
14909 i_sysndir='$i_sysndir'
14910 i_sysparam='$i_sysparam'
14911 i_sysresrc='$i_sysresrc'
14912 i_syssecrt='$i_syssecrt'
14913 i_sysselct='$i_sysselct'
14914 i_syssockio='$i_syssockio'
14915 i_sysstat='$i_sysstat'
14916 i_sysstatfs='$i_sysstatfs'
14917 i_sysstatvfs='$i_sysstatvfs'
14918 i_systime='$i_systime'
14919 i_systimek='$i_systimek'
14920 i_systimes='$i_systimes'
14921 i_systypes='$i_systypes'
14922 i_sysuio='$i_sysuio'
14923 i_sysun='$i_sysun'
14924 i_sysvfs='$i_sysvfs'
14925 i_syswait='$i_syswait'
14926 i_termio='$i_termio'
14927 i_termios='$i_termios'
14928 i_time='$i_time'
14929 i_unistd='$i_unistd'
14930 i_ustat='$i_ustat'
14931 i_utime='$i_utime'
14932 i_values='$i_values'
14933 i_varargs='$i_varargs'
14934 i_varhdr='$i_varhdr'
14935 i_vfork='$i_vfork'
14936 ignore_versioned_solibs='$ignore_versioned_solibs'
14937 inc_version_list='$inc_version_list'
14938 inc_version_list_init='$inc_version_list_init'
14939 incpath='$incpath'
14940 inews='$inews'
14941 installarchlib='$installarchlib'
14942 installbin='$installbin'
14943 installman1dir='$installman1dir'
14944 installman3dir='$installman3dir'
14945 installprefix='$installprefix'
14946 installprefixexp='$installprefixexp'
14947 installprivlib='$installprivlib'
14948 installscript='$installscript'
14949 installsitearch='$installsitearch'
14950 installsitebin='$installsitebin'
14951 installsitelib='$installsitelib'
14952 installstyle='$installstyle'
14953 installusrbinperl='$installusrbinperl'
14954 installvendorbin='$installvendorbin'
14955 installvendorlib='$installvendorlib'
14956 intsize='$intsize'
14957 ivdformat='$ivdformat'
14958 ivsize='$ivsize'
14959 ivtype='$ivtype'
14960 known_extensions='$known_extensions'
14961 ksh='$ksh'
14962 large='$large'
14963 ld='$ld'
14964 lddlflags='$lddlflags'
14965 ldflags='$ldflags'
14966 ldlibpthname='$ldlibpthname'
14967 less='$less'
14968 lib_ext='$lib_ext'
14969 libc='$libc'
14970 libperl='$libperl'
14971 libpth='$libpth'
14972 libs='$libs'
14973 libsdirs='$libsdirs'
14974 libsfiles='$libsfiles'
14975 libsfound='$libsfound'
14976 libswanted='$libswanted'
14977 line='$line'
14978 lint='$lint'
14979 lkflags='$lkflags'
14980 ln='$ln'
14981 lns='$lns'
14982 locincpth='$locincpth'
14983 loclibpth='$loclibpth'
14984 longdblsize='$longdblsize'
14985 longlongsize='$longlongsize'
14986 longsize='$longsize'
14987 lp='$lp'
14988 lpr='$lpr'
14989 ls='$ls'
14990 lseeksize='$lseeksize'
14991 lseektype='$lseektype'
14992 mail='$mail'
14993 mailx='$mailx'
14994 make='$make'
14995 make_set_make='$make_set_make'
14996 mallocobj='$mallocobj'
14997 mallocsrc='$mallocsrc'
14998 malloctype='$malloctype'
14999 man1dir='$man1dir'
15000 man1direxp='$man1direxp'
15001 man1ext='$man1ext'
15002 man3dir='$man3dir'
15003 man3direxp='$man3direxp'
15004 man3ext='$man3ext'
15005 medium='$medium'
15006 mips_type='$mips_type'
15007 mkdir='$mkdir'
15008 mmaptype='$mmaptype'
15009 models='$models'
15010 modetype='$modetype'
15011 more='$more'
15012 multiarch='$multiarch'
15013 mv='$mv'
15014 myarchname='$myarchname'
15015 mydomain='$mydomain'
15016 myhostname='$myhostname'
15017 myuname='$myuname'
15018 n='$n'
15019 netdb_hlen_type='$netdb_hlen_type'
15020 netdb_host_type='$netdb_host_type'
15021 netdb_name_type='$netdb_name_type'
15022 netdb_net_type='$netdb_net_type'
15023 nm='$nm'
15024 nm_opt='$nm_opt'
15025 nm_so_opt='$nm_so_opt'
15026 nonxs_ext='$nonxs_ext'
15027 nroff='$nroff'
15028 nvsize='$nvsize'
15029 nvtype='$nvtype'
15030 o_nonblock='$o_nonblock'
15031 obj_ext='$obj_ext'
15032 old_pthread_create_joinable='$old_pthread_create_joinable'
15033 optimize='$optimize'
15034 orderlib='$orderlib'
15035 osname='$osname'
15036 osvers='$osvers'
15037 package='$package'
15038 pager='$pager'
15039 passcat='$passcat'
15040 patchlevel='$patchlevel'
15041 path_sep='$path_sep'
15042 perl='$perl'
15043 perladmin='$perladmin'
15044 perlpath='$perlpath'
15045 pg='$pg'
15046 phostname='$phostname'
15047 pidtype='$pidtype'
15048 plibpth='$plibpth'
15049 pm_apiversion='$pm_apiversion'
15050 pmake='$pmake'
15051 pr='$pr'
15052 prefix='$prefix'
15053 prefixexp='$prefixexp'
15054 privlib='$privlib'
15055 privlibexp='$privlibexp'
15056 prototype='$prototype'
15057 ptrsize='$ptrsize'
15058 quadkind='$quadkind'
15059 quadtype='$quadtype'
15060 randbits='$randbits'
15061 randfunc='$randfunc'
15062 randseedtype='$randseedtype'
15063 ranlib='$ranlib'
15064 rd_nodata='$rd_nodata'
15065 rm='$rm'
15066 rmail='$rmail'
15067 runnm='$runnm'
15068 sPRIEldbl='$sPRIEldbl'
15069 sPRIFldbl='$sPRIFldbl'
15070 sPRIGldbl='$sPRIGldbl'
15071 sPRIX64='$sPRIX64'
15072 sPRId64='$sPRId64'
15073 sPRIeldbl='$sPRIeldbl'
15074 sPRIfldbl='$sPRIfldbl'
15075 sPRIgldbl='$sPRIgldbl'
15076 sPRIi64='$sPRIi64'
15077 sPRIo64='$sPRIo64'
15078 sPRIu64='$sPRIu64'
15079 sPRIx64='$sPRIx64'
15080 sched_yield='$sched_yield'
15081 scriptdir='$scriptdir'
15082 scriptdirexp='$scriptdirexp'
15083 sed='$sed'
15084 seedfunc='$seedfunc'
15085 selectminbits='$selectminbits'
15086 selecttype='$selecttype'
15087 sendmail='$sendmail'
15088 sh='$sh'
15089 shar='$shar'
15090 sharpbang='$sharpbang'
15091 shmattype='$shmattype'
15092 shortsize='$shortsize'
15093 shrpenv='$shrpenv'
15094 shsharp='$shsharp'
15095 sig_count='$sig_count'
15096 sig_name='$sig_name'
15097 sig_name_init='$sig_name_init'
15098 sig_num='$sig_num'
15099 sig_num_init='$sig_num_init'
15100 signal_t='$signal_t'
15101 sitearch='$sitearch'
15102 sitearchexp='$sitearchexp'
15103 sitebin='$sitebin'
15104 sitebinexp='$sitebinexp'
15105 sitelib='$sitelib'
15106 sitelibexp='$sitelibexp'
15107 siteprefix='$siteprefix'
15108 siteprefixexp='$siteprefixexp'
15109 sizetype='$sizetype'
15110 sleep='$sleep'
15111 smail='$smail'
15112 small='$small'
15113 so='$so'
15114 sockethdr='$sockethdr'
15115 socketlib='$socketlib'
15116 sort='$sort'
15117 spackage='$spackage'
15118 spitshell='$spitshell'
15119 split='$split'
15120 src='$src'
15121 ssizetype='$ssizetype'
15122 startperl='$startperl'
15123 startsh='$startsh'
15124 static_ext='$static_ext'
15125 stdchar='$stdchar'
15126 stdio_base='$stdio_base'
15127 stdio_bufsiz='$stdio_bufsiz'
15128 stdio_cnt='$stdio_cnt'
15129 stdio_filbuf='$stdio_filbuf'
15130 stdio_ptr='$stdio_ptr'
15131 stdio_stream_array='$stdio_stream_array'
15132 strings='$strings'
15133 submit='$submit'
15134 subversion='$subversion'
15135 sysman='$sysman'
15136 tail='$tail'
15137 tar='$tar'
15138 tbl='$tbl'
15139 tee='$tee'
15140 test='$test'
15141 timeincl='$timeincl'
15142 timetype='$timetype'
15143 touch='$touch'
15144 tr='$tr'
15145 trnl='$trnl'
15146 troff='$troff'
15147 u16size='$u16size'
15148 u16type='$u16type'
15149 u32size='$u32size'
15150 u32type='$u32type'
15151 u64size='$u64size'
15152 u64type='$u64type'
15153 u8size='$u8size'
15154 u8type='$u8type'
15155 uidformat='$uidformat'
15156 uidsign='$uidsign'
15157 uidsize='$uidsize'
15158 uidtype='$uidtype'
15159 uname='$uname'
15160 uniq='$uniq'
15161 uquadtype='$uquadtype'
15162 use5005threads='$use5005threads'
15163 use64bits='$use64bits'
15164 usedl='$usedl'
15165 useithreads='$useithreads'
15166 uselargefiles='$uselargefiles'
15167 uselongdouble='$uselongdouble'
15168 usemorebits='$usemorebits'
15169 usemultiplicity='$usemultiplicity'
15170 usemymalloc='$usemymalloc'
15171 usenm='$usenm'
15172 useopcode='$useopcode'
15173 useperlio='$useperlio'
15174 useposix='$useposix'
15175 usesfio='$usesfio'
15176 useshrplib='$useshrplib'
15177 usesocks='$usesocks'
15178 usethreads='$usethreads'
15179 usevendorprefix='$usevendorprefix'
15180 usevfork='$usevfork'
15181 usrinc='$usrinc'
15182 uuname='$uuname'
15183 uvoformat='$uvoformat'
15184 uvsize='$uvsize'
15185 uvtype='$uvtype'
15186 uvuformat='$uvuformat'
15187 uvxformat='$uvxformat'
15188 vendorbin='$vendorbin'
15189 vendorbinexp='$vendorbinexp'
15190 vendorlib='$vendorlib'
15191 vendorlibexp='$vendorlibexp'
15192 vendorprefix='$vendorprefix'
15193 vendorprefixexp='$vendorprefixexp'
15194 version='$version'
15195 vi='$vi'
15196 voidflags='$voidflags'
15197 xlibpth='$xlibpth'
15198 xs_apiversion='$xs_apiversion'
15199 zcat='$zcat'
15200 zip='$zip'
15201 EOT
15202
15203 : Add in command line options if available
15204 $test -f UU/cmdline.opt && $cat UU/cmdline.opt >> config.sh
15205
15206 : add special variables
15207 $test -f $src/patchlevel.h && \
15208 awk '/^#define[         ]+PERL_/ {printf "%s=%s\n",$2,$3}' $src/patchlevel.h >>config.sh
15209 echo "CONFIGDOTSH=true" >>config.sh
15210
15211 : propagate old symbols
15212 if $test -f UU/config.sh; then
15213         <UU/config.sh sort | uniq >UU/oldconfig.sh
15214         sed -n 's/^\([a-zA-Z_0-9]*\)=.*/\1/p' config.sh config.sh UU/oldconfig.sh |\
15215         sort | uniq -u >UU/oldsyms
15216         set X `cat UU/oldsyms`
15217         shift
15218         case $# in
15219         0) ;;
15220         *)
15221                 cat <<EOM
15222 Hmm...You had some extra variables I don't know about...I'll try to keep 'em...
15223 EOM
15224                 echo "# Variables propagated from previous config.sh file." >>config.sh
15225                 for sym in `cat UU/oldsyms`; do
15226                         echo "    Propagating $hint variable "'$'"$sym..."
15227                         eval 'tmp="$'"${sym}"'"'
15228                         echo "$tmp" | \
15229                                 sed -e "s/'/'\"'\"'/g" -e "s/^/$sym='/" -e "s/$/'/" >>config.sh
15230                 done
15231                 ;;
15232         esac
15233 fi
15234
15235 : Finish up by extracting the .SH files
15236 case "$alldone" in
15237 exit)
15238         $rm -rf UU
15239         echo "Done."
15240         exit 0
15241         ;;
15242 cont)
15243         ;;
15244 '')
15245         dflt=''
15246         nostick=true
15247         $cat <<EOM
15248
15249 If you'd like to make any changes to the config.sh file before I begin
15250 to configure things, do it as a shell escape now (e.g. !vi config.sh).
15251
15252 EOM
15253         rp="Press return or use a shell escape to edit config.sh:"
15254         . UU/myread
15255         nostick=''
15256         case "$ans" in
15257         '') ;;
15258         *) : in case they cannot read
15259                 sh 1>&4 -c "$ans";;
15260         esac
15261         ;;
15262 esac
15263
15264 : if this fails, just run all the .SH files by hand
15265 . ./config.sh
15266
15267 echo " "
15268 exec 1>&4
15269 . ./UU/extract
15270
15271 if $contains '^depend:' [Mm]akefile >/dev/null 2>&1; then
15272         dflt=y
15273         case "$silent" in
15274         true) ;;
15275         *)
15276                 $cat <<EOM
15277
15278 Now you need to generate make dependencies by running "$make depend".
15279 You might prefer to run it in background: "$make depend > makedepend.out &"
15280 It can take a while, so you might not want to run it right now.
15281
15282 EOM
15283                 ;;
15284         esac
15285         rp="Run $make depend now?"
15286         . UU/myread
15287         case "$ans" in
15288         y*)
15289                 $make depend && echo "Now you must run a $make."
15290                 ;;
15291         *)
15292                 echo "You must run '$make depend' then '$make'."
15293                 ;;
15294         esac
15295 elif test -f [Mm]akefile; then
15296         echo " "
15297         echo "Now you must run a $make."
15298 else
15299         echo "Done."
15300 fi
15301
15302 if $test -f Policy.sh; then
15303     $cat <<EOM
15304
15305 If you compile $package on a different machine or from a different object
15306 directory, copy the Policy.sh file from this object directory to the
15307 new one before you run Configure -- this will help you with most of
15308 the policy defaults.
15309
15310 EOM
15311 fi
15312 if $test -f config.msg; then
15313     echo "Hmm.  I also noted the following information while running:"
15314     echo " "
15315     $cat config.msg >&4
15316     $rm -f config.msg
15317 fi
15318 $rm -f kit*isdone ark*isdone
15319 $rm -rf UU
15320
15321 : End of Configure
15322