The first steps towards cross-compilation.
[p5sagit/p5-mst-13.2.git] / Configure
1 #! /bin/sh
2 #
3 # If these # comments don't work, trim them. Don't worry about any other
4 # shell scripts, Configure will trim # comments from them for you.
5 #
6 # (If you are trying to port this package to a machine without sh,
7 # I would suggest you have a look at the prototypical config_h.SH file
8 # and edit it to reflect your system. Some packages may include samples
9 # of config.h for certain machines, so you might look for one of those.)
10 #
11 # Yes, you may rip this off to use in other distribution packages. This
12 # script belongs to the public domain and cannot be copyrighted.
13 #
14 # (Note: this Configure script was generated automatically. Rather than
15 # working with this copy of Configure, you may wish to get metaconfig.
16 # The dist-3.0 package (which contains metaconfig) was posted in
17 # comp.sources.misc and is available on CPAN under authors/id/RAM so
18 # you may fetch it yourself from your nearest archive site.)
19 #
20
21 # $Id: Head.U,v 3.0.1.9 1997/02/28 15:02:09 ram Exp $
22 #
23 # Generated on Fri Jun 15 04:00:58 EET DST 2001 [metaconfig 3.0 PL70]
24 # (with additional metaconfig patches by perlbug@perl.org)
25
26 cat >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 >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 c1$$ c2$$
44 true || exec sh $0 $argv:q
45
46 (exit $?0) || cat c2$$
47 (exit $?0) || exec sh $0 $argv:q
48 rm -f c1$$ c2$$
49
50 : compute my invocation name
51 me=$0
52 case "$0" in
53 */*)
54         me=`echo $0 | sed -e 's!.*/\(.*\)!\1!' 2>/dev/null`
55         test "$me" || me=$0
56         ;;
57 esac
58
59 : Proper separator for the PATH environment variable
60 p_=:
61 : On OS/2 this directory should exist if this is not floppy only system :-]
62 if test -d c:/. ; then
63     if test -n "$OS2_SHELL"; then
64                 p_=\;
65                 PATH=`cmd /c "echo %PATH%" | tr '\\\\' / `
66                 OS2_SHELL=`cmd /c "echo %OS2_SHELL%" | tr '\\\\' / | tr '[A-Z]' '[a-z]'`
67         elif test -n "$DJGPP"; then
68                 p_=\;
69         fi
70 fi
71
72 : Proper PATH setting
73 paths='/bin /usr/bin /usr/local/bin /usr/ucb /usr/local /usr/lbin'
74 paths="$paths /opt/bin /opt/local/bin /opt/local /opt/lbin"
75 paths="$paths /usr/5bin /etc /usr/gnu/bin /usr/new /usr/new/bin /usr/nbin"
76 paths="$paths /opt/gnu/bin /opt/new /opt/new/bin /opt/nbin"
77 paths="$paths /sys5.3/bin /sys5.3/usr/bin /bsd4.3/bin /bsd4.3/usr/ucb"
78 paths="$paths /bsd4.3/usr/bin /usr/bsd /bsd43/bin /usr/ccs/bin"
79 paths="$paths /etc /usr/lib /usr/ucblib /lib /usr/ccs/lib"
80 paths="$paths /sbin /usr/sbin /usr/libexec"
81
82 for p in $paths
83 do
84         case "$p_$PATH$p_" in
85         *$p_$p$p_*) ;;
86         *) test -d $p && PATH=$PATH$p_$p ;;
87         esac
88 done
89
90 PATH=.$p_$PATH
91 export PATH
92
93 : shall we be using ksh?
94 inksh=''
95 needksh=''
96 avoidksh=''
97 newsh=/bin/ksh
98 changesh=''
99 if (PATH=.; alias -x) >/dev/null 2>&1; then
100                 inksh=true
101 fi
102 if test -f /hp-ux -a -f /bin/ksh; then
103         needksh='to avoid sh bug in "here document" expansion'
104 fi
105 if test -d /usr/lpp -a -f /usr/bin/bsh -a -f /usr/bin/uname; then
106         if test X`/usr/bin/uname -v` = X4; then
107                 avoidksh="to avoid AIX 4's /bin/sh"
108                 newsh=/usr/bin/bsh
109         fi
110 fi
111 if test -f /osf_boot -a -f /usr/sbin/setld; then
112         if test X`/usr/bin/uname -s` = XOSF1; then
113                 avoidksh="to avoid Digital UNIX' ksh"
114                 newsh=/bin/sh
115                 unset BIN_SH # if this is 'xpg4' sh will start up ksh
116         fi
117 fi
118 case "$inksh/$needksh" in
119 /[a-z]*)
120                 ENV=''
121                 changesh=true
122                 reason="$needksh"
123         ;;
124 esac
125 case "$inksh/$avoidksh" in
126 true/[a-z]*)
127         changesh=true
128         reason="$avoidksh"
129         ;;
130 esac
131 case "$inksh/$needksh-$avoidksh-" in
132 true/--)
133                 cat <<EOM
134 (I see you are using the Korn shell.  Some ksh's blow up on $me,
135 mainly on older exotic systems.  If yours does, try the Bourne shell instead.)
136 EOM
137         ;;
138 esac
139 case "$changesh" in
140 true)
141         echo "(Feeding myself to $newsh $reason.)"
142         case "$0" in
143         Configure|*/Configure) exec $newsh $0 "$@";;
144         *) exec $newsh Configure "$@";;
145         esac
146         ;;
147 esac
148
149 : if needed set CDPATH to a harmless value that is not chatty
150 : avoid bash 2.02 problems with empty CDPATH.
151 case "$CDPATH" in
152 '')     ;;
153 *)      case "$SHELL" in
154         *bash*) CDPATH='.' ;;
155         *)              CDPATH='' ;;
156         esac
157         ;;
158 esac
159 : Configure runs within the UU subdirectory
160 test -d UU || mkdir UU
161 cd UU && rm -f ./*
162
163 ccname=''
164 ccversion=''
165 ccsymbols=''
166 cppccsymbols=''
167 cppsymbols=''
168 from=''
169 run=''
170 targetarch=''
171 to=''
172 usecrosscompile=''
173 perllibs=''
174 dynamic_ext=''
175 extensions=''
176 known_extensions=''
177 nonxs_ext=''
178 static_ext=''
179 useopcode=''
180 useposix=''
181 d_bsd=''
182 d_eunice=''
183 d_xenix=''
184 eunicefix=''
185 Mcc=''
186 ar=''
187 awk=''
188 bash=''
189 bison=''
190 byacc=''
191 cat=''
192 chgrp=''
193 chmod=''
194 chown=''
195 comm=''
196 compress=''
197 cp=''
198 cpio=''
199 cpp=''
200 csh=''
201 date=''
202 echo=''
203 egrep=''
204 emacs=''
205 expr=''
206 find=''
207 flex=''
208 grep=''
209 gzip=''
210 inews=''
211 ksh=''
212 less=''
213 line=''
214 lint=''
215 ln=''
216 lp=''
217 lpr=''
218 ls=''
219 mail=''
220 mailx=''
221 make=''
222 mkdir=''
223 more=''
224 mv=''
225 nm=''
226 nroff=''
227 perl=''
228 pg=''
229 pmake=''
230 pr=''
231 rm=''
232 rmail=''
233 sed=''
234 sendmail=''
235 shar=''
236 sleep=''
237 smail=''
238 sort=''
239 submit=''
240 tail=''
241 tar=''
242 tbl=''
243 tee=''
244 test=''
245 touch=''
246 tr=''
247 troff=''
248 uname=''
249 uniq=''
250 uuname=''
251 vi=''
252 zcat=''
253 zip=''
254 full_ar=''
255 full_sed=''
256 libswanted=''
257 hint=''
258 myuname=''
259 osname=''
260 osvers=''
261 Author=''
262 Date=''
263 Header=''
264 Id=''
265 Locker=''
266 Log=''
267 RCSfile=''
268 Revision=''
269 Source=''
270 State=''
271 _a=''
272 _exe=''
273 _o=''
274 archobjs=''
275 exe_ext=''
276 firstmakefile=''
277 lib_ext=''
278 obj_ext=''
279 path_sep=''
280 afs=''
281 afsroot=''
282 alignbytes=''
283 ansi2knr=''
284 archlib=''
285 archlibexp=''
286 d_archlib=''
287 installarchlib=''
288 archname=''
289 myarchname=''
290 d_atolf=''
291 d_atoll=''
292 baserev=''
293 bin=''
294 binexp=''
295 installbin=''
296 bincompat5005=''
297 d_bincompat5005=''
298 byteorder=''
299 cc=''
300 ccflags=''
301 cppflags=''
302 ldflags=''
303 lkflags=''
304 locincpth=''
305 optimize=''
306 cf_email=''
307 cf_by=''
308 cf_time=''
309 charsize=''
310 contains=''
311 cpp_stuff=''
312 cpplast=''
313 cppminus=''
314 cpprun=''
315 cppstdin=''
316 d__fwalk=''
317 d_access=''
318 d_accessx=''
319 d_alarm=''
320 d_attribut=''
321 d_bcmp=''
322 d_bcopy=''
323 d_bzero=''
324 d_casti32=''
325 castflags=''
326 d_castneg=''
327 d_chown=''
328 d_chroot=''
329 d_chsize=''
330 d_closedir=''
331 d_void_closedir=''
332 d_cmsghdr_s=''
333 d_const=''
334 cryptlib=''
335 d_crypt=''
336 d_csh=''
337 full_csh=''
338 d_cuserid=''
339 d_dbl_dig=''
340 d_dbminitproto=''
341 d_difftime=''
342 d_dlerror=''
343 d_dlopen=''
344 d_dlsymun=''
345 d_dosuid=''
346 d_suidsafe=''
347 d_drand48proto=''
348 d_dup2=''
349 d_eaccess=''
350 d_endgrent=''
351 d_endhent=''
352 d_endnent=''
353 d_endpent=''
354 d_endpwent=''
355 d_endsent=''
356 d_fchmod=''
357 d_fchown=''
358 d_fcntl=''
359 d_fcntl_can_lock=''
360 d_fd_macros=''
361 d_fd_set=''
362 d_fds_bits=''
363 d_fgetpos=''
364 d_flexfnam=''
365 d_flock=''
366 d_flockproto=''
367 d_fork=''
368 d_fpos64_t=''
369 d_frexpl=''
370 d_fs_data_s=''
371 d_fseeko=''
372 d_fsetpos=''
373 d_fstatfs=''
374 d_fsync=''
375 d_ftello=''
376 d_ftime=''
377 d_gettimeod=''
378 d_Gconvert=''
379 d_getcwd=''
380 d_getespwnam=''
381 d_getfsstat=''
382 d_getgrent=''
383 d_getgrps=''
384 d_gethbyaddr=''
385 d_gethbyname=''
386 d_gethent=''
387 aphostname=''
388 d_gethname=''
389 d_phostname=''
390 d_uname=''
391 d_gethostprotos=''
392 d_getitimer=''
393 d_getlogin=''
394 d_getmnt=''
395 d_getmntent=''
396 d_getnbyaddr=''
397 d_getnbyname=''
398 d_getnent=''
399 d_getnetprotos=''
400 d_getpagsz=''
401 d_getpent=''
402 d_getpgid=''
403 d_getpgrp2=''
404 d_bsdgetpgrp=''
405 d_getpgrp=''
406 d_getppid=''
407 d_getprior=''
408 d_getpbyname=''
409 d_getpbynumber=''
410 d_getprotoprotos=''
411 d_getprpwnam=''
412 d_getpwent=''
413 d_getsent=''
414 d_getservprotos=''
415 d_getspnam=''
416 d_getsbyname=''
417 d_getsbyport=''
418 d_gnulibc=''
419 d_hasmntopt=''
420 d_htonl=''
421 d_iconv=''
422 d_inetaton=''
423 d_int64_t=''
424 d_isascii=''
425 d_isnan=''
426 d_isnanl=''
427 d_killpg=''
428 d_lchown=''
429 d_ldbl_dig=''
430 d_link=''
431 d_locconv=''
432 d_lockf=''
433 d_longdbl=''
434 longdblsize=''
435 d_longlong=''
436 longlongsize=''
437 d_lseekproto=''
438 d_lstat=''
439 d_madvise=''
440 d_mblen=''
441 d_mbstowcs=''
442 d_mbtowc=''
443 d_memchr=''
444 d_memcmp=''
445 d_memcpy=''
446 d_memmove=''
447 d_memset=''
448 d_mkdir=''
449 d_mkdtemp=''
450 d_mkfifo=''
451 d_mkstemp=''
452 d_mkstemps=''
453 d_mktime=''
454 d_mmap=''
455 mmaptype=''
456 d_modfl=''
457 d_modfl_pow32_bug=''
458 d_mprotect=''
459 d_msg=''
460 d_msgctl=''
461 d_msgget=''
462 d_msghdr_s=''
463 d_msgrcv=''
464 d_msgsnd=''
465 d_msync=''
466 d_munmap=''
467 d_nice=''
468 d_off64_t=''
469 d_open3=''
470 d_fpathconf=''
471 d_pathconf=''
472 d_pause=''
473 d_pipe=''
474 d_poll=''
475 d_portable=''
476 d_old_pthread_create_joinable=''
477 old_pthread_create_joinable=''
478 d_pthread_yield=''
479 d_sched_yield=''
480 sched_yield=''
481 d_qgcvt=''
482 d_readdir=''
483 d_rewinddir=''
484 d_seekdir=''
485 d_telldir=''
486 d_readlink=''
487 d_readv=''
488 d_realpath=''
489 d_recvmsg=''
490 d_rename=''
491 d_rmdir=''
492 d_safebcpy=''
493 d_safemcpy=''
494 d_sanemcmp=''
495 d_sbrkproto=''
496 d_select=''
497 d_sem=''
498 d_semctl=''
499 d_semget=''
500 d_semop=''
501 d_sendmsg=''
502 d_setegid=''
503 d_seteuid=''
504 d_setgrent=''
505 d_setgrps=''
506 d_sethent=''
507 d_setitimer=''
508 d_setlinebuf=''
509 d_setlocale=''
510 d_setnent=''
511 d_setpent=''
512 d_setpgid=''
513 d_setpgrp2=''
514 d_bsdsetpgrp=''
515 d_setpgrp=''
516 d_setprior=''
517 d_setproctitle=''
518 d_setpwent=''
519 d_setregid=''
520 d_setresgid=''
521 d_setresuid=''
522 d_setreuid=''
523 d_setrgid=''
524 d_setruid=''
525 d_setsent=''
526 d_setsid=''
527 d_setvbuf=''
528 d_sfio=''
529 usesfio=''
530 d_shm=''
531 d_shmat=''
532 d_shmatprototype=''
533 shmattype=''
534 d_shmctl=''
535 d_shmdt=''
536 d_shmget=''
537 d_sigaction=''
538 d_sigprocmask=''
539 d_sigsetjmp=''
540 d_sockatmark=''
541 d_sockatmarkproto=''
542 d_msg_ctrunc=''
543 d_msg_dontroute=''
544 d_msg_oob=''
545 d_msg_peek=''
546 d_msg_proxy=''
547 d_oldsock=''
548 d_scm_rights=''
549 d_socket=''
550 d_sockpair=''
551 sockethdr=''
552 socketlib=''
553 d_socklen_t=''
554 d_socks5_init=''
555 d_sqrtl=''
556 d_sresgproto=''
557 d_sresuproto=''
558 d_statblks=''
559 d_statfs_f_flags=''
560 d_statfs_s=''
561 d_fstatvfs=''
562 d_statvfs=''
563 d_stdio_cnt_lval=''
564 d_stdio_ptr_lval=''
565 d_stdio_ptr_lval_nochange_cnt=''
566 d_stdio_ptr_lval_sets_cnt=''
567 d_stdiobase=''
568 d_stdstdio=''
569 stdio_base=''
570 stdio_bufsiz=''
571 stdio_cnt=''
572 stdio_filbuf=''
573 stdio_ptr=''
574 d_index=''
575 d_strchr=''
576 d_strcoll=''
577 d_strctcpy=''
578 d_strerrm=''
579 d_strerror=''
580 d_sysernlst=''
581 d_syserrlst=''
582 d_strftime=''
583 d_strtod=''
584 d_strtol=''
585 d_strtold=''
586 d_strtoll=''
587 d_strtoq=''
588 d_strtoul=''
589 d_strtoull=''
590 d_strtouq=''
591 d_strxfrm=''
592 d_symlink=''
593 d_syscall=''
594 d_syscallproto=''
595 d_sysconf=''
596 d_system=''
597 d_tcgetpgrp=''
598 d_tcsetpgrp=''
599 d_telldirproto=''
600 d_time=''
601 timetype=''
602 clocktype=''
603 d_times=''
604 d_truncate=''
605 d_tzname=''
606 d_u32align=''
607 d_ualarm=''
608 d_umask=''
609 d_semctl_semid_ds=''
610 d_semctl_semun=''
611 d_union_semun=''
612 d_usleep=''
613 d_usleepproto=''
614 d_ustat=''
615 d_vfork=''
616 usevfork=''
617 d_voidsig=''
618 signal_t=''
619 d_volatile=''
620 d_charvspr=''
621 d_vprintf=''
622 d_wait4=''
623 d_waitpid=''
624 d_wcstombs=''
625 d_wctomb=''
626 d_writev=''
627 dlext=''
628 cccdlflags=''
629 ccdlflags=''
630 dlsrc=''
631 ld=''
632 lddlflags=''
633 usedl=''
634 doublesize=''
635 ebcdic=''
636 fflushNULL=''
637 fflushall=''
638 fpossize=''
639 fpostype=''
640 gccosandvers=''
641 gccversion=''
642 gidformat=''
643 gidsign=''
644 gidsize=''
645 gidtype=''
646 groupstype=''
647 h_fcntl=''
648 h_sysfile=''
649 i_arpainet=''
650 db_hashtype=''
651 db_prefixtype=''
652 db_version_major=''
653 db_version_minor=''
654 db_version_patch=''
655 i_db=''
656 i_dbm=''
657 i_rpcsvcdbm=''
658 d_dirnamlen=''
659 direntrytype=''
660 i_dirent=''
661 i_dld=''
662 i_dlfcn=''
663 i_fcntl=''
664 i_float=''
665 i_gdbm=''
666 d_grpasswd=''
667 i_grp=''
668 i_iconv=''
669 i_ieeefp=''
670 i_inttypes=''
671 i_libutil=''
672 i_limits=''
673 i_locale=''
674 i_machcthr=''
675 i_malloc=''
676 i_math=''
677 i_memory=''
678 i_mntent=''
679 i_ndbm=''
680 i_netdb=''
681 i_neterrno=''
682 i_netinettcp=''
683 i_niin=''
684 i_sysin=''
685 i_poll=''
686 i_prot=''
687 i_pthread=''
688 d_pwage=''
689 d_pwchange=''
690 d_pwclass=''
691 d_pwcomment=''
692 d_pwexpire=''
693 d_pwgecos=''
694 d_pwpasswd=''
695 d_pwquota=''
696 i_pwd=''
697 i_sfio=''
698 i_shadow=''
699 i_socks=''
700 i_stddef=''
701 i_stdlib=''
702 i_string=''
703 strings=''
704 i_sunmath=''
705 i_sysaccess=''
706 i_sysdir=''
707 i_sysfile=''
708 d_voidtty=''
709 i_bsdioctl=''
710 i_sysfilio=''
711 i_sysioctl=''
712 i_syssockio=''
713 i_syslog=''
714 i_sysmman=''
715 i_sysmode=''
716 i_sysmount=''
717 i_sysndir=''
718 i_sysparam=''
719 i_sysresrc=''
720 i_syssecrt=''
721 i_sysselct=''
722 i_sysstat=''
723 i_sysstatfs=''
724 i_sysstatvfs=''
725 i_systimes=''
726 i_systypes=''
727 i_sysuio=''
728 i_sysun=''
729 i_sysutsname=''
730 i_sysvfs=''
731 i_syswait=''
732 i_sgtty=''
733 i_termio=''
734 i_termios=''
735 i_systime=''
736 i_systimek=''
737 i_time=''
738 timeincl=''
739 i_unistd=''
740 i_ustat=''
741 i_utime=''
742 i_values=''
743 i_stdarg=''
744 i_varargs=''
745 i_varhdr=''
746 i_vfork=''
747 inc_version_list=''
748 inc_version_list_init=''
749 installprefix=''
750 installprefixexp=''
751 installstyle=''
752 installusrbinperl=''
753 intsize=''
754 longsize=''
755 shortsize=''
756 issymlink=''
757 libc=''
758 ldlibpthname=''
759 libperl=''
760 shrpenv=''
761 useshrplib=''
762 glibpth=''
763 libpth=''
764 loclibpth=''
765 plibpth=''
766 xlibpth=''
767 ignore_versioned_solibs=''
768 libs=''
769 libsdirs=''
770 libsfiles=''
771 libsfound=''
772 libspath=''
773 lns=''
774 d_PRIEUldbl=''
775 d_PRIFUldbl=''
776 d_PRIGUldbl=''
777 d_PRIeldbl=''
778 d_PRIfldbl=''
779 d_PRIgldbl=''
780 d_SCNfldbl=''
781 sPRIEUldbl=''
782 sPRIFUldbl=''
783 sPRIGUldbl=''
784 sPRIeldbl=''
785 sPRIfldbl=''
786 sPRIgldbl=''
787 sSCNfldbl=''
788 lseeksize=''
789 lseektype=''
790 make_set_make=''
791 d_mymalloc=''
792 freetype=''
793 mallocobj=''
794 mallocsrc=''
795 malloctype=''
796 usemymalloc=''
797 installman1dir=''
798 man1dir=''
799 man1direxp=''
800 man1ext=''
801 installman3dir=''
802 man3dir=''
803 man3direxp=''
804 man3ext=''
805 modetype=''
806 multiarch=''
807 mydomain=''
808 myhostname=''
809 phostname=''
810 c=''
811 n=''
812 d_eofnblk=''
813 eagain=''
814 o_nonblock=''
815 rd_nodata=''
816 need_va_copy=''
817 netdb_hlen_type=''
818 netdb_host_type=''
819 netdb_name_type=''
820 netdb_net_type=''
821 groupcat=''
822 hostcat=''
823 passcat=''
824 orderlib=''
825 ranlib=''
826 d_perl_otherlibdirs=''
827 otherlibdirs=''
828 package=''
829 spackage=''
830 pager=''
831 api_revision=''
832 api_subversion=''
833 api_version=''
834 api_versionstring=''
835 patchlevel=''
836 perl_patchlevel=''
837 revision=''
838 subversion=''
839 version=''
840 perl5=''
841 perladmin=''
842 perlpath=''
843 d_nv_preserves_uv=''
844 d_nv_preserves_uv_bits=''
845 i16size=''
846 i16type=''
847 i32size=''
848 i32type=''
849 i64size=''
850 i64type=''
851 i8size=''
852 i8type=''
853 ivsize=''
854 ivtype=''
855 nvsize=''
856 nvtype=''
857 u16size=''
858 u16type=''
859 u32size=''
860 u32type=''
861 u64size=''
862 u64type=''
863 u8size=''
864 u8type=''
865 uvsize=''
866 uvtype=''
867 ivdformat=''
868 nvEUformat=''
869 nvFUformat=''
870 nvGUformat=''
871 nveformat=''
872 nvfformat=''
873 nvgformat=''
874 uvXUformat=''
875 uvoformat=''
876 uvuformat=''
877 uvxformat=''
878 pidtype=''
879 prefix=''
880 prefixexp=''
881 installprivlib=''
882 privlib=''
883 privlibexp=''
884 prototype=''
885 ptrsize=''
886 d_PRIXU64=''
887 d_PRId64=''
888 d_PRIi64=''
889 d_PRIo64=''
890 d_PRIu64=''
891 d_PRIx64=''
892 sPRIXU64=''
893 sPRId64=''
894 sPRIi64=''
895 sPRIo64=''
896 sPRIu64=''
897 sPRIx64=''
898 d_quad=''
899 quadkind=''
900 quadtype=''
901 uquadtype=''
902 drand01=''
903 randbits=''
904 randfunc=''
905 randseedtype=''
906 seedfunc=''
907 installscript=''
908 scriptdir=''
909 scriptdirexp=''
910 selectminbits=''
911 selecttype=''
912 sh=''
913 sig_count=''
914 sig_name=''
915 sig_name_init=''
916 sig_num=''
917 sig_num_init=''
918 sig_size=''
919 installsitearch=''
920 sitearch=''
921 sitearchexp=''
922 installsitebin=''
923 sitebin=''
924 sitebinexp=''
925 installsitelib=''
926 sitelib=''
927 sitelib_stem=''
928 sitelibexp=''
929 siteprefix=''
930 siteprefixexp=''
931 sizesize=''
932 sizetype=''
933 so=''
934 socksizetype=''
935 sharpbang=''
936 shsharp=''
937 spitshell=''
938 src=''
939 ssizetype=''
940 startperl=''
941 startsh=''
942 stdchar=''
943 d_stdio_stream_array=''
944 stdio_stream_array=''
945 sysman=''
946 trnl=''
947 uidformat=''
948 uidsign=''
949 uidsize=''
950 uidtype=''
951 archname64=''
952 use64bitall=''
953 use64bitint=''
954 ccflags_uselargefiles=''
955 ldflags_uselargefiles=''
956 libswanted_uselargefiles=''
957 uselargefiles=''
958 uselongdouble=''
959 usemorebits=''
960 usemultiplicity=''
961 nm_opt=''
962 nm_so_opt=''
963 runnm=''
964 usenm=''
965 useperlio=''
966 usesocks=''
967 d_oldpthreads=''
968 use5005threads=''
969 useithreads=''
970 usereentrant=''
971 usethreads=''
972 incpath=''
973 mips_type=''
974 usrinc=''
975 d_vendorarch=''
976 installvendorarch=''
977 vendorarch=''
978 vendorarchexp=''
979 d_vendorbin=''
980 installvendorbin=''
981 vendorbin=''
982 vendorbinexp=''
983 d_vendorlib=''
984 installvendorlib=''
985 vendorlib=''
986 vendorlib_stem=''
987 vendorlibexp=''
988 usevendorprefix=''
989 vendorprefix=''
990 vendorprefixexp=''
991 versiononly=''
992 defvoidused=''
993 voidflags=''
994 pm_apiversion=''
995 xs_apiversion=''
996 yacc=''
997 yaccflags=''
998 CONFIG=''
999
1000 define='define'
1001 undef='undef'
1002 smallmach='pdp11 i8086 z8000 i80286 iAPX286'
1003 rmlist=''
1004
1005 : We must find out about Eunice early
1006 eunicefix=':'
1007 if test -f /etc/unixtovms; then
1008         eunicefix=/etc/unixtovms
1009 fi
1010 if test -f /etc/unixtovms.exe; then
1011         eunicefix=/etc/unixtovms.exe
1012 fi
1013
1014 i_whoami=''
1015 ccname=''
1016 ccversion=''
1017 perllibs=''
1018 : set useposix=false in your hint file to disable the POSIX extension.
1019 useposix=true
1020 : set useopcode=false in your hint file to disable the Opcode extension.
1021 useopcode=true
1022 : Trailing extension.  Override this in a hint file, if needed.
1023 _exe=''
1024 : Extra object files, if any, needed on this platform.
1025 archobjs=''
1026 archname=''
1027 : Possible local include directories to search.
1028 : Set locincpth to "" in a hint file to defeat local include searches.
1029 locincpth="/usr/local/include /opt/local/include /usr/gnu/include"
1030 locincpth="$locincpth /opt/gnu/include /usr/GNU/include /opt/GNU/include"
1031 :
1032 : no include file wanted by default
1033 inclwanted=''
1034
1035 groupstype=''
1036 : change the next line if compiling for Xenix/286 on Xenix/386
1037 xlibpth='/usr/lib/386 /lib/386'
1038 : Possible local library directories to search.
1039 loclibpth="/usr/local/lib /opt/local/lib /usr/gnu/lib"
1040 loclibpth="$loclibpth /opt/gnu/lib /usr/GNU/lib /opt/GNU/lib"
1041
1042 : general looking path for locating libraries
1043 glibpth="/lib /usr/lib $xlibpth"
1044 glibpth="$glibpth /usr/ccs/lib /usr/ucblib /usr/local/lib"
1045 test -f /usr/shlib/libc.so && glibpth="/usr/shlib $glibpth"
1046 test -f /shlib/libc.so     && glibpth="/shlib $glibpth"
1047
1048 : Private path used by Configure to find libraries.  Its value
1049 : is prepended to libpth. This variable takes care of special
1050 : machines, like the mips.  Usually, it should be empty.
1051 plibpth=''
1052
1053 : default library list
1054 libswanted=''
1055 : some systems want to use only the non-versioned libso:s
1056 ignore_versioned_solibs=''
1057 archname64=''
1058 ccflags_uselargefiles=''
1059 ldflags_uselargefiles=''
1060 libswanted_uselargefiles=''
1061 : set usemultiplicity on the Configure command line to enable multiplicity.
1062 : set usesocks on the Configure command line to enable socks.
1063 : set usethreads on the Configure command line to enable threads.
1064 usereentrant='undef'
1065 : full support for void wanted by default
1066 defvoidused=15
1067
1068 : List of libraries we want.
1069 : If anyone needs -lnet, put it in a hint file.
1070 libswanted='sfio socket bind inet nsl nm ndbm gdbm dbm db malloc dl'
1071 libswanted="$libswanted dld ld sun m c cposix posix"
1072 libswanted="$libswanted ndir dir crypt sec"
1073 libswanted="$libswanted ucb bsd BSD PW x iconv util"
1074 : We probably want to search /usr/shlib before most other libraries.
1075 : This is only used by the lib/ExtUtils/MakeMaker.pm routine extliblist.
1076 glibpth=`echo " $glibpth " | sed -e 's! /usr/shlib ! !'`
1077 glibpth="/usr/shlib $glibpth"
1078 : Do not use vfork unless overridden by a hint file.
1079 usevfork=false
1080
1081 : Find the basic shell for Bourne shell scripts
1082 case "$sh" in
1083 '')
1084         case "$SYSTYPE" in
1085         *bsd*|sys5*) xxx="/$SYSTYPE/bin/sh";;
1086         *) xxx='/bin/sh';;
1087         esac
1088         if test -f "$xxx"; then
1089                 sh="$xxx"
1090         else
1091                 : Build up a list and do a single loop so we can 'break' out.
1092                 pth=`echo $PATH | sed -e "s/$p_/ /g"`
1093                 for xxx in sh bash ksh pdksh ash; do
1094                         for p in $pth; do
1095                                 try="$try ${p}/${xxx}"
1096                         done
1097                 done
1098                 for xxx in $try; do
1099                         if test -f "$xxx"; then
1100                                 sh="$xxx";
1101                                 break
1102                         elif test -f "$xxx.exe"; then
1103                                 sh="$xxx";
1104                                 break
1105                         fi
1106                 done
1107         fi
1108         ;;
1109 esac
1110
1111 case "$sh" in
1112 '')     cat <<EOM >&2
1113 $me:  Fatal Error:  I can't find a Bourne Shell anywhere.  
1114
1115 Usually it's in /bin/sh.  How did you even get this far?
1116 Please contact me (Perl Maintainers) at perlbug@perl.org and 
1117 we'll try to straighten this all out.
1118 EOM
1119         exit 1
1120         ;;
1121 esac
1122
1123 : see if sh knows # comments
1124 if `$sh -c '#' >/dev/null 2>&1`; then
1125         shsharp=true
1126         spitshell=cat
1127         xcat=/bin/cat
1128         test -f $xcat || xcat=/usr/bin/cat
1129         echo "#!$xcat" >sharp
1130         $eunicefix sharp
1131         chmod +x sharp
1132         ./sharp > today
1133         if test -s today; then
1134                 sharpbang='#!'
1135         else
1136                 echo "#! $xcat" > sharp
1137                 $eunicefix sharp
1138                 chmod +x sharp
1139                 ./sharp > today
1140                 if test -s today; then
1141                         sharpbang='#! '
1142                 else
1143                         sharpbang=': use '
1144                 fi
1145         fi
1146 else
1147         echo " "
1148         echo "Your $sh doesn't grok # comments--I will strip them later on."
1149         shsharp=false
1150         cd ..
1151         echo "exec grep -v '^[  ]*#'" >spitshell
1152         chmod +x spitshell
1153         $eunicefix spitshell
1154         spitshell=`pwd`/spitshell
1155         cd UU
1156         echo "I presume that if # doesn't work, #! won't work either!"
1157         sharpbang=': use '
1158 fi
1159 rm -f sharp today
1160
1161 : figure out how to guarantee sh startup
1162 case "$startsh" in
1163 '') startsh=${sharpbang}${sh} ;;
1164 *)
1165 esac
1166 cat >sharp <<EOSS
1167 $startsh
1168 set abc
1169 test "$?abc" != 1
1170 EOSS
1171
1172 chmod +x sharp
1173 $eunicefix sharp
1174 if ./sharp; then
1175         : echo "Yup, it does."
1176 else
1177         echo "Hmm... '$startsh' does not guarantee sh startup..."
1178         echo "You may have to fix up the shell scripts to make sure $sh runs them."
1179 fi
1180 rm -f sharp
1181
1182
1183 : Save command line options in file UU/cmdline.opt for later use in
1184 : generating config.sh.
1185 cat > cmdline.opt <<EOSH
1186 # Configure command line arguments.
1187 config_arg0='$0'
1188 config_args='$*'
1189 config_argc=$#
1190 EOSH
1191 argn=1
1192 for arg in "$@"; do
1193         cat >>cmdline.opt <<EOSH
1194 config_arg$argn='$arg'
1195 EOSH
1196         argn=`expr $argn + 1`
1197 done
1198
1199 : produce awk script to parse command line options
1200 cat >options.awk <<'EOF'
1201 BEGIN {
1202         optstr = "A:dD:eEf:hKOrsSU:V";  # getopt-style specification
1203
1204         len = length(optstr);
1205         for (i = 1; i <= len; i++) {
1206                 c = substr(optstr, i, 1);
1207                 if (i < len) a = substr(optstr, i + 1, 1); else a = "";
1208                 if (a == ":") {
1209                         arg[c] = 1;
1210                         i++;
1211                 }
1212                 opt[c] = 1;
1213         }
1214 }
1215 {
1216         expect = 0;
1217         str = $0;
1218         if (substr(str, 1, 1) != "-") {
1219                 printf("'%s'\n", str);
1220                 next;
1221         }
1222         len = length($0);
1223         for (i = 2; i <= len; i++) {
1224                 c = substr(str, i, 1);
1225                 if (!opt[c]) {
1226                         printf("-%s\n", substr(str, i));
1227                         next;
1228                 }
1229                 printf("-%s\n", c);
1230                 if (arg[c]) {
1231                         if (i < len)
1232                                 printf("'%s'\n", substr(str, i + 1));
1233                         else
1234                                 expect = 1;
1235                         next;
1236                 }
1237         }
1238 }
1239 END {
1240         if (expect)
1241                 print "?";
1242 }
1243 EOF
1244
1245 : process the command line options
1246 set X `for arg in "$@"; do echo "X$arg"; done |
1247         sed -e s/X// | awk -f options.awk`
1248 eval "set $*"
1249 shift
1250 rm -f options.awk
1251
1252 : set up default values
1253 fastread=''
1254 reuseval=false
1255 config_sh=''
1256 alldone=''
1257 error=''
1258 silent=''
1259 extractsh=''
1260 override=''
1261 knowitall=''
1262 rm -f optdef.sh posthint.sh
1263 cat >optdef.sh <<EOS
1264 $startsh
1265 EOS
1266
1267
1268 : option parsing
1269 while test $# -gt 0; do
1270         case "$1" in
1271         -d) shift; fastread=yes;;
1272         -e) shift; alldone=cont;;
1273         -f)
1274                 shift
1275                 cd ..
1276                 if test -r "$1"; then
1277                         config_sh="$1"
1278                 else
1279                         echo "$me: cannot read config file $1." >&2
1280                         error=true
1281                 fi
1282                 cd UU
1283                 shift;;
1284         -h) shift; error=true;;
1285         -r) shift; reuseval=true;;
1286         -s) shift; silent=true; realsilent=true;;
1287         -E) shift; alldone=exit;;
1288         -K) shift; knowitall=true;;
1289         -O) shift; override=true;;
1290         -S) shift; silent=true; extractsh=true;;
1291         -D)
1292                 shift
1293                 case "$1" in
1294                 *=)
1295                         echo "$me: use '-U symbol=', not '-D symbol='." >&2
1296                         echo "$me: ignoring -D $1" >&2
1297                         ;;
1298                 *=*) echo "$1" | \
1299                                 sed -e "s/'/'\"'\"'/g" -e "s/=\(.*\)/='\1'/" >> optdef.sh;;
1300                 *) echo "$1='define'" >> optdef.sh;;
1301                 esac
1302                 shift
1303                 ;;
1304         -U)
1305                 shift
1306                 case "$1" in
1307                 *=) echo "$1" >> optdef.sh;;
1308                 *=*)
1309                         echo "$me: use '-D symbol=val', not '-U symbol=val'." >&2
1310                         echo "$me: ignoring -U $1" >&2
1311                         ;;
1312                 *) echo "$1='undef'" >> optdef.sh;;
1313                 esac
1314                 shift
1315                 ;;
1316         -A)
1317             shift
1318             xxx=''
1319             yyy="$1"
1320             zzz=''
1321             uuu=undef
1322             case "$yyy" in
1323             *=*) zzz=`echo $yyy|sed 's!=.*!!'`
1324                  case "$zzz" in
1325                  *:*) zzz='' ;;
1326                  *)   xxx=append
1327                       zzz=" "`echo $yyy|sed 's!^[^=]*=!!'` 
1328                       yyy=`echo $yyy|sed 's!=.*!!'` ;;
1329                  esac
1330                  ;;
1331             esac
1332             case "$xxx" in
1333             '')  case "$yyy" in
1334                  *:*) xxx=`echo $yyy|sed 's!:.*!!'`
1335                       yyy=`echo $yyy|sed 's!^[^:]*:!!'`
1336                       zzz=`echo $yyy|sed 's!^[^=]*=!!'`
1337                       yyy=`echo $yyy|sed 's!=.*!!'` ;;
1338                  *)   xxx=`echo $yyy|sed 's!:.*!!'`
1339                       yyy=`echo $yyy|sed 's!^[^:]*:!!'` ;;
1340                  esac
1341                  ;;       
1342             esac
1343             case "$xxx" in
1344             append)
1345                 echo "$yyy=\"\${$yyy}$zzz\""    >> posthint.sh ;;
1346             clear)
1347                 echo "$yyy=''"                  >> posthint.sh ;;
1348             define)
1349                 case "$zzz" in
1350                 '') zzz=define ;;
1351                 esac
1352                 echo "$yyy='$zzz'"              >> posthint.sh ;;
1353             eval)
1354                 echo "eval \"$yyy=$zzz\""       >> posthint.sh ;;
1355             prepend)
1356                 echo "$yyy=\"$zzz\${$yyy}\""    >> posthint.sh ;;
1357             undef)
1358                 case "$zzz" in
1359                 '') zzz="$uuu" ;;
1360                 esac
1361                 echo "$yyy=$zzz"                >> posthint.sh ;;
1362             *)  echo "$me: unknown -A command '$xxx', ignoring -A $1" >&2 ;;
1363             esac
1364             shift
1365             ;;
1366         -V) echo "$me generated by metaconfig 3.0 PL70." >&2
1367             exit 0;;
1368         --) break;;
1369         -*) echo "$me: unknown option $1" >&2; shift; error=true;;
1370         *) break;;
1371         esac
1372 done
1373
1374 case "$error" in
1375 true)
1376         cat >&2 <<EOM
1377 Usage: $me [-dehrsEKOSV] [-f config.sh] [-D symbol] [-D symbol=value]
1378                  [-U symbol] [-U symbol=] [-A command:symbol...]
1379   -d : use defaults for all answers.
1380   -e : go on without questioning past the production of config.sh.
1381   -f : specify an alternate default configuration file.
1382   -h : print this help message and exit (with an error status).
1383   -r : reuse C symbols value if possible (skips costly nm extraction).
1384   -s : silent mode, only echoes questions and essential information.
1385   -D : define symbol to have some value:
1386          -D symbol         symbol gets the value 'define'
1387          -D symbol=value   symbol gets the value 'value'
1388   -E : stop at the end of questions, after having produced config.sh.
1389   -K : do not use unless you know what you are doing.
1390   -O : let -D and -U override definitions from loaded configuration file.
1391   -S : perform variable substitutions on all .SH files (can mix with -f)
1392   -U : undefine symbol:
1393          -U symbol    symbol gets the value 'undef'
1394          -U symbol=   symbol gets completely empty
1395   -A : manipulate symbol after the platform specific hints have been applied:
1396          -A symbol=value                append " "value to symbol
1397          -A append:symbol=value         append value to symbol
1398          -A define:symbol=value         define symbol to have value
1399          -A clear:symbol                define symbol to be ''
1400          -A define:symbol               define symbol to be 'define'
1401          -A eval:symbol=value           define symbol to be eval of value
1402          -A prepend:symbol=value        prepend value to symbol
1403          -A undef:symbol                define symbol to be 'undef'
1404          -A undef:symbol=               define symbol to be ''
1405   -V : print version number and exit (with a zero status).
1406 EOM
1407         exit 1
1408         ;;
1409 esac
1410
1411 : Sanity checks
1412 case "$fastread$alldone" in
1413 yescont|yesexit) ;;
1414 *)
1415         case "$extractsh" in
1416         true) ;;
1417         *)
1418                 if test ! -t 0; then
1419                         echo "Say 'sh Configure', not 'sh <Configure'"
1420                         exit 1
1421                 fi
1422                 ;;
1423         esac
1424         ;;
1425 esac
1426
1427 exec 4>&1
1428 case "$silent" in
1429 true) exec 1>/dev/null;;
1430 esac
1431
1432 : run the defines and the undefines, if any, but leave the file out there...
1433 touch optdef.sh
1434 . ./optdef.sh
1435 : create the posthint manipulation script and leave the file out there...
1436 touch posthint.sh
1437
1438 : set package name
1439 package=perl5
1440 first=`echo $package | sed -e 's/^\(.\).*/\1/'`
1441 last=`echo $package | sed -e 's/^.\(.*\)/\1/'`
1442 case "`echo AbyZ | tr '[:lower:]' '[:upper:]' 2>/dev/null`" in
1443 ABYZ) spackage=`echo $first | tr '[:lower:]' '[:upper:]'`$last;;
1444 *) spackage=`echo $first | tr '[a-z]' '[A-Z]'`$last;;
1445 esac
1446
1447 : Some greps do not return status, grrr.
1448 echo "grimblepritz" >grimble
1449 if grep blurfldyick grimble >/dev/null 2>&1 ; then
1450         contains=contains
1451 elif grep grimblepritz grimble >/dev/null 2>&1 ; then
1452         contains=grep
1453 else
1454         contains=contains
1455 fi
1456 rm -f grimble
1457 : the following should work in any shell
1458 case "$contains" in
1459 contains*)
1460         echo " "
1461         echo "AGH!  Grep doesn't return a status.  Attempting remedial action."
1462         cat >contains <<'EOSS'
1463 grep "$1" "$2" >.greptmp && cat .greptmp && test -s .greptmp
1464 EOSS
1465 chmod +x contains
1466 esac
1467
1468 : Find the path to the source tree
1469 case "$src" in
1470 '') case "$0" in
1471     */*) src=`echo $0 | sed -e 's%/[^/][^/]*$%%'`
1472          case "$src" in
1473          /*)    ;;
1474          .)     ;;
1475          *)     src=`cd ../$src && pwd` ;;
1476          esac
1477          ;;
1478     *)   src='.';;
1479     esac;;
1480 esac
1481 case "$src" in
1482 '')     src=/
1483         rsrc=/
1484         ;;
1485 /*) rsrc="$src";;
1486 *) rsrc="../$src";;
1487 esac
1488 if test -f $rsrc/Configure && \
1489         $contains "^package=$package$" $rsrc/Configure >/dev/null 2>&1
1490 then
1491    : found it, so we are ok.
1492 else
1493         rsrc=''
1494         for src in . .. ../.. ../../.. ../../../..; do
1495                 if test -f ../$src/Configure && \
1496                         $contains "^package=$package$" ../$src/Configure >/dev/null 2>&1
1497                 then
1498                         rsrc=../$src
1499                         break
1500                 fi
1501         done
1502 fi
1503 case "$rsrc" in
1504 '')
1505         cat <<EOM >&4
1506
1507 Sorry, I can't seem to locate the source dir for $package.  Please start
1508 Configure with an explicit path -- i.e. /some/path/Configure.
1509
1510 EOM
1511         exit 1
1512         ;;
1513 ../.)   rsrc='..';;
1514 *)
1515         echo " "
1516         echo "Sources for $package found in \"$src\"." >&4
1517         ;;
1518 esac
1519
1520 : script used to extract .SH files with variable substitutions
1521 cat >extract <<'EOS'
1522 PERL_CONFIG_SH=true
1523 echo "Doing variable substitutions on .SH files..."
1524 if test -f MANIFEST; then
1525         set x `awk '{print $1}' < MANIFEST | grep '\.SH$'`
1526 else
1527         echo "(Looking for .SH files under the source directory.)"
1528         set x `(cd $src; find . -name "*.SH" -print)`
1529 fi
1530 shift
1531 case $# in
1532 0) set x `(cd $src; echo *.SH)`; shift;;
1533 esac
1534 if test ! -f $src/$1; then
1535         shift
1536 fi
1537 mkdir_p='
1538 name=$1;
1539 create="";
1540 while test $name; do
1541         if test ! -d "$name"; then
1542                 create="$name $create";
1543                 name=`echo $name | sed -e "s|^[^/]*$||"`;
1544                 name=`echo $name | sed -e "s|\(.*\)/.*|\1|"`;
1545         else
1546                 name="";
1547         fi;
1548 done;
1549 for file in $create; do
1550         mkdir $file;
1551 done
1552 '
1553 for file in $*; do
1554         case "$src" in
1555         ".")
1556                 case "$file" in
1557                 */*)
1558                         dir=`expr X$file : 'X\(.*\)/'`
1559                         file=`expr X$file : 'X.*/\(.*\)'`
1560                         (cd $dir && . ./$file)
1561                         ;;
1562                 *)
1563                         . ./$file
1564                         ;;
1565                 esac
1566                 ;;
1567         *)
1568                 case "$file" in
1569                 */*)
1570                         dir=`expr X$file : 'X\(.*\)/'`
1571                         file=`expr X$file : 'X.*/\(.*\)'`
1572                         (set x $dir; shift; eval $mkdir_p)
1573                         sh <$src/$dir/$file
1574                         ;;
1575                 *)
1576                         sh <$src/$file
1577                         ;;
1578                 esac
1579                 ;;
1580         esac
1581 done
1582 if test -f $src/config_h.SH; then
1583         if test ! -f config.h; then
1584         : oops, they left it out of MANIFEST, probably, so do it anyway.
1585         . $src/config_h.SH
1586         fi
1587 fi
1588 EOS
1589
1590 : extract files and exit if asked to do so
1591 case "$extractsh" in
1592 true)
1593         case "$realsilent" in
1594         true) ;;
1595         *) exec 1>&4;;
1596         esac
1597         case "$config_sh" in
1598         '') config_sh='config.sh';;
1599         esac
1600         echo " "
1601         echo "Fetching answers from $config_sh..."
1602         cd ..
1603         . $config_sh
1604         test "$override" && . ./optdef.sh
1605         echo " "
1606         . UU/extract
1607         rm -rf UU
1608         echo "Extraction done."
1609         exit 0
1610         ;;
1611 esac
1612
1613 : Eunice requires " " instead of "", can you believe it
1614 echo " "
1615 : Here we go...
1616 echo "Beginning of configuration questions for $package."
1617
1618 trap 'echo " "; test -d ../UU && rm -rf X $rmlist; exit 1' 1 2 3 15
1619
1620 : first determine how to suppress newline on echo command
1621 echo " "
1622 echo "Checking echo to see how to suppress newlines..."
1623 (echo "hi there\c" ; echo " ") >.echotmp
1624 if $contains c .echotmp >/dev/null 2>&1 ; then
1625         echo "...using -n."
1626         n='-n'
1627         c=''
1628 else
1629         cat <<'EOM'
1630 ...using \c
1631 EOM
1632         n=''
1633         c='\c'
1634 fi
1635 echo $n "The star should be here-->$c"
1636 echo '*'
1637 rm -f .echotmp
1638
1639 : Now test for existence of everything in MANIFEST
1640 echo " "
1641 if test -f $rsrc/MANIFEST; then
1642         echo "First let's make sure your kit is complete.  Checking..." >&4
1643         awk '$1 !~ /PACK[A-Z]+/ {print $1}' $rsrc/MANIFEST | split -50
1644         rm -f missing
1645         tmppwd=`pwd`
1646         for filelist in x??; do
1647                 (cd $rsrc; ls `cat $tmppwd/$filelist` >/dev/null 2>>$tmppwd/missing)
1648         done
1649         if test -s missing; then
1650                 cat missing >&4
1651                 cat >&4 <<'EOM'
1652
1653 THIS PACKAGE SEEMS TO BE INCOMPLETE.
1654
1655 You have the option of continuing the configuration process, despite the
1656 distinct possibility that your kit is damaged, by typing 'y'es.  If you
1657 do, don't blame me if something goes wrong.  I advise you to type 'n'o
1658 and contact the author (perlbug@perl.org).
1659
1660 EOM
1661                 echo $n "Continue? [n] $c" >&4
1662                 read ans
1663                 case "$ans" in
1664                 y*)
1665                         echo "Continuing..." >&4
1666                         rm -f missing
1667                         ;;
1668                 *)
1669                         echo "ABORTING..." >&4
1670                         kill $$
1671                         ;;
1672                 esac
1673         else
1674                 echo "Looks good..."
1675         fi
1676 else
1677         echo "There is no MANIFEST file.  I hope your kit is complete !"
1678 fi
1679 rm -f missing x??
1680
1681 echo " "
1682 : Find the appropriate value for a newline for tr
1683 if test -n "$DJGPP"; then
1684        trnl='\012'
1685 fi
1686 if test X"$trnl" = X; then
1687         case "`echo foo|tr '\n' x 2>/dev/null`" in
1688         foox) trnl='\n' ;;
1689         esac
1690 fi
1691 if test X"$trnl" = X; then
1692         case "`echo foo|tr '\012' x 2>/dev/null`" in
1693         foox) trnl='\012' ;;
1694         esac
1695 fi
1696 if test X"$trnl" = X; then
1697         cat <<EOM >&2
1698
1699 $me: Fatal Error: cannot figure out how to translate newlines with 'tr'.
1700
1701 EOM
1702         exit 1
1703 fi
1704
1705 : compute the number of columns on the terminal for proper question formatting
1706 case "$COLUMNS" in
1707 '') COLUMNS='80';;
1708 esac
1709
1710 : set up the echo used in my read
1711 myecho="case \"\$xxxm\" in
1712 '') echo $n \"\$rp $c\" >&4;;
1713 *) case \"\$rp\" in
1714         '') echo $n \"[\$xxxm] $c\";;
1715         *)
1716                 if test \`echo \"\$rp [\$xxxm]  \" | wc -c\` -ge $COLUMNS; then
1717                         echo \"\$rp\" >&4
1718                         echo $n \"[\$xxxm] $c\" >&4
1719                 else
1720                         echo $n \"\$rp [\$xxxm] $c\" >&4
1721                 fi
1722                 ;;
1723         esac;;
1724 esac"
1725
1726 : now set up to do reads with possible shell escape and default assignment
1727 cat <<EOSC >myread
1728 $startsh
1729 xxxm=\$dflt
1730 $myecho
1731 ans='!'
1732 case "\$fastread" in
1733 yes) case "\$dflt" in
1734         '') ;;
1735         *) ans='';
1736                 case "\$silent-\$rp" in
1737                 true-) ;;
1738                 *) echo " " >&4;;
1739                 esac;;
1740         esac;;
1741 *) case "\$silent" in
1742         true) case "\$rp" in
1743                 '') ans='';;
1744                 esac;;
1745         esac;;
1746 esac
1747 while expr "X\$ans" : "X!" >/dev/null; do
1748         read answ
1749         set x \$xxxm
1750         shift
1751         aok=''; eval "ans=\\"\$answ\\"" && aok=y
1752         case  "\$answ" in
1753         "!")
1754                 sh 1>&4
1755                 echo " "
1756                 $myecho
1757                 ;;
1758         !*)
1759                 set x \`expr "X\$ans" : "X!\(.*\)\$"\`
1760                 shift
1761                 sh 1>&4 -c "\$*"
1762                 echo " "
1763                 $myecho
1764                 ;;
1765         "\$ans")
1766                 case "\$ans" in
1767                 \\&*)
1768                         set x \`expr "X\$ans" : "X&\(.*\)\$"\`
1769                         shift
1770                         case "\$1" in
1771                         -d)
1772                                 fastread=yes
1773                                 echo "(OK, I'll run with -d after this question.)" >&4
1774                                 ;;
1775                         -*)
1776                                 echo "*** Sorry, \$1 not supported yet." >&4
1777                                 ;;
1778                         esac
1779                         $myecho
1780                         ans=!
1781                         ;;
1782                 esac;;
1783         *)
1784                 case "\$aok" in
1785                 y)
1786                         echo "*** Substitution done -- please confirm."
1787                         xxxm="\$ans"
1788                         ans=\`echo $n "\$ans$c" | tr '$trnl' ' '\`
1789                         xxxm="\$ans"
1790                         ans=!
1791                         ;;
1792                 *)
1793                         echo "*** Error -- try again."
1794                         ans=!
1795                         ;;
1796                 esac
1797                 $myecho
1798                 ;;
1799         esac
1800         case "\$ans\$xxxm\$nostick" in
1801         '')
1802                 ans=!
1803                 $myecho
1804                 ;;
1805         esac
1806 done
1807 case "\$ans" in
1808 '') ans="\$xxxm";;
1809 esac
1810 EOSC
1811
1812 : create .config dir to save info across Configure sessions
1813 test -d ../.config || mkdir ../.config
1814 cat >../.config/README <<EOF
1815 This directory created by Configure to save information that should
1816 persist across sessions for $package.
1817
1818 You may safely delete it if you wish.
1819 EOF
1820
1821 xversion=`awk '/define[         ]+PERL_VERSION/ {print $3}' $rsrc/patchlevel.h`
1822 case "$usedevel" in
1823 $define|true|[yY]*) ;;
1824 *) case "$xversion" in
1825    *[13579])
1826         cat >&4 <<EOH
1827 *** WHOA THERE!!! ***
1828
1829     This is an UNSTABLE DEVELOPMENT release.
1830     The version of this $package distribution is $xversion, that is, odd,
1831     (as opposed to even) and that signifies a development release.
1832     If you want a maintenance release, you want an even-numbered version.
1833
1834     Do ***NOT*** install this into production use.
1835     Data corruption and crashes are possible.
1836
1837     It is most seriously suggested that you do not continue any further
1838     unless you want to help in developing and debugging Perl.
1839
1840     If you *still* want to build perl, you can answer 'y' now,
1841     or pass -Dusedevel to Configure.
1842
1843 EOH
1844         rp='Do you really want to continue?'
1845         dflt='n'
1846         . ./myread
1847         case "$ans" in
1848         [yY]) echo >&4 "Okay, continuing."
1849               usedevel="$define" ;;
1850         *) echo >&4 "Okay, bye."
1851            exit 1
1852            ;;
1853         esac
1854         ;;
1855     esac
1856     ;;
1857 esac
1858 case "$usedevel" in
1859 $define|true|[yY]*)
1860         case "$versiononly" in
1861         '') versiononly="$define" ;;
1862         esac
1863         case "$installusrbinperl" in
1864         '') installusrbinperl="$undef" ;;
1865         esac
1866         ;;
1867 esac
1868
1869 : general instructions
1870 needman=true
1871 firsttime=true
1872 user=`(logname) 2>/dev/null`
1873 case "$user" in
1874 '') user=`whoami 2>&1`;;
1875 esac
1876 if $contains "^$user\$" ../.config/instruct >/dev/null 2>&1; then
1877         firsttime=false
1878         echo " "
1879         rp='Would you like to see the instructions?'
1880         dflt=n
1881         . ./myread
1882         case "$ans" in
1883         [yY]*) ;;
1884         *) needman=false;;
1885         esac
1886 fi
1887 if $needman; then
1888         cat <<EOH
1889
1890 This installation shell script will examine your system and ask you questions
1891 to determine how the perl5 package should be installed. If you get
1892 stuck on a question, you may use a ! shell escape to start a subshell or
1893 execute a command.  Many of the questions will have default answers in square
1894 brackets; typing carriage return will give you the default.
1895
1896 On some of the questions which ask for file or directory names you are allowed
1897 to use the ~name construct to specify the login directory belonging to "name",
1898 even if you don't have a shell which knows about that.  Questions where this is
1899 allowed will be marked "(~name ok)".
1900
1901 EOH
1902         rp=''
1903         dflt='Type carriage return to continue'
1904         . ./myread
1905         cat <<'EOH'
1906
1907 The prompter used in this script allows you to use shell variables and
1908 backticks in your answers.  You may use $1, $2, etc...  to refer to the words
1909 in the default answer, as if the default line was a set of arguments given to a
1910 script shell.  This means you may also use $* to repeat the whole default line,
1911 so you do not have to re-type everything to add something to the default.
1912
1913 Everytime there is a substitution, you will have to confirm.  If there is an
1914 error (e.g. an unmatched backtick), the default answer will remain unchanged
1915 and you will be prompted again.
1916
1917 If you are in a hurry, you may run 'Configure -d'.  This will bypass nearly all
1918 the questions and use the computed defaults (or the previous answers if there
1919 was already a config.sh file). Type 'Configure -h' for a list of options.
1920 You may also start interactively and then answer '& -d' at any prompt to turn
1921 on the non-interactive behaviour for the remainder of the execution.
1922
1923 EOH
1924         . ./myread
1925         cat <<EOH
1926
1927 Much effort has been expended to ensure that this shell script will run on any
1928 Unix system.  If despite that it blows up on yours, your best bet is to edit
1929 Configure and run it again.  If you can't run Configure for some reason,
1930 you'll have to generate a config.sh file by hand.  Whatever problems you
1931 have, let me (perlbug@perl.org) know how I blew it.
1932
1933 This installation script affects things in two ways:
1934
1935 1) it may do direct variable substitutions on some of the files included
1936    in this kit.
1937 2) it builds a config.h file for inclusion in C programs.  You may edit
1938    any of these files as the need arises after running this script.
1939
1940 If you make a mistake on a question, there is no easy way to back up to it
1941 currently.  The easiest thing to do is to edit config.sh and rerun all the SH
1942 files.  Configure will offer to let you do this before it runs the SH files.
1943
1944 EOH
1945         dflt='Type carriage return to continue'
1946         . ./myread
1947         case "$firsttime" in
1948         true) echo $user >>../.config/instruct;;
1949         esac
1950 fi
1951
1952 : find out where common programs are
1953 echo " "
1954 echo "Locating common programs..." >&4
1955 cat <<EOSC >loc
1956 $startsh
1957 case \$# in
1958 0) exit 1;;
1959 esac
1960 thing=\$1
1961 shift
1962 dflt=\$1
1963 shift
1964 for dir in \$*; do
1965         case "\$thing" in
1966         .)
1967         if test -d \$dir/\$thing; then
1968                 echo \$dir
1969                 exit 0
1970         fi
1971         ;;
1972         *)
1973         for thisthing in \$dir/\$thing; do
1974                 : just loop through to pick last item
1975         done
1976         if test -f \$thisthing; then
1977                 echo \$thisthing
1978                 exit 0
1979         elif test -f \$dir/\$thing.exe; then
1980                 if test -n "$DJGPP"; then
1981                         echo \$dir/\$thing.exe
1982                 else
1983                         : on Eunice apparently
1984                         echo \$dir/\$thing
1985                 fi
1986                 exit 0
1987         fi
1988         ;;
1989         esac
1990 done
1991 echo \$dflt
1992 exit 1
1993 EOSC
1994 chmod +x loc
1995 $eunicefix loc
1996 loclist="
1997 awk
1998 cat
1999 comm
2000 cp
2001 echo
2002 expr
2003 grep
2004 ls
2005 make
2006 mkdir
2007 rm
2008 sed
2009 sort
2010 touch
2011 tr
2012 uniq
2013 "
2014 trylist="
2015 Mcc
2016 ar
2017 bison
2018 byacc
2019 cpp
2020 csh
2021 date
2022 egrep
2023 gzip
2024 less
2025 ln
2026 more
2027 nm
2028 nroff
2029 pg
2030 test
2031 uname
2032 zip
2033 "
2034 pth=`echo $PATH | sed -e "s/$p_/ /g"`
2035 pth="$pth /lib /usr/lib"
2036 for file in $loclist; do
2037         eval xxx=\$$file
2038         case "$xxx" in
2039         /*|?:[\\/]*)
2040                 if test -f "$xxx"; then
2041                         : ok
2042                 else
2043                         echo "WARNING: no $xxx -- ignoring your setting for $file." >&4
2044                         xxx=`./loc $file $file $pth`
2045                 fi
2046                 ;;
2047         '') xxx=`./loc $file $file $pth`;;
2048         *) xxx=`./loc $xxx $xxx $pth`;;
2049         esac
2050         eval $file=$xxx
2051         eval _$file=$xxx
2052         case "$xxx" in
2053         /*)
2054                 echo $file is in $xxx.
2055                 ;;
2056         ?:[\\/]*)
2057                 echo $file is in $xxx.
2058                 ;;
2059         *)
2060                 echo "I don't know where '$file' is, and my life depends on it." >&4
2061                 echo "Go find a public domain implementation or fix your PATH setting!" >&4
2062                 exit 1
2063                 ;;
2064         esac
2065 done
2066 echo " "
2067 echo "Don't worry if any of the following aren't found..."
2068 say=offhand
2069 for file in $trylist; do
2070         eval xxx=\$$file
2071         case "$xxx" in
2072         /*|?:[\\/]*)
2073                 if test -f "$xxx"; then
2074                         : ok
2075                 else
2076                         echo "WARNING: no $xxx -- ignoring your setting for $file." >&4
2077                         xxx=`./loc $file $file $pth`
2078                 fi
2079                 ;;
2080         '') xxx=`./loc $file $file $pth`;;
2081         *) xxx=`./loc $xxx $xxx $pth`;;
2082         esac
2083         eval $file=$xxx
2084         eval _$file=$xxx
2085         case "$xxx" in
2086         /*)
2087                 echo $file is in $xxx.
2088                 ;;
2089         ?:[\\/]*)
2090                 echo $file is in $xxx.
2091                 ;;
2092         *)
2093                 echo "I don't see $file out there, $say."
2094                 say=either
2095                 ;;
2096         esac
2097 done
2098 case "$egrep" in
2099 egrep)
2100         echo "Substituting grep for egrep."
2101         egrep=$grep
2102         ;;
2103 esac
2104 case "$ln" in
2105 ln)
2106         echo "Substituting cp for ln."
2107         ln=$cp
2108         ;;
2109 esac
2110 case "$test" in
2111 test)
2112         echo "Hopefully test is built into your sh."
2113         ;;
2114 *)
2115         if `sh -c "PATH= test true" >/dev/null 2>&1`; then
2116                 echo "Using the test built into your sh."
2117                 test=test
2118                 _test=test
2119         fi
2120         ;;
2121 esac
2122 case "$echo" in
2123 echo)
2124         echo "Hopefully echo is built into your sh."
2125         ;;
2126 '') ;;
2127 *)
2128         echo " "
2129 echo "Checking compatibility between $echo and builtin echo (if any)..." >&4
2130         $echo $n "hi there$c" >foo1
2131         echo $n "hi there$c" >foo2
2132         if cmp foo1 foo2 >/dev/null 2>&1; then
2133                 echo "They are compatible.  In fact, they may be identical."
2134         else
2135                 case "$n" in
2136                 '-n') n='' c='\c';;
2137                 *) n='-n' c='';;
2138                 esac
2139                 cat <<FOO
2140 They are not compatible!  You are probably running ksh on a non-USG system.
2141 I'll have to use $echo instead of the builtin, since Bourne shell doesn't
2142 have echo built in and we may have to run some Bourne shell scripts.  That
2143 means I'll have to use '$n$c' to suppress newlines now.  Life is ridiculous.
2144
2145 FOO
2146                 $echo $n "The star should be here-->$c"
2147                 $echo "*"
2148         fi
2149         $rm -f foo1 foo2
2150         ;;
2151 esac
2152
2153 cat <<EOS >checkcc
2154 $startsh
2155 EOS
2156 cat <<'EOSC' >>checkcc
2157 case "$cc" in
2158 '') ;;
2159 *)  $rm -f try try.*
2160     $cat >try.c <<EOM
2161 int main(int argc, char *argv[]) {
2162   return 0;
2163 }
2164 EOM
2165     if $cc -o try $ccflags $ldflags try.c; then
2166        :
2167     else
2168         echo "Uh-oh, the C compiler '$cc' doesn't seem to be working." >&4
2169         despair=yes
2170         trygcc=yes
2171         case "$cc" in
2172         *gcc*) trygcc=no ;;
2173         esac
2174         case "`$cc -v -c try.c 2>&1`" in
2175         *gcc*) trygcc=no ;;
2176         esac
2177         if $test X"$trygcc" = Xyes; then
2178             if gcc -o try -c try.c; then
2179                 echo " "
2180                 echo "You seem to have a working gcc, though." >&4
2181                 rp="Would you like to use it?"
2182                 dflt=y
2183                 if $test -f myread; then
2184                     . ./myread
2185                 else
2186                     if $test -f UU/myread; then
2187                         . ./UU/myread
2188                     else
2189                         echo "Cannot find myread, sorry.  Aborting." >&2
2190                         exit 1
2191                     fi
2192                 fi  
2193                 case "$ans" in
2194                 [yY]*) cc=gcc; ccname=gcc; ccflags=''; despair=no ;;
2195                 esac
2196             fi
2197         fi
2198         if $test X"$despair" = Xyes; then
2199             $cat >&4 <<EOM
2200 You need to find a working C compiler.
2201 Either (purchase and) install the C compiler supplied by your OS vendor,
2202 or for a free C compiler try http://gcc.gnu.org/
2203 I cannot continue any further, aborting.
2204 EOM
2205             exit 1
2206         fi
2207     fi
2208     $rm -f try try.*
2209     ;;
2210 esac
2211 EOSC
2212
2213 : determine whether symbolic links are supported
2214 echo " "
2215 $touch blurfl
2216 if $ln -s blurfl sym > /dev/null 2>&1 ; then
2217         echo "Symbolic links are supported." >&4
2218         lns="$ln -s"
2219 else
2220         echo "Symbolic links are NOT supported." >&4
2221         lns="$ln"
2222 fi
2223 $rm -f blurfl sym
2224
2225 : determine whether symbolic links are supported
2226 echo " "
2227 case "$lns" in
2228 *"ln -s")
2229         echo "Checking how to test for symbolic links..." >&4
2230         $lns blurfl sym
2231         if $test "X$issymlink" = X; then
2232                 sh -c "PATH= test -h sym" >/dev/null 2>&1
2233                 if test $? = 0; then
2234                         issymlink="test -h"
2235                 fi              
2236         fi
2237         if $test "X$issymlink" = X; then
2238                 if  $test -h >/dev/null 2>&1; then
2239                         issymlink="$test -h"
2240                         echo "Your builtin 'test -h' may be broken, I'm using external '$test -h'." >&4
2241                 fi              
2242         fi
2243         if $test "X$issymlink" = X; then
2244                 if $test -L sym 2>/dev/null; then
2245                         issymlink="$test -L"
2246                 fi
2247         fi
2248         if $test "X$issymlink" != X; then
2249                 echo "You can test for symbolic links with '$issymlink'." >&4
2250         else
2251                 echo "I do not know how you can test for symbolic links." >&4
2252         fi
2253         $rm -f blurfl sym
2254         ;;
2255 *)      echo "No symbolic links, so not testing for their testing..." >&4
2256         ;;
2257 esac
2258 echo " "
2259
2260
2261 case "$mksymlinks" in
2262 $define|true|[yY]*)
2263         case "$src" in
2264         ''|'.') echo "Cannot create symlinks in the original directory." >&4
2265                 exit 1
2266                 ;;
2267         *)      case "$lns:$issymlink" in
2268                 *"ln -s:"*"test -"?)
2269                         echo "Creating the symbolic links..." >&4
2270                         echo "(First creating the subdirectories...)" >&4
2271                         cd ..
2272                         awk '{print $1}' $src/MANIFEST | grep / | sed 's:/[^/]*$::' | sort -u | while true; do
2273                                 read directory
2274                                 test -z "$directory" && break
2275                                 mkdir -p $directory
2276                         done
2277                         # Sanity check 1.
2278                         if test ! -d t/base; then
2279                                 echo "Failed to create the subdirectories.  Aborting." >&4
2280                                 exit 1
2281                         fi
2282                         echo "(Then creating the symlinks...)" >&4
2283                         awk '{print $1}' $src/MANIFEST | while true; do
2284                                 read filename
2285                                 test -z "$filename" && break
2286                                 if test -f $filename; then
2287                                         if $issymlink $filename; then
2288                                                 rm -f $filename
2289                                         fi
2290                                 fi
2291                                 if test -f $filename; then
2292                                         echo "$filename already exists, not symlinking."
2293                                 else
2294                                         ln -s $src/$filename $filename
2295                                 fi
2296                         done
2297                         # Sanity check 2.
2298                         if test ! -f t/base/commonsense.t; then
2299                                 echo "Failed to create the symlinks.  Aborting." >&4
2300                                 exit 1
2301                         fi
2302                         cd UU
2303                         ;;
2304                 *)      echo "(I cannot figure out how to do symbolic links, ignoring mksymlinks)." >&4
2305                         ;;
2306                 esac
2307                 ;;
2308         esac
2309         ;;
2310 esac
2311
2312
2313 case "$usecrosscompile" in
2314 $define|true|[yY]*)
2315         croak=''
2316         case "$cc" in
2317         *-*-gcc) # A cross-compiling gcc, probably.
2318             targetarch=`echo $cc|sed 's/-gcc$//'`
2319             ar=$targetarch-ar
2320             # leave out ld, choosing it is more complex
2321             nm=$targetarch-nm
2322             ranlib=$targetarch-ranlib
2323             ;;
2324         esac
2325         case "$targetarch" in
2326         '') echo "Cross-compiling: you should define targetarch." >&4; croak=y ;;
2327         esac
2328         case "$usrinc" in
2329         '') echo "Cross-compiling: you should define usrinc." >&4; croak=y ;;
2330         esac
2331         case "$incpth" in
2332         '') echo "Cross-compiling: you should define incpth." >&4; croak=y ;;
2333         esac
2334         case "$libpth" in
2335         '') echo "Cross-compiling: you should define libpth." >&4; croak=y ;;
2336         esac
2337         case "$targethost" in
2338         '') echo "Cross-compiling: targethost not defined." >&4; croak=y ;;
2339         esac
2340         case "$targetdir" in
2341         '') echo "Cross compiling: targetdir not defined." >&4; croak=y ;;
2342         esac
2343         locincpth=''
2344         loclibpth=''
2345         case "$croak" in
2346         y) exit 1 ;;
2347         esac
2348         case "$src" in
2349         /*) run=$src/Cross/run
2350             to=$src/Cross/to
2351             from=$src/Cross/from
2352             ;;
2353         *)  pwd=`test -f ../Configure & cd ..; pwd`
2354             run=$pwd/Cross/run
2355             to=$pwd/Cross/to
2356             from=$pwd/Cross/from
2357             ;;
2358         esac
2359         case "$targetrun" in
2360         '') targetrun=ssh ;;
2361         esac
2362         case "$targetto" in
2363         '') targetto=scp ;;
2364         esac
2365         case "$targetfrom" in
2366         '') targetfrom=scp ;;
2367         esac
2368         run=$run-$targetrun
2369         to=$to-$targetto
2370         from=$from-$targetfrom
2371         case "$targetuser" in
2372         '') targetuser=root ;;
2373         esac
2374         case "$targetfrom" in
2375         scp)    q=-q ;;
2376         *)      q='' ;;
2377         esac
2378         case "$targetrun" in
2379         ssh|rsh)
2380             cat >$run <<EOF
2381 #!/bin/sh
2382 exe=\$1
2383 shift
2384 $to \$exe
2385 $targetrun -l $targetuser $targethost "cd $targetdir && ./\$exe \$@"
2386 EOF
2387             ;;
2388         *)  echo "Cross-compiling: unknown targetrun '$targetrun'" >&4
2389             exit 1
2390             ;;
2391         esac
2392         case "$targetto" in
2393         scp|rcp)
2394             cat >$to <<EOF
2395 #!/bin/sh
2396 for f in \$@
2397 do
2398   $targetto $q \$f $targetuser@$targethost:$targetdir/. || exit 1
2399 done
2400 exit 0
2401 EOF
2402             ;;
2403         cp) cat >$to <<EOF
2404 #!/bin/sh
2405 cp \$@ $targetdir/.
2406 EOF
2407             ;;
2408         *)  echo "Cross-compiling: unknown targetto '$targetto'" >&4
2409             exit 1
2410             ;;
2411         esac
2412         case "$targetfrom" in
2413         scp|rcp)
2414           cat >$from <<EOF
2415 #!/bin/sh
2416 for f in \$@
2417 do
2418   $targetfrom $q $targetuser@$targethost:$targetdir/\$f . || exit 1
2419 done
2420 exit 0
2421 EOF
2422             ;;
2423         cp) cat >$from <<EOF
2424 #!/bin/sh
2425 for f in \$@
2426 do
2427   cp $targetdir/\$f . || exit 1
2428 done
2429 exit 0
2430 EOF
2431             ;;
2432         *)  echo "Cross-compiling: unknown targetfrom '$targetfrom'" >&4
2433             exit 1
2434             ;;
2435         esac
2436         if test ! -f $run; then
2437             echo "Cross-compiling: target 'run' script '$run' not found." >&4
2438         else
2439             chmod a+rx $run
2440         fi
2441         if test ! -f $to; then
2442             echo "Cross-compiling: target 'to' script '$to' not found." >&4
2443         else
2444             chmod a+rx $to
2445         fi
2446         if test ! -f $from; then
2447             echo "Cross-compiling: target 'from' script '$from' not found." >&4
2448         else
2449             chmod a+rx $from
2450         fi
2451         if test ! -f $run -o ! -f $to -o ! -f $from; then
2452             exit 1
2453         fi
2454         cat >&4 <<EOF
2455 Cross-compiling: Using
2456         $run-ssh
2457         $to-ssh
2458         $from-ssh
2459 EOF
2460         ;;
2461 *)      run=''
2462         to=:
2463         from=:
2464         usecrosscompile='undef'
2465         targetarch=''
2466         ;;
2467 esac
2468
2469 : see whether [:lower:] and [:upper:] are supported character classes
2470 echo " "
2471 case "`echo AbyZ | $tr '[:lower:]' '[:upper:]' 2>/dev/null`" in
2472 ABYZ)
2473         echo "Good, your tr supports [:lower:] and [:upper:] to convert case." >&4
2474         up='[:upper:]'
2475         low='[:lower:]'
2476         ;;
2477 *)      # There is a discontinuity in EBCDIC between 'I' and 'J'
2478         # (0xc9 and 0xd1), therefore that is a nice testing point.
2479         if test "X$up" = X -o "X$low" = X; then
2480             case "`echo IJ | $tr '[I-J]' '[i-j]' 2>/dev/null`" in
2481             ij) up='[A-Z]'
2482                 low='[a-z]'
2483                 ;;
2484             esac
2485         fi
2486         if test "X$up" = X -o "X$low" = X; then
2487             case "`echo IJ | $tr I-J i-j 2>/dev/null`" in
2488             ij) up='A-Z'
2489                 low='a-z'
2490                 ;;
2491             esac
2492         fi
2493         if test "X$up" = X -o "X$low" = X; then
2494             case "`echo IJ | od -x 2>/dev/null`" in
2495             *C9D1*|*c9d1*)
2496                 echo "Hey, this might be EBCDIC." >&4
2497                 if test "X$up" = X -o "X$low" = X; then
2498                     case "`echo IJ | $tr '[A-IJ-RS-Z]' '[a-ij-rs-z]' 2>/dev/null`" in
2499                     ij) up='[A-IJ-RS-Z]'
2500                         low='[a-ij-rs-z]'
2501                         ;;
2502                     esac
2503                 fi
2504                 if test "X$up" = X -o "X$low" = X; then
2505                     case "`echo IJ | $tr A-IJ-RS-Z a-ij-rs-z 2>/dev/null`" in
2506                     ij) up='A-IJ-RS-Z'
2507                         low='a-ij-rs-z'
2508                         ;;
2509                     esac
2510                 fi
2511                 ;;
2512             esac
2513         fi
2514 esac
2515 case "`echo IJ | $tr \"$up\" \"$low\" 2>/dev/null`" in
2516 ij)
2517     echo "Using $up and $low to convert case." >&4
2518     ;;
2519 *)
2520     echo "I don't know how to translate letters from upper to lower case." >&4
2521     echo "Your tr is not acting any way I know of." >&4
2522     exit 1
2523     ;;
2524 esac
2525 : set up the translation script tr, must be called with ./tr of course
2526 cat >tr <<EOSC
2527 $startsh
2528 case "\$1\$2" in
2529 '[A-Z][a-z]') exec $tr '$up' '$low';;
2530 '[a-z][A-Z]') exec $tr '$low' '$up';;
2531 esac
2532 exec $tr "\$@"
2533 EOSC
2534 chmod +x tr
2535 $eunicefix tr
2536
2537 : Try to determine whether config.sh was made on this system
2538 case "$config_sh" in
2539 '')
2540 myuname=`$uname -a 2>/dev/null`
2541 $test -z "$myuname" && myuname=`hostname 2>/dev/null`
2542 # tr '[A-Z]' '[a-z]' would not work in EBCDIC
2543 # because the A-Z/a-z are not consecutive.
2544 myuname=`echo $myuname | $sed -e 's/^[^=]*=//' -e 's/\///g' | \
2545         ./tr '[A-Z]' '[a-z]' | $tr $trnl ' '`
2546 newmyuname="$myuname"
2547 dflt=n
2548 case "$knowitall" in
2549 '')
2550         if test -f ../config.sh; then
2551                 if $contains myuname= ../config.sh >/dev/null 2>&1; then
2552                         eval "`grep myuname= ../config.sh`"
2553                 fi
2554                 if test "X$myuname" = "X$newmyuname"; then
2555                         dflt=y
2556                 fi
2557         fi
2558         ;;
2559 *) dflt=y;;
2560 esac
2561
2562 : Get old answers from old config file if Configure was run on the
2563 : same system, otherwise use the hints.
2564 hint=default
2565 cd ..
2566 if test -f config.sh; then
2567         echo " "
2568         rp="I see a config.sh file.  Shall I use it to set the defaults?"
2569         . UU/myread
2570         case "$ans" in
2571         n*|N*) echo "OK, I'll ignore it."
2572                 mv config.sh config.sh.old
2573                 myuname="$newmyuname"
2574                 ;;
2575         *)  echo "Fetching default answers from your old config.sh file..." >&4
2576                 tmp_n="$n"
2577                 tmp_c="$c"
2578                 tmp_sh="$sh"
2579                 . ./config.sh
2580                 cp config.sh UU
2581                 n="$tmp_n"
2582                 c="$tmp_c"
2583                 : Older versions did not always set $sh.  Catch re-use of such
2584                 : an old config.sh.
2585                 case "$sh" in
2586                 '') sh="$tmp_sh" ;;
2587                 esac
2588                 hint=previous
2589                 ;;
2590         esac
2591 fi
2592 . ./UU/checkcc
2593 if test ! -f config.sh; then
2594         $cat <<EOM
2595
2596 First time through, eh?  I have some defaults handy for some systems
2597 that need some extra help getting the Configure answers right:
2598
2599 EOM
2600         (cd $src/hints; ls -C *.sh) | $sed 's/\.sh/   /g' >&4
2601         dflt=''
2602         : Half the following guesses are probably wrong... If you have better
2603         : tests or hints, please send them to perlbug@perl.org
2604         : The metaconfig authors would also appreciate a copy...
2605         $test -f /irix && osname=irix
2606         $test -f /xenix && osname=sco_xenix
2607         $test -f /dynix && osname=dynix
2608         $test -f /dnix && osname=dnix
2609         $test -f /lynx.os && osname=lynxos
2610         $test -f /unicos && osname=unicos && osvers=`$uname -r`
2611         $test -f /unicosmk && osname=unicosmk && osvers=`$uname -r`
2612         $test -f /unicosmk.ar && osname=unicosmk && osvers=`$uname -r`
2613         $test -f /bin/mips && /bin/mips && osname=mips
2614         $test -d /NextApps && set X `hostinfo | grep 'NeXT Mach.*:' | \
2615                 $sed -e 's/://' -e 's/\./_/'` && osname=next && osvers=$4
2616         $test -d /usr/apollo/bin && osname=apollo
2617         $test -f /etc/saf/_sactab && osname=svr4
2618         $test -d /usr/include/minix && osname=minix
2619         if $test -d /MachTen -o -d /MachTen_Folder; then
2620                 osname=machten
2621                 if $test -x /sbin/version; then
2622                         osvers=`/sbin/version | $awk '{print $2}' |
2623                         $sed -e 's/[A-Za-z]$//'`
2624                 elif $test -x /usr/etc/version; then
2625                         osvers=`/usr/etc/version | $awk '{print $2}' |
2626                         $sed -e 's/[A-Za-z]$//'`
2627                 else
2628                         osvers="$2.$3"
2629                 fi
2630         fi
2631
2632         $test -f /sys/posix.dll &&
2633                 $test -f /usr/bin/what &&
2634                 set X `/usr/bin/what /sys/posix.dll` &&
2635                 $test "$3" = UWIN &&
2636                 osname=uwin &&
2637                 osvers="$5"
2638
2639         if $test -f $uname; then
2640                 set X $myuname
2641                 shift
2642
2643                 case "$5" in
2644                 fps*) osname=fps ;;
2645                 mips*)
2646                         case "$4" in
2647                         umips) osname=umips ;;
2648                         *) osname=mips ;;
2649                         esac;;
2650                 [23]100) osname=mips ;;
2651                 next*) osname=next ;;
2652                 i386*)
2653                         tmp=`/bin/uname -X 2>/dev/null|awk '/3\.2v[45]/{ print $(NF) }'`
2654                         if $test "$tmp" != "" -a "$3" = "3.2" -a -f '/etc/systemid'; then
2655                                 osname='sco'
2656                                 osvers=$tmp
2657                         elif $test -f /etc/kconfig; then
2658                                 osname=isc
2659                                 if test "$lns" = "$ln -s"; then
2660                                         osvers=4
2661                                 elif $contains _SYSV3 /usr/include/stdio.h > /dev/null 2>&1 ; then
2662                                         osvers=3
2663                                 elif $contains _POSIX_SOURCE /usr/include/stdio.h > /dev/null 2>&1 ; then
2664                                         osvers=2
2665                                 fi
2666                         fi
2667                         tmp=''
2668                         ;;
2669                 pc*)
2670                         if test -n "$DJGPP"; then
2671                                 osname=dos
2672                                 osvers=djgpp
2673                         fi
2674                         ;;
2675                 esac
2676
2677                 case "$1" in
2678                 aix) osname=aix
2679                         tmp=`( (oslevel) 2>/dev/null || echo "not found") 2>&1`
2680                         case "$tmp" in
2681                         'not found') osvers="$4"."$3" ;;
2682                         '<3240'|'<>3240') osvers=3.2.0 ;;
2683                         '=3240'|'>3240'|'<3250'|'<>3250') osvers=3.2.4 ;;
2684                         '=3250'|'>3250') osvers=3.2.5 ;;
2685                         *) osvers=$tmp;;
2686                         esac
2687                         ;;
2688                 bsd386) osname=bsd386
2689                         osvers=`$uname -r`
2690                         ;;
2691                 cygwin*) osname=cygwin
2692                         osvers="$3"
2693                         ;;
2694                 *dc.osx) osname=dcosx
2695                         osvers="$3"
2696                         ;;
2697                 dnix) osname=dnix
2698                         osvers="$3"
2699                         ;;
2700                 domainos) osname=apollo
2701                         osvers="$3"
2702                         ;;
2703                 dgux) osname=dgux 
2704                         osvers="$3"
2705                         ;;
2706                 dynixptx*) osname=dynixptx
2707                         osvers=`echo "$4"|sed 's/^v//'`
2708                         ;;
2709                 freebsd) osname=freebsd 
2710                         osvers="$3" ;;
2711                 genix) osname=genix ;;
2712                 hp*) osname=hpux 
2713                         osvers=`echo "$3" | $sed 's,.*\.\([0-9]*\.[0-9]*\),\1,'`
2714                         ;;
2715                 irix*) osname=irix
2716                         case "$3" in
2717                         4*) osvers=4 ;;
2718                         5*) osvers=5 ;;
2719                         *)      osvers="$3" ;;
2720                         esac
2721                         ;;
2722                 linux) osname=linux
2723                         case "$3" in
2724                         *)      osvers="$3" ;;
2725                         esac
2726                         ;;
2727                 MiNT) osname=mint
2728                         ;;
2729                 netbsd*) osname=netbsd
2730                         osvers="$3"
2731                         ;;
2732                 news-os) osvers="$3"
2733                         case "$3" in
2734                         4*) osname=newsos4 ;;
2735                         *) osname=newsos ;;
2736                         esac
2737                         ;;
2738                 next*) osname=next ;;
2739                 nonstop-ux) osname=nonstopux ;;
2740                 POSIX-BC | posix-bc ) osname=posix-bc
2741                         osvers="$3"
2742                         ;;
2743                 powerux | power_ux | powermax_os | powermaxos | \
2744                 powerunix | power_unix) osname=powerux
2745                         osvers="$3"
2746                         ;;
2747                 qnx) osname=qnx
2748                         osvers="$4"
2749                         ;;
2750                 solaris) osname=solaris
2751                         case "$3" in
2752                         5*) osvers=`echo $3 | $sed 's/^5/2/g'` ;;
2753                         *)      osvers="$3" ;;
2754                         esac
2755                         ;;
2756                 sunos) osname=sunos
2757                         case "$3" in
2758                         5*) osname=solaris
2759                                 osvers=`echo $3 | $sed 's/^5/2/g'` ;;
2760                         *)      osvers="$3" ;;
2761                         esac
2762                         ;;
2763                 titanos) osname=titanos
2764                         case "$3" in
2765                         1*) osvers=1 ;;
2766                         2*) osvers=2 ;;
2767                         3*) osvers=3 ;;
2768                         4*) osvers=4 ;;
2769                         *)      osvers="$3" ;;
2770                         esac
2771                         ;;
2772                 ultrix) osname=ultrix
2773                         osvers="$3"
2774                         ;;
2775                 osf1|mls+)      case "$5" in
2776                                 alpha)
2777                                         osname=dec_osf
2778                                         osvers=`sizer -v | awk '{print $3}' |  tr '[A-Z]' '[a-z]' | sed 's/^[xvt]//'`
2779                                         case "$osvers" in
2780                                         [1-9].[0-9]*) ;;
2781                                         *) osvers=`echo "$3" | sed 's/^[xvt]//'` ;;
2782                                         esac
2783                                         ;;
2784                         hp*)    osname=hp_osf1  ;;
2785                         mips)   osname=mips_osf1 ;;
2786                         esac
2787                         ;;
2788                 unixware) osname=svr5
2789                         osvers="$4"
2790                         ;;
2791                 uts) osname=uts
2792                         osvers="$3"
2793                         ;;
2794                 $2) case "$osname" in
2795                         *isc*) ;;
2796                         *freebsd*) ;;
2797                         svr*)
2798                                 : svr4.x or possibly later
2799                                 case "svr$3" in 
2800                                 ${osname}*)
2801                                         osname=svr$3
2802                                         osvers=$4
2803                                         ;;
2804                                 esac
2805                                 case "$osname" in
2806                                 svr4.0)
2807                                         : Check for ESIX
2808                                         if test -f /stand/boot ; then
2809                                                 eval `grep '^INITPROG=[a-z/0-9]*$' /stand/boot`
2810                                                 if test -n "$INITPROG" -a -f "$INITPROG"; then
2811                         isesix=`strings -a $INITPROG|grep 'ESIX SYSTEM V/386 Release 4.0'`
2812                                                         if test -n "$isesix"; then
2813                                                                 osname=esix4
2814                                                         fi
2815                                                 fi
2816                                         fi
2817                                         ;;
2818                                 esac
2819                                 ;;
2820                         *)      if test -f /etc/systemid; then
2821                                         osname=sco
2822                                         set `echo $3 | $sed 's/\./ /g'` $4
2823                                         if $test -f $src/hints/sco_$1_$2_$3.sh; then
2824                                                 osvers=$1.$2.$3
2825                                         elif $test -f $src/hints/sco_$1_$2.sh; then
2826                                                 osvers=$1.$2
2827                                         elif $test -f $src/hints/sco_$1.sh; then
2828                                                 osvers=$1
2829                                         fi
2830                                 else
2831                                         case "$osname" in
2832                                         '') : Still unknown.  Probably a generic Sys V.
2833                                                 osname="sysv"
2834                                                 osvers="$3"
2835                                                 ;;
2836                                         esac
2837                                 fi
2838                                 ;;
2839                         esac
2840                         ;;
2841                 *)      case "$osname" in
2842                         '') : Still unknown.  Probably a generic BSD.
2843                                 osname="$1"
2844                                 osvers="$3"
2845                                 ;;
2846                         esac
2847                         ;;
2848                 esac
2849         else
2850                 if test -f /vmunix -a -f $src/hints/news_os.sh; then
2851                         (what /vmunix | UU/tr '[A-Z]' '[a-z]') > UU/kernel.what 2>&1
2852                         if $contains news-os UU/kernel.what >/dev/null 2>&1; then
2853                                 osname=news_os
2854                         fi
2855                         $rm -f UU/kernel.what
2856                 elif test -d c:/.; then
2857                         set X $myuname
2858                         osname=os2
2859                         osvers="$5"
2860                 fi
2861         fi
2862         
2863         case "$targetarch" in
2864         '') ;;
2865         *)  hostarch=$osname
2866             osname=`echo $targetarch|sed 's,^[^-]*-,,'`
2867             osvers=''
2868             ;;
2869         esac
2870
2871         : Now look for a hint file osname_osvers, unless one has been
2872         : specified already.
2873         case "$hintfile" in
2874         ''|' ')
2875                 file=`echo "${osname}_${osvers}" | $sed -e 's%\.%_%g' -e 's%_$%%'`
2876                 : Also try without trailing minor version numbers.
2877                 xfile=`echo $file | $sed -e 's%_[^_]*$%%'`
2878                 xxfile=`echo $xfile | $sed -e 's%_[^_]*$%%'`
2879                 xxxfile=`echo $xxfile | $sed -e 's%_[^_]*$%%'`
2880                 xxxxfile=`echo $xxxfile | $sed -e 's%_[^_]*$%%'`
2881                 case "$file" in
2882                 '') dflt=none ;;
2883                 *)  case "$osvers" in
2884                         '') dflt=$file
2885                                 ;;
2886                         *)  if $test -f $src/hints/$file.sh ; then
2887                                         dflt=$file
2888                                 elif $test -f $src/hints/$xfile.sh ; then
2889                                         dflt=$xfile
2890                                 elif $test -f $src/hints/$xxfile.sh ; then
2891                                         dflt=$xxfile
2892                                 elif $test -f $src/hints/$xxxfile.sh ; then
2893                                         dflt=$xxxfile
2894                                 elif $test -f $src/hints/$xxxxfile.sh ; then
2895                                         dflt=$xxxxfile
2896                                 elif $test -f "$src/hints/${osname}.sh" ; then
2897                                         dflt="${osname}"
2898                                 else
2899                                         dflt=none
2900                                 fi
2901                                 ;;
2902                         esac
2903                         ;;
2904                 esac
2905                 if $test -f Policy.sh ; then
2906                         case "$dflt" in
2907                         *Policy*) ;;
2908                         none) dflt="Policy" ;;
2909                         *) dflt="Policy $dflt" ;;
2910                         esac
2911                 fi
2912                 ;;
2913         *)
2914                 dflt=`echo $hintfile | $sed 's/\.sh$//'`
2915                 ;;
2916         esac
2917
2918         if $test -f Policy.sh ; then
2919                 $cat <<EOM
2920
2921 There's also a Policy hint file available, which should make the
2922 site-specific (policy) questions easier to answer.
2923 EOM
2924
2925         fi
2926
2927         $cat <<EOM
2928
2929 You may give one or more space-separated answers, or "none" if appropriate.
2930 A well-behaved OS will have no hints, so answering "none" or just "Policy"
2931 is a good thing.  DO NOT give a wrong version or a wrong OS.
2932
2933 EOM
2934
2935         rp="Which of these apply, if any?"
2936         . UU/myread
2937         tans=$ans
2938         for file in $tans; do
2939                 if $test X$file = XPolicy -a -f Policy.sh; then
2940                         . Policy.sh
2941                         $cat Policy.sh >> UU/config.sh
2942                 elif $test -f $src/hints/$file.sh; then
2943                         . $src/hints/$file.sh
2944                         $cat $src/hints/$file.sh >> UU/config.sh
2945                 elif $test X"$tans" = X -o X"$tans" = Xnone ; then
2946                         : nothing
2947                 else
2948                         : Give one chance to correct a possible typo.
2949                         echo "$file.sh does not exist"
2950                         dflt=$file
2951                         rp="hint to use instead?"
2952                         . UU/myread
2953                         for file in $ans; do
2954                                 if $test -f "$src/hints/$file.sh"; then
2955                                         . $src/hints/$file.sh
2956                                         $cat $src/hints/$file.sh >> UU/config.sh
2957                                 elif $test X$ans = X -o X$ans = Xnone ; then
2958                                         : nothing
2959                                 else
2960                                         echo "$file.sh does not exist -- ignored."
2961                                 fi
2962                         done
2963                 fi
2964         done
2965
2966         hint=recommended
2967         : Remember our hint file for later.
2968         if $test -f "$src/hints/$file.sh" ; then
2969                 hintfile="$file"
2970         else
2971                 hintfile=''
2972         fi
2973 fi
2974 cd UU
2975 ;;
2976 *)
2977         echo " "
2978         echo "Fetching default answers from $config_sh..." >&4
2979         tmp_n="$n"
2980         tmp_c="$c"
2981         cd ..
2982         cp $config_sh config.sh 2>/dev/null
2983         chmod +w config.sh
2984         . ./config.sh
2985         cd UU
2986         cp ../config.sh .
2987         n="$tmp_n"
2988         c="$tmp_c"
2989         hint=previous
2990         ;;
2991 esac
2992 test "$override" && . ./optdef.sh
2993
2994 : Restore computed paths
2995 for file in $loclist $trylist; do
2996         eval $file="\$_$file"
2997 done
2998
2999 cat << EOM
3000
3001 Configure uses the operating system name and version to set some defaults.
3002 The default value is probably right if the name rings a bell. Otherwise,
3003 since spelling matters for me, either accept the default or answer "none"
3004 to leave it blank.
3005
3006 EOM
3007 case "$osname" in
3008         ''|' ')
3009                 case "$hintfile" in
3010                 ''|' '|none) dflt=none ;;
3011                 *)  dflt=`echo $hintfile | $sed -e 's/\.sh$//' -e 's/_.*$//'` ;;
3012                 esac
3013                 ;;
3014         *) dflt="$osname" ;;
3015 esac
3016 rp="Operating system name?"
3017 . ./myread
3018 case "$ans" in
3019 none)  osname='' ;;
3020 *) osname=`echo "$ans" | $sed -e 's/[   ][      ]*/_/g' | ./tr '[A-Z]' '[a-z]'`;;
3021 esac
3022 echo " "
3023 case "$osvers" in
3024         ''|' ')
3025                 case "$hintfile" in
3026                 ''|' '|none) dflt=none ;;
3027                 *)      dflt=`echo $hintfile | $sed -e 's/\.sh$//' -e 's/^[^_]*//'`
3028                         dflt=`echo $dflt | $sed -e 's/^_//' -e 's/_/./g'`
3029                         case "$dflt" in
3030                         ''|' ') dflt=none ;;
3031                         esac
3032                         ;;
3033                 esac
3034                 ;;
3035         *) dflt="$osvers" ;;
3036 esac
3037 rp="Operating system version?"
3038 . ./myread
3039 case "$ans" in
3040 none)  osvers='' ;;
3041 *) osvers="$ans" ;;
3042 esac
3043
3044
3045 . ./posthint.sh
3046
3047 : who configured the system
3048 cf_time=`LC_ALL=C; LANGUAGE=C; export LC_ALL; export LANGUAGE; $date 2>&1`
3049 cf_by=`(logname) 2>/dev/null`
3050 case "$cf_by" in
3051 "")
3052         cf_by=`(whoami) 2>/dev/null`
3053         case "$cf_by" in
3054         "") cf_by=unknown ;;
3055         esac ;;
3056 esac
3057
3058 : set up the script used to warn in case of inconsistency
3059 cat <<EOS >whoa
3060 $startsh
3061 EOS
3062 cat <<'EOSC' >>whoa
3063 dflt=y
3064 echo " "
3065 echo "*** WHOA THERE!!! ***" >&4
3066 echo "    The $hint value for \$$var on this machine was \"$was\"!" >&4
3067 rp="    Keep the $hint value?"
3068 . ./myread
3069 case "$ans" in
3070 y) td=$was; tu=$was;;
3071 esac
3072 EOSC
3073
3074 : function used to set $1 to $val
3075 setvar='var=$1; eval "was=\$$1"; td=$define; tu=$undef;
3076 case "$val$was" in
3077 $define$undef) . ./whoa; eval "$var=\$td";;
3078 $undef$define) . ./whoa; eval "$var=\$tu";;
3079 *) eval "$var=$val";;
3080 esac'
3081
3082 case "$usethreads" in
3083 $define|true|[yY]*)     dflt='y';;
3084 *) dflt='n';;
3085 esac
3086 cat <<EOM
3087
3088 Perl can be built to take advantage of threads on some systems.
3089 To do so, Configure can be run with -Dusethreads.
3090
3091 Note that threading is a highly experimental feature, and
3092 some known race conditions still remain.  If you choose to try
3093 it, be very sure to not actually deploy it for production
3094 purposes.  README.threads has more details, and is required
3095 reading if you enable threads.
3096
3097 If this doesn't make any sense to you, just accept the default '$dflt'.
3098 EOM
3099 rp='Build a threading Perl?'
3100 . ./myread
3101 case "$ans" in
3102 y|Y)    val="$define" ;;
3103 *)      val="$undef" ;;
3104 esac
3105 set usethreads
3106 eval $setvar
3107
3108 case "$usethreads" in
3109 $define)
3110         $cat <<EOM
3111
3112 As of 5.5.640, Perl has two different internal threading implementations,
3113 the 5.005 version (5005threads) and an interpreter-based version
3114 (ithreads) that has one interpreter per thread.  Both are very 
3115 experimental.  This arrangement exists to help developers work out
3116 which one is better.
3117
3118 If you're a casual user, you probably don't want interpreter-threads
3119 at this time.  There doesn't yet exist a way to create threads from
3120 within Perl in this model, i.e., "use Thread;" will NOT work.
3121 EOM
3122         : Default to ithreads unless overridden on command line or with
3123         : old config.sh
3124         dflt='y'
3125         case "$use5005threads" in
3126                 $define|true|[yY]*) dflt='n';;
3127         esac
3128         case "$useithreads" in
3129                 $undef|false|[nN]*) dflt='n';;
3130         esac
3131         rp='Use interpreter-based ithreads?'
3132         . ./myread
3133         case "$ans" in
3134         y|Y)    val="$define" ;;
3135         *)      val="$undef" ;;
3136         esac
3137         set useithreads
3138         eval $setvar
3139         : Now set use5005threads to the opposite value.
3140         case "$useithreads" in
3141         $define) val="$undef" ;;
3142         *) val="$define" ;;
3143         esac
3144         set use5005threads
3145         eval $setvar
3146         ;;
3147 *)
3148         useithreads="$undef"
3149         use5005threads="$undef"
3150         ;;
3151 esac
3152
3153 case "$useithreads$use5005threads" in
3154 "$define$define")
3155         $cat >&4 <<EOM
3156
3157 You cannot have both the ithreads and the 5.005 threads enabled
3158 at the same time.  Disabling the 5.005 threads since they are
3159 much less stable than the ithreads.
3160
3161 EOM
3162         use5005threads="$undef"
3163         ;;
3164 esac
3165
3166 case "$d_oldpthreads" in
3167 '')     : Configure tests would be welcome here.  For now, assume undef.
3168         val="$undef" ;;
3169 *)      val="$d_oldpthreads" ;;
3170 esac
3171 set d_oldpthreads
3172 eval $setvar
3173
3174
3175 case "$usethreads" in
3176 "$define"|true|[yY]*)
3177 : Look for a hint-file generated 'call-back-unit'.  If the
3178 : user has specified that a threading perl is to be built,
3179 : we may need to set or change some other defaults.
3180         if $test -f usethreads.cbu; then
3181                 echo "Your platform has some specific hints for threaded builds, using them..."
3182                 . ./usethreads.cbu
3183         else
3184                 $cat <<EOM
3185 (Your platform doesn't have any specific hints for threaded builds.
3186  Assuming POSIX threads, then.)
3187 EOM
3188         fi
3189         ;;
3190 esac
3191
3192 cat <<EOM
3193
3194 Perl can be built so that multiple Perl interpreters can coexist
3195 within the same Perl executable.
3196 EOM
3197
3198 case "$useithreads" in
3199 $define)
3200         cat <<EOM
3201 This multiple interpreter support is required for interpreter-based threads.
3202 EOM
3203         val="$define"
3204         ;;
3205 *)      case "$usemultiplicity" in
3206         $define|true|[yY]*)     dflt='y';;
3207         *) dflt='n';;
3208         esac
3209         echo " "
3210         echo "If this doesn't make any sense to you, just accept the default '$dflt'."
3211         rp='Build Perl for multiplicity?'
3212         . ./myread
3213         case "$ans" in
3214         y|Y)    val="$define" ;;
3215         *)      val="$undef" ;;
3216         esac
3217         ;;
3218 esac
3219 set usemultiplicity
3220 eval $setvar
3221
3222 : make some quick guesses about what we are up against
3223 echo " "
3224 $echo $n "Hmm...  $c"
3225 echo exit 1 >bsd
3226 echo exit 1 >usg
3227 echo exit 1 >v7
3228 echo exit 1 >osf1
3229 echo exit 1 >eunice
3230 echo exit 1 >xenix
3231 echo exit 1 >venix
3232 echo exit 1 >os2
3233 d_bsd="$undef"
3234 $cat /usr/include/signal.h /usr/include/sys/signal.h >foo 2>/dev/null
3235 if test -f /osf_boot || $contains 'OSF/1' /usr/include/ctype.h >/dev/null 2>&1
3236 then
3237         echo "Looks kind of like an OSF/1 system, but we'll see..."
3238         echo exit 0 >osf1
3239 elif test `echo abc | $tr a-z A-Z` = Abc ; then
3240         xxx=`./loc addbib blurfl $pth`
3241         if $test -f $xxx; then
3242         echo "Looks kind of like a USG system with BSD features, but we'll see..."
3243                 echo exit 0 >bsd
3244                 echo exit 0 >usg
3245         else
3246                 if $contains SIGTSTP foo >/dev/null 2>&1 ; then
3247                         echo "Looks kind of like an extended USG system, but we'll see..."
3248                 else
3249                         echo "Looks kind of like a USG system, but we'll see..."
3250                 fi
3251                 echo exit 0 >usg
3252         fi
3253 elif $contains SIGTSTP foo >/dev/null 2>&1 ; then
3254         echo "Looks kind of like a BSD system, but we'll see..."
3255         d_bsd="$define"
3256         echo exit 0 >bsd
3257 else
3258         echo "Looks kind of like a Version 7 system, but we'll see..."
3259         echo exit 0 >v7
3260 fi
3261 case "$eunicefix" in
3262 *unixtovms*)
3263         $cat <<'EOI'
3264 There is, however, a strange, musty smell in the air that reminds me of
3265 something...hmm...yes...I've got it...there's a VMS nearby, or I'm a Blit.
3266 EOI
3267         echo exit 0 >eunice
3268         d_eunice="$define"
3269 : it so happens the Eunice I know will not run shell scripts in Unix format
3270         ;;
3271 *)
3272         echo " "
3273         echo "Congratulations.  You aren't running Eunice."
3274         d_eunice="$undef"
3275         ;;
3276 esac
3277 : Detect OS2.  The p_ variable is set above in the Head.U unit.
3278 : Note that this also -- wrongly -- detects e.g. dos-djgpp, which also uses
3279 : semicolon as a patch separator
3280 case "$p_" in
3281 :) ;;
3282 *)
3283         $cat <<'EOI'
3284 I have the feeling something is not exactly right, however...don't tell me...
3285 lemme think...does HAL ring a bell?...no, of course, you're only running OS/2!
3286 (Or you may be running DOS with DJGPP.)
3287 EOI
3288         echo exit 0 >os2
3289         ;;
3290 esac
3291 if test -f /xenix; then
3292         echo "Actually, this looks more like a XENIX system..."
3293         echo exit 0 >xenix
3294         d_xenix="$define"
3295 else
3296         echo " "
3297         echo "It's not Xenix..."
3298         d_xenix="$undef"
3299 fi
3300 chmod +x xenix
3301 $eunicefix xenix
3302 if test -f /venix; then
3303         echo "Actually, this looks more like a VENIX system..."
3304         echo exit 0 >venix
3305 else
3306         echo " "
3307         if ./xenix; then
3308                 : null
3309         else
3310                 echo "Nor is it Venix..."
3311         fi
3312 fi
3313 chmod +x bsd usg v7 osf1 eunice xenix venix os2
3314 $eunicefix bsd usg v7 osf1 eunice xenix venix os2
3315 $rm -f foo
3316
3317 case "$cc" in
3318 '') dflt=cc;;
3319 *) dflt="$cc";;
3320 esac
3321 rp="Use which C compiler?"
3322 . ./myread
3323 cc="$ans"
3324 : Look for a hint-file generated 'call-back-unit'.  Now that the
3325 : user has specified the compiler, we may need to set or change some
3326 : other defaults.
3327 if $test -f cc.cbu; then
3328     . ./cc.cbu
3329 fi
3330 . ./checkcc
3331
3332 echo " "
3333 echo "Checking for GNU cc in disguise and/or its version number..." >&4
3334 $cat >try.c <<EOM
3335 #include <stdio.h>
3336 int main() {
3337 #ifdef __GNUC__
3338 #ifdef __VERSION__
3339         printf("%s\n", __VERSION__);
3340 #else
3341         printf("%s\n", "1");
3342 #endif
3343 #endif
3344         exit(0);
3345 }
3346 EOM
3347 if $cc -o try $ccflags $ldflags try.c; then
3348         gccversion=`$run ./try`
3349         case "$gccversion" in
3350         '') echo "You are not using GNU cc." ;;
3351         *)  echo "You are using GNU cc $gccversion."
3352             ccname=gcc  
3353             ;;
3354         esac
3355 else
3356         echo " "
3357         echo "*** WHOA THERE!!! ***" >&4
3358         echo "    Your C compiler \"$cc\" doesn't seem to be working!" >&4
3359         case "$knowitall" in
3360         '')
3361         echo "    You'd better start hunting for one and let me know about it." >&4
3362                 exit 1
3363                 ;;
3364         esac
3365 fi
3366 $rm -f try try.*
3367 case "$gccversion" in
3368 1*) cpp=`./loc gcc-cpp $cpp $pth` ;;
3369 esac
3370 case "$gccversion" in
3371 '') gccosandvers='' ;;
3372 *) gccshortvers=`echo "$gccversion"|sed 's/ .*//'`
3373    gccosandvers=`$cc -v 2>&1|grep '/specs$'|sed "s!.*/[^-/]*-[^-/]*-\([^-/]*\)/$gccshortvers/specs!\1!"`
3374    gccshortvers=''
3375    case "$gccosandvers" in
3376    $osname) gccosandvers='' ;; # linux gccs seem to have no linux osvers, grr
3377    $osname$osvers) ;; # looking good
3378    $osname*) cat <<EOM >&4
3379
3380 *** WHOA THERE!!! ***
3381
3382     Your gcc has not been compiled for the exact release of
3383     your operating system ($gccosandvers versus $osname$osvers).
3384
3385     In general it is a good idea to keep gcc synchronized with
3386     the operating system because otherwise serious problems
3387     may ensue when trying to compile software, like Perl.
3388
3389     I'm trying to be optimistic here, though, and will continue.
3390     If later during the configuration and build icky compilation
3391     problems appear (headerfile conflicts being the most common
3392     manifestation), I suggest reinstalling the gcc to match
3393     your operating system release.
3394
3395 EOM
3396       ;;
3397    *) gccosandvers='' ;; # failed to parse, better be silent
3398    esac
3399    ;;
3400 esac
3401 case "$ccname" in
3402 '') ccname="$cc" ;;
3403 esac
3404
3405 case "$gccversion" in
3406 '') ;;
3407 *)  case "$ccflags" in
3408     *-Wall*) ;;
3409     *) ccflags="$ccflags -Wall" ;;
3410     esac
3411     ;;
3412 esac
3413
3414 : see how we invoke the C preprocessor
3415 echo " "
3416 echo "Now, how can we feed standard input to your C preprocessor..." >&4
3417 cat <<'EOT' >testcpp.c
3418 #define ABC abc
3419 #define XYZ xyz
3420 ABC.XYZ
3421 EOT
3422 cd ..
3423 if test ! -f cppstdin; then
3424         if test "X$osname" = "Xaix" -a "X$gccversion" = X; then
3425                 # AIX cc -E doesn't show the absolute headerfile
3426                 # locations but we'll cheat by using the -M flag.
3427                 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
3428         else
3429                 echo 'cat >.$$.c; '"$cc"' -E ${1+"$@"} .$$.c; rm .$$.c' >cppstdin
3430         fi
3431 else
3432         echo "Keeping your $hint cppstdin wrapper."
3433 fi
3434 chmod 755 cppstdin
3435 wrapper=`pwd`/cppstdin
3436 ok='false'
3437 cd UU
3438
3439 if $test "X$cppstdin" != "X" && \
3440         $cppstdin $cppminus <testcpp.c >testcpp.out 2>&1 && \
3441         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
3442 then
3443         echo "You used to use $cppstdin $cppminus so we'll use that again."
3444         case "$cpprun" in
3445         '') echo "But let's see if we can live without a wrapper..." ;;
3446         *)
3447                 if $cpprun $cpplast <testcpp.c >testcpp.out 2>&1 && \
3448                         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
3449                 then
3450                         echo "(And we'll use $cpprun $cpplast to preprocess directly.)"
3451                         ok='true'
3452                 else
3453                         echo "(However, $cpprun $cpplast does not work, let's see...)"
3454                 fi
3455                 ;;
3456         esac
3457 else
3458         case "$cppstdin" in
3459         '') ;;
3460         *)
3461                 echo "Good old $cppstdin $cppminus does not seem to be of any help..."
3462                 ;;
3463         esac
3464 fi
3465
3466 if $ok; then
3467         : nothing
3468 elif echo 'Maybe "'"$cc"' -E" will work...'; \
3469         $cc -E <testcpp.c >testcpp.out 2>&1; \
3470         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3471         echo "Yup, it does."
3472         x_cpp="$cc -E"
3473         x_minus='';
3474 elif echo 'Nope...maybe "'"$cc"' -E -" will work...'; \
3475         $cc -E - <testcpp.c >testcpp.out 2>&1; \
3476         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3477         echo "Yup, it does."
3478         x_cpp="$cc -E"
3479         x_minus='-';
3480 elif echo 'Nope...maybe "'"$cc"' -P" will work...'; \
3481         $cc -P <testcpp.c >testcpp.out 2>&1; \
3482         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3483         echo "Yipee, that works!"
3484         x_cpp="$cc -P"
3485         x_minus='';
3486 elif echo 'Nope...maybe "'"$cc"' -P -" will work...'; \
3487         $cc -P - <testcpp.c >testcpp.out 2>&1; \
3488         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3489         echo "At long last!"
3490         x_cpp="$cc -P"
3491         x_minus='-';
3492 elif echo 'No such luck, maybe "'$cpp'" will work...'; \
3493         $cpp <testcpp.c >testcpp.out 2>&1; \
3494         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3495         echo "It works!"
3496         x_cpp="$cpp"
3497         x_minus='';
3498 elif echo 'Nixed again...maybe "'$cpp' -" will work...'; \
3499         $cpp - <testcpp.c >testcpp.out 2>&1; \
3500         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3501         echo "Hooray, it works!  I was beginning to wonder."
3502         x_cpp="$cpp"
3503         x_minus='-';
3504 elif echo 'Uh-uh.  Time to get fancy.  Trying a wrapper...'; \
3505         $wrapper <testcpp.c >testcpp.out 2>&1; \
3506         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3507         x_cpp="$wrapper"
3508         x_minus=''
3509         echo "Eureka!"
3510 else
3511         dflt=''
3512         rp="No dice.  I can't find a C preprocessor.  Name one:"
3513         . ./myread
3514         x_cpp="$ans"
3515         x_minus=''
3516         $x_cpp <testcpp.c >testcpp.out 2>&1
3517         if $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3518                 echo "OK, that will do." >&4
3519         else
3520 echo "Sorry, I can't get that to work.  Go find one and rerun Configure." >&4
3521                 exit 1
3522         fi
3523 fi
3524
3525 case "$ok" in
3526 false)
3527         cppstdin="$x_cpp"
3528         cppminus="$x_minus"
3529         cpprun="$x_cpp"
3530         cpplast="$x_minus"
3531         set X $x_cpp
3532         shift
3533         case "$1" in
3534         "$cpp")
3535                 echo "Perhaps can we force $cc -E using a wrapper..."
3536                 if $wrapper <testcpp.c >testcpp.out 2>&1; \
3537                         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
3538                 then
3539                         echo "Yup, we can."
3540                         cppstdin="$wrapper"
3541                         cppminus='';
3542                 else
3543                         echo "Nope, we'll have to live without it..."
3544                 fi
3545                 ;;
3546         esac
3547         case "$cpprun" in
3548         "$wrapper")
3549                 cpprun=''
3550                 cpplast=''
3551                 ;;
3552         esac
3553         ;;
3554 esac
3555
3556 case "$cppstdin" in
3557 "$wrapper"|'cppstdin') ;;
3558 *) $rm -f $wrapper;;
3559 esac
3560 $rm -f testcpp.c testcpp.out
3561
3562 : decide how portable to be.  Allow command line overrides.
3563 case "$d_portable" in
3564 "$undef") ;;
3565 *)      d_portable="$define" ;;
3566 esac
3567
3568 : set up shell script to do ~ expansion
3569 cat >filexp <<EOSS
3570 $startsh
3571 : expand filename
3572 case "\$1" in
3573  ~/*|~)
3574         echo \$1 | $sed "s|~|\${HOME-\$LOGDIR}|"
3575         ;;
3576  ~*)
3577         if $test -f /bin/csh; then
3578                 /bin/csh -f -c "glob \$1"
3579                 failed=\$?
3580                 echo ""
3581                 exit \$failed
3582         else
3583                 name=\`$expr x\$1 : '..\([^/]*\)'\`
3584                 dir=\`$sed -n -e "/^\${name}:/{s/^[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:\([^:]*\).*"'\$'"/\1/" -e p -e q -e '}' </etc/passwd\`
3585                 if $test ! -d "\$dir"; then
3586                         me=\`basename \$0\`
3587                         echo "\$me: can't locate home directory for: \$name" >&2
3588                         exit 1
3589                 fi
3590                 case "\$1" in
3591                 */*)
3592                         echo \$dir/\`$expr x\$1 : '..[^/]*/\(.*\)'\`
3593                         ;;
3594                 *)
3595                         echo \$dir
3596                         ;;
3597                 esac
3598         fi
3599         ;;
3600 *)
3601         echo \$1
3602         ;;
3603 esac
3604 EOSS
3605 chmod +x filexp
3606 $eunicefix filexp
3607
3608 : now set up to get a file name
3609 cat <<EOS >getfile
3610 $startsh
3611 EOS
3612 cat <<'EOSC' >>getfile
3613 tilde=''
3614 fullpath=''
3615 already=''
3616 skip=''
3617 none_ok=''
3618 exp_file=''
3619 nopath_ok=''
3620 orig_rp="$rp"
3621 orig_dflt="$dflt"
3622 case "$gfpth" in
3623 '') gfpth='.' ;;
3624 esac
3625
3626 case "$fn" in
3627 *\(*)
3628         expr $fn : '.*(\(.*\)).*' | $tr ',' $trnl >getfile.ok
3629         fn=`echo $fn | sed 's/(.*)//'`
3630         ;;
3631 esac
3632
3633 case "$fn" in
3634 *:*)
3635         loc_file=`expr $fn : '.*:\(.*\)'`
3636         fn=`expr $fn : '\(.*\):.*'`
3637         ;;
3638 esac
3639
3640 case "$fn" in
3641 *~*) tilde=true;;
3642 esac
3643 case "$fn" in
3644 */*) fullpath=true;;
3645 esac
3646 case "$fn" in
3647 *+*) skip=true;;
3648 esac
3649 case "$fn" in
3650 *n*) none_ok=true;;
3651 esac
3652 case "$fn" in
3653 *e*) exp_file=true;;
3654 esac
3655 case "$fn" in
3656 *p*) nopath_ok=true;;
3657 esac
3658
3659 case "$fn" in
3660 *f*) type='File';;
3661 *d*) type='Directory';;
3662 *l*) type='Locate';;
3663 esac
3664
3665 what="$type"
3666 case "$what" in
3667 Locate) what='File';;
3668 esac
3669
3670 case "$exp_file" in
3671 '')
3672         case "$d_portable" in
3673         "$define") ;;
3674         *) exp_file=true;;
3675         esac
3676         ;;
3677 esac
3678
3679 cd ..
3680 while test "$type"; do
3681         redo=''
3682         rp="$orig_rp"
3683         dflt="$orig_dflt"
3684         case "$tilde" in
3685         true) rp="$rp (~name ok)";;
3686         esac
3687         . UU/myread
3688         if test -f UU/getfile.ok && \
3689                 $contains "^$ans\$" UU/getfile.ok >/dev/null 2>&1
3690         then
3691                 value="$ans"
3692                 ansexp="$ans"
3693                 break
3694         fi
3695         case "$ans" in
3696         none)
3697                 value=''
3698                 ansexp=''
3699                 case "$none_ok" in
3700                 true) type='';;
3701                 esac
3702                 ;;
3703         *)
3704                 case "$tilde" in
3705                 '') value="$ans"
3706                         ansexp="$ans";;
3707                 *)
3708                         value=`UU/filexp $ans`
3709                         case $? in
3710                         0)
3711                                 if test "$ans" != "$value"; then
3712                                         echo "(That expands to $value on this system.)"
3713                                 fi
3714                                 ;;
3715                         *) value="$ans";;
3716                         esac
3717                         ansexp="$value"
3718                         case "$exp_file" in
3719                         '') value="$ans";;
3720                         esac
3721                         ;;
3722                 esac
3723                 case "$fullpath" in
3724                 true)
3725                         case "$ansexp" in
3726                         /*) value="$ansexp" ;;
3727                         [a-zA-Z]:/*) value="$ansexp" ;;
3728                         *)
3729                                 redo=true
3730                                 case "$already" in
3731                                 true)
3732                                 echo "I shall only accept a full path name, as in /bin/ls." >&4
3733                                 echo "Use a ! shell escape if you wish to check pathnames." >&4
3734                                         ;;
3735                                 *)
3736                                 echo "Please give a full path name, starting with slash." >&4
3737                                         case "$tilde" in
3738                                         true)
3739                                 echo "Note that using ~name is ok provided it expands well." >&4
3740                                                 already=true
3741                                                 ;;
3742                                         esac
3743                                 esac
3744                                 ;;
3745                         esac
3746                         ;;
3747                 esac
3748                 case "$redo" in
3749                 '')
3750                         case "$type" in
3751                         File)
3752                                 for fp in $gfpth; do
3753                                         if test "X$fp" = X.; then
3754                                             pf="$ansexp"
3755                                         else    
3756                                             pf="$fp/$ansexp"
3757                                         fi
3758                                         if test -f "$pf"; then
3759                                                 type=''
3760                                         elif test -r "$pf" || (test -h "$pf") >/dev/null 2>&1
3761                                         then
3762                                                 echo "($value is not a plain file, but that's ok.)"
3763                                                 type=''
3764                                         fi
3765                                         if test X"$type" = X; then
3766                                             value="$pf"
3767                                             break
3768                                         fi
3769                                 done
3770                                 ;;
3771                         Directory)
3772                                 for fp in $gfpth; do
3773                                         if test "X$fp" = X.; then
3774                                             dir="$ans"
3775                                             direxp="$ansexp"
3776                                         else    
3777                                             dir="$fp/$ansexp"
3778                                             direxp="$fp/$ansexp"
3779                                         fi
3780                                         if test -d "$direxp"; then
3781                                                 type=''
3782                                                 value="$dir"
3783                                                 break
3784                                         fi
3785                                 done
3786                                 ;;
3787                         Locate)
3788                                 if test -d "$ansexp"; then
3789                                         echo "(Looking for $loc_file in directory $value.)"
3790                                         value="$value/$loc_file"
3791                                         ansexp="$ansexp/$loc_file"
3792                                 fi
3793                                 if test -f "$ansexp"; then
3794                                         type=''
3795                                 fi
3796                                 case "$nopath_ok" in
3797                                 true)   case "$value" in
3798                                         */*) ;;
3799                                         *)      echo "Assuming $value will be in people's path."
3800                                                 type=''
3801                                                 ;;
3802                                         esac
3803                                         ;;
3804                                 esac
3805                                 ;;
3806                         esac
3807
3808                         case "$skip" in
3809                         true) type='';
3810                         esac
3811
3812                         case "$type" in
3813                         '') ;;
3814                         *)
3815                                 if test "$fastread" = yes; then
3816                                         dflt=y
3817                                 else
3818                                         dflt=n
3819                                 fi
3820                                 rp="$what $value doesn't exist.  Use that name anyway?"
3821                                 . UU/myread
3822                                 dflt=''
3823                                 case "$ans" in
3824                                 y*) type='';;
3825                                 *) echo " ";;
3826                                 esac
3827                                 ;;
3828                         esac
3829                         ;;
3830                 esac
3831                 ;;
3832         esac
3833 done
3834 cd UU
3835 ans="$value"
3836 rp="$orig_rp"
3837 dflt="$orig_dflt"
3838 rm -f getfile.ok
3839 test "X$gfpthkeep" != Xy && gfpth=""
3840 EOSC
3841
3842 : What should the include directory be ?
3843 echo " "
3844 $echo $n "Hmm...  $c"
3845 dflt='/usr/include'
3846 incpath=''
3847 mips_type=''
3848 if $test -f /bin/mips && /bin/mips; then
3849         echo "Looks like a MIPS system..."
3850         $cat >usr.c <<'EOCP'
3851 #ifdef SYSTYPE_BSD43
3852 /bsd43
3853 #endif
3854 EOCP
3855         if cc -E usr.c > usr.out && $contains / usr.out >/dev/null 2>&1; then
3856                 dflt='/bsd43/usr/include'
3857                 incpath='/bsd43'
3858                 mips_type='BSD 4.3'
3859         else
3860                 mips_type='System V'
3861         fi
3862         $rm -f usr.c usr.out
3863         echo "and you're compiling with the $mips_type compiler and libraries."
3864         xxx_prompt=y
3865         echo "exit 0" >mips
3866 else
3867         echo "Doesn't look like a MIPS system."
3868         xxx_prompt=n
3869         echo "exit 1" >mips
3870 fi
3871 chmod +x mips
3872 $eunicefix mips
3873 case "$usrinc" in
3874 '') ;;
3875 *) dflt="$usrinc";;
3876 esac
3877 case "$xxx_prompt" in
3878 y)      fn=d/
3879         echo " "
3880         rp='Where are the include files you want to use?'
3881         . ./getfile
3882         usrinc="$ans"
3883         ;;
3884 *)      usrinc="$dflt"
3885         ;;
3886 esac
3887
3888 : Set private lib path
3889 case "$plibpth" in
3890 '') if ./mips; then
3891                 plibpth="$incpath/usr/lib /usr/local/lib /usr/ccs/lib"
3892         fi;;
3893 esac
3894 case "$libpth" in
3895 ' ') dlist='';;
3896 '') dlist="$loclibpth $plibpth $glibpth";;
3897 *) dlist="$libpth";;
3898 esac
3899
3900 : Now check and see which directories actually exist, avoiding duplicates
3901 libpth=''
3902 for xxx in $dlist
3903 do
3904     if $test -d $xxx; then
3905                 case " $libpth " in
3906                 *" $xxx "*) ;;
3907                 *) libpth="$libpth $xxx";;
3908                 esac
3909     fi
3910 done
3911 $cat <<'EOM'
3912
3913 Some systems have incompatible or broken versions of libraries.  Among
3914 the directories listed in the question below, please remove any you
3915 know not to be holding relevant libraries, and add any that are needed.
3916 Say "none" for none.
3917
3918 EOM
3919 case "$libpth" in
3920 '') dflt='none';;
3921 *)
3922         set X $libpth
3923         shift
3924         dflt=${1+"$@"}
3925         ;;
3926 esac
3927 rp="Directories to use for library searches?"
3928 . ./myread
3929 case "$ans" in
3930 none) libpth=' ';;
3931 *) libpth="$ans";;
3932 esac
3933
3934 : compute shared library extension
3935 case "$so" in
3936 '')
3937         if xxx=`./loc libc.sl X $libpth`; $test -f "$xxx"; then
3938                 dflt='sl'
3939         else
3940                 dflt='so'
3941         fi
3942         ;;
3943 *) dflt="$so";;
3944 esac
3945 $cat <<EOM
3946
3947 On some systems, shared libraries may be available.  Answer 'none' if
3948 you want to suppress searching of shared libraries for the remainder
3949 of this configuration.
3950
3951 EOM
3952 rp='What is the file extension used for shared libraries?'
3953 . ./myread
3954 so="$ans"
3955
3956 : Define several unixisms.
3957 : Hints files or command line option can be used to override them.
3958 : The convoluted testing is in case hints files set either the old
3959 : or the new name.
3960 case "$_exe" in
3961 '')     case "$exe_ext" in
3962     '') ;;
3963         *)      _exe="$exe_ext" ;;
3964         esac
3965         ;;
3966 esac
3967 case "$_a" in
3968 '')     case "$lib_ext" in
3969     '') _a='.a';;
3970         *)      _a="$lib_ext" ;;
3971         esac
3972         ;;
3973 esac
3974 case "$_o" in
3975 '') case "$obj_ext" in
3976         '')     _o='.o';;
3977         *)      _o="$obj_ext";;
3978         esac
3979         ;;
3980 esac
3981 case "$p_" in
3982 '') case "$path_sep" in
3983         '')     p_=':';;
3984         *)      p_="$path_sep";;
3985         esac
3986         ;;
3987 esac
3988 exe_ext=$_exe
3989 lib_ext=$_a
3990 obj_ext=$_o
3991 path_sep=$p_
3992
3993 : Which makefile gets called first.  This is used by make depend.
3994 case "$firstmakefile" in
3995 '') firstmakefile='makefile';;
3996 esac
3997
3998 case "$usesocks" in
3999 $define|true|[yY]*)     dflt='y';;
4000 *) dflt='n';;
4001 esac
4002 cat <<EOM
4003
4004 Perl can be built to use the SOCKS proxy protocol library.  To do so,
4005 Configure must be run with -Dusesocks.  If you use SOCKS you also need
4006 to use the PerlIO abstraction layer, this will be implicitly selected.
4007
4008 If this doesn't make any sense to you, just accept the default '$dflt'.
4009 EOM
4010 rp='Build Perl for SOCKS?'
4011 . ./myread
4012 case "$ans" in
4013 y|Y)    val="$define" ;;     
4014 *)      val="$undef" ;;
4015 esac
4016 set usesocks
4017 eval $setvar
4018
4019 case "$usesocks" in
4020 $define|true|[yY]*) useperlio="$define";;
4021 esac
4022
4023 : Looking for optional libraries
4024 echo " "
4025 echo "Checking for optional libraries..." >&4
4026 case "$libs" in
4027 ' '|'') dflt='';;
4028 *) dflt="$libs";;
4029 esac
4030 case "$libswanted" in
4031 '') libswanted='c_s';;
4032 esac
4033 case "$usesocks" in
4034 "$define") libswanted="$libswanted socks5 socks5_sh" ;;
4035 esac
4036 libsfound=''
4037 libsfiles=''
4038 libsdirs=''
4039 libspath=''
4040 for thisdir in $libpth $xlibpth; do
4041   test -d $thisdir && libspath="$libspath $thisdir"
4042 done
4043 for thislib in $libswanted; do
4044         for thisdir in $libspath; do
4045             xxx=''
4046             if $test ! -f "$xxx" -a "X$ignore_versioned_solibs" = "X"; then
4047                 xxx=`ls $thisdir/lib$thislib.$so.[0-9] 2>/dev/null|tail -1`
4048                 $test -f "$xxx" && eval $libscheck
4049                 $test -f "$xxx" && libstyle=shared
4050             fi
4051             if test ! -f "$xxx"; then
4052                 xxx=$thisdir/lib$thislib.$so
4053                 $test -f "$xxx" && eval $libscheck
4054                 $test -f "$xxx" && libstyle=shared
4055             fi  
4056             if test ! -f "$xxx"; then
4057                 xxx=$thisdir/lib$thislib$_a
4058                 $test -f "$xxx" && eval $libscheck
4059                 $test -f "$xxx" && libstyle=static
4060             fi
4061             if test ! -f "$xxx"; then
4062                 xxx=$thisdir/$thislib$_a
4063                 $test -f "$xxx" && eval $libscheck
4064                 $test -f "$xxx" && libstyle=static
4065             fi
4066             if test ! -f "$xxx"; then
4067                 xxx=$thisdir/lib${thislib}_s$_a
4068                 $test -f "$xxx" && eval $libscheck
4069                 $test -f "$xxx" && libstyle=static
4070                 $test -f "$xxx" && thislib=${thislib}_s
4071             fi
4072             if test ! -f "$xxx"; then
4073                 xxx=$thisdir/Slib$thislib$_a
4074                 $test -f "$xxx" && eval $libscheck
4075                 $test -f "$xxx" && libstyle=static
4076             fi
4077             if $test -f "$xxx"; then
4078                 case "$libstyle" in
4079                 shared) echo "Found -l$thislib (shared)." ;;
4080                 static) echo "Found -l$thislib." ;;
4081                 *)      echo "Found -l$thislib ($libstyle)." ;;
4082                 esac
4083                 case " $dflt " in
4084                 *"-l$thislib "*);;
4085                 *) dflt="$dflt -l$thislib"
4086                    libsfound="$libsfound $xxx"
4087                    yyy=`basename $xxx`
4088                    libsfiles="$libsfiles $yyy"
4089                    yyy=`echo $xxx|$sed -e "s%/$yyy\\$%%"`
4090                    case " $libsdirs " in
4091                    *" $yyy "*) ;;
4092                    *) libsdirs="$libsdirs $yyy" ;;
4093                    esac
4094                    ;;
4095                 esac
4096                 break
4097             fi  
4098         done
4099         if $test ! -f "$xxx"; then
4100             echo "No -l$thislib."
4101         fi
4102 done
4103 set X $dflt
4104 shift
4105 dflt="$*"
4106 case "$libs" in
4107 '') dflt="$dflt";;
4108 *) dflt="$libs";;
4109 esac
4110 case "$dflt" in
4111 ' '|'') dflt='none';;
4112 esac
4113
4114 $cat <<EOM
4115
4116 In order to compile $package on your machine, a number of libraries
4117 are usually needed.  Include any other special libraries here as well.
4118 Say "none" for none.  The default list is almost always right.
4119 EOM
4120
4121 echo " "
4122 rp="What libraries to use?"
4123 . ./myread
4124 case "$ans" in
4125 none) libs=' ';;
4126 *) libs="$ans";;
4127 esac
4128
4129 : determine optimization, if desired, or use for debug flag also
4130 case "$optimize" in
4131 ' '|$undef) dflt='none';;
4132 '') dflt='-O';;
4133 *) dflt="$optimize";;
4134 esac
4135 $cat <<EOH
4136
4137 By default, $package compiles with the -O flag to use the optimizer.
4138 Alternately, you might want to use the symbolic debugger, which uses
4139 the -g flag (on traditional Unix systems).  Either flag can be
4140 specified here.  To use neither flag, specify the word "none".
4141
4142 EOH
4143 rp="What optimizer/debugger flag should be used?"
4144 . ./myread
4145 optimize="$ans"
4146 case "$optimize" in
4147 'none') optimize=" ";;
4148 esac
4149
4150 dflt=''
4151 : We will not override a previous value, but we might want to
4152 : augment a hint file
4153 case "$hint" in
4154 default|recommended)
4155         case "$gccversion" in
4156         1*) dflt='-fpcc-struct-return' ;;
4157         esac
4158         case "$optimize" in
4159         *-g*) dflt="$dflt -DDEBUGGING";;
4160         esac
4161         case "$gccversion" in
4162         2*) if test -d /etc/conf/kconfig.d &&
4163                         $contains _POSIX_VERSION $usrinc/sys/unistd.h >/dev/null 2>&1
4164                 then
4165                         dflt="$dflt -posix"
4166                 fi
4167                 ;;
4168         esac
4169         case "$gccversion" in
4170         1*) ;;
4171         2.[0-8]*) ;;
4172         ?*)     echo " "
4173                 echo "Checking if your compiler accepts -fno-strict-aliasing" 2>&1
4174                 echo 'int main(void) { return 0; }' > gcctest.c
4175                 if $cc -O2 -fno-strict-aliasing -o gcctest gcctest.c; then
4176                         echo "Yes, it does." 2>&1
4177                         case "$ccflags" in
4178                         *strict-aliasing*) 
4179                                 echo "Leaving current flags $ccflags alone." 2>&1
4180                                 ;;
4181                         *) dflt="$dflt -fno-strict-aliasing" ;;
4182                         esac
4183                 else
4184                         echo "Nope, it doesn't, but that's ok." 2>&1
4185                 fi
4186                 ;;
4187         esac
4188         ;;
4189 esac
4190
4191 case "$mips_type" in
4192 *BSD*|'') inclwanted="$locincpth $usrinc";;
4193 *) inclwanted="$locincpth $inclwanted $usrinc/bsd";;
4194 esac
4195 for thisincl in $inclwanted; do
4196         if $test -d $thisincl; then
4197                 if $test x$thisincl != x$usrinc; then
4198                         case "$dflt" in
4199                         *" -I$thisincl "*);;
4200                         *) dflt="$dflt -I$thisincl ";;
4201                         esac
4202                 fi
4203         fi
4204 done
4205
4206 inctest='if $contains $2 $usrinc/$1 >/dev/null 2>&1; then
4207         xxx=true;
4208 elif $contains $2 $usrinc/sys/$1 >/dev/null 2>&1; then
4209         xxx=true;
4210 else
4211         xxx=false;
4212 fi;
4213 if $xxx; then
4214         case "$dflt" in
4215         *$2*);;
4216         *) dflt="$dflt -D$2";;
4217         esac;
4218 fi'
4219
4220 set signal.h LANGUAGE_C; eval $inctest
4221
4222 case "$usesocks" in
4223 $define)
4224         ccflags="$ccflags -DSOCKS"
4225         ;;
4226 esac
4227
4228 case "$hint" in
4229 default|recommended) dflt="$ccflags $dflt" ;;
4230 *) dflt="$ccflags";;
4231 esac
4232
4233 case "$dflt" in
4234 ''|' ') dflt=none;;
4235 esac
4236
4237 $cat <<EOH
4238
4239 Your C compiler may want other flags.  For this question you should include
4240 -I/whatever and -DWHATEVER flags and any other flags used by the C compiler,
4241 but you should NOT include libraries or ld flags like -lwhatever.  If you
4242 want $package to honor its debug switch, you should include -DDEBUGGING here.
4243 Your C compiler might also need additional flags, such as -D_POSIX_SOURCE.
4244
4245 To use no flags, specify the word "none".
4246
4247 EOH
4248 set X $dflt
4249 shift
4250 dflt=${1+"$@"}
4251 rp="Any additional cc flags?"
4252 . ./myread
4253 case "$ans" in
4254 none) ccflags='';;
4255 *) ccflags="$ans";;
4256 esac
4257
4258 : the following weeds options from ccflags that are of no interest to cpp
4259 case "$cppflags" in
4260 '') cppflags="$ccflags" ;;
4261 *)  cppflags="$cppflags $ccflags" ;;
4262 esac
4263 case "$gccversion" in
4264 1*) cppflags="$cppflags -D__GNUC__"
4265 esac
4266 case "$mips_type" in
4267 '');;
4268 *BSD*) cppflags="$cppflags -DSYSTYPE_BSD43";;
4269 esac
4270 case "$cppflags" in
4271 '');;
4272 *)
4273         echo " "
4274         echo "Let me guess what the preprocessor flags are..." >&4
4275         set X $cppflags
4276         shift
4277         cppflags=''
4278         $cat >cpp.c <<'EOM'
4279 #define BLURFL foo
4280
4281 BLURFL xx LFRULB
4282 EOM
4283         previous=''
4284         for flag in $*
4285         do
4286                 case "$flag" in
4287                 -*) ftry="$flag";;
4288                 *) ftry="$previous $flag";;
4289                 esac
4290                 if $cppstdin -DLFRULB=bar $cppflags $ftry $cppminus <cpp.c \
4291                         >cpp1.out 2>/dev/null && \
4292                         $cpprun -DLFRULB=bar $cppflags $ftry $cpplast <cpp.c \
4293                         >cpp2.out 2>/dev/null && \
4294                         $contains 'foo.*xx.*bar' cpp1.out >/dev/null 2>&1 && \
4295                         $contains 'foo.*xx.*bar' cpp2.out >/dev/null 2>&1
4296                 then
4297                         cppflags="$cppflags $ftry"
4298                         previous=''
4299                 else
4300                         previous="$flag"
4301                 fi
4302         done
4303         set X $cppflags
4304         shift
4305         cppflags=${1+"$@"}
4306         case "$cppflags" in
4307         *-*)  echo "They appear to be: $cppflags";;
4308         esac
4309         $rm -f cpp.c cpp?.out
4310         ;;
4311 esac
4312
4313 : flags used in final linking phase
4314 case "$ldflags" in
4315 '') if ./venix; then
4316                 dflt='-i -z'
4317         else
4318                 dflt=''
4319         fi
4320         case "$ccflags" in
4321         *-posix*) dflt="$dflt -posix" ;;
4322         esac
4323         ;;
4324 *) dflt="$ldflags";;
4325 esac
4326
4327 : Try to guess additional flags to pick up local libraries.
4328 for thislibdir in $libpth; do
4329         case " $loclibpth " in
4330         *" $thislibdir "*)
4331                 case "$dflt " in 
4332                 *"-L$thislibdir "*) ;;
4333                 *)  dflt="$dflt -L$thislibdir" ;;
4334                 esac
4335                 ;;
4336         esac
4337 done
4338
4339 case "$dflt" in
4340 '') dflt='none' ;;
4341 esac
4342
4343 $cat <<EOH
4344
4345 Your C linker may need flags.  For this question you should
4346 include -L/whatever and any other flags used by the C linker, but you
4347 should NOT include libraries like -lwhatever.
4348
4349 Make sure you include the appropriate -L/path flags if your C linker
4350 does not normally search all of the directories you specified above,
4351 namely
4352         $libpth
4353 To use no flags, specify the word "none".
4354
4355 EOH
4356
4357 rp="Any additional ld flags (NOT including libraries)?"
4358 . ./myread
4359 case "$ans" in
4360 none) ldflags='';;
4361 *) ldflags="$ans";;
4362 esac
4363 rmlist="$rmlist pdp11"
4364
4365 : coherency check
4366 echo " "
4367 echo "Checking your choice of C compiler and flags for coherency..." >&4
4368 $cat > try.c <<'EOF'
4369 #include <stdio.h>
4370 int main() { printf("Ok\n"); exit(0); }
4371 EOF
4372 set X $cc -o try $optimize $ccflags $ldflags try.c $libs
4373 shift
4374 $cat >try.msg <<'EOM'
4375 I've tried to compile and run the following simple program:
4376
4377 EOM
4378 $cat try.c >> try.msg
4379
4380 $cat >> try.msg <<EOM
4381
4382 I used the command:
4383
4384         $*
4385         $run ./try
4386
4387 and I got the following output:
4388
4389 EOM
4390 dflt=y
4391 if $sh -c "$cc -o try $optimize $ccflags $ldflags try.c $libs" >>try.msg 2>&1; then
4392         if $sh -c "$run ./try" >>try.msg 2>&1; then
4393                 xxx=`$run ./try`
4394                 case "$xxx" in
4395                 "Ok") dflt=n ;;
4396                 *)      echo 'The program compiled OK, but produced no output.' >> try.msg
4397                         case " $libs " in
4398                         *" -lsfio "*)
4399                                 cat >> try.msg <<'EOQS'
4400 If $libs contains -lsfio, and sfio is mis-configured, then it
4401 sometimes (apparently) runs and exits with a 0 status, but with no
4402 output!  It may have to do with sfio's use of _exit vs. exit.
4403
4404 EOQS
4405                                 rp="You have a big problem.  Shall I abort Configure"
4406                                 dflt=y
4407                                 ;;
4408                         esac
4409                         ;;
4410                 esac
4411         else
4412                 echo "The program compiled OK, but exited with status $?." >>try.msg
4413                 rp="You have a problem.  Shall I abort Configure"
4414                 dflt=y
4415         fi
4416 else
4417         echo "I can't compile the test program." >>try.msg
4418         rp="You have a BIG problem.  Shall I abort Configure"
4419         dflt=y
4420 fi
4421 case "$dflt" in
4422 y)
4423         $cat try.msg >&4
4424         case "$knowitall" in
4425         '')
4426                 echo "(The supplied flags or libraries might be incorrect.)"
4427                 ;;
4428         *) dflt=n;;
4429         esac
4430         echo " "
4431         . ./myread
4432         case "$ans" in
4433         n*|N*) ;;
4434         *)      echo "Ok.  Stopping Configure." >&4
4435                 exit 1
4436                 ;;
4437         esac
4438         ;;
4439 n) echo "OK, that should do.";;
4440 esac
4441 $rm -f try try.* core
4442
4443 : define an is-a-typedef? function
4444 typedef='type=$1; var=$2; def=$3; shift; shift; shift; inclist=$@;
4445 case "$inclist" in
4446 "") inclist="sys/types.h";;
4447 esac;
4448 eval "varval=\$$var";
4449 case "$varval" in
4450 "")
4451         $rm -f temp.c;
4452         for inc in $inclist; do
4453                 echo "#include <$inc>" >>temp.c;
4454         done;
4455         echo "#ifdef $type" >> temp.c;
4456         echo "printf(\"We have $type\");" >> temp.c;
4457         echo "#endif" >> temp.c;
4458         $cppstdin $cppflags $cppminus < temp.c >temp.E 2>/dev/null;
4459         if $contains $type temp.E >/dev/null 2>&1; then
4460                 eval "$var=\$type";
4461         else
4462                 eval "$var=\$def";
4463         fi;
4464         $rm -f temp.?;;
4465 *) eval "$var=\$varval";;
4466 esac'
4467
4468 : define an is-a-typedef? function that prompts if the type is not available.
4469 typedef_ask='type=$1; var=$2; def=$3; shift; shift; shift; inclist=$@;
4470 case "$inclist" in
4471 "") inclist="sys/types.h";;
4472 esac;
4473 eval "varval=\$$var";
4474 case "$varval" in
4475 "")
4476         $rm -f temp.c;
4477         for inc in $inclist; do
4478                 echo "#include <$inc>" >>temp.c;
4479         done;
4480         echo "#ifdef $type" >> temp.c;
4481         echo "printf(\"We have $type\");" >> temp.c;
4482         echo "#endif" >> temp.c;
4483         $cppstdin $cppflags $cppminus < temp.c >temp.E 2>/dev/null;
4484         echo " " ;
4485         echo "$rp" | $sed -e "s/What is/Looking for/" -e "s/?/./";
4486         if $contains $type temp.E >/dev/null 2>&1; then
4487                 echo "$type found." >&4;
4488                 eval "$var=\$type";
4489         else
4490                 echo "$type NOT found." >&4;
4491                 dflt="$def";
4492                 . ./myread ;
4493                 eval "$var=\$ans";
4494         fi;
4495         $rm -f temp.?;;
4496 *) eval "$var=\$varval";;
4497 esac'
4498
4499 : define a shorthand compile call
4500 compile='
4501 mc_file=$1;
4502 shift;
4503 $cc -o ${mc_file} $optimize $ccflags $ldflags $* ${mc_file}.c $libs > /dev/null 2>&1;'
4504 : define a shorthand compile call for compilations that should be ok.
4505 compile_ok='
4506 mc_file=$1;
4507 shift;
4508 $cc -o ${mc_file} $optimize $ccflags $ldflags $* ${mc_file}.c $libs;'
4509
4510 : check for lengths of integral types
4511 echo " "
4512 case "$intsize" in
4513 '')
4514         echo "Checking to see how big your integers are..." >&4
4515         $cat >try.c <<'EOCP'
4516 #include <stdio.h>
4517 int main()
4518 {
4519         printf("intsize=%d;\n", (int)sizeof(int));
4520         printf("longsize=%d;\n", (int)sizeof(long));
4521         printf("shortsize=%d;\n", (int)sizeof(short));
4522         exit(0);
4523 }
4524 EOCP
4525         set try
4526         if eval $compile_ok && $run ./try > /dev/null; then
4527                 eval `$run ./try`
4528                 echo "Your integers are $intsize bytes long."
4529                 echo "Your long integers are $longsize bytes long."
4530                 echo "Your short integers are $shortsize bytes long."
4531         else
4532                 $cat >&4 <<EOM
4533 !
4534 Help! I can't compile and run the intsize test program: please enlighten me!
4535 (This is probably a misconfiguration in your system or libraries, and
4536 you really ought to fix it.  Still, I'll try anyway.)
4537 !
4538 EOM
4539                 dflt=4
4540                 rp="What is the size of an integer (in bytes)?"
4541                 . ./myread
4542                 intsize="$ans"
4543                 dflt=$intsize
4544                 rp="What is the size of a long integer (in bytes)?"
4545                 . ./myread
4546                 longsize="$ans"
4547                 dflt=2
4548                 rp="What is the size of a short integer (in bytes)?"
4549                 . ./myread
4550                 shortsize="$ans"
4551         fi
4552         ;;
4553 esac
4554 $rm -f try try.*
4555
4556 : see what type lseek is declared as in the kernel
4557 rp="What is the type used for lseek's offset on this system?"
4558 set off_t lseektype long stdio.h sys/types.h
4559 eval $typedef_ask
4560
4561 echo " "
4562 echo "Checking to see how big your file offsets are..." >&4
4563 $cat >try.c <<EOCP
4564 #include <sys/types.h>
4565 #include <stdio.h>
4566 int main()
4567 {
4568     printf("%d\n", (int)sizeof($lseektype));
4569     return(0); 
4570 }
4571 EOCP
4572 set try
4573 if eval $compile_ok; then
4574         lseeksize=`$run ./try`
4575         echo "Your file offsets are $lseeksize bytes long."
4576 else
4577         dflt=$longsize
4578         echo " "
4579         echo "(I can't seem to compile the test program.  Guessing...)"
4580         rp="What is the size of your file offsets (in bytes)?"
4581         . ./myread
4582         lseeksize="$ans"
4583 fi
4584 $rm -f try.c try
4585
4586 : see what type file positions are declared as in the library
4587 rp="What is the type for file position used by fsetpos()?"
4588 set fpos_t fpostype long stdio.h sys/types.h
4589 eval $typedef_ask
4590
4591 echo " "
4592 case "$fpostype" in
4593 *_t) zzz="$fpostype"    ;;
4594 *)   zzz="fpos_t"       ;;
4595 esac
4596 echo "Checking the size of $zzz..." >&4 
4597 cat > try.c <<EOCP
4598 #include <sys/types.h>
4599 #include <stdio.h>
4600 int main() {
4601     printf("%d\n", (int)sizeof($fpostype));
4602     exit(0);
4603 }
4604 EOCP
4605 set try
4606 if eval $compile_ok; then
4607         yyy=`$run ./try`
4608         case "$yyy" in
4609         '')     fpossize=4
4610                 echo "(I can't execute the test program--guessing $fpossize.)" >&4
4611                 ;;
4612         *)      fpossize=$yyy
4613                 echo "Your $zzz is $fpossize bytes long."
4614                 ;;
4615         esac
4616 else
4617         dflt="$longsize"
4618         echo " " >&4
4619         echo "(I can't compile the test program.  Guessing...)" >&4
4620         rp="What is the size of your file positions (in bytes)?"
4621         . ./myread
4622         fpossize="$ans"
4623 fi
4624
4625
4626
4627 # Backward compatibility (uselfs is deprecated).
4628 case "$uselfs" in
4629 "$define"|true|[yY]*)
4630         cat <<EOM >&4
4631
4632 *** Configure -Duselfs is deprecated, using -Duselargefiles instead.
4633 EOM
4634         uselargefiles="$define"
4635         ;;
4636 esac                          
4637
4638 case "$lseeksize:$fpossize" in
4639 8:8) cat <<EOM
4640
4641 You can have files larger than 2 gigabytes.
4642 EOM
4643    val="$define" ;;
4644 *)    case "$uselargefiles" in
4645    "$undef"|false|[nN]*) dflt='n' ;;
4646    *)   dflt='y' ;;
4647    esac
4648    cat <<EOM
4649
4650 Perl can be built to understand large files (files larger than 2 gigabytes)
4651 on some systems.  To do so, Configure can be run with -Duselargefiles.
4652
4653 If this doesn't make any sense to you, just accept the default '$dflt'.
4654 EOM
4655    rp='Try to understand large files, if available?'
4656    . ./myread
4657    case "$ans" in
4658    y|Y)         val="$define" ;;
4659    *)           val="$undef"  ;;
4660    esac
4661    ;;
4662 esac
4663 set uselargefiles
4664 eval $setvar
4665 case "$uselargefiles" in
4666 "$define")
4667 : Look for a hint-file generated 'call-back-unit'.  If the
4668 : user has specified that a large files perl is to be built,
4669 : we may need to set or change some other defaults.
4670         if $test -f uselargefiles.cbu; then
4671                 echo "Your platform has some specific hints for large file builds, using them..."
4672                 . ./uselargefiles.cbu
4673                 echo " "
4674                 echo "Rechecking to see how big your file offsets are..." >&4
4675                 $cat >try.c <<EOCP
4676 #include <sys/types.h>
4677 #include <stdio.h>
4678 int main()
4679 {
4680     printf("%d\n", (int)sizeof($lseektype));
4681     return(0); 
4682 }
4683 EOCP
4684                 set try
4685                 if eval $compile_ok; then
4686                         lseeksize=`$run ./try`
4687                         $echo "Your file offsets are now $lseeksize bytes long."
4688                 else
4689                         dflt="$lseeksize"
4690                         echo " "
4691                         echo "(I can't seem to compile the test program.  Guessing...)"
4692                         rp="What is the size of your file offsets (in bytes)?"
4693                         . ./myread
4694                         lseeksize="$ans"
4695                 fi
4696                 case "$fpostype" in
4697                 *_t) zzz="$fpostype"    ;;
4698                 *)   zzz="fpos_t"       ;;
4699                 esac
4700                 $echo $n "Rechecking the size of $zzz...$c" >&4 
4701                 $cat > try.c <<EOCP
4702 #include <sys/types.h>
4703 #include <stdio.h>
4704 int main() {
4705     printf("%d\n", (int)sizeof($fpostype));
4706     exit(0);
4707 }
4708 EOCP
4709                 set try
4710                 if eval $compile_ok; then
4711                         yyy=`$run ./try`
4712                         dflt="$lseeksize"
4713                         case "$yyy" in
4714                         '')     echo " "
4715                                 echo "(I can't execute the test program--guessing $fpossize.)" >&4
4716                                 ;;
4717                         *)      fpossize=$yyy
4718                                 echo " $fpossize bytes." >&4
4719                                 ;;
4720                         esac
4721                 else
4722                         dflt="$fpossize"
4723                         echo " "
4724                         echo "(I can't compile the test program.  Guessing...)" >&4
4725                         rp="What is the size of your file positions (in bytes)?"
4726                         . ./myread
4727                         fpossize="$ans"
4728                 fi
4729                 $rm -f try.c try
4730         fi
4731         ;;
4732 esac
4733
4734
4735 case "$usemorebits" in
4736 "$define"|true|[yY]*)
4737         use64bitint="$define"
4738         uselongdouble="$define"
4739         usemorebits="$define"
4740         ;;
4741 *)      usemorebits="$undef"
4742         ;;
4743 esac
4744
4745 : check for void type
4746 echo " "
4747 echo "Checking to see how well your C compiler groks the void type..." >&4
4748 case "$voidflags" in
4749 '')
4750         $cat >try.c <<'EOCP'
4751 #if TRY & 1
4752 void sub() {
4753 #else
4754 sub() {
4755 #endif
4756         extern void moo();      /* function returning void */
4757         void (*goo)();          /* ptr to func returning void */
4758 #if TRY & 8
4759         void *hue;              /* generic ptr */
4760 #endif
4761 #if TRY & 2
4762         void (*foo[10])();
4763 #endif
4764
4765 #if TRY & 4
4766         if(goo == moo) {
4767                 exit(0);
4768         }
4769 #endif
4770         exit(0);
4771 }
4772 int main() { sub(); }
4773 EOCP
4774         if $cc $ccflags -c -DTRY=$defvoidused try.c >.out 2>&1 ; then
4775                 voidflags=$defvoidused
4776         echo "Good.  It appears to support void to the level $package wants.">&4
4777                 if $contains warning .out >/dev/null 2>&1; then
4778                         echo "However, you might get some warnings that look like this:"
4779                         $cat .out
4780                 fi
4781         else
4782 echo "Hmm, your compiler has some difficulty with void. Checking further..." >&4
4783                 if $cc $ccflags -c -DTRY=1 try.c >/dev/null 2>&1; then
4784                         echo "It supports 1..."
4785                         if $cc $ccflags -c -DTRY=3 try.c >/dev/null 2>&1; then
4786                                 echo "It also supports 2..."
4787                                 if $cc $ccflags -c -DTRY=7 try.c >/dev/null 2>&1; then
4788                                         voidflags=7
4789                                         echo "And it supports 4 but not 8 definitely."
4790                                 else
4791                                         echo "It doesn't support 4..."
4792                                         if $cc $ccflags -c -DTRY=11 try.c >/dev/null 2>&1; then
4793                                                 voidflags=11
4794                                                 echo "But it supports 8."
4795                                         else
4796                                                 voidflags=3
4797                                                 echo "Neither does it support 8."
4798                                         fi
4799                                 fi
4800                         else
4801                                 echo "It does not support 2..."
4802                                 if $cc $ccflags -c -DTRY=13 try.c >/dev/null 2>&1; then
4803                                         voidflags=13
4804                                         echo "But it supports 4 and 8."
4805                                 else
4806                                         if $cc $ccflags -c -DTRY=5 try.c >/dev/null 2>&1; then
4807                                                 voidflags=5
4808                                                 echo "And it supports 4 but has not heard about 8."
4809                                         else
4810                                                 echo "However it supports 8 but not 4."
4811                                         fi
4812                                 fi
4813                         fi
4814                 else
4815                         echo "There is no support at all for void."
4816                         voidflags=0
4817                 fi
4818         fi
4819 esac
4820 case "$voidflags" in
4821 "$defvoidused") ;;
4822 *)      $cat >&4 <<'EOM'
4823   Support flag bits are:
4824     1: basic void declarations.
4825     2: arrays of pointers to functions returning void.
4826     4: operations between pointers to and addresses of void functions.
4827     8: generic void pointers.
4828 EOM
4829         dflt="$voidflags";
4830         rp="Your void support flags add up to what?"
4831         . ./myread
4832         voidflags="$ans"
4833         ;;
4834 esac
4835 $rm -f try.* .out
4836
4837 : check for length of pointer
4838 echo " "
4839 case "$ptrsize" in
4840 '')
4841         echo "Checking to see how big your pointers are..." >&4
4842         if test "$voidflags" -gt 7; then
4843                 echo '#define VOID_PTR char *' > try.c
4844         else
4845                 echo '#define VOID_PTR void *' > try.c
4846         fi
4847         $cat >>try.c <<'EOCP'
4848 #include <stdio.h>
4849 int main()
4850 {
4851     printf("%d\n", (int)sizeof(VOID_PTR));
4852     exit(0);
4853 }
4854 EOCP
4855         set try
4856         if eval $compile_ok; then
4857                 ptrsize=`$run ./try`
4858                 echo "Your pointers are $ptrsize bytes long."
4859         else
4860                 dflt='4'
4861                 echo "(I can't seem to compile the test program.  Guessing...)" >&4
4862                 rp="What is the size of a pointer (in bytes)?"
4863                 . ./myread
4864                 ptrsize="$ans"
4865         fi
4866         ;;
4867 esac
4868 $rm -f try.c try
4869
4870 : check for long long
4871 echo " "
4872 echo "Checking to see if you have long long..." >&4
4873 echo 'int main() { long long x = 7; return 0; }' > try.c
4874 set try
4875 if eval $compile; then
4876         val="$define"
4877         echo "You have long long."
4878 else
4879         val="$undef"
4880         echo "You do not have long long."
4881 fi
4882 $rm try.*
4883 set d_longlong
4884 eval $setvar
4885
4886 : check for length of long long
4887 case "${d_longlong}${longlongsize}" in
4888 $define)
4889         echo " "
4890         echo "Checking to see how big your long longs are..." >&4
4891         $cat >try.c <<'EOCP'
4892 #include <stdio.h>
4893 int main()
4894 {
4895     printf("%d\n", (int)sizeof(long long));
4896     return(0);
4897 }
4898 EOCP
4899         set try
4900         if eval $compile_ok; then
4901                 longlongsize=`$run ./try`
4902                 echo "Your long longs are $longlongsize bytes long."
4903         else
4904                 dflt='8'
4905                 echo " "
4906                 echo "(I can't seem to compile the test program.  Guessing...)"
4907                 rp="What is the size of a long long (in bytes)?"
4908                 . ./myread
4909                 longlongsize="$ans"
4910         fi
4911         if $test "X$longsize" = "X$longlongsize"; then
4912                 echo "(That isn't any different from an ordinary long.)"
4913         fi      
4914         ;;
4915 esac
4916 $rm -f try.* try
4917
4918 : determine filename position in cpp output
4919 echo " "
4920 echo "Computing filename position in cpp output for #include directives..." >&4
4921 echo '#include <stdio.h>' > foo.c
4922 $cat >fieldn <<EOF
4923 $startsh
4924 $cppstdin $cppflags $cppminus <foo.c 2>/dev/null | \
4925 $grep '^[       ]*#.*stdio\.h' | \
4926 while read cline; do
4927         pos=1
4928         set \$cline
4929         while $test \$# -gt 0; do
4930                 if $test -r \`echo \$1 | $tr -d '"'\`; then
4931                         echo "\$pos"
4932                         exit 0
4933                 fi
4934                 shift
4935                 pos=\`expr \$pos + 1\`
4936         done
4937 done
4938 EOF
4939 chmod +x fieldn
4940 fieldn=`./fieldn`
4941 $rm -f foo.c fieldn
4942 case $fieldn in
4943 '') pos='???';;
4944 1) pos=first;;
4945 2) pos=second;;
4946 3) pos=third;;
4947 *) pos="${fieldn}th";;
4948 esac
4949 echo "Your cpp writes the filename in the $pos field of the line."
4950
4951 : locate header file
4952 $cat >findhdr <<EOF
4953 $startsh
4954 wanted=\$1
4955 name=''
4956 for usrincdir in $usrinc
4957 do
4958         if test -f \$usrincdir/\$wanted; then
4959                 echo "\$usrincdir/\$wanted"
4960                 exit 0
4961         fi
4962 done
4963 awkprg='{ print \$$fieldn }'
4964 echo "#include <\$wanted>" > foo\$\$.c
4965 $cppstdin $cppminus $cppflags < foo\$\$.c 2>/dev/null | \
4966 $grep "^[       ]*#.*\$wanted" | \
4967 while read cline; do
4968         name=\`echo \$cline | $awk "\$awkprg" | $tr -d '"'\`
4969         case "\$name" in
4970         *[/\\\\]\$wanted) echo "\$name"; exit 1;;
4971         *[\\\\/]\$wanted) echo "\$name"; exit 1;;
4972         *) exit 2;;
4973         esac;
4974 done;
4975 #
4976 # status = 0: grep returned 0 lines, case statement not executed
4977 # status = 1: headerfile found
4978 # status = 2: while loop executed, no headerfile found
4979 #
4980 status=\$?
4981 $rm -f foo\$\$.c;
4982 if test \$status -eq 1; then
4983         exit 0;
4984 fi
4985 exit 1
4986 EOF
4987 chmod +x findhdr
4988
4989 : define an alternate in-header-list? function
4990 inhdr='echo " "; td=$define; tu=$undef; yyy=$@;
4991 cont=true; xxf="echo \"<\$1> found.\" >&4";
4992 case $# in 2) xxnf="echo \"<\$1> NOT found.\" >&4";;
4993 *) xxnf="echo \"<\$1> NOT found, ...\" >&4";;
4994 esac;
4995 case $# in 4) instead=instead;; *) instead="at last";; esac;
4996 while $test "$cont"; do
4997         xxx=`./findhdr $1`
4998         var=$2; eval "was=\$$2";
4999         if $test "$xxx" && $test -r "$xxx";
5000         then eval $xxf;
5001         eval "case \"\$$var\" in $undef) . ./whoa; esac"; eval "$var=\$td";
5002                 cont="";
5003         else eval $xxnf;
5004         eval "case \"\$$var\" in $define) . ./whoa; esac"; eval "$var=\$tu"; fi;
5005         set $yyy; shift; shift; yyy=$@;
5006         case $# in 0) cont="";;
5007         2) xxf="echo \"but I found <\$1> $instead.\" >&4";
5008                 xxnf="echo \"and I did not find <\$1> either.\" >&4";;
5009         *) xxf="echo \"but I found <\$1\> instead.\" >&4";
5010                 xxnf="echo \"there is no <\$1>, ...\" >&4";;
5011         esac;
5012 done;
5013 while $test "$yyy";
5014 do set $yyy; var=$2; eval "was=\$$2";
5015         eval "case \"\$$var\" in $define) . ./whoa; esac"; eval "$var=\$tu";
5016         set $yyy; shift; shift; yyy=$@;
5017 done'
5018
5019 : see if inttypes.h is available
5020 : we want a real compile instead of Inhdr because some systems
5021 : have an inttypes.h which includes non-existent headers
5022 echo " "
5023 $cat >try.c <<EOCP
5024 #include <inttypes.h>
5025 int main() {
5026         static int32_t foo32 = 0x12345678;
5027 }
5028 EOCP
5029 set try
5030 if eval $compile; then
5031         echo "<inttypes.h> found." >&4
5032         val="$define"
5033 else
5034         echo "<inttypes.h> NOT found." >&4
5035         val="$undef"
5036 fi
5037 $rm -f try.c try
5038 set i_inttypes
5039 eval $setvar
5040
5041 : check for int64_t
5042 echo " "
5043 echo "Checking to see if you have int64_t..." >&4
5044 $cat >try.c <<EOCP
5045 #include <sys/types.h>
5046 #$i_inttypes I_INTTYPES
5047 #ifdef I_INTTYPES
5048 #include <inttypes.h>
5049 #endif
5050 int main() { int64_t x = 7; }
5051 EOCP
5052 set try
5053 if eval $compile; then
5054         val="$define"
5055         echo "You have int64_t."
5056 else
5057         val="$undef"
5058         echo "You do not have int64_t."
5059 fi
5060 $rm -f try try.*
5061 set d_int64_t
5062 eval $setvar
5063
5064
5065 echo " "
5066 echo "Checking which 64-bit integer type we could use..." >&4
5067
5068 case "$intsize" in
5069 8) val=int
5070    set quadtype
5071    eval $setvar
5072    val='"unsigned int"'
5073    set uquadtype
5074    eval $setvar
5075    quadkind=1
5076    ;;
5077 *) case "$longsize" in
5078    8) val=long
5079       set quadtype
5080       eval $setvar
5081       val='"unsigned long"'
5082       set uquadtype
5083       eval $setvar
5084       quadkind=2
5085       ;;
5086    *) case "$d_longlong:$longlongsize" in
5087       define:8)
5088         val='"long long"'
5089         set quadtype
5090         eval $setvar
5091         val='"unsigned long long"'
5092         set uquadtype
5093         eval $setvar
5094         quadkind=3
5095         ;;
5096       *) case "$d_int64_t" in
5097          define)
5098            val=int64_t
5099            set quadtype
5100            eval $setvar
5101            val=uint64_t
5102            set uquadtype
5103            eval $setvar
5104            quadkind=4
5105            ;;
5106          esac
5107          ;;
5108       esac
5109       ;;
5110    esac
5111    ;;
5112 esac
5113
5114 case "$quadtype" in
5115 '')     echo "Alas, no 64-bit integer types in sight." >&4
5116         d_quad="$undef"
5117         ;;
5118 *)      echo "We could use '$quadtype' for 64-bit integers." >&4
5119         d_quad="$define"
5120         ;;
5121 esac
5122
5123
5124 case "$uselonglong" in
5125 "$define"|true|[yY]*)
5126         cat <<EOM >&4
5127
5128 *** Configure -Duselonglong is deprecated, using -Duse64bitint instead.
5129 EOM
5130         use64bitint="$define"
5131         ;;
5132 esac                          
5133 case "$use64bits" in
5134 "$define"|true|[yY]*)
5135         cat <<EOM >&4
5136
5137 *** Configure -Duse64bits is deprecated, using -Duse64bitint instead.
5138 EOM
5139         use64bitint="$define"
5140         ;;
5141 esac                          
5142 case "$use64bitints" in
5143 "$define"|true|[yY]*)
5144         cat <<EOM >&4
5145
5146 *** There is no Configure -Duse64bitints, using -Duse64bitint instead.
5147 EOM
5148         use64bitint="$define"
5149         ;;
5150 esac                          
5151 case "$use64bitsint" in
5152 "$define"|true|[yY]*)
5153         cat <<EOM >&4
5154
5155 *** There is no Configure -Duse64bitsint, using -Duse64bitint instead.
5156 EOM
5157         use64bitint="$define"
5158         ;;
5159 esac                          
5160 case "$uselonglongs" in
5161 "$define"|true|[yY]*)
5162         cat <<EOM >&4
5163
5164 *** There is no Configure -Duselonglongs, using -Duse64bitint instead.
5165 EOM
5166         use64bitint="$define"
5167         ;;
5168 esac                          
5169 case "$use64bitsall" in
5170 "$define"|true|[yY]*)
5171         cat <<EOM >&4
5172
5173 *** There is no Configure -Duse64bitsall, using -Duse64bitall instead.
5174 EOM
5175         use64bitall="$define"
5176         ;;
5177 esac                          
5178
5179 case "$ccflags" in
5180 *-DUSE_LONG_LONG*|*-DUSE_64_BIT_INT*|*-DUSE_64_BIT_ALL*) use64bitint="$define";;
5181 esac
5182 case "$use64bitall" in
5183 "$define"|true|[yY]*) use64bitint="$define" ;;
5184 esac
5185
5186 case "$longsize" in
5187 8) cat <<EOM
5188
5189 You have natively 64-bit long integers.
5190 EOM
5191    val="$define"
5192    ;;
5193 *) case "$use64bitint" in
5194    "$define"|true|[yY]*) dflt='y';;
5195    *) dflt='n';;
5196    esac
5197    case "$d_quad" in
5198    "$define") ;;
5199    *) dflt='n' ;;
5200    esac
5201    cat <<EOM
5202
5203 Perl can be built to take advantage of 64-bit integer types
5204 on some systems.  To do so, Configure can be run with -Duse64bitint.
5205 Choosing this option will most probably introduce binary incompatibilities.
5206
5207 If this doesn't make any sense to you, just accept the default '$dflt'.
5208 (The default has been chosen based on your configuration.)
5209 EOM
5210    rp='Try to use 64-bit integers, if available?'
5211    . ./myread
5212    case "$ans" in
5213    [yY]*) val="$define" ;;
5214    *)     val="$undef"  ;;
5215    esac
5216    ;;
5217 esac
5218 set use64bitint
5219 eval $setvar
5220
5221 case "$use64bitall" in
5222 "$define"|true|[yY]*) dflt='y' ;;
5223 *) case "$longsize" in
5224    8) dflt='y' ;;
5225    *) dflt='n' ;;
5226    esac
5227    ;;
5228 esac    
5229 cat <<EOM
5230
5231 You may also choose to try maximal 64-bitness.  It means using as much
5232 64-bitness as possible on the platform.  This in turn means even more
5233 binary incompatibilities.  On the other hand, your platform may not
5234 have any more 64-bitness available than what you already have chosen.
5235
5236 If this doesn't make any sense to you, just accept the default '$dflt'.
5237 (The default has been chosen based on your configuration.)
5238 EOM
5239 rp='Try to use maximal 64-bit support, if available?'
5240 . ./myread
5241 case "$ans" in
5242 [yY]*) val="$define" ;;
5243 *)     val="$undef"  ;;
5244 esac
5245 set use64bitall
5246 eval $setvar
5247 case "$use64bitall" in
5248 "$define")
5249         case "$use64bitint" in
5250         "$undef")
5251                 cat <<EOM
5252
5253 Since you have chosen a maximally 64-bit build, I'm also turning on
5254 the use of 64-bit integers.
5255 EOM
5256                 use64bitint="$define" ;;
5257         esac
5258         ;;
5259 esac
5260
5261 case "$use64bitall" in
5262 "$define"|true|[yY]*)
5263         case "$ptrsize" in
5264         4)      cat <<EOM >&4
5265
5266 *** You have chosen a maximally 64-bit build, but your pointers
5267 *** are only 4 bytes wide, disabling maximal 64-bitness.
5268
5269 EOM
5270                 use64bitall="$undef"
5271                 case "$use64bitint" in
5272                 "$define"|true|[yY]*) ;;
5273                 *)      cat <<EOM >&4
5274
5275 *** Downgrading from maximal 64-bitness to using 64-bit integers.
5276
5277 EOM
5278                         use64bitint="$define"
5279                         ;;
5280                 esac
5281                 ;;
5282         esac
5283         ;;
5284 esac
5285
5286 case "$use64bitint" in
5287 "$define"|true|[yY]*)
5288 : Look for a hint-file generated 'call-back-unit'.  If the
5289 : user has specified that a 64-bit perl is to be built,
5290 : we may need to set or change some other defaults.
5291         if $test -f use64bitint.cbu; then
5292                 echo "Your platform has some specific hints for 64-bit integers, using them..."
5293                 . ./use64bitint.cbu
5294         fi
5295         case "$longsize" in
5296         4) case "$archname64" in
5297            '') archname64=64int ;;
5298            esac
5299            ;;
5300         esac
5301         ;;
5302 esac
5303
5304 case "$use64bitall" in
5305 "$define"|true|[yY]*)
5306 : Look for a hint-file generated 'call-back-unit'.  If the
5307 : user has specified that a maximally 64-bit perl is to be built,
5308 : we may need to set or change some other defaults.
5309         if $test -f use64bitall.cbu; then
5310                 echo "Your platform has some specific hints for 64-bit builds, using them..."
5311                 . ./use64bitall.cbu
5312         fi
5313         case "$longsize" in
5314         4) case "$archname64" in
5315            ''|64int) archname64=64all ;;
5316            esac
5317            ;;
5318         esac
5319         ;;
5320 esac
5321
5322 echo " "
5323 echo "Checking for GNU C Library..." >&4
5324 cat >try.c <<EOM
5325 #include <stdio.h>
5326 int main()
5327 {
5328 #ifdef __GLIBC__
5329     exit(0);
5330 #else
5331     exit(1);
5332 #endif
5333 }
5334 EOM
5335 set try
5336 if eval $compile_ok && $run ./try; then
5337         val="$define"
5338         echo "You are using the GNU C Library"
5339 else
5340         val="$undef"
5341         echo "You are not using the GNU C Library"
5342 fi
5343 $rm -f try try.*
5344 set d_gnulibc
5345 eval $setvar
5346
5347 : see if nm is to be used to determine whether a symbol is defined or not
5348 case "$usenm" in
5349 '')
5350         dflt=''
5351         case "$d_gnulibc" in
5352         "$define")
5353                 echo " "
5354                 echo "nm probably won't work on the GNU C Library." >&4
5355                 dflt=n
5356                 ;;
5357         esac
5358         case "$dflt" in
5359         '') 
5360                 if $test "$osname" = aix -a ! -f /lib/syscalls.exp; then
5361                         echo " "
5362                         echo "Whoops!  This is an AIX system without /lib/syscalls.exp!" >&4
5363                         echo "'nm' won't be sufficient on this sytem." >&4
5364                         dflt=n
5365                 fi
5366                 ;;
5367         esac
5368         case "$dflt" in
5369         '') dflt=`$egrep 'inlibc|csym' $rsrc/Configure | wc -l 2>/dev/null`
5370                 if $test $dflt -gt 20; then
5371                         dflt=y
5372                 else
5373                         dflt=n
5374                 fi
5375                 ;;
5376         esac
5377         ;;
5378 *)
5379         case "$usenm" in
5380         true|$define) dflt=y;;
5381         *) dflt=n;;
5382         esac
5383         ;;
5384 esac
5385 $cat <<EOM
5386
5387 I can use $nm to extract the symbols from your C libraries. This
5388 is a time consuming task which may generate huge output on the disk (up
5389 to 3 megabytes) but that should make the symbols extraction faster. The
5390 alternative is to skip the 'nm' extraction part and to compile a small
5391 test program instead to determine whether each symbol is present. If
5392 you have a fast C compiler and/or if your 'nm' output cannot be parsed,
5393 this may be the best solution.
5394
5395 You probably shouldn't let me use 'nm' if you are using the GNU C Library.
5396
5397 EOM
5398 rp="Shall I use $nm to extract C symbols from the libraries?"
5399 . ./myread
5400 case "$ans" in
5401 [Nn]*) usenm=false;;
5402 *) usenm=true;;
5403 esac
5404
5405 runnm=$usenm
5406 case "$reuseval" in
5407 true) runnm=false;;
5408 esac
5409
5410 : nm options which may be necessary
5411 case "$nm_opt" in
5412 '') if $test -f /mach_boot; then
5413                 nm_opt=''       # Mach
5414         elif $test -d /usr/ccs/lib; then
5415                 nm_opt='-p'     # Solaris (and SunOS?)
5416         elif $test -f /dgux; then
5417                 nm_opt='-p'     # DG-UX
5418         elif $test -f /lib64/rld; then
5419                 nm_opt='-p'     # 64-bit Irix
5420         else
5421                 nm_opt=''
5422         fi;;
5423 esac
5424
5425 : nm options which may be necessary for shared libraries but illegal
5426 : for archive libraries.  Thank you, Linux.
5427 case "$nm_so_opt" in
5428 '')     case "$myuname" in
5429         *linux*)
5430                 if $nm --help | $grep 'dynamic' > /dev/null 2>&1; then
5431                         nm_so_opt='--dynamic'
5432                 fi
5433                 ;;
5434         esac
5435         ;;
5436 esac
5437
5438 case "$runnm" in
5439 true)
5440 : get list of predefined functions in a handy place
5441 echo " "
5442 case "$libc" in
5443 '') libc=unknown
5444         case "$libs" in
5445         *-lc_s*) libc=`./loc libc_s$_a $libc $libpth`
5446         esac
5447         ;;
5448 esac
5449 libnames='';
5450 case "$libs" in
5451 '') ;;
5452 *)  for thislib in $libs; do
5453         case "$thislib" in
5454         -lc|-lc_s)
5455                 : Handle C library specially below.
5456                 ;;
5457         -l*)
5458                 thislib=`echo $thislib | $sed -e 's/^-l//'`
5459                 if try=`./loc lib$thislib.$so.'*' X $libpth`; $test -f "$try"; then
5460                         :
5461                 elif try=`./loc lib$thislib.$so X $libpth`; $test -f "$try"; then
5462                         :
5463                 elif try=`./loc lib$thislib$_a X $libpth`; $test -f "$try"; then
5464                         :
5465                 elif try=`./loc $thislib$_a X $libpth`; $test -f "$try"; then
5466                         :
5467                 elif try=`./loc lib$thislib X $libpth`; $test -f "$try"; then
5468                         :
5469                 elif try=`./loc $thislib X $libpth`; $test -f "$try"; then
5470                         :
5471                 elif try=`./loc Slib$thislib$_a X $xlibpth`; $test -f "$try"; then
5472                         :
5473                 else
5474                         try=''
5475                 fi
5476                 libnames="$libnames $try"
5477                 ;;
5478         *) libnames="$libnames $thislib" ;;
5479         esac
5480         done
5481         ;;
5482 esac
5483 xxx=normal
5484 case "$libc" in
5485 unknown)
5486         set /lib/libc.$so
5487         for xxx in $libpth; do
5488                 $test -r $1 || set $xxx/libc.$so
5489                 : The messy sed command sorts on library version numbers.
5490                 $test -r $1 || \
5491                         set `echo blurfl; echo $xxx/libc.$so.[0-9]* | \
5492                         tr ' ' $trnl | egrep -v '\.[A-Za-z]*$' | $sed -e '
5493                                 h
5494                                 s/[0-9][0-9]*/0000&/g
5495                                 s/0*\([0-9][0-9][0-9][0-9][0-9]\)/\1/g
5496                                 G
5497                                 s/\n/ /' | \
5498                          $sort | $sed -e 's/^.* //'`
5499                 eval set \$$#
5500         done
5501         $test -r $1 || set /usr/ccs/lib/libc.$so
5502         $test -r $1 || set /lib/libsys_s$_a
5503         ;;
5504 *)
5505         set blurfl
5506         ;;
5507 esac
5508 if $test -r "$1"; then
5509         echo "Your (shared) C library seems to be in $1."
5510         libc="$1"
5511 elif $test -r /lib/libc && $test -r /lib/clib; then
5512         echo "Your C library seems to be in both /lib/clib and /lib/libc."
5513         xxx=apollo
5514         libc='/lib/clib /lib/libc'
5515         if $test -r /lib/syslib; then
5516                 echo "(Your math library is in /lib/syslib.)"
5517                 libc="$libc /lib/syslib"
5518         fi
5519 elif $test -r "$libc" || (test -h "$libc") >/dev/null 2>&1; then
5520         echo "Your C library seems to be in $libc, as you said before."
5521 elif $test -r $incpath/usr/lib/libc$_a; then
5522         libc=$incpath/usr/lib/libc$_a;
5523         echo "Your C library seems to be in $libc.  That's fine."
5524 elif $test -r /lib/libc$_a; then
5525         libc=/lib/libc$_a;
5526         echo "Your C library seems to be in $libc.  You're normal."
5527 else
5528         if tans=`./loc libc$_a blurfl/dyick $libpth`; $test -r "$tans"; then
5529                 :
5530         elif tans=`./loc libc blurfl/dyick $libpth`; $test -r "$tans"; then
5531                 libnames="$libnames "`./loc clib blurfl/dyick $libpth`
5532         elif tans=`./loc clib blurfl/dyick $libpth`; $test -r "$tans"; then
5533                 :
5534         elif tans=`./loc Slibc$_a blurfl/dyick $xlibpth`; $test -r "$tans"; then
5535                 :
5536         elif tans=`./loc Mlibc$_a blurfl/dyick $xlibpth`; $test -r "$tans"; then
5537                 :
5538         else
5539                 tans=`./loc Llibc$_a blurfl/dyick $xlibpth`
5540         fi
5541         if $test -r "$tans"; then
5542                 echo "Your C library seems to be in $tans, of all places."
5543                 libc=$tans
5544         else
5545                 libc='blurfl'
5546         fi
5547 fi
5548 if $test $xxx = apollo -o -r "$libc" || (test -h "$libc") >/dev/null 2>&1; then
5549         dflt="$libc"
5550         cat <<EOM
5551
5552 If the guess above is wrong (which it might be if you're using a strange
5553 compiler, or your machine supports multiple models), you can override it here.
5554
5555 EOM
5556 else
5557         dflt=''
5558         echo $libpth | $tr ' ' $trnl | $sort | $uniq > libpath
5559         cat >&4 <<EOM
5560 I can't seem to find your C library.  I've looked in the following places:
5561
5562 EOM
5563         $sed 's/^/      /' libpath
5564         cat <<EOM
5565
5566 None of these seems to contain your C library. I need to get its name...
5567
5568 EOM
5569 fi
5570 fn=f
5571 rp='Where is your C library?'
5572 . ./getfile
5573 libc="$ans"
5574
5575 echo " "
5576 echo $libc $libnames | $tr ' ' $trnl | $sort | $uniq > libnames
5577 set X `cat libnames`
5578 shift
5579 xxx=files
5580 case $# in 1) xxx=file; esac
5581 echo "Extracting names from the following $xxx for later perusal:" >&4
5582 echo " "
5583 $sed 's/^/      /' libnames >&4
5584 echo " "
5585 $echo $n "This may take a while...$c" >&4
5586
5587 for file in $*; do
5588         case $file in
5589         *$so*) $nm $nm_so_opt $nm_opt $file 2>/dev/null;;
5590         *) $nm $nm_opt $file 2>/dev/null;;
5591         esac
5592 done >libc.tmp
5593
5594 $echo $n ".$c"
5595 $grep fprintf libc.tmp > libc.ptf
5596 xscan='eval "<libc.ptf $com >libc.list"; $echo $n ".$c" >&4'
5597 xrun='eval "<libc.tmp $com >libc.list"; echo "done" >&4'
5598 xxx='[ADTSIW]'
5599 if com="$sed -n -e 's/__IO//' -e 's/^.* $xxx  *_[_.]*//p' -e 's/^.* $xxx  *//p'";\
5600         eval $xscan;\
5601         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5602                 eval $xrun
5603 elif com="$sed -n -e 's/^__*//' -e 's/^\([a-zA-Z_0-9$]*\).*xtern.*/\1/p'";\
5604         eval $xscan;\
5605         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5606                 eval $xrun
5607 elif com="$sed -n -e '/|UNDEF/d' -e '/FUNC..GL/s/^.*|__*//p'";\
5608         eval $xscan;\
5609         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5610                 eval $xrun
5611 elif com="$sed -n -e 's/^.* D __*//p' -e 's/^.* D //p'";\
5612         eval $xscan;\
5613         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5614                 eval $xrun
5615 elif com="$sed -n -e 's/^_//' -e 's/^\([a-zA-Z_0-9]*\).*xtern.*text.*/\1/p'";\
5616         eval $xscan;\
5617         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5618                 eval $xrun
5619 elif com="$sed -n -e 's/^.*|FUNC |GLOB .*|//p'";\
5620         eval $xscan;\
5621         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5622                 eval $xrun
5623 elif com="$grep '|' | $sed -n -e '/|COMMON/d' -e '/|DATA/d' \
5624                                 -e '/ file/d' -e 's/^\([^       ]*\).*/\1/p'";\
5625         eval $xscan;\
5626         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5627                 eval $xrun
5628 elif com="$sed -n -e 's/^.*|FUNC |GLOB .*|//p' -e 's/^.*|FUNC |WEAK .*|//p'";\
5629         eval $xscan;\
5630         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5631                 eval $xrun
5632 elif com="$sed -n -e 's/^__//' -e '/|Undef/d' -e '/|Proc/s/ .*//p'";\
5633         eval $xscan;\
5634         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5635                 eval $xrun
5636 elif com="$sed -n -e 's/^.*|Proc .*|Text *| *//p'";\
5637         eval $xscan;\
5638         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5639                 eval $xrun
5640 elif com="$sed -n -e '/Def. Text/s/.* \([^ ]*\)\$/\1/p'";\
5641         eval $xscan;\
5642         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5643                 eval $xrun
5644 elif com="$sed -n -e 's/^[-0-9a-f ]*_\(.*\)=.*/\1/p'";\
5645         eval $xscan;\
5646         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5647                 eval $xrun
5648 elif com="$sed -n -e 's/.*\.text n\ \ \ \.//p'";\
5649         eval $xscan;\
5650         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5651                 eval $xrun
5652 elif com="sed -n -e 's/^__.*//' -e 's/[       ]*D[    ]*[0-9]*.*//p'";\
5653         eval $xscan;\
5654         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5655                 eval $xrun
5656 else
5657         $nm -p $* 2>/dev/null >libc.tmp
5658         $grep fprintf libc.tmp > libc.ptf
5659         if com="$sed -n -e 's/^.* [ADTSIW]  *_[_.]*//p' -e 's/^.* [ADTSIW] //p'";\
5660                 eval $xscan; $contains '^fprintf$' libc.list >/dev/null 2>&1
5661         then
5662                 nm_opt='-p'
5663                 eval $xrun
5664         else
5665                 echo " "
5666                 echo "$nm didn't seem to work right. Trying $ar instead..." >&4
5667                 com=''
5668                 if $ar t $libc > libc.tmp && $contains '^fprintf$' libc.tmp >/dev/null 2>&1; then
5669                         for thisname in $libnames $libc; do
5670                                 $ar t $thisname >>libc.tmp
5671                         done
5672                         $sed -e "s/\\$_o\$//" < libc.tmp > libc.list
5673                         echo "Ok." >&4
5674                 elif test "X$osname" = "Xos2" && $ar tv $libc > libc.tmp; then
5675                         # Repeat libc to extract forwarders to DLL entries too
5676                         for thisname in $libnames $libc; do
5677                                 $ar tv $thisname >>libc.tmp
5678                                 # Revision 50 of EMX has bug in $ar.
5679                                 # it will not extract forwarders to DLL entries
5680                                 # Use emximp which will extract exactly them.
5681                                 emximp -o tmp.imp $thisname \
5682                                     2>/dev/null && \
5683                                     $sed -e 's/^\([_a-zA-Z0-9]*\) .*$/\1/p' \
5684                                     < tmp.imp >>libc.tmp
5685                                 $rm tmp.imp
5686                         done
5687                         $sed -e "s/\\$_o\$//" -e 's/^ \+//' < libc.tmp > libc.list
5688                         echo "Ok." >&4
5689                 else
5690                         echo "$ar didn't seem to work right." >&4
5691                         echo "Maybe this is a Cray...trying bld instead..." >&4
5692                         if bld t $libc | $sed -e 's/.*\///' -e "s/\\$_o:.*\$//" > libc.list
5693                         then
5694                                 for thisname in $libnames; do
5695                                         bld t $libnames | \
5696                                         $sed -e 's/.*\///' -e "s/\\$_o:.*\$//" >>libc.list
5697                                         $ar t $thisname >>libc.tmp
5698                                 done
5699                                 echo "Ok." >&4
5700                         else
5701                                 echo "That didn't work either.  Giving up." >&4
5702                                 exit 1
5703                         fi
5704                 fi
5705         fi
5706 fi
5707 nm_extract="$com"
5708 if $test -f /lib/syscalls.exp; then
5709         echo " "
5710         echo "Also extracting names from /lib/syscalls.exp for good ole AIX..." >&4
5711         $sed -n 's/^\([^        ]*\)[   ]*syscall[0-9]*$/\1/p' /lib/syscalls.exp >>libc.list
5712 fi
5713 ;;
5714 esac
5715 $rm -f libnames libpath
5716
5717 : is a C symbol defined?
5718 csym='tlook=$1;
5719 case "$3" in
5720 -v) tf=libc.tmp; tc=""; tdc="";;
5721 -a) tf=libc.tmp; tc="[0]"; tdc="[]";;
5722 *) tlook="^$1\$"; tf=libc.list; tc="()"; tdc="()";;
5723 esac;
5724 tx=yes;
5725 case "$reuseval-$4" in
5726 true-) ;;
5727 true-*) tx=no; eval "tval=\$$4"; case "$tval" in "") tx=yes;; esac;;
5728 esac;
5729 case "$tx" in
5730 yes)
5731         case "$runnm" in
5732         true)
5733                 if $contains $tlook $tf >/dev/null 2>&1;
5734                 then tval=true;
5735                 else tval=false;
5736                 fi;;
5737         *)
5738                 echo "int main() { extern short $1$tdc; printf(\"%hd\", $1$tc); }" > t.c;
5739                 if $cc -o t $optimize $ccflags $ldflags t.c $libs >/dev/null 2>&1;
5740                 then tval=true;
5741                 else tval=false;
5742                 fi;
5743                 $rm -f t t.c;;
5744         esac;;
5745 *)
5746         case "$tval" in
5747         $define) tval=true;;
5748         *) tval=false;;
5749         esac;;
5750 esac;
5751 eval "$2=$tval"'
5752
5753 : define an is-in-libc? function
5754 inlibc='echo " "; td=$define; tu=$undef;
5755 sym=$1; var=$2; eval "was=\$$2";
5756 tx=yes;
5757 case "$reuseval$was" in
5758 true) ;;
5759 true*) tx=no;;
5760 esac;
5761 case "$tx" in
5762 yes)
5763         set $sym tres -f;
5764         eval $csym;
5765         case "$tres" in
5766         true)
5767                 echo "$sym() found." >&4;
5768                 case "$was" in $undef) . ./whoa; esac; eval "$var=\$td";;
5769         *)
5770                 echo "$sym() NOT found." >&4;
5771                 case "$was" in $define) . ./whoa; esac; eval "$var=\$tu";;
5772         esac;;
5773 *)
5774         case "$was" in
5775         $define) echo "$sym() found." >&4;;
5776         *) echo "$sym() NOT found." >&4;;
5777         esac;;
5778 esac'
5779
5780 : see if sqrtl exists
5781 set sqrtl d_sqrtl
5782 eval $inlibc
5783
5784 case "$ccflags" in
5785 *-DUSE_LONG_DOUBLE*|*-DUSE_MORE_BITS*) uselongdouble="$define" ;;
5786 esac
5787
5788 case "$uselongdouble" in
5789 $define|true|[yY]*)     dflt='y';;
5790 *) dflt='n';;
5791 esac
5792 cat <<EOM
5793
5794 Perl can be built to take advantage of long doubles which
5795 (if available) may give more accuracy and range for floating point numbers.
5796
5797 If this doesn't make any sense to you, just accept the default '$dflt'.
5798 EOM
5799 rp='Try to use long doubles if available?'
5800 . ./myread
5801 case "$ans" in
5802 y|Y)    val="$define"   ;;
5803 *)      val="$undef"    ;;
5804 esac
5805 set uselongdouble
5806 eval $setvar
5807
5808 case "$uselongdouble" in
5809 true|[yY]*) uselongdouble="$define" ;;
5810 esac
5811
5812 case "$uselongdouble" in
5813 $define)
5814 : Look for a hint-file generated 'call-back-unit'.  If the
5815 : user has specified that long doubles should be used,
5816 : we may need to set or change some other defaults.
5817         if $test -f uselongdouble.cbu; then
5818                 echo "Your platform has some specific hints for long doubles, using them..."
5819                 . ./uselongdouble.cbu
5820         else
5821                 $cat <<EOM
5822 (Your platform doesn't have any specific hints for long doubles.)
5823 EOM
5824         fi
5825         ;;
5826 esac
5827
5828 case "$uselongdouble:$d_sqrtl" in
5829 $define:$undef)
5830                 $cat <<EOM >&4
5831
5832 *** You requested the use of long doubles but you do not seem to have
5833 *** the mathematic functions for long doubles.  I'm disabling the use
5834 *** of long doubles.
5835
5836 EOM
5837         uselongdouble=$undef
5838         ;;
5839 esac
5840
5841 : check for length of double
5842 echo " "
5843 case "$doublesize" in
5844 '')
5845         echo "Checking to see how big your double precision numbers are..." >&4
5846         $cat >try.c <<'EOCP'
5847 #include <stdio.h>
5848 int main()
5849 {
5850     printf("%d\n", (int)sizeof(double));
5851     exit(0);
5852 }
5853 EOCP
5854         set try
5855         if eval $compile_ok; then
5856                 doublesize=`$run ./try`
5857                 echo "Your double is $doublesize bytes long."
5858         else
5859                 dflt='8'
5860                 echo "(I can't seem to compile the test program.  Guessing...)"
5861                 rp="What is the size of a double precision number (in bytes)?"
5862                 . ./myread
5863                 doublesize="$ans"
5864         fi
5865         ;;
5866 esac
5867 $rm -f try.c try
5868
5869 : check for long doubles
5870 echo " "
5871 echo "Checking to see if you have long double..." >&4
5872 echo 'int main() { long double x = 7.0; }' > try.c
5873 set try
5874 if eval $compile; then
5875         val="$define"
5876         echo "You have long double."
5877 else
5878         val="$undef"
5879         echo "You do not have long double."
5880 fi
5881 $rm try.*
5882 set d_longdbl
5883 eval $setvar
5884
5885 : check for length of long double
5886 case "${d_longdbl}${longdblsize}" in
5887 $define)
5888         echo " "
5889         echo "Checking to see how big your long doubles are..." >&4
5890         $cat >try.c <<'EOCP'
5891 #include <stdio.h>
5892 int main()
5893 {
5894         printf("%d\n", sizeof(long double));
5895 }
5896 EOCP
5897         set try
5898         set try
5899         if eval $compile; then
5900                 longdblsize=`$run ./try`
5901                 echo "Your long doubles are $longdblsize bytes long."
5902         else
5903                 dflt='8'
5904                 echo " "
5905                 echo "(I can't seem to compile the test program.  Guessing...)" >&4
5906                 rp="What is the size of a long double (in bytes)?"
5907                 . ./myread
5908                 longdblsize="$ans"
5909         fi
5910         if $test "X$doublesize" = "X$longdblsize"; then
5911                 echo "(That isn't any different from an ordinary double.)"
5912         fi      
5913         ;;
5914 esac
5915 $rm -f try.* try
5916
5917 case "$useperlio" in
5918 $define|true|[yY]*|'')  dflt='y';;
5919 *) dflt='n';;
5920 esac
5921 cat <<EOM
5922
5923 Previous version of $package used the standard IO mechanisms as
5924 defined in <stdio.h>.  Versions 5.003_02 and later of $package allow
5925 alternate IO mechanisms via the PerlIO abstraction layer, but the
5926 stdio mechanism is still available if needed.  The abstraction layer
5927 can use AT&T's sfio (if you already have sfio installed) or regular stdio.
5928 Using PerlIO with sfio may cause problems with some extension modules.
5929
5930 If this doesn't make any sense to you, just accept the default '$dflt'.
5931 EOM
5932 rp='Use the PerlIO abstraction layer?'
5933 . ./myread
5934 case "$ans" in
5935 y|Y) 
5936         val="$define"
5937         ;;
5938 *)      
5939         echo "Ok, doing things the stdio way."
5940         val="$undef"
5941         ;;
5942 esac
5943 set useperlio
5944 eval $setvar 
5945
5946 case "$usesocks" in
5947 $define|true|[yY]*)
5948         case "$useperlio" in
5949         $define|true|[yY]*) ;;
5950         *)      cat >&4 <<EOM
5951
5952 You are using the SOCKS proxy protocol library which means that you
5953 should also use the PerlIO layer.  You may be headed for trouble.
5954
5955 EOM
5956                 ;;
5957         esac
5958         ;;
5959 esac
5960
5961         
5962 : determine the architecture name
5963 echo " "
5964 if xxx=`./loc arch blurfl $pth`; $test -f "$xxx"; then
5965         tarch=`arch`"-$osname"
5966 elif xxx=`./loc uname blurfl $pth`; $test -f "$xxx" ; then
5967         if uname -m > tmparch 2>&1 ; then
5968                 tarch=`$sed -e 's/ *$//' -e 's/ /_/g' \
5969                         -e 's/$/'"-$osname/" tmparch`
5970         else
5971                 tarch="$osname"
5972         fi
5973         $rm -f tmparch
5974 else
5975         tarch="$osname"
5976 fi
5977 case "$myarchname" in
5978 ''|"$tarch") ;;
5979 *)
5980         echo "(Your architecture name used to be $myarchname.)"
5981         archname=''
5982         ;;
5983 esac
5984 case "$targetarch" in
5985 '') ;;
5986 *)  archname=`echo $targetarch|sed 's,^[^-]*-,,'` ;;
5987 esac
5988 myarchname="$tarch"
5989 case "$archname" in
5990 '') dflt="$tarch";;
5991 *) dflt="$archname";;
5992 esac
5993 rp='What is your architecture name'
5994 . ./myread
5995 archname="$ans"
5996 case "$usethreads" in
5997 $define)
5998         echo "Threads selected." >&4
5999         case "$archname" in
6000         *-thread*) echo "...and architecture name already has -thread." >&4
6001                 ;;
6002         *)      archname="$archname-thread"
6003                 echo "...setting architecture name to $archname." >&4
6004                 ;;
6005         esac
6006         ;;
6007 esac
6008 case "$usemultiplicity" in
6009 $define)
6010         echo "Multiplicity selected." >&4
6011         case "$archname" in
6012         *-multi*) echo "...and architecture name already has -multi." >&4
6013                 ;;
6014         *)      archname="$archname-multi"
6015                 echo "...setting architecture name to $archname." >&4
6016                 ;;
6017         esac
6018         ;;
6019 esac
6020 case "$use64bitint$use64bitall" in
6021 *"$define"*)
6022         case "$archname64" in
6023         '')
6024                 echo "This architecture is naturally 64-bit, not changing architecture name." >&4
6025                 ;;
6026         *)
6027                 case "$use64bitint" in
6028                 "$define") echo "64 bit integers selected." >&4 ;;
6029                 esac
6030                 case "$use64bitall" in
6031                 "$define") echo "Maximal 64 bitness selected." >&4 ;;
6032                 esac
6033                 case "$archname" in
6034                 *-$archname64*) echo "...and architecture name already has $archname64." >&4
6035                         ;;
6036                 *)      archname="$archname-$archname64"
6037                         echo "...setting architecture name to $archname." >&4
6038                         ;;
6039                 esac
6040                 ;;
6041         esac
6042 esac
6043 case "$uselongdouble" in
6044 $define)
6045         echo "Long doubles selected." >&4
6046         case "$longdblsize" in
6047         $doublesize)
6048                 "...but long doubles are equal to doubles, not changing architecture name." >&4
6049                 ;;
6050         *)
6051                 case "$archname" in
6052                 *-ld*) echo "...and architecture name already has -ld." >&4
6053                         ;;
6054                 *)      archname="$archname-ld"
6055                         echo "...setting architecture name to $archname." >&4
6056                         ;;
6057                 esac
6058                 ;;
6059         esac
6060         ;;
6061 esac
6062 case "$useperlio" in
6063 $define)
6064         echo "Perlio selected." >&4
6065         ;;
6066 *)
6067         echo "Perlio not selected, using stdio." >&4
6068         case "$archname" in
6069         *-stdio*) echo "...and architecture name already has -stdio." >&4
6070                 ;;
6071         *)      archname="$archname-stdio"
6072                 echo "...setting architecture name to $archname." >&4
6073                 ;;
6074         esac
6075         ;;
6076 esac
6077
6078 : determine root of directory hierarchy where package will be installed.
6079 case "$prefix" in
6080 '')
6081         dflt=`./loc . /usr/local /usr/local /local /opt /usr`
6082         ;;
6083 *)
6084         dflt="$prefix"
6085         ;;
6086 esac
6087 $cat <<EOM
6088
6089 By default, $package will be installed in $dflt/bin, manual pages
6090 under $dflt/man, etc..., i.e. with $dflt as prefix for all
6091 installation directories. Typically this is something like /usr/local.
6092 If you wish to have binaries under /usr/bin but other parts of the
6093 installation under /usr/local, that's ok: you will be prompted
6094 separately for each of the installation directories, the prefix being
6095 only used to set the defaults.
6096
6097 EOM
6098 fn=d~
6099 rp='Installation prefix to use?'
6100 . ./getfile
6101 oldprefix=''
6102 case "$prefix" in
6103 '') ;;
6104 *)
6105         case "$ans" in
6106         "$prefix") ;;
6107         *) oldprefix="$prefix";;
6108         esac
6109         ;;
6110 esac
6111 prefix="$ans"
6112 prefixexp="$ansexp"
6113
6114 case "$afsroot" in
6115 '')     afsroot=/afs ;;
6116 *)      afsroot=$afsroot ;;
6117 esac
6118
6119 : is AFS running?
6120 echo " "
6121 case "$afs" in
6122 $define|true)   afs=true ;;
6123 $undef|false)   afs=false ;;
6124 *)      if test -d $afsroot; then
6125                 afs=true
6126         else
6127                 afs=false
6128         fi
6129         ;;
6130 esac
6131 if $afs; then
6132         echo "AFS may be running... I'll be extra cautious then..." >&4
6133 else
6134         echo "AFS does not seem to be running..." >&4
6135 fi
6136
6137 : determine installation prefix for where package is to be installed.
6138 if $afs; then 
6139 $cat <<EOM
6140
6141 Since you are running AFS, I need to distinguish the directory in which
6142 files will reside from the directory in which they are installed (and from
6143 which they are presumably copied to the former directory by occult means).
6144
6145 EOM
6146         case "$installprefix" in
6147         '') dflt=`echo $prefix | sed 's#^/afs/#/afs/.#'`;;
6148         *) dflt="$installprefix";;
6149         esac
6150 else
6151 $cat <<EOM
6152
6153 In some special cases, particularly when building $package for distribution,
6154 it is convenient to distinguish between the directory in which files should 
6155 be installed from the directory ($prefix) in which they 
6156 will eventually reside.  For most users, these two directories are the same.
6157
6158 EOM
6159         case "$installprefix" in
6160         '') dflt=$prefix ;;
6161         *) dflt=$installprefix;;
6162         esac
6163 fi
6164 fn=d~
6165 rp='What installation prefix should I use for installing files?'
6166 . ./getfile
6167 installprefix="$ans"
6168 installprefixexp="$ansexp"
6169
6170 : set the prefixit variable, to compute a suitable default value
6171 prefixit='case "$3" in
6172 ""|none)
6173         case "$oldprefix" in
6174         "") eval "$1=\"\$$2\"";;
6175         *)
6176                 case "$3" in
6177                 "") eval "$1=";;
6178                 none)
6179                         eval "tp=\"\$$2\"";
6180                         case "$tp" in
6181                         ""|" ") eval "$1=\"\$$2\"";;
6182                         *) eval "$1=";;
6183                         esac;;
6184                 esac;;
6185         esac;;
6186 *)
6187         eval "tp=\"$oldprefix-\$$2-\""; eval "tp=\"$tp\"";
6188         case "$tp" in
6189         --|/*--|\~*--) eval "$1=\"$prefix/$3\"";;
6190         /*-$oldprefix/*|\~*-$oldprefix/*)
6191                 eval "$1=\`echo \$$2 | sed \"s,^$oldprefix,$prefix,\"\`";;
6192         *) eval "$1=\"\$$2\"";;
6193         esac;;
6194 esac'
6195
6196
6197 : get the patchlevel
6198 echo " "
6199 echo "Getting the current patchlevel..." >&4
6200 if $test -r $rsrc/patchlevel.h;then
6201         revision=`awk '/define[         ]+PERL_REVISION/ {print $3}' $rsrc/patchlevel.h`
6202         patchlevel=`awk '/define[       ]+PERL_VERSION/ {print $3}' $rsrc/patchlevel.h`
6203         subversion=`awk '/define[       ]+PERL_SUBVERSION/ {print $3}' $rsrc/patchlevel.h`
6204         api_revision=`awk '/define[     ]+PERL_API_REVISION/ {print $3}' $rsrc/patchlevel.h`
6205         api_version=`awk '/define[      ]+PERL_API_VERSION/ {print $3}' $rsrc/patchlevel.h`
6206         api_subversion=`awk '/define[   ]+PERL_API_SUBVERSION/ {print $3}' $rsrc/patchlevel.h`
6207        perl_patchlevel=`grep ',"DEVEL[0-9][0-9]*"' $rsrc/patchlevel.h|sed 's/[^0-9]//g'`
6208 else
6209         revision=0
6210         patchlevel=0
6211         subversion=0
6212         api_revision=0
6213         api_version=0
6214         api_subversion=0
6215         perl_patchlevel=0
6216         $echo "(You do not have patchlevel.h.  Eek.)"
6217 fi
6218 if $test -r $rsrc/.patch ; then  
6219         if $test "`cat $rsrc/.patch`" -gt "$perl_patchlevel" ; then
6220                 perl_patchlevel=`cat $rsrc/.patch`
6221         fi
6222 fi
6223 case "$perl_patchlevel" in
6224 0)  ;;
6225 '') $echo "(You have $package version $patchlevel subversion $subversion.)" ;;
6226 *)  $echo "(You have $package version $patchlevel subversion $subversion patchlevel $perl_patchlevel.)" ;;
6227 esac
6228 case "$osname" in
6229 dos|vms)
6230         : XXX Should be a Configure test for double-dots in filenames.
6231         version=`echo $revision $patchlevel $subversion | \
6232                  $awk '{ printf "%d_%d_%d\n", $1, $2, $3 }'`
6233         api_versionstring=`echo $api_revision $api_version $api_subversion | \
6234                  $awk '{ printf "%d_%d_%d\n", $1, $2, $3 }'`
6235         ;;
6236 *)
6237         version=`echo $revision $patchlevel $subversion | \
6238                  $awk '{ printf "%d.%d.%d\n", $1, $2, $3 }'`
6239         api_versionstring=`echo $api_revision $api_version $api_subversion | \
6240                  $awk '{ printf "%d.%d.%d\n", $1, $2, $3 }'`
6241         ;;
6242 esac
6243 : Special case the 5.005_xx maintenance series, which used 5.005
6244 : without any subversion label as a subdirectory in $sitelib
6245 if test "${api_revision}${api_version}${api_subversion}" = "550"; then
6246         api_versionstring='5.005'
6247 fi
6248
6249 : determine installation style
6250 : For now, try to deduce it from prefix unless it is already set.
6251 : Reproduce behavior of 5.005 and earlier, maybe drop that in 5.7.
6252 case "$installstyle" in
6253 '')     case "$prefix" in
6254                 *perl*) dflt='lib';;
6255                 *) dflt='lib/perl5' ;;
6256         esac
6257         ;;
6258 *)      dflt="$installstyle" ;;
6259 esac
6260 : Probably not worth prompting for this since we prompt for all
6261 : the directories individually, and the prompt would be too long and
6262 : confusing anyway.
6263 installstyle=$dflt
6264
6265 : determine where private library files go
6266 : Usual default is /usr/local/lib/perl5/$version.
6267 : Also allow things like /opt/perl/lib/$version, since 
6268 : /opt/perl/lib/perl5... would be redundant.
6269 : The default "style" setting is made in installstyle.U
6270 case "$installstyle" in
6271 *lib/perl5*) set dflt privlib lib/$package/$version ;;
6272 *)       set dflt privlib lib/$version ;;
6273 esac
6274 eval $prefixit
6275 $cat <<EOM
6276
6277 There are some auxiliary files for $package that need to be put into a
6278 private library directory that is accessible by everyone.
6279
6280 EOM
6281 fn=d~+
6282 rp='Pathname where the private library files will reside?'
6283 . ./getfile
6284 privlib="$ans"
6285 privlibexp="$ansexp"
6286 : Change installation prefix, if necessary.
6287 if $test X"$prefix" != X"$installprefix"; then
6288         installprivlib=`echo $privlibexp | sed "s#^$prefix#$installprefix#"`
6289 else
6290         installprivlib="$privlibexp"
6291 fi
6292
6293 : set the prefixup variable, to restore leading tilda escape
6294 prefixup='case "$prefixexp" in
6295 "$prefix") ;;
6296 *) eval "$1=\`echo \$$1 | sed \"s,^$prefixexp,$prefix,\"\`";;
6297 esac'
6298
6299 : determine where public architecture dependent libraries go
6300 set archlib archlib
6301 eval $prefixit
6302 : privlib default is /usr/local/lib/$package/$version
6303 : archlib default is /usr/local/lib/$package/$version/$archname
6304 : privlib may have an optional trailing /share.
6305 tdflt=`echo $privlib | $sed 's,/share$,,'`
6306 tdflt=$tdflt/$archname
6307 case "$archlib" in
6308 '')     dflt=$tdflt
6309         ;;
6310 *)      dflt="$archlib"
6311     ;;
6312 esac
6313 $cat <<EOM
6314
6315 $spackage contains architecture-dependent library files.  If you are
6316 sharing libraries in a heterogeneous environment, you might store
6317 these files in a separate location.  Otherwise, you can just include
6318 them with the rest of the public library files.
6319
6320 EOM
6321 fn=d+~
6322 rp='Where do you want to put the public architecture-dependent libraries?'
6323 . ./getfile
6324 archlib="$ans"
6325 archlibexp="$ansexp"
6326 if $test X"$archlib" = X"$privlib"; then
6327         d_archlib="$undef"
6328 else
6329         d_archlib="$define"
6330 fi
6331 : Change installation prefix, if necessary.
6332 if $test X"$prefix" != X"$installprefix"; then
6333         installarchlib=`echo $archlibexp | sed "s#^$prefix#$installprefix#"`
6334 else
6335         installarchlib="$archlibexp"
6336 fi
6337
6338
6339 : Binary compatibility with 5.005 is not possible for builds
6340 : with advanced features
6341 case "$usethreads$usemultiplicity" in
6342 *define*)
6343         bincompat5005="$undef"
6344         d_bincompat5005="$undef"
6345         ;;
6346 *)      $cat <<EOM
6347
6348 This version of Perl can be compiled for binary compatibility with 5.005.
6349 If you decide to do so, you will be able to continue using most of the
6350 extensions that were compiled for Perl 5.005.
6351
6352 EOM
6353         case "$bincompat5005$d_bincompat5005" in
6354         *"$undef"*) dflt=n ;;
6355         *) dflt=y ;;
6356         esac
6357         rp='Binary compatibility with Perl 5.005?'
6358         . ./myread
6359         case "$ans" in
6360         y*) val="$define" ;;
6361         *)  val="$undef" ;;
6362         esac
6363         set d_bincompat5005
6364         eval $setvar
6365         case "$d_bincompat5005" in
6366         "$define")
6367                 bincompat5005="$define"
6368                 ;;
6369         *)      bincompat5005="$undef"
6370                 d_bincompat5005="$undef"
6371                 ;;
6372         esac
6373         ;;
6374 esac
6375
6376
6377 : see if setuid scripts can be secure
6378 $cat <<EOM
6379
6380 Some kernels have a bug that prevents setuid #! scripts from being
6381 secure.  Some sites have disabled setuid #! scripts because of this.
6382
6383 First let's decide if your kernel supports secure setuid #! scripts.
6384 (If setuid #! scripts would be secure but have been disabled anyway,
6385 don't say that they are secure if asked.)
6386
6387 EOM
6388
6389 val="$undef"
6390 if $test -d /dev/fd; then
6391         echo "#!$ls" >reflect
6392         chmod +x,u+s reflect
6393         ./reflect >flect 2>&1
6394         if $contains "/dev/fd" flect >/dev/null; then
6395                 echo "Congratulations, your kernel has secure setuid scripts!" >&4
6396                 val="$define"
6397         else
6398                 $cat <<EOM
6399 If you are not sure if they are secure, I can check but I'll need a
6400 username and password different from the one you are using right now.
6401 If you don't have such a username or don't want me to test, simply
6402 enter 'none'.
6403
6404 EOM
6405                 rp='Other username to test security of setuid scripts with?'
6406                 dflt='none'
6407                 . ./myread
6408                 case "$ans" in
6409                 n|none)
6410                         case "$d_suidsafe" in
6411                         '')     echo "I'll assume setuid scripts are *not* secure." >&4
6412                                 dflt=n;;
6413                         "$undef")
6414                                 echo "Well, the $hint value is *not* secure." >&4
6415                                 dflt=n;;
6416                         *)      echo "Well, the $hint value *is* secure." >&4
6417                                 dflt=y;;
6418                         esac
6419                         ;;
6420                 *)
6421                         $rm -f reflect flect
6422                         echo "#!$ls" >reflect
6423                         chmod +x,u+s reflect
6424                         echo >flect
6425                         chmod a+w flect
6426                         echo '"su" will (probably) prompt you for '"$ans's password."
6427                         su $ans -c './reflect >flect'
6428                         if $contains "/dev/fd" flect >/dev/null; then
6429                                 echo "Okay, it looks like setuid scripts are secure." >&4
6430                                 dflt=y
6431                         else
6432                                 echo "I don't think setuid scripts are secure." >&4
6433                                 dflt=n
6434                         fi
6435                         ;;
6436                 esac
6437                 rp='Does your kernel have *secure* setuid scripts?'
6438                 . ./myread
6439                 case "$ans" in
6440                 [yY]*)  val="$define";;
6441                 *)      val="$undef";;
6442                 esac
6443         fi
6444 else
6445         echo "I don't think setuid scripts are secure (no /dev/fd directory)." >&4
6446         echo "(That's for file descriptors, not floppy disks.)"
6447         val="$undef"
6448 fi
6449 set d_suidsafe
6450 eval $setvar
6451
6452 $rm -f reflect flect
6453
6454 : now see if they want to do setuid emulation
6455 echo " "
6456 val="$undef"
6457 case "$d_suidsafe" in
6458 "$define")
6459         val="$undef"
6460         echo "No need to emulate SUID scripts since they are secure here." >& 4
6461         ;;
6462 *)
6463         $cat <<EOM
6464 Some systems have disabled setuid scripts, especially systems where
6465 setuid scripts cannot be secure.  On systems where setuid scripts have
6466 been disabled, the setuid/setgid bits on scripts are currently
6467 useless.  It is possible for $package to detect those bits and emulate
6468 setuid/setgid in a secure fashion.  This emulation will only work if
6469 setuid scripts have been disabled in your kernel.
6470
6471 EOM
6472         case "$d_dosuid" in
6473         "$define") dflt=y ;;
6474         *) dflt=n ;;
6475         esac
6476         rp="Do you want to do setuid/setgid emulation?"
6477         . ./myread
6478         case "$ans" in
6479         [yY]*)  val="$define";;
6480         *)      val="$undef";;
6481         esac
6482         ;;
6483 esac
6484 set d_dosuid
6485 eval $setvar
6486
6487 : see if this is a malloc.h system
6488 set malloc.h i_malloc
6489 eval $inhdr
6490
6491 : see if stdlib is available
6492 set stdlib.h i_stdlib
6493 eval $inhdr
6494
6495 : determine which malloc to compile in
6496 echo " "
6497 case "$usemymalloc" in
6498 [yY]*|true|$define)     dflt='y' ;;
6499 [nN]*|false|$undef)     dflt='n' ;;
6500 *)      case "$ptrsize" in
6501         4) dflt='y' ;;
6502         *) dflt='n' ;;
6503         esac
6504         ;;
6505 esac
6506 rp="Do you wish to attempt to use the malloc that comes with $package?"
6507 . ./myread
6508 usemymalloc="$ans"
6509 case "$ans" in
6510 y*|true)
6511         usemymalloc='y'
6512         mallocsrc='malloc.c'
6513         mallocobj="malloc$_o"
6514         d_mymalloc="$define"
6515         case "$libs" in
6516         *-lmalloc*)
6517                 : Remove malloc from list of libraries to use
6518                 echo "Removing unneeded -lmalloc from library list" >&4
6519                 set `echo X $libs | $sed -e 's/-lmalloc / /' -e 's/-lmalloc$//'`
6520                 shift
6521                 libs="$*"
6522                 echo "libs = $libs" >&4
6523                 ;;
6524         esac
6525         ;;
6526 *)
6527         usemymalloc='n'
6528         mallocsrc=''
6529         mallocobj=''
6530         d_mymalloc="$undef"
6531         ;;
6532 esac
6533
6534 : compute the return types of malloc and free
6535 echo " "
6536 $cat >malloc.c <<END
6537 #$i_malloc I_MALLOC
6538 #$i_stdlib I_STDLIB
6539 #include <stdio.h>
6540 #include <sys/types.h>
6541 #ifdef I_MALLOC
6542 #include <malloc.h>
6543 #endif
6544 #ifdef I_STDLIB
6545 #include <stdlib.h>
6546 #endif
6547 #ifdef TRY_MALLOC
6548 void *malloc();
6549 #endif
6550 #ifdef TRY_FREE
6551 void free();
6552 #endif
6553 END
6554 case "$malloctype" in
6555 '')
6556         if $cc $ccflags -c -DTRY_MALLOC malloc.c >/dev/null 2>&1; then
6557                 malloctype='void *'
6558         else
6559                 malloctype='char *'
6560         fi
6561         ;;
6562 esac
6563 echo "Your system wants malloc to return '$malloctype', it would seem." >&4
6564
6565 case "$freetype" in
6566 '')
6567         if $cc $ccflags -c -DTRY_FREE malloc.c >/dev/null 2>&1; then
6568                 freetype='void'
6569         else
6570                 freetype='int'
6571         fi
6572         ;;
6573 esac
6574 echo "Your system uses $freetype free(), it would seem." >&4
6575 $rm -f malloc.[co]
6576 $cat <<EOM
6577
6578 After $package is installed, you may wish to install various
6579 add-on modules and utilities.  Typically, these add-ons will
6580 be installed under $prefix with the rest
6581 of this package.  However, you may wish to install such add-ons
6582 elsewhere under a different prefix.
6583
6584 If you do not wish to put everything under a single prefix, that's
6585 ok.  You will be prompted for the individual locations; this siteprefix
6586 is only used to suggest the defaults.
6587
6588 The default should be fine for most people.
6589
6590 EOM
6591 fn=d~+
6592 rp='Installation prefix to use for add-on modules and utilities?'
6593 : XXX Here might be another good place for an installstyle setting.
6594 case "$siteprefix" in
6595 '') dflt=$prefix ;;
6596 *)  dflt=$siteprefix ;;
6597 esac
6598 . ./getfile
6599 : XXX Prefixit unit does not yet support siteprefix and vendorprefix
6600 oldsiteprefix=''
6601 case "$siteprefix" in
6602 '') ;;
6603 *)      case "$ans" in
6604         "$prefix") ;;
6605         *) oldsiteprefix="$prefix";;
6606         esac
6607         ;;
6608 esac
6609 siteprefix="$ans"
6610 siteprefixexp="$ansexp"
6611
6612 : determine where site specific libraries go.
6613 : Usual default is /usr/local/lib/perl5/site_perl/$version
6614 : The default "style" setting is made in installstyle.U
6615 : XXX No longer works with Prefixit stuff.
6616 prog=`echo $package | $sed 's/-*[0-9.]*$//'`
6617 case "$sitelib" in
6618 '') case "$installstyle" in
6619         *lib/perl5*) dflt=$siteprefix/lib/$package/site_$prog/$version ;;
6620         *)       dflt=$siteprefix/lib/site_$prog/$version ;;
6621         esac
6622         ;;
6623 *)      dflt="$sitelib"
6624         ;;
6625 esac
6626 $cat <<EOM
6627
6628 The installation process will create a directory for
6629 site-specific extensions and modules.  Most users find it convenient
6630 to place all site-specific files in this directory rather than in the
6631 main distribution directory.
6632
6633 EOM
6634 fn=d~+
6635 rp='Pathname for the site-specific library files?'
6636 . ./getfile
6637 sitelib="$ans"
6638 sitelibexp="$ansexp"
6639 sitelib_stem=`echo "$sitelibexp" | sed "s,/$version$,,"`
6640 : Change installation prefix, if necessary.
6641 if $test X"$prefix" != X"$installprefix"; then
6642         installsitelib=`echo $sitelibexp | $sed "s#^$prefix#$installprefix#"`
6643 else
6644         installsitelib="$sitelibexp"
6645 fi
6646
6647 : determine where site specific architecture-dependent libraries go.
6648 : sitelib  default is /usr/local/lib/perl5/site_perl/$version
6649 : sitearch default is /usr/local/lib/perl5/site_perl/$version/$archname
6650 : sitelib may have an optional trailing /share.
6651 case "$sitearch" in
6652 '')     dflt=`echo $sitelib | $sed 's,/share$,,'`
6653         dflt="$dflt/$archname"
6654         ;;
6655 *)      dflt="$sitearch"
6656         ;;
6657 esac
6658 set sitearch sitearch none
6659 eval $prefixit
6660 $cat <<EOM
6661
6662 The installation process will also create a directory for
6663 architecture-dependent site-specific extensions and modules.
6664
6665 EOM
6666 fn=d~+
6667 rp='Pathname for the site-specific architecture-dependent library files?'
6668 . ./getfile
6669 sitearch="$ans"
6670 sitearchexp="$ansexp"
6671 : Change installation prefix, if necessary.
6672 if $test X"$prefix" != X"$installprefix"; then
6673         installsitearch=`echo $sitearchexp | sed "s#^$prefix#$installprefix#"`
6674 else
6675         installsitearch="$sitearchexp"
6676 fi
6677
6678 $cat <<EOM
6679
6680 The installation process will also create a directory for
6681 vendor-supplied add-ons.  Vendors who supply perl with their system
6682 may find it convenient to place all vendor-supplied files in this
6683 directory rather than in the main distribution directory.  This will
6684 ease upgrades between binary-compatible maintenance versions of perl.
6685
6686 Of course you may also use these directories in whatever way you see
6687 fit.  For example, you might use them to access modules shared over a
6688 company-wide network.
6689
6690 The default answer should be fine for most people.
6691 This causes further questions about vendor add-ons to be skipped
6692 and no vendor-specific directories will be configured for perl.
6693
6694 EOM
6695 rp='Do you want to configure vendor-specific add-on directories?'
6696 case "$usevendorprefix" in
6697 define|true|[yY]*) dflt=y ;;
6698 *)      : User may have set vendorprefix directly on Configure command line.
6699         case "$vendorprefix" in
6700         ''|' ') dflt=n ;;
6701         *)      dflt=y ;;
6702         esac
6703         ;;
6704 esac
6705 . ./myread
6706 case "$ans" in
6707 [yY]*)  fn=d~+
6708         rp='Installation prefix to use for vendor-supplied add-ons?'
6709         case "$vendorprefix" in
6710         '') dflt='' ;;
6711         *)  dflt=$vendorprefix ;;
6712         esac
6713         . ./getfile
6714         : XXX Prefixit unit does not yet support siteprefix and vendorprefix
6715         oldvendorprefix=''
6716         case "$vendorprefix" in
6717         '') ;;
6718         *)      case "$ans" in
6719                 "$prefix") ;;
6720                 *) oldvendorprefix="$prefix";;
6721                 esac
6722                 ;;
6723         esac
6724         usevendorprefix="$define"
6725         vendorprefix="$ans"
6726         vendorprefixexp="$ansexp"
6727         ;;
6728 *)      usevendorprefix="$undef"
6729         vendorprefix=''
6730         vendorprefixexp=''
6731         ;;
6732 esac
6733
6734 case "$vendorprefix" in
6735 '')     d_vendorlib="$undef"
6736         vendorlib=''
6737         vendorlibexp=''
6738         ;;
6739 *)      d_vendorlib="$define"
6740         : determine where vendor-supplied modules go.
6741         : Usual default is /usr/local/lib/perl5/vendor_perl/$version
6742         case "$vendorlib" in
6743         '')
6744                 prog=`echo $package | $sed 's/-*[0-9.]*$//'`
6745                 case "$installstyle" in
6746                 *lib/perl5*) dflt=$vendorprefix/lib/$package/vendor_$prog/$version ;;
6747                 *)           dflt=$vendorprefix/lib/vendor_$prog/$version ;;
6748                 esac
6749                 ;;
6750         *)      dflt="$vendorlib"
6751                 ;;
6752         esac
6753         fn=d~+
6754         rp='Pathname for the vendor-supplied library files?'
6755         . ./getfile
6756         vendorlib="$ans"
6757         vendorlibexp="$ansexp"
6758         ;;
6759 esac
6760 vendorlib_stem=`echo "$vendorlibexp" | sed "s,/$version$,,"`
6761 : Change installation prefix, if necessary.
6762 if $test X"$prefix" != X"$installprefix"; then
6763         installvendorlib=`echo $vendorlibexp | $sed "s#^$prefix#$installprefix#"`
6764 else
6765         installvendorlib="$vendorlibexp"
6766 fi
6767
6768 case "$vendorprefix" in
6769 '')     d_vendorarch="$undef"
6770         vendorarch=''
6771         vendorarchexp=''
6772         ;;
6773 *)      d_vendorarch="$define"
6774         : determine where vendor-supplied architecture-dependent libraries go.
6775         : vendorlib  default is /usr/local/lib/perl5/vendor_perl/$version
6776         : vendorarch default is /usr/local/lib/perl5/vendor_perl/$version/$archname
6777         : vendorlib may have an optional trailing /share.
6778         case "$vendorarch" in
6779         '')     dflt=`echo $vendorlib | $sed 's,/share$,,'`
6780                 dflt="$dflt/$archname"
6781                 ;;
6782         *)      dflt="$vendorarch" ;;
6783         esac
6784         fn=d~+
6785         rp='Pathname for vendor-supplied architecture-dependent files?'
6786         . ./getfile
6787         vendorarch="$ans"
6788         vendorarchexp="$ansexp"
6789         ;;
6790 esac
6791 : Change installation prefix, if necessary.
6792 if $test X"$prefix" != X"$installprefix"; then
6793         installvendorarch=`echo $vendorarchexp | sed "s#^$prefix#$installprefix#"`
6794 else
6795         installvendorarch="$vendorarchexp"
6796 fi
6797
6798 : Final catch-all directories to search
6799 $cat <<EOM
6800
6801 Lastly, you can have perl look in other directories for extensions and
6802 modules in addition to those already specified.
6803 These directories will be searched after 
6804         $sitearch 
6805         $sitelib 
6806 EOM
6807 test X"$vendorlib" != "X" && echo '     ' $vendorlib
6808 test X"$vendorarch" != "X" && echo '    ' $vendorarch
6809 echo ' '
6810 case "$otherlibdirs" in
6811 ''|' ') dflt='none' ;;
6812 *)      dflt="$otherlibdirs" ;;
6813 esac
6814 $cat <<EOM
6815 Enter a colon-separated set of extra paths to include in perl's @INC
6816 search path, or enter 'none' for no extra paths.
6817
6818 EOM
6819
6820 rp='Colon-separated list of additional directories for perl to search?'
6821 . ./myread
6822 case "$ans" in
6823 ' '|''|none)    otherlibdirs=' ' ;;     
6824 *)      otherlibdirs="$ans" ;;
6825 esac
6826 case "$otherlibdirs" in
6827 ' ') val=$undef ;;
6828 *)      val=$define ;;
6829 esac
6830 set d_perl_otherlibdirs
6831 eval $setvar
6832
6833 : Cruising for prototypes
6834 echo " "
6835 echo "Checking out function prototypes..." >&4
6836 $cat >prototype.c <<'EOCP'
6837 int main(int argc, char *argv[]) {
6838         exit(0);}
6839 EOCP
6840 if $cc $ccflags -c prototype.c >prototype.out 2>&1 ; then
6841         echo "Your C compiler appears to support function prototypes."
6842         val="$define"
6843 else
6844         echo "Your C compiler doesn't seem to understand function prototypes."
6845         val="$undef"
6846 fi
6847 set prototype
6848 eval $setvar
6849 $rm -f prototype*
6850
6851 case "$prototype" in
6852 "$define") ;;
6853 *)      ansi2knr='ansi2knr'
6854         echo " "
6855         cat <<EOM >&4
6856
6857 $me:  FATAL ERROR:
6858 This version of $package can only be compiled by a compiler that 
6859 understands function prototypes.  Unfortunately, your C compiler 
6860         $cc $ccflags
6861 doesn't seem to understand them.  Sorry about that.
6862
6863 If GNU cc is available for your system, perhaps you could try that instead.  
6864
6865 Eventually, we hope to support building Perl with pre-ANSI compilers.
6866 If you would like to help in that effort, please contact <perlbug@perl.org>.
6867
6868 Aborting Configure now.
6869 EOM
6870         exit 2
6871         ;;
6872 esac
6873
6874 : determine where public executables go
6875 echo " "
6876 set dflt bin bin
6877 eval $prefixit
6878 fn=d~
6879 rp='Pathname where the public executables will reside?'
6880 . ./getfile
6881 if $test "X$ansexp" != "X$binexp"; then
6882         installbin=''
6883 fi
6884 bin="$ans"
6885 binexp="$ansexp"
6886 : Change installation prefix, if necessary.
6887 : XXX Bug? -- ignores Configure -Dinstallprefix setting.
6888 if $test X"$prefix" != X"$installprefix"; then
6889         installbin=`echo $binexp | sed "s#^$prefix#$installprefix#"`
6890 else
6891         installbin="$binexp"
6892 fi
6893
6894 : Find perl5.005 or later.
6895 echo "Looking for a previously installed perl5.005 or later... "
6896 case "$perl5" in
6897 '')     for tdir in `echo "$binexp$path_sep$PATH" | $sed "s/$path_sep/ /g"`; do
6898                 : Check if this perl is recent and can load a simple module
6899                 if $test -x $tdir/perl$exe_ext && $tdir/perl -Mless -e 'use 5.005;' >/dev/null 2>&1; then
6900                         perl5=$tdir/perl
6901                         break;
6902                 elif $test -x $tdir/perl5$exe_ext && $tdir/perl5 -Mless -e 'use 5.005;' >/dev/null 2>&1; then
6903                         perl5=$tdir/perl5
6904                         break;
6905                 fi
6906         done
6907         ;;
6908 *)      perl5="$perl5"
6909         ;;
6910 esac
6911 case "$perl5" in
6912 '')     echo "None found.  That's ok.";;
6913 *)      echo "Using $perl5." ;;
6914 esac
6915
6916 : Determine list of previous versions to include in @INC
6917 $cat > getverlist <<EOPL
6918 #!$perl5 -w
6919 use File::Basename;
6920 \$api_versionstring = "$api_versionstring";
6921 \$version = "$version";
6922 \$stem = "$sitelib_stem";
6923 \$archname = "$archname";
6924 EOPL
6925         $cat >> getverlist <<'EOPL'
6926 # Can't have leading @ because metaconfig interprets it as a command!
6927 ;@inc_version_list=();
6928 # XXX Redo to do opendir/readdir? 
6929 if (-d $stem) {
6930     chdir($stem);
6931     ;@candidates = glob("5.*");
6932 }
6933 else {
6934     ;@candidates = ();
6935 }
6936
6937 # XXX ToDo:  These comparisons must be reworked when two-digit
6938 # subversions come along, so that 5.7.10 compares as greater than
6939 # 5.7.3!  By that time, hope that 5.6.x is sufficiently
6940 # widespread that we can use the built-in version vectors rather
6941 # than reinventing them here.  For 5.6.0, however, we must
6942 # assume this script will likely be run by 5.005_0x.  --AD 1/2000.
6943 foreach $d (@candidates) {
6944     if ($d lt $version) {
6945         if ($d ge $api_versionstring) {
6946             unshift(@inc_version_list, grep { -d } "$d/$archname", $d);
6947         }
6948         elsif ($d ge "5.005") {
6949             unshift(@inc_version_list, grep { -d } $d);
6950         }
6951     }
6952     else {
6953         # Skip newer version.  I.e. don't look in
6954         # 5.7.0 if we're installing 5.6.1.
6955     }
6956 }
6957
6958 if (@inc_version_list) {
6959     print join(' ', @inc_version_list);
6960 }
6961 else {
6962     # Blank space to preserve value for next Configure run.
6963     print " ";
6964 }
6965 EOPL
6966 chmod +x getverlist
6967 case "$inc_version_list" in
6968 '')     if test -x "$perl5$exe_ext"; then
6969                 dflt=`$perl5 getverlist`
6970         else
6971                 dflt='none'
6972         fi
6973         ;;
6974 $undef) dflt='none' ;;
6975 *)  eval dflt=\"$inc_version_list\" ;;
6976 esac
6977 case "$dflt" in
6978 ''|' ') dflt=none ;;
6979 esac
6980 case "$dflt" in
6981 5.005) case "$bincompat5005" in
6982        $define|true|[yY]*) ;;
6983        *) dflt=none ;;
6984        esac
6985        ;;
6986 esac
6987 $cat <<'EOM'
6988
6989 In order to ease the process of upgrading, this version of perl 
6990 can be configured to use modules built and installed with earlier 
6991 versions of perl that were installed under $prefix.  Specify here
6992 the list of earlier versions that this version of perl should check.
6993 If Configure detected no earlier versions of perl installed under
6994 $prefix, then the list will be empty.  Answer 'none' to tell perl
6995 to not search earlier versions.
6996
6997 The default should almost always be sensible, so if you're not sure,
6998 just accept the default.
6999 EOM
7000
7001 rp='List of earlier versions to include in @INC?'
7002 . ./myread
7003 case "$ans" in
7004 [Nn]one|''|' ') inc_version_list=' ' ;;
7005 *) inc_version_list="$ans" ;;
7006 esac
7007 case "$inc_version_list" in
7008 ''|' ') 
7009         inc_version_list_init='0';;
7010 *)      inc_version_list_init=`echo $inc_version_list |
7011                 $sed -e 's/^/"/' -e 's/ /","/g' -e 's/$/",0/'`
7012         ;;
7013 esac
7014 $rm -f getverlist
7015
7016 : determine whether to install perl also as /usr/bin/perl
7017
7018 echo " "
7019 if $test -d /usr/bin -a "X$installbin" != X/usr/bin; then
7020         $cat <<EOM
7021 Many scripts expect perl to be installed as /usr/bin/perl.
7022 I can install the perl you are about to compile also as /usr/bin/perl
7023 (in addition to $installbin/perl).
7024 EOM
7025         case "$installusrbinperl" in
7026         "$undef"|[nN]*) dflt='n';;
7027         *)              dflt='y';;
7028         esac
7029         rp="Do you want to install perl as /usr/bin/perl?"
7030         . ./myread
7031         case "$ans" in
7032         [yY]*)  val="$define";;
7033         *)      val="$undef" ;;
7034         esac
7035 else
7036         val="$undef"
7037 fi
7038 set installusrbinperl
7039 eval $setvar
7040
7041 : see if dld is available
7042 set dld.h i_dld
7043 eval $inhdr
7044
7045 : see if dlopen exists
7046 xxx_runnm="$runnm"
7047 runnm=false
7048 set dlopen d_dlopen
7049 eval $inlibc
7050 runnm="$xxx_runnm"
7051
7052 : determine which dynamic loading, if any, to compile in
7053 echo " "
7054 dldir="ext/DynaLoader"
7055 case "$usedl" in
7056 $define|y|true)
7057         dflt='y'
7058         usedl="$define"
7059         ;;
7060 $undef|n|false)
7061         dflt='n'
7062         usedl="$undef"
7063         ;;
7064 *) 
7065         dflt='n'
7066         case "$d_dlopen" in
7067             $define) dflt='y' ;;
7068         esac
7069         case "$i_dld" in
7070             $define) dflt='y' ;;
7071         esac
7072         : Does a dl_xxx.xs file exist for this operating system
7073         $test -f $rsrc/$dldir/dl_${osname}.xs && dflt='y'
7074         ;;
7075 esac
7076 rp="Do you wish to use dynamic loading?"
7077 . ./myread
7078 usedl="$ans"
7079 case "$ans" in
7080 y*) usedl="$define"
7081         case "$dlsrc" in
7082         '')
7083                 if $test -f $rsrc/$dldir/dl_${osname}.xs ; then
7084                         dflt="$dldir/dl_${osname}.xs"
7085                 elif $test "$d_dlopen" = "$define" ; then
7086                         dflt="$dldir/dl_dlopen.xs"
7087                 elif $test "$i_dld" = "$define" ; then
7088                         dflt="$dldir/dl_dld.xs"
7089                 else
7090                         dflt=''
7091                 fi
7092                 ;;
7093         *)      dflt="$dldir/$dlsrc"
7094                 ;;
7095         esac
7096     echo "The following dynamic loading files are available:"
7097         : Can not go over to $dldir because getfile has path hard-coded in.
7098         tdir=`pwd`; cd $rsrc; $ls -C $dldir/dl*.xs; cd $tdir
7099         rp="Source file to use for dynamic loading"
7100         fn="fne"
7101         gfpth="$src"
7102         . ./getfile
7103         usedl="$define"
7104         : emulate basename
7105         dlsrc=`echo $ans | $sed -e 's%.*/\([^/]*\)$%\1%'`
7106
7107         $cat << EOM
7108
7109 Some systems may require passing special flags to $cc -c to
7110 compile modules that will be used to create a shared library.
7111 To use no flags, say "none".
7112
7113 EOM
7114     case "$cccdlflags" in
7115     '') case "$gccversion" in
7116                 '') case "$osname" in
7117                         hpux)   dflt='+z' ;;
7118                         next)   dflt='none' ;;
7119                         irix*)  dflt='-KPIC' ;;
7120                         svr4*|esix*|solaris|nonstopux) dflt='-KPIC' ;;
7121                         sunos)  dflt='-pic' ;;
7122                         *)      dflt='none' ;;
7123                     esac
7124                         ;;
7125                 *)  case "$osname" in
7126                         svr4*|esix*|solaris|nonstopux) dflt='-fPIC' ;;
7127                         *)      dflt='-fpic' ;;
7128                     esac ;;
7129             esac ;;
7130         ' ') dflt='none' ;;
7131     *)  dflt="$cccdlflags" ;;
7132     esac
7133     rp="Any special flags to pass to $cc -c to compile shared library modules?"
7134     . ./myread
7135     case "$ans" in
7136     none) cccdlflags=' ' ;;
7137     *) cccdlflags="$ans" ;;
7138     esac
7139
7140     cat << EOM
7141
7142 Some systems use ld to create libraries that can be dynamically loaded,
7143 while other systems (such as those using ELF) use $cc.
7144
7145 EOM
7146         case "$ld" in
7147         '')     $cat >try.c <<'EOM'
7148 /* Test for whether ELF binaries are produced */
7149 #include <fcntl.h>
7150 #include <stdlib.h>
7151 int main() {
7152         char b[4];
7153         int i = open("a.out",O_RDONLY);
7154         if(i == -1) 
7155                 exit(1); /* fail */
7156         if(read(i,b,4)==4 && b[0]==127 && b[1]=='E' && b[2]=='L' && b[3]=='F')
7157                 exit(0); /* succeed (yes, it's ELF) */
7158         else
7159                 exit(1); /* fail */
7160 }
7161 EOM
7162                 if $cc $ccflags $ldflags try.c >/dev/null 2>&1 && $run ./a.out; then
7163                         cat <<EOM
7164 You appear to have ELF support.  I'll use $cc to build dynamic libraries.
7165 EOM
7166                         dflt="$cc"
7167                 else
7168                         echo "I'll use ld to build dynamic libraries."
7169                         dflt='ld'
7170                 fi
7171                 rm -f try.c a.out
7172                 ;;
7173         *)      dflt="$ld"
7174                 ;;
7175         esac
7176
7177     rp="What command should be used to create dynamic libraries?"
7178     . ./myread
7179         ld="$ans"
7180
7181     cat << EOM
7182
7183 Some systems may require passing special flags to $ld to create a
7184 library that can be dynamically loaded.  If your ld flags include
7185 -L/other/path options to locate libraries outside your loader's normal
7186 search path, you may need to specify those -L options here as well.  To
7187 use no flags, say "none".
7188
7189 EOM
7190     case "$lddlflags" in
7191     '') case "$osname" in
7192                         beos) dflt='-nostart' ;;
7193                         hpux) dflt='-b';
7194                               case "$gccversion" in
7195                               '') dflt="$dflt +vnocompatwarnings" ;;
7196                               esac
7197                               ;;        
7198                         linux|irix*)    dflt='-shared' ;;
7199                         next)  dflt='none' ;;
7200                         solaris) dflt='-G' ;;
7201                         sunos) dflt='-assert nodefinitions' ;;
7202                         svr4*|esix*|nonstopux) dflt="-G $ldflags" ;;
7203                 *)     dflt='none' ;;
7204                         esac
7205                         ;;
7206     *) dflt="$lddlflags" ;;
7207     esac
7208
7209         : Try to guess additional flags to pick up local libraries.
7210         : Be careful not to append to a plain 'none'
7211         case "$dflt" in
7212         none) dflt='' ;;
7213         esac
7214         for thisflag in $ldflags; do
7215                 case "$thisflag" in
7216                 -L*|-R*)
7217                         case " $dflt " in
7218                         *" $thisflag "*) ;;
7219                         *) dflt="$dflt $thisflag" ;;
7220                         esac
7221                         ;;
7222                 esac
7223         done
7224
7225         case "$dflt" in
7226         ''|' ') dflt='none' ;;
7227         esac
7228
7229     rp="Any special flags to pass to $ld to create a dynamically loaded library?"
7230     . ./myread
7231     case "$ans" in
7232     none) lddlflags=' ' ;;
7233     *) lddlflags="$ans" ;;
7234     esac
7235
7236         cat <<EOM
7237
7238 Some systems may require passing special flags to $cc to indicate that
7239 the resulting executable will use dynamic linking.  To use no flags,
7240 say "none".
7241
7242 EOM
7243     case "$ccdlflags" in
7244     '') case "$osname" in
7245                 hpux)   dflt='-Wl,-E' ;;
7246                 linux)  dflt='-rdynamic' ;;
7247                 next)   dflt='none' ;;
7248                 sunos)  dflt='none' ;;
7249                 *)      dflt='none' ;;
7250             esac ;;
7251     ' ')  dflt='none' ;;
7252     *)  dflt="$ccdlflags" ;;
7253     esac
7254     rp="Any special flags to pass to $cc to use dynamic linking?"
7255     . ./myread
7256     case "$ans" in
7257     none) ccdlflags=' ' ;;
7258     *) ccdlflags="$ans" ;;
7259     esac
7260     ;;
7261 *)  usedl="$undef"
7262         ld='ld'
7263     dlsrc='dl_none.xs'
7264     lddlflags=''
7265     ccdlflags=''
7266     ;;
7267 esac
7268
7269 also=''
7270 case "$usedl" in
7271 $undef)
7272         # No dynamic loading being used, so don't bother even to prompt.
7273         useshrplib='false'
7274         ;;
7275 *)      case "$useshrplib" in
7276         '')     case "$osname" in
7277                 svr4*|nonstopux|dgux|dynixptx|esix|powerux|beos|cygwin*)
7278                         dflt=y
7279                         also='Building a shared libperl is required for dynamic loading to work on your system.'
7280                         ;;
7281                 next*)
7282                         case "$osvers" in
7283                         4*)     dflt=y
7284                                 also='Building a shared libperl is needed for MAB support.'
7285                                 ;;
7286                         *)      dflt=n
7287                                 ;;
7288                         esac
7289                         ;;
7290                 *)      dflt=n
7291                         ;;
7292                 esac
7293                 ;;
7294         $define|true|[Yy]*)
7295                 dflt=y
7296                 ;;
7297         *)      dflt=n
7298                 ;;
7299         esac
7300         $cat << EOM
7301
7302 The perl executable is normally obtained by linking perlmain.c with
7303 libperl${_a}, any static extensions (usually just DynaLoader), and
7304 any other libraries needed on this system (such as -lm, etc.).  Since
7305 your system supports dynamic loading, it is probably possible to build
7306 a shared libperl.$so.  If you will have more than one executable linked
7307 to libperl.$so, this will significantly reduce the size of each
7308 executable, but it may have a noticeable affect on performance.  The
7309 default is probably sensible for your system.
7310 $also
7311
7312 EOM
7313         rp="Build a shared libperl.$so (y/n)"
7314         . ./myread
7315         case "$ans" in
7316         true|$define|[Yy]*)
7317                 useshrplib='true'  ;;
7318         *)      useshrplib='false' ;;
7319         esac
7320         ;;
7321 esac
7322
7323 case "$useshrplib" in
7324 true)
7325         case "$libperl" in
7326         '')
7327                 # Figure out a good name for libperl.so.  Since it gets stored in
7328                 # a version-specific architecture-dependent library, the version
7329                 # number isn't really that important, except for making cc/ld happy.
7330                 #
7331                 # A name such as libperl.so.3.1
7332                 majmin="libperl.$so.$patchlevel.$subversion"
7333                 # A name such as libperl.so.301
7334                 majonly=`echo $patchlevel $subversion |
7335                         $awk '{printf "%d%02d", $1, $2}'`
7336                 majonly=libperl.$so.$majonly
7337                 # I'd prefer to keep the os-specific stuff here to a minimum, and
7338                 # rely on figuring it out from the naming of libc.
7339                 case "${osname}${osvers}" in
7340                 next4*)
7341                         dflt=libperl.5.$so
7342                         # XXX How handle the --version stuff for MAB?
7343                         ;;
7344                 linux*)  # ld won't link with a bare -lperl otherwise.
7345                         dflt=libperl.$so
7346                         ;;
7347                 cygwin*) # include version
7348                         dflt=`echo libperl$version | sed -e 's/\./_/g'`$lib_ext
7349                         ;;
7350                 *)      # Try to guess based on whether libc has major.minor.
7351                         case "$libc" in
7352                         *libc.$so.[0-9]*.[0-9]*) dflt=$majmin ;;
7353                         *libc.$so.[0-9]*) dflt=$majonly ;;
7354                         *)      dflt=libperl.$so ;;
7355                         esac
7356                         ;;
7357                 esac
7358                 ;;
7359         *)      dflt=$libperl
7360                 ;;
7361         esac
7362         cat << EOM
7363
7364 I need to select a good name for the shared libperl.  If your system uses
7365 library names with major and minor numbers, then you might want something
7366 like $majmin.  Alternatively, if your system uses a single version
7367 number for shared libraries, then you might want to use $majonly.
7368 Or, your system might be quite happy with a simple libperl.$so.
7369
7370 Since the shared libperl will get installed into a version-specific
7371 architecture-dependent directory, the version number of the shared perl
7372 library probably isn't important, so the default should be o.k.
7373
7374 EOM
7375         rp='What name do you want to give to the shared libperl?'
7376         . ./myread
7377         libperl=$ans
7378         echo "Ok, I'll use $libperl"
7379         ;;
7380 *)
7381         libperl="libperl${_a}"
7382         ;;
7383 esac
7384
7385 # Detect old use of shrpdir via undocumented Configure -Dshrpdir
7386 case "$shrpdir" in
7387 '') ;;
7388 *)      $cat >&4 <<EOM
7389 WARNING:  Use of the shrpdir variable for the installation location of
7390 the shared $libperl is not supported.  It was never documented and
7391 will not work in this version.  Let me (perlbug@perl.org)
7392 know of any problems this may cause.
7393
7394 EOM
7395         case "$shrpdir" in
7396         "$archlibexp/CORE")
7397                 $cat >&4 <<EOM
7398 But your current setting of $shrpdir is
7399 the default anyway, so it's harmless.
7400 EOM
7401                 ;;
7402         *)
7403                 $cat >&4 <<EOM
7404 Further, your current attempted setting of $shrpdir
7405 conflicts with the value of $archlibexp/CORE
7406 that installperl will use.
7407 EOM
7408                 ;;
7409         esac
7410         ;;
7411 esac
7412
7413 # How will the perl executable find the installed shared $libperl?
7414 # Add $xxx to ccdlflags.
7415 # If we can't figure out a command-line option, use $shrpenv to
7416 # set env LD_RUN_PATH.  The main perl makefile uses this.
7417 shrpdir=$archlibexp/CORE
7418 xxx=''
7419 tmp_shrpenv=''
7420 if "$useshrplib"; then
7421     case "$osname" in 
7422         aix)
7423                 # We'll set it in Makefile.SH...
7424                 ;;
7425         solaris|netbsd)
7426                 xxx="-R $shrpdir"
7427                 ;;
7428         freebsd)
7429                 xxx="-Wl,-R$shrpdir"
7430                 ;;
7431         linux|irix*|dec_osf)
7432                 xxx="-Wl,-rpath,$shrpdir"
7433                 ;;
7434         next)
7435                 # next doesn't like the default...
7436                 ;;
7437         beos)
7438                 # beos doesn't like the default, either.
7439                 ;;
7440         hpux*)
7441                 # hpux doesn't like the default, either.
7442                 tmp_shrpenv="env LDOPTS=\"+s +b${shrpdir}\""
7443                 ;;
7444         *)
7445                 tmp_shrpenv="env LD_RUN_PATH=$shrpdir"
7446                 ;;
7447         esac
7448         case "$xxx" in
7449         '') ;;
7450         *)      
7451                 # Only add $xxx if it isn't already in ccdlflags.
7452                 case " $ccdlflags " in
7453                 *" $xxx "*)     ;;
7454                 *)      ccdlflags="$ccdlflags $xxx"
7455                         cat <<EOM >&4
7456
7457 Adding $xxx to the flags
7458 passed to $ld so that the perl executable will find the 
7459 installed shared $libperl.
7460
7461 EOM
7462                         ;;
7463                 esac
7464                 ;;
7465         esac
7466 fi
7467 # Fix ccdlflags in AIX for building external extensions.
7468 # (For building Perl itself bare -bE:perl.exp is needed,
7469 #  Makefile.SH takes care of this.)
7470 case "$osname" in
7471 aix) ccdlflags="$ccdlflags -bE:$installarchlib/CORE/perl.exp" ;;
7472 esac
7473 # Respect a hint or command-line value.
7474 case "$shrpenv" in
7475 '') shrpenv="$tmp_shrpenv" ;;
7476 esac
7477 case "$ldlibpthname" in
7478 '')     ldlibpthname=LD_LIBRARY_PATH ;;
7479 none)   ldlibpthname='' ;;
7480 esac
7481
7482 : determine where manual pages are on this system
7483 echo " "
7484 case "$sysman" in
7485 '') 
7486         syspath='/usr/man/man1 /usr/man/mann /usr/man/manl /usr/man/local/man1'
7487         syspath="$syspath /usr/man/u_man/man1 /usr/share/man/man1"
7488         syspath="$syspath /usr/catman/u_man/man1 /usr/man/l_man/man1"
7489         syspath="$syspath /usr/local/man/u_man/man1 /usr/local/man/l_man/man1"
7490         syspath="$syspath /usr/man/man.L /local/man/man1 /usr/local/man/man1"
7491         sysman=`./loc . /usr/man/man1 $syspath`
7492         ;;
7493 esac
7494 if $test -d "$sysman"; then
7495         echo "System manual is in $sysman." >&4
7496 else
7497         echo "Could not find manual pages in source form." >&4
7498 fi
7499
7500 : determine where manual pages go
7501 set man1dir man1dir none
7502 eval $prefixit
7503 $cat <<EOM
7504
7505 $spackage has manual pages available in source form.
7506 EOM
7507 case "$nroff" in
7508 nroff)
7509         echo "However, you don't have nroff, so they're probably useless to you."
7510         case "$man1dir" in
7511         '') man1dir="none";;
7512         esac;;
7513 esac
7514 echo "If you don't want the manual sources installed, answer 'none'."
7515 case "$man1dir" in
7516 ' ') dflt=none
7517         ;;
7518 '')
7519         lookpath="$prefixexp/man/man1 $prefixexp/man/l_man/man1"
7520         lookpath="$lookpath $prefixexp/man/p_man/man1"
7521         lookpath="$lookpath $prefixexp/man/u_man/man1"
7522         lookpath="$lookpath $prefixexp/man/man.1"
7523         case "$sysman" in
7524         */?_man*)       dflt=`./loc . $prefixexp/l_man/man1 $lookpath` ;;
7525         *)      dflt=`./loc . $prefixexp/man/man1 $lookpath` ;;
7526         esac
7527         set dflt
7528         eval $prefixup
7529         ;;
7530 *)  dflt="$man1dir"
7531         ;;
7532 esac
7533 echo " "
7534 fn=dn+~
7535 rp="Where do the main $spackage manual pages (source) go?"
7536 . ./getfile
7537 if $test "X$man1direxp" != "X$ansexp"; then
7538         installman1dir=''
7539 fi
7540 man1dir="$ans"
7541 man1direxp="$ansexp"
7542 case "$man1dir" in
7543 '')     man1dir=' '
7544         installman1dir='';;
7545 esac
7546
7547 : Change installation prefix, if necessary.
7548 if $test X"$prefix" != X"$installprefix"; then
7549         installman1dir=`echo $man1direxp | $sed "s#^$prefix#$installprefix#"`
7550 else
7551         installman1dir="$man1direxp"
7552 fi
7553
7554 : What suffix to use on installed man pages
7555
7556 case "$man1dir" in
7557 ' ')
7558         man1ext='0'
7559         ;;
7560 *)
7561         rp="What suffix should be used for the main $spackage man pages?"
7562         case "$man1ext" in
7563         '')     case "$man1dir" in
7564                 *1)  dflt=1 ;;
7565                 *1p) dflt=1p ;;
7566                 *1pm) dflt=1pm ;;
7567                 *l) dflt=l;;
7568                 *n) dflt=n;;
7569                 *o) dflt=o;;
7570                 *p) dflt=p;;
7571                 *C) dflt=C;;
7572                 *L) dflt=L;;
7573                 *L1) dflt=L1;;
7574                 *) dflt=1;;
7575                 esac
7576                 ;;
7577         *)      dflt="$man1ext";;
7578         esac
7579         . ./myread
7580         man1ext="$ans"
7581         ;;
7582 esac
7583
7584 : see if we can have long filenames
7585 echo " "
7586 first=123456789abcdef
7587 $rm -f $first
7588 if (echo hi >$first) 2>/dev/null; then
7589         if $test -f 123456789abcde; then
7590                 echo 'You cannot have filenames longer than 14 characters.  Sigh.' >&4
7591                 val="$undef"
7592         else
7593                 echo 'You can have filenames longer than 14 characters.'>&4
7594                 val="$define"
7595         fi
7596 else
7597         $cat <<'EOM'
7598 You can't have filenames longer than 14 chars.
7599 You can't even think about them!
7600 EOM
7601         val="$undef"
7602 fi 
7603 set d_flexfnam
7604 eval $setvar
7605 $rm -rf 123456789abcde*
7606
7607 : determine where library module manual pages go
7608 set man3dir man3dir none
7609 eval $prefixit
7610 $cat <<EOM
7611
7612 $spackage has manual pages for many of the library modules.
7613 EOM
7614
7615 case "$nroff" in
7616 nroff)
7617         $cat <<'EOM'
7618 However, you don't have nroff, so they're probably useless to you.
7619 EOM
7620         case "$man3dir" in
7621         '') man3dir="none";;
7622         esac;;
7623 esac
7624
7625 case "$d_flexfnam" in
7626 undef)
7627         $cat <<'EOM'
7628 However, your system can't handle the long file names like File::Basename.3. 
7629 EOM
7630         case "$man3dir" in
7631         '') man3dir="none";;
7632         esac;;
7633 esac
7634
7635 echo "If you don't want the manual sources installed, answer 'none'."
7636 prog=`echo $package | $sed 's/-*[0-9.]*$//'`
7637 case "$man3dir" in
7638 '')     dflt=`echo "$man1dir" | $sed -e 's/man1/man3/g' -e 's/man\.1/man\.3/g'`
7639         if $test -d "$privlib/man/man3"; then
7640                 cat <<EOM >&4
7641
7642 WARNING:  Previous versions of perl installed man3 pages into
7643 $privlib/man/man3.  This version will suggest a 
7644 new default of $dflt.  
7645 EOM
7646                 tdflt=$dflt
7647                 dflt='n'
7648                 rp='Do you wish to preserve the old behavior?(y/n)'
7649                 . ./myread
7650                 case "$ans" in
7651                 y*) dflt="$privlib/man/man3" ;;
7652                 *)  dflt=$tdflt ;;
7653                 esac
7654     fi
7655         ;;
7656 *)      dflt="$man3dir" ;;
7657 esac
7658 case "$dflt" in
7659 ' ') dflt=none ;;
7660 esac
7661 echo " "
7662 fn=dn+~
7663 rp="Where do the $package library man pages (source) go?"
7664 . ./getfile
7665 man3dir="$ans"
7666 man3direxp="$ansexp"
7667 case "$man3dir" in
7668 '')     man3dir=' '
7669         installman3dir='';;
7670 esac
7671
7672 : Change installation prefix, if necessary.
7673 if $test X"$prefix" != X"$installprefix"; then
7674         installman3dir=`echo $man3direxp | $sed "s#^$prefix#$installprefix#"`
7675 else
7676         installman3dir="$man3direxp"
7677 fi
7678
7679 : What suffix to use on installed man pages
7680 case "$man3dir" in
7681 ' ')
7682         man3ext='0'
7683         ;;
7684 *)
7685         rp="What suffix should be used for the $package library man pages?"
7686         case "$man3ext" in
7687         '')     case "$man3dir" in
7688                 *3)  dflt=3 ;;
7689                 *3p) dflt=3p ;;
7690                 *3pm) dflt=3pm ;;
7691                 *l) dflt=l;;
7692                 *n) dflt=n;;
7693                 *o) dflt=o;;
7694                 *p) dflt=p;;
7695                 *C) dflt=C;;
7696                 *L) dflt=L;;
7697                 *L3) dflt=L3;;
7698                 *) dflt=3;;
7699                 esac
7700                 ;;
7701         *)      dflt="$man3ext";;
7702         esac
7703         . ./myread
7704         man3ext="$ans"
7705         ;;
7706 esac
7707
7708 : see if we have to deal with yellow pages, now NIS.
7709 if $test -d /usr/etc/yp || $test -d /etc/yp; then
7710         if $test -f /usr/etc/nibindd; then
7711                 echo " "
7712                 echo "I'm fairly confident you're on a NeXT."
7713                 echo " "
7714                 rp='Do you get the hosts file via NetInfo?'
7715                 dflt=y
7716                 case "$hostcat" in
7717                 nidump*) ;;
7718                 '') ;;
7719                 *) dflt=n;;
7720                 esac
7721                 . ./myread
7722                 case "$ans" in
7723                 y*) hostcat='nidump hosts .';;
7724                 *)      case "$hostcat" in
7725                         nidump*) hostcat='';;
7726                         esac
7727                         ;;
7728                 esac
7729         fi
7730         case "$hostcat" in
7731         nidump*) ;;
7732         *)
7733                 case "$hostcat" in
7734                 *ypcat*) dflt=y;;
7735                 '') if $contains '^\+' /etc/passwd >/dev/null 2>&1; then
7736                                 dflt=y
7737                         else
7738                                 dflt=n
7739                         fi;;
7740                 *) dflt=n;;
7741                 esac
7742                 echo " "
7743                 rp='Are you getting the hosts file via yellow pages?'
7744                 . ./myread
7745                 case "$ans" in
7746                 y*) hostcat='ypcat hosts';;
7747                 *) hostcat='cat /etc/hosts';;
7748                 esac
7749                 ;;
7750         esac
7751 fi
7752 case "$hostcat" in
7753 '') test -f /etc/hosts && hostcat='cat /etc/hosts';;
7754 esac
7755 case "$groupcat" in
7756 '') test -f /etc/group && groupcat='cat /etc/group';;
7757 esac
7758 case "$passcat" in
7759 '') test -f /etc/passwd && passcat='cat /etc/passwd';;
7760 esac
7761
7762 : now get the host name
7763 echo " "
7764 echo "Figuring out host name..." >&4
7765 case "$myhostname" in
7766 '') cont=true
7767         echo 'Maybe "hostname" will work...'
7768         if tans=`sh -c hostname 2>&1` ; then
7769                 myhostname=$tans
7770                 phostname=hostname
7771                 cont=''
7772         fi
7773         ;;
7774 *) cont='';;
7775 esac
7776 if $test "$cont"; then
7777         if ./xenix; then
7778                 echo 'Oh, dear.  Maybe "/etc/systemid" is the key...'
7779                 if tans=`cat /etc/systemid 2>&1` ; then
7780                         myhostname=$tans
7781                         phostname='cat /etc/systemid'
7782                         echo "Whadyaknow.  Xenix always was a bit strange..."
7783                         cont=''
7784                 fi
7785         elif $test -r /etc/systemid; then
7786                 echo "(What is a non-Xenix system doing with /etc/systemid?)"
7787         fi
7788 fi
7789 if $test "$cont"; then
7790         echo 'No, maybe "uuname -l" will work...'
7791         if tans=`sh -c 'uuname -l' 2>&1` ; then
7792                 myhostname=$tans
7793                 phostname='uuname -l'
7794         else
7795                 echo 'Strange.  Maybe "uname -n" will work...'
7796                 if tans=`sh -c 'uname -n' 2>&1` ; then
7797                         myhostname=$tans
7798                         phostname='uname -n'
7799                 else
7800                         echo 'Oh well, maybe I can mine it out of whoami.h...'
7801                         if tans=`sh -c $contains' sysname $usrinc/whoami.h' 2>&1` ; then
7802                                 myhostname=`echo "$tans" | $sed 's/^.*"\(.*\)"/\1/'`
7803                                 phostname="sed -n -e '"'/sysname/s/^.*\"\\(.*\\)\"/\1/{'"' -e p -e q -e '}' <$usrinc/whoami.h"
7804                         else
7805                                 case "$myhostname" in
7806                                 '') echo "Does this machine have an identity crisis or something?"
7807                                         phostname='';;
7808                                 *)
7809                                         echo "Well, you said $myhostname before..."
7810                                         phostname='echo $myhostname';;
7811                                 esac
7812                         fi
7813                 fi
7814         fi
7815 fi
7816 : you do not want to know about this
7817 set $myhostname
7818 myhostname=$1
7819
7820 : verify guess
7821 if $test "$myhostname" ; then
7822         dflt=y
7823         rp='Your host name appears to be "'$myhostname'".'" Right?"
7824         . ./myread
7825         case "$ans" in
7826         y*) ;;
7827         *) myhostname='';;
7828         esac
7829 fi
7830
7831 : bad guess or no guess
7832 while $test "X$myhostname" = X ; do
7833         dflt=''
7834         rp="Please type the (one word) name of your host:"
7835         . ./myread
7836         myhostname="$ans"
7837 done
7838
7839 : translate upper to lower if necessary
7840 case "$myhostname" in
7841 *[A-Z]*)
7842         echo "(Normalizing case in your host name)"
7843         myhostname=`echo $myhostname | ./tr '[A-Z]' '[a-z]'`
7844         ;;
7845 esac
7846
7847 case "$myhostname" in
7848 *.*)
7849         dflt=`expr "X$myhostname" : "X[^.]*\(\..*\)"`
7850         myhostname=`expr "X$myhostname" : "X\([^.]*\)\."`
7851         echo "(Trimming domain name from host name--host name is now $myhostname)"
7852         ;;
7853 *) case "$mydomain" in
7854         '')
7855                 {
7856                         test "X$hostcat" = "Xypcat hosts" &&
7857                         ypmatch "$myhostname" hosts 2>/dev/null |\
7858                                 $sed -e 's/[     ]*#.*//; s/$/ /' > hosts && \
7859                         $test -s hosts
7860                 } || {
7861                         test "X$hostcat" != "X" &&
7862                         $hostcat | $sed -n -e "s/[       ]*#.*//; s/\$/ /
7863                                         /[       ]$myhostname[  . ]/p" > hosts
7864                 }
7865                 tmp_re="[       . ]"
7866                 if $test -f hosts; then
7867                         $test x`$awk "/[0-9].*[  ]$myhostname$tmp_re/ { sum++ }
7868                              END { print sum }" hosts` = x1 || tmp_re="[         ]"
7869                         dflt=.`$awk "/[0-9].*[   ]$myhostname$tmp_re/ {for(i=2; i<=NF;i++) print \\\$i}" \
7870                                 hosts | $sort | $uniq | \
7871                                 $sed -n -e "s/$myhostname\.\([-a-zA-Z0-9_.]\)/\1/p"`
7872                         case `$echo X$dflt` in
7873                         X*\ *)  echo "(Several hosts in the database matched hostname)"
7874                                 dflt=.
7875                                 ;;
7876                         X.) echo "(You do not have fully-qualified names in the hosts database)"
7877                                 ;;
7878                         esac
7879                 else
7880                         echo "(I cannot locate a hosts database anywhere)"
7881                         dflt=.
7882                 fi
7883                 case "$dflt" in
7884                 .)
7885                         tans=`./loc resolv.conf X /etc /usr/etc`
7886                         if $test -f "$tans"; then
7887                                 echo "(Attempting domain name extraction from $tans)"
7888                                 dflt=.`$sed -n -e 's/   / /g' \
7889                                   -e 's/^search  *\([^ ]*\).*/\1/p' $tans \
7890                                   | ./tr '[A-Z]' '[a-z]' 2>/dev/null`
7891                                 case "$dflt" in
7892                                 .) dflt=.`$sed -n -e 's/        / /g' \
7893                                      -e 's/^domain  *\([^ ]*\).*/\1/p' $tans \
7894                                      | ./tr '[A-Z]' '[a-z]' 2>/dev/null`
7895                                         ;;
7896                                 esac
7897                         fi
7898                         ;;
7899                 esac
7900                 case "$dflt" in
7901                 .) echo "(No help from resolv.conf either -- attempting clever guess)"
7902                         dflt=.`sh -c domainname 2>/dev/null`
7903                         case "$dflt" in
7904                         '') dflt='.';;
7905                         .nis.*|.yp.*|.main.*) dflt=`echo $dflt | $sed -e 's/^\.[^.]*//'`;;
7906                         esac
7907                         ;;
7908                 esac
7909                 case "$dflt$osname" in
7910                 .os390) echo "(Attempting domain name extraction from //'SYS1.TCPPARMS(TCPDATA)')"
7911                         dflt=.`awk '/^DOMAINORIGIN/ {print $2}' "//'SYS1.TCPPARMS(TCPDATA)'" 2>/dev/null`
7912                         ;;
7913                 esac
7914                 case "$dflt" in
7915                 .) echo "(Lost all hope -- silly guess then)"
7916                         dflt='.uucp'
7917                         ;;
7918                 esac
7919                 $rm -f hosts
7920                 ;;
7921         *) dflt="$mydomain";;
7922         esac;;
7923 esac
7924 echo " "
7925 rp="What is your domain name?"
7926 . ./myread
7927 tans="$ans"
7928 case "$ans" in
7929 '') ;;
7930 .*) ;;
7931 *) tans=".$tans";;
7932 esac
7933 mydomain="$tans"
7934
7935 : translate upper to lower if necessary
7936 case "$mydomain" in
7937 *[A-Z]*)
7938         echo "(Normalizing case in your domain name)"
7939         mydomain=`echo $mydomain | ./tr '[A-Z]' '[a-z]'`
7940         ;;
7941 esac
7942
7943 : a little sanity check here
7944 case "$phostname" in
7945 '') ;;
7946 *)
7947         case `$phostname | ./tr '[A-Z]' '[a-z]'` in
7948         $myhostname$mydomain|$myhostname) ;;
7949         *)
7950                 case "$phostname" in
7951                 sed*)
7952                         echo "(That doesn't agree with your whoami.h file, by the way.)"
7953                         ;;
7954                 *)
7955                         echo "(That doesn't agree with your $phostname command, by the way.)"
7956                         ;;
7957                 esac
7958         ;;
7959         esac
7960         ;;
7961 esac
7962
7963 $cat <<EOM
7964
7965 I need to get your e-mail address in Internet format if possible, i.e.
7966 something like user@host.domain. Please answer accurately since I have
7967 no easy means to double check it. The default value provided below
7968 is most probably close to reality but may not be valid from outside
7969 your organization...
7970
7971 EOM
7972 cont=x
7973 while test "$cont"; do
7974         case "$cf_email" in
7975         '') dflt="$cf_by@$myhostname$mydomain";;
7976         *) dflt="$cf_email";;
7977         esac
7978         rp='What is your e-mail address?'
7979         . ./myread
7980         cf_email="$ans"
7981         case "$cf_email" in
7982         *@*.*) cont='' ;;
7983         *)
7984                 rp='Address does not look like an Internet one.  Use it anyway?'
7985                 case "$fastread" in
7986                 yes) dflt=y ;;
7987                 *) dflt=n ;;
7988                 esac
7989                 . ./myread
7990                 case "$ans" in
7991                 y*) cont='' ;;
7992                 *) echo " " ;;
7993                 esac
7994                 ;;
7995         esac
7996 done
7997
7998 $cat <<EOM
7999
8000 If you or somebody else will be maintaining perl at your site, please
8001 fill in the correct e-mail address here so that they may be contacted
8002 if necessary. Currently, the "perlbug" program included with perl
8003 will send mail to this address in addition to perlbug@perl.org. You may
8004 enter "none" for no administrator.
8005
8006 EOM
8007 case "$perladmin" in
8008 '') dflt="$cf_email";;
8009 *) dflt="$perladmin";;
8010 esac
8011 rp='Perl administrator e-mail address'
8012 . ./myread
8013 perladmin="$ans"
8014
8015 : determine whether to only install version-specific parts.
8016 echo " "
8017 $cat <<EOM
8018 Do you want to install only the version-specific parts of the perl
8019 distribution?  Usually you do *not* want to do this.
8020 EOM
8021 case "$versiononly" in
8022 "$define"|[Yy]*|true) dflt='y' ;;
8023 *) dflt='n';
8024 esac
8025 rp="Do you want to install only the version-specific parts of perl?"
8026 . ./myread
8027 case "$ans" in
8028 [yY]*)  val="$define";;
8029 *)      val="$undef" ;;
8030 esac
8031 set versiononly
8032 eval $setvar
8033
8034 : figure out how to guarantee perl startup
8035 case "$startperl" in
8036 '')
8037         case "$sharpbang" in
8038         *!)
8039                 $cat <<EOH
8040
8041 I can use the #! construct to start perl on your system. This will
8042 make startup of perl scripts faster, but may cause problems if you
8043 want to share those scripts and perl is not in a standard place
8044 ($binexp/perl) on all your platforms. The alternative is to force
8045 a shell by starting the script with a single ':' character.
8046
8047 EOH
8048                 case "$versiononly" in
8049                 "$define")      dflt="$binexp/perl$version";;  
8050                 *)              dflt="$binexp/perl";;
8051                 esac
8052                 rp='What shall I put after the #! to start up perl ("none" to not use #!)?'
8053                 . ./myread
8054                 case "$ans" in
8055                 none)   startperl=": # use perl";;
8056                 *)      startperl="#!$ans"
8057                         if $test 30 -lt `echo "$ans" | wc -c`; then
8058                                 $cat >&4 <<EOM
8059
8060 WARNING:  Some systems limit the #! command to 32 characters.
8061 If you experience difficulty running Perl scripts with #!, try
8062 installing Perl in a directory with a shorter pathname.
8063
8064 EOM
8065                         fi ;;
8066                 esac
8067                 ;;
8068         *) startperl=": # use perl"
8069                 ;;
8070         esac
8071         ;;
8072 esac
8073 echo "I'll use $startperl to start perl scripts."
8074
8075 : figure best path for perl in scripts
8076 case "$perlpath" in
8077 '')
8078         perlpath="$binexp/perl"
8079         case "$startperl" in
8080         *!*) ;;
8081         *)
8082                 $cat <<EOH
8083
8084 I will use the "eval 'exec'" idiom to start Perl on your system.
8085 I can use the full path of your Perl binary for this purpose, but
8086 doing so may cause problems if you want to share those scripts and
8087 Perl is not always in a standard place ($binexp/perl).
8088
8089 EOH
8090                 dflt="$binexp/perl"
8091                 rp="What path shall I use in \"eval 'exec'\"?"
8092                 . ./myread
8093                 perlpath="$ans"
8094                 ;;
8095         esac
8096         ;;
8097 esac
8098 case "$startperl" in
8099 *!*)    ;;
8100 *)      echo "I'll use $perlpath in \"eval 'exec'\"" ;;
8101 esac
8102
8103 : determine where public executable scripts go
8104 set scriptdir scriptdir
8105 eval $prefixit
8106 case "$scriptdir" in
8107 '')
8108         dflt="$bin"
8109         : guess some guesses
8110         $test -d /usr/share/scripts && dflt=/usr/share/scripts
8111         $test -d /usr/share/bin     && dflt=/usr/share/bin
8112         $test -d /usr/local/script  && dflt=/usr/local/script
8113         $test -d /usr/local/scripts && dflt=/usr/local/scripts
8114         $test -d $prefixexp/script  && dflt=$prefixexp/script
8115         set dflt
8116         eval $prefixup
8117         ;;
8118 *)  dflt="$scriptdir"
8119         ;;
8120 esac
8121 $cat <<EOM
8122  
8123 Some installations have a separate directory just for executable scripts so
8124 that they can mount it across multiple architectures but keep the scripts in
8125 one spot.  You might, for example, have a subdirectory of /usr/share for this.
8126 Or you might just lump your scripts in with all your other executables.
8127  
8128 EOM
8129 fn=d~
8130 rp='Where do you keep publicly executable scripts?'
8131 . ./getfile
8132 if $test "X$ansexp" != "X$scriptdirexp"; then
8133         installscript=''
8134 fi
8135 scriptdir="$ans"
8136 scriptdirexp="$ansexp"
8137 : Change installation prefix, if necessary.
8138 if $test X"$prefix" != X"$installprefix"; then
8139         installscript=`echo $scriptdirexp | sed "s#^$prefix#$installprefix#"`
8140 else
8141         installscript="$scriptdirexp"
8142 fi
8143
8144 : determine where add-on public executables go
8145 case "$sitebin" in
8146 '')     dflt=$siteprefix/bin ;;
8147 *)      dflt=$sitebin ;;
8148 esac
8149 fn=d~
8150 rp='Pathname where the add-on public executables should be installed?'
8151 . ./getfile
8152 sitebin="$ans"
8153 sitebinexp="$ansexp"
8154 : Change installation prefix, if necessary.
8155 if $test X"$prefix" != X"$installprefix"; then
8156         installsitebin=`echo $sitebinexp | sed "s#^$prefix#$installprefix#"`
8157 else
8158         installsitebin="$sitebinexp"
8159 fi
8160
8161 case "$vendorprefix" in
8162 '')     d_vendorbin="$undef"
8163         vendorbin=''
8164         vendorbinexp=''
8165         ;;
8166 *)      d_vendorbin="$define"
8167         : determine where vendor-supplied executables go.
8168         case "$vendorbin" in
8169         '') dflt=$vendorprefix/bin ;;
8170         *)      dflt="$vendorbin" ;;
8171         esac
8172         fn=d~+
8173         rp='Pathname for the vendor-supplied executables directory?'
8174         . ./getfile
8175         vendorbin="$ans"
8176         vendorbinexp="$ansexp"
8177         ;;
8178 esac
8179 : Change installation prefix, if necessary.
8180 if $test X"$prefix" != X"$installprefix"; then
8181         installvendorbin=`echo $vendorbinexp | $sed "s#^$prefix#$installprefix#"`
8182 else
8183         installvendorbin="$vendorbinexp"
8184 fi
8185
8186 : see if qgcvt exists
8187 set qgcvt d_qgcvt
8188 eval $inlibc
8189
8190 echo " "
8191
8192 if $test X"$d_longdbl" = X"$define"; then
8193
8194 echo "Checking how to print long doubles..." >&4
8195
8196 if $test X"$sPRIfldbl" = X -a X"$doublesize" = X"$longdblsize"; then
8197         $cat >try.c <<'EOCP'
8198 #include <sys/types.h>
8199 #include <stdio.h>
8200 int main() {
8201   double d = 123.456;
8202   printf("%.3f\n", d);
8203 }
8204 EOCP
8205         set try
8206         if eval $compile; then
8207                 yyy=`$run ./try`
8208                 case "$yyy" in
8209                 123.456)
8210                         sPRIfldbl='"f"'; sPRIgldbl='"g"'; sPRIeldbl='"e"';
8211                         sPRIFUldbl='"F"'; sPRIGUldbl='"G"'; sPRIEUldbl='"E"';
8212                         echo "We will use %f."
8213                         ;;
8214                 esac
8215         fi
8216 fi
8217
8218 if $test X"$sPRIfldbl" = X; then
8219         $cat >try.c <<'EOCP'
8220 #include <sys/types.h>
8221 #include <stdio.h>
8222 int main() {
8223   long double d = 123.456;
8224   printf("%.3Lf\n", d);
8225 }
8226 EOCP
8227         set try
8228         if eval $compile; then
8229                 yyy=`$run ./try`
8230                 case "$yyy" in
8231                 123.456)
8232                         sPRIfldbl='"Lf"'; sPRIgldbl='"Lg"'; sPRIeldbl='"Le"';
8233                         sPRIFUldbl='"LF"'; sPRIGUldbl='"LG"'; sPRIEUldbl='"LE"';
8234                         echo "We will use %Lf."
8235                         ;;
8236                 esac
8237         fi
8238 fi
8239
8240 if $test X"$sPRIfldbl" = X; then
8241         $cat >try.c <<'EOCP'
8242 #include <sys/types.h>
8243 #include <stdio.h>
8244 int main() {
8245   long double d = 123.456;
8246   printf("%.3llf\n", d);
8247 }
8248 EOCP
8249         set try
8250         if eval $compile; then
8251                 yyy=`$run ./try`
8252                 case "$yyy" in
8253                 123.456)
8254                         sPRIfldbl='"llf"'; sPRIgldbl='"llg"'; sPRIeldbl='"lle"';
8255                         sPRIFUldbl='"llF"'; sPRIGUldbl='"llG"'; sPRIEUldbl='"llE"';
8256                         echo "We will use %llf."
8257                         ;;
8258                 esac
8259         fi
8260 fi
8261
8262 if $test X"$sPRIfldbl" = X; then
8263         $cat >try.c <<'EOCP'
8264 #include <sys/types.h>
8265 #include <stdio.h>
8266 int main() {
8267   long double d = 123.456;
8268   printf("%.3lf\n", d);
8269 }
8270 EOCP
8271         set try
8272         if eval $compile; then
8273                 yyy=`$run ./try`
8274                 case "$yyy" in
8275                 123.456)
8276                         sPRIfldbl='"lf"'; sPRIgldbl='"lg"'; sPRIeldbl='"le"';
8277                         sPRIFUldbl='"lF"'; sPRIGUldbl='"lG"'; sPRIEUldbl='"lE"';
8278                         echo "We will use %lf."
8279                         ;;
8280                 esac
8281         fi
8282 fi
8283
8284 if $test X"$sPRIfldbl" = X; then
8285         echo "Cannot figure out how to print long doubles." >&4
8286 else
8287         sSCNfldbl=$sPRIfldbl    # expect consistency
8288 fi
8289
8290 $rm -f try try.*
8291
8292 fi # d_longdbl
8293
8294 case "$sPRIfldbl" in
8295 '')     d_PRIfldbl="$undef"; d_PRIgldbl="$undef"; d_PRIeldbl="$undef"; 
8296         d_PRIFUldbl="$undef"; d_PRIGUldbl="$undef"; d_PRIEUldbl="$undef"; 
8297         d_SCNfldbl="$undef";
8298         ;;
8299 *)      d_PRIfldbl="$define"; d_PRIgldbl="$define"; d_PRIeldbl="$define"; 
8300         d_PRIFUldbl="$define"; d_PRIGUldbl="$define"; d_PRIEUldbl="$define"; 
8301         d_SCNfldbl="$define";
8302         ;;
8303 esac
8304
8305 : Check how to convert floats to strings.
8306 echo " "
8307 echo "Checking for an efficient way to convert floats to strings."
8308 echo " " > try.c
8309 case "$uselongdouble" in
8310 "$define") echo "#define USE_LONG_DOUBLE" >>try.c ;;
8311 esac
8312 case "$d_longdbl" in
8313 "$define") echo "#define HAS_LONG_DOUBLE" >>try.c ;;
8314 esac
8315 case "$d_PRIgldbl" in
8316 "$define") echo "#define HAS_PRIgldbl"    >>try.c ;;
8317 esac
8318 $cat >>try.c <<EOP
8319 #ifdef TRY_gconvert
8320 #define Gconvert(x,n,t,b) gconvert((x),(n),(t),(b))
8321 char *myname = "gconvert";
8322 #endif
8323 #ifdef TRY_gcvt
8324 #define Gconvert(x,n,t,b) gcvt((x),(n),(b))
8325 char *myname = "gcvt";
8326 #endif
8327 #ifdef TRY_qgcvt
8328 #define Gconvert(x,n,t,b) qgcvt((x),(n),(b))
8329 char *myname = "qgcvt";
8330 #define DOUBLETYPE long double
8331 #endif
8332 #ifdef TRY_sprintf
8333 #if defined(USE_LONG_DOUBLE) && defined(HAS_LONG_DOUBLE) && defined(HAS_PRIgldbl)
8334 #define Gconvert(x,n,t,b) sprintf((b),"%.*"$sPRIgldbl,(n),(x))
8335 #else
8336 #define Gconvert(x,n,t,b) sprintf((b),"%.*g",(n),(x))
8337 #endif
8338 char *myname = "sprintf";
8339 #endif
8340
8341 #ifndef DOUBLETYPE
8342 #if defined(USE_LONG_DOUBLE) && defined(HAS_LONG_DOUBLE)
8343 #define DOUBLETYPE long double
8344 #else
8345 #define DOUBLETYPE double
8346 #endif
8347 #endif
8348
8349 #include <stdio.h>
8350
8351 #define I_STDLIB $i_stdlib
8352 #ifdef I_STDLIB
8353 #include <stdlib.h>
8354 #endif
8355
8356 int
8357 checkit(expect, got)
8358 char *expect;
8359 char *got;
8360 {
8361     if (strcmp(expect, got)) {
8362                 printf("%s oddity:  Expected %s, got %s\n",
8363                         myname, expect, got);
8364                 exit(1);
8365         }
8366 }
8367
8368 int main()
8369
8370         char buf[64]; 
8371         buf[63] = '\0';
8372
8373         /* This must be 1st test on (which?) platform */
8374         /* Alan Burlison <AlanBurlsin@unn.unisys.com> */
8375         Gconvert((DOUBLETYPE)0.1, 8, 0, buf);
8376         checkit("0.1", buf);
8377
8378         Gconvert((DOUBLETYPE)1.0, 8, 0, buf); 
8379         checkit("1", buf);
8380
8381         Gconvert((DOUBLETYPE)1.1, 8, 0, buf); 
8382         checkit("1.1", buf);
8383
8384         Gconvert((DOUBLETYPE)1.01, 8, 0, buf); 
8385         checkit("1.01", buf);
8386
8387         Gconvert((DOUBLETYPE)1.001, 8, 0, buf); 
8388         checkit("1.001", buf);
8389
8390         Gconvert((DOUBLETYPE)1.0001, 8, 0, buf); 
8391         checkit("1.0001", buf);
8392
8393         Gconvert((DOUBLETYPE)1.00001, 8, 0, buf); 
8394         checkit("1.00001", buf);
8395
8396         Gconvert((DOUBLETYPE)1.000001, 8, 0, buf); 
8397         checkit("1.000001", buf);
8398
8399         Gconvert((DOUBLETYPE)0.0, 8, 0, buf); 
8400         checkit("0", buf);
8401
8402         Gconvert((DOUBLETYPE)-1.0, 8, 0, buf); 
8403         checkit("-1", buf);
8404
8405         /* Some Linux gcvt's give 1.e+5 here. */
8406         Gconvert((DOUBLETYPE)100000.0, 8, 0, buf); 
8407         checkit("100000", buf);
8408         
8409         /* Some Linux gcvt's give -1.e+5 here. */
8410         Gconvert((DOUBLETYPE)-100000.0, 8, 0, buf); 
8411         checkit("-100000", buf);
8412
8413         Gconvert((DOUBLETYPE)123.456, 8, 0, buf); 
8414         checkit("123.456", buf);
8415
8416         exit(0);
8417 }
8418 EOP
8419 case "$d_Gconvert" in
8420 gconvert*) xxx_list='gconvert gcvt sprintf' ;;
8421 gcvt*) xxx_list='gcvt gconvert sprintf' ;;
8422 sprintf*) xxx_list='sprintf gconvert gcvt' ;;
8423 *) xxx_list='gconvert gcvt sprintf' ;;
8424 esac
8425
8426 case "$d_longdbl$uselongdouble$d_PRIgldbl" in
8427 "$define$define$define")
8428     # for long doubles prefer first qgcvt, then sprintf
8429     xxx_list="`echo $xxx_list|sed s/sprintf//`" 
8430     xxx_list="sprintf $xxx_list"
8431     case "$d_qgcvt" in
8432     "$define") xxx_list="qgcvt $xxx_list" ;;
8433     esac
8434     ;;
8435 esac
8436
8437 for xxx_convert in $xxx_list; do
8438         echo "Trying $xxx_convert..."
8439         $rm -f try try$_o
8440         set try -DTRY_$xxx_convert
8441         if eval $compile; then
8442                 echo "$xxx_convert() found." >&4
8443                 if $run ./try; then
8444                         echo "I'll use $xxx_convert to convert floats into a string." >&4
8445                         break;
8446                 else
8447                         echo "...But $xxx_convert didn't work as I expected."
8448                 fi
8449         else
8450                 echo "$xxx_convert NOT found." >&4
8451         fi
8452 done
8453         
8454 case "$xxx_convert" in
8455 gconvert) d_Gconvert='gconvert((x),(n),(t),(b))' ;;
8456 gcvt) d_Gconvert='gcvt((x),(n),(b))' ;;
8457 qgcvt) d_Gconvert='qgcvt((x),(n),(b))' ;;
8458 *) case "$uselongdouble$d_longdbl$d_PRIgldbl" in
8459    "$define$define$define")
8460       d_Gconvert="sprintf((b),\"%.*\"$sPRIgldbl,(n),(x))" ;;
8461    *) d_Gconvert='sprintf((b),"%.*g",(n),(x))' ;;
8462    esac
8463    ;;  
8464 esac
8465
8466 : see if _fwalk exists
8467 set fwalk d__fwalk
8468 eval $inlibc
8469
8470 : Initialize h_fcntl
8471 h_fcntl=false
8472
8473 : Initialize h_sysfile
8474 h_sysfile=false
8475
8476 : access call always available on UNIX
8477 set access d_access
8478 eval $inlibc
8479
8480 : locate the flags for 'access()'
8481 case "$d_access" in
8482 "$define")
8483         echo " "
8484         $cat >access.c <<'EOCP'
8485 #include <sys/types.h>
8486 #ifdef I_FCNTL
8487 #include <fcntl.h>
8488 #endif
8489 #ifdef I_SYS_FILE
8490 #include <sys/file.h>
8491 #endif
8492 #ifdef I_UNISTD
8493 #include <unistd.h>
8494 #endif
8495 int main() {
8496         exit(R_OK);
8497 }
8498 EOCP
8499         : check sys/file.h first, no particular reason here
8500         if $test `./findhdr sys/file.h` && \
8501                 $cc -o access $cppflags -DI_SYS_FILE access.c >/dev/null 2>&1 ; then
8502                 h_sysfile=true;
8503                 echo "<sys/file.h> defines the *_OK access constants." >&4
8504         elif $test `./findhdr fcntl.h` && \
8505                 $cc -o access $cppflags -DI_FCNTL access.c >/dev/null 2>&1 ; then
8506                 h_fcntl=true;
8507                 echo "<fcntl.h> defines the *_OK access constants." >&4
8508         elif $test `./findhdr unistd.h` && \
8509                 $cc -o access $cppflags -DI_UNISTD access.c >/dev/null 2>&1 ; then
8510                 echo "<unistd.h> defines the *_OK access constants." >&4
8511         else
8512                 echo "I can't find the four *_OK access constants--I'll use mine." >&4
8513         fi
8514         ;;
8515 esac
8516 $rm -f access*
8517
8518 : see if accessx exists
8519 set accessx d_accessx
8520 eval $inlibc
8521
8522 : see if alarm exists
8523 set alarm d_alarm
8524 eval $inlibc
8525
8526 : see if atolf exists
8527 set atolf d_atolf
8528 eval $inlibc
8529
8530 : see if atoll exists
8531 set atoll d_atoll
8532 eval $inlibc
8533
8534 : Look for GNU-cc style attribute checking
8535 echo " "
8536 echo "Checking whether your compiler can handle __attribute__ ..." >&4
8537 $cat >attrib.c <<'EOCP'
8538 #include <stdio.h>
8539 void croak (char* pat,...) __attribute__((format(printf,1,2),noreturn));
8540 EOCP
8541 if $cc $ccflags -c attrib.c >attrib.out 2>&1 ; then
8542         if $contains 'warning' attrib.out >/dev/null 2>&1; then
8543                 echo "Your C compiler doesn't fully support __attribute__."
8544                 val="$undef"
8545         else
8546                 echo "Your C compiler supports __attribute__."
8547                 val="$define"
8548         fi
8549 else
8550         echo "Your C compiler doesn't seem to understand __attribute__ at all."
8551         val="$undef"
8552 fi
8553 set d_attribut
8554 eval $setvar
8555 $rm -f attrib*
8556
8557 : see if bcmp exists
8558 set bcmp d_bcmp
8559 eval $inlibc
8560
8561 : see if bcopy exists
8562 set bcopy d_bcopy
8563 eval $inlibc
8564
8565 : see if this is a unistd.h system
8566 set unistd.h i_unistd
8567 eval $inhdr
8568
8569 : see if getpgrp exists
8570 set getpgrp d_getpgrp
8571 eval $inlibc
8572
8573 case "$d_getpgrp" in
8574 "$define")
8575         echo " "
8576         echo "Checking to see which flavor of getpgrp is in use..."
8577         $cat >try.c <<EOP
8578 #$i_unistd I_UNISTD
8579 #include <sys/types.h>
8580 #ifdef I_UNISTD
8581 #  include <unistd.h>
8582 #endif
8583 int main()
8584 {
8585         if (getuid() == 0) {
8586                 printf("(I see you are running Configure as super-user...)\n");
8587                 setuid(1);
8588         }
8589 #ifdef TRY_BSD_PGRP
8590         if (getpgrp(1) == 0)
8591                 exit(0);
8592 #else
8593         if (getpgrp() > 0)
8594                 exit(0);
8595 #endif
8596         exit(1);
8597 }
8598 EOP
8599         if $cc -o try -DTRY_BSD_PGRP $ccflags $ldflags try.c $libs >/dev/null 2>&1 && $run ./try; then
8600                 echo "You have to use getpgrp(pid) instead of getpgrp()." >&4
8601                 val="$define"
8602         elif $cc -o try $ccflags $ldflags try.c $libs >/dev/null 2>&1 && $run ./try; then
8603                 echo "You have to use getpgrp() instead of getpgrp(pid)." >&4
8604                 val="$undef"
8605         else
8606                 echo "I can't seem to compile and run the test program."
8607                 if ./usg; then
8608                         xxx="a USG one, i.e. you use getpgrp()."
8609                 else
8610                         # SVR4 systems can appear rather BSD-ish.
8611                         case "$i_unistd" in
8612                         $undef)
8613                                 xxx="a BSD one, i.e. you use getpgrp(pid)."
8614                                 val="$define"
8615                                 ;;
8616                         $define)
8617                                 xxx="probably a USG one, i.e. you use getpgrp()."
8618                                 val="$undef"
8619                                 ;;
8620                         esac
8621                 fi
8622                 echo "Assuming your getpgrp is $xxx" >&4
8623         fi
8624         ;;
8625 *) val="$undef";;
8626 esac
8627 set d_bsdgetpgrp
8628 eval $setvar
8629 $rm -f try try.*
8630
8631 : see if setpgrp exists
8632 set setpgrp d_setpgrp
8633 eval $inlibc
8634
8635 case "$d_setpgrp" in
8636 "$define")
8637         echo " "
8638         echo "Checking to see which flavor of setpgrp is in use..."
8639         $cat >try.c <<EOP
8640 #$i_unistd I_UNISTD
8641 #include <sys/types.h>
8642 #ifdef I_UNISTD
8643 #  include <unistd.h>
8644 #endif
8645 int main()
8646 {
8647         if (getuid() == 0) {
8648                 printf("(I see you are running Configure as super-user...)\n");
8649                 setuid(1);
8650         }
8651 #ifdef TRY_BSD_PGRP
8652         if (-1 == setpgrp(1, 1))
8653                 exit(0);
8654 #else
8655         if (setpgrp() != -1)
8656                 exit(0);
8657 #endif
8658         exit(1);
8659 }
8660 EOP
8661         if $cc -o try -DTRY_BSD_PGRP $ccflags $ldflags try.c $libs >/dev/null 2>&1 && $run ./try; then
8662                 echo 'You have to use setpgrp(pid,pgrp) instead of setpgrp().' >&4
8663                 val="$define"
8664         elif $cc -o try $ccflags $ldflags try.c $libs >/dev/null 2>&1 && $run ./try; then
8665                 echo 'You have to use setpgrp() instead of setpgrp(pid,pgrp).' >&4
8666                 val="$undef"
8667         else
8668                 echo "(I can't seem to compile and run the test program.)"
8669                 if ./usg; then
8670                         xxx="a USG one, i.e. you use setpgrp()."
8671                 else
8672                         # SVR4 systems can appear rather BSD-ish.
8673                         case "$i_unistd" in
8674                         $undef)
8675                                 xxx="a BSD one, i.e. you use setpgrp(pid,pgrp)."
8676                                 val="$define"
8677                                 ;;
8678                         $define)
8679                                 xxx="probably a USG one, i.e. you use setpgrp()."
8680                                 val="$undef"
8681                                 ;;
8682                         esac
8683                 fi
8684                 echo "Assuming your setpgrp is $xxx" >&4
8685         fi
8686         ;;
8687 *) val="$undef";;
8688 esac
8689 set d_bsdsetpgrp
8690 eval $setvar
8691 $rm -f try try.*
8692 : see if bzero exists
8693 set bzero d_bzero
8694 eval $inlibc
8695
8696 : see if signal is declared as pointer to function returning int or void
8697 echo " "
8698 xxx=`./findhdr signal.h`
8699 $test "$xxx" && $cppstdin $cppminus $cppflags < $xxx >$$.tmp 2>/dev/null
8700 if $contains 'int.*\*[  ]*signal' $$.tmp >/dev/null 2>&1 ; then
8701         echo "You have int (*signal())() instead of void." >&4
8702         val="$undef"
8703 elif $contains 'void.*\*[       ]*signal' $$.tmp >/dev/null 2>&1 ; then
8704         echo "You have void (*signal())()." >&4
8705         val="$define"
8706 elif $contains 'extern[         ]*[(\*]*signal' $$.tmp >/dev/null 2>&1 ; then
8707         echo "You have int (*signal())() instead of void." >&4
8708         val="$undef"
8709 elif $contains 'void.*\*.*sig' $$.tmp >/dev/null 2>&1 ; then
8710         echo "You have void (*signal())()." >&4
8711         val="$define"
8712 else
8713         case "$d_voidsig" in
8714         '')
8715         echo "I can't determine whether signal handler returns void or int..." >&4
8716                 dflt=void
8717                 rp="What type does your signal handler return?"
8718                 . ./myread
8719                 case "$ans" in
8720                 v*) val="$define";;
8721                 *) val="$undef";;
8722                 esac;;
8723         "$define")
8724                 echo "As you already told me, signal handler returns void." >&4
8725                 val="$define"
8726                 ;;
8727         *)      echo "As you already told me, signal handler returns int." >&4
8728                 val="$undef"
8729                 ;;
8730         esac
8731 fi
8732 set d_voidsig
8733 eval $setvar
8734 case "$d_voidsig" in
8735 "$define") signal_t="void";;
8736 *) signal_t="int";;
8737 esac
8738 $rm -f $$.tmp
8739
8740 : check for ability to cast large floats to 32-bit ints.
8741 echo " "
8742 echo 'Checking whether your C compiler can cast large floats to int32.' >&4
8743 if $test "$intsize" -ge 4; then
8744         xxx=int
8745 else
8746         xxx=long
8747 fi
8748 $cat >try.c <<EOCP
8749 #include <stdio.h>
8750 #include <sys/types.h>
8751 #include <signal.h>
8752 $signal_t blech(s) int s; { exit(3); }
8753 int main()
8754 {
8755         $xxx i32;
8756         double f, g;
8757         int result = 0;
8758         char str[16];
8759         signal(SIGFPE, blech);
8760
8761         /* Don't let compiler optimize the test away.  Store the number 
8762            in a writable string for gcc to pass to sscanf under HP/UX.
8763         */
8764         sprintf(str, "2147483647");
8765         sscanf(str, "%lf", &f); /* f = (double) 0x7fffffff; */
8766         g = 10 * f;
8767         i32  = ($xxx) g;
8768
8769         /* x86 processors will probably give 0x8000 0000, which is a
8770        sign change.  We don't want that.  We want to mimic SPARC
8771            behavior here, which is to preserve the sign and give
8772            back 0x7fff ffff.
8773         */
8774         if (i32 != ($xxx) f)
8775                 result |= 1;
8776         exit(result);
8777 }
8778 EOCP
8779 set try
8780 if eval $compile_ok; then
8781         $run ./try
8782         yyy=$?
8783 else
8784         echo "(I can't seem to compile the test program--assuming it can't)"
8785         yyy=1
8786 fi
8787 case "$yyy" in
8788 0)      val="$define"
8789         echo "Yup, it can."
8790         ;;
8791 *)      val="$undef"
8792         echo "Nope, it can't."
8793         ;;
8794 esac
8795 set d_casti32
8796 eval $setvar
8797 $rm -f try try.*
8798
8799 : check for ability to cast negative floats to unsigned
8800 echo " "
8801 echo 'Checking whether your C compiler can cast negative float to unsigned.' >&4
8802 $cat >try.c <<EOCP
8803 #include <stdio.h>
8804 #include <sys/types.h>
8805 #include <signal.h>
8806 $signal_t blech(s) int s; { exit(7); }
8807 $signal_t blech_in_list(s) int s; { exit(4); }
8808 unsigned long dummy_long(p) unsigned long p; { return p; }
8809 unsigned int dummy_int(p) unsigned int p; { return p; }
8810 unsigned short dummy_short(p) unsigned short p; { return p; }
8811 int main()
8812 {
8813         double f;
8814         unsigned long along;
8815         unsigned int aint;
8816         unsigned short ashort;
8817         int result = 0;
8818         char str[16];
8819         
8820         /* Frustrate gcc-2.7.2's optimizer which failed this test with
8821            a direct f = -123. assignment.  gcc-2.8.0 reportedly
8822            optimized the whole file away
8823         */
8824         /* Store the number in a writable string for gcc to pass to 
8825            sscanf under HP/UX.
8826         */
8827         sprintf(str, "-123");
8828         sscanf(str, "%lf", &f);  /* f = -123.; */
8829
8830         signal(SIGFPE, blech);
8831         along = (unsigned long)f;
8832         aint = (unsigned int)f;
8833         ashort = (unsigned short)f;
8834         if (along != (unsigned long)-123)
8835                 result |= 1;
8836         if (aint != (unsigned int)-123)
8837                 result |= 1;
8838         if (ashort != (unsigned short)-123)
8839                 result |= 1;
8840         sprintf(str, "1073741824.");
8841         sscanf(str, "%lf", &f); /* f = (double)0x40000000; */
8842         f = f + f;
8843         along = 0;
8844         along = (unsigned long)f;
8845         if (along != 0x80000000)
8846                 result |= 2;
8847         f -= 1.;
8848         along = 0;
8849         along = (unsigned long)f;
8850         if (along != 0x7fffffff)
8851                 result |= 1;
8852         f += 2.;
8853         along = 0;
8854         along = (unsigned long)f;
8855         if (along != 0x80000001)
8856                 result |= 2;
8857         if (result)
8858                 exit(result);
8859         signal(SIGFPE, blech_in_list);
8860         sprintf(str, "123.");
8861         sscanf(str, "%lf", &f);  /* f = 123.; */
8862         along = dummy_long((unsigned long)f);
8863         aint = dummy_int((unsigned int)f);
8864         ashort = dummy_short((unsigned short)f);
8865         if (along != (unsigned long)123)
8866                 result |= 4;
8867         if (aint != (unsigned int)123)
8868                 result |= 4;
8869         if (ashort != (unsigned short)123)
8870                 result |= 4;
8871         exit(result);
8872
8873 }
8874 EOCP
8875 set try
8876 if eval $compile_ok; then
8877         $run ./try
8878         castflags=$?
8879 else
8880         echo "(I can't seem to compile the test program--assuming it can't)"
8881         castflags=7
8882 fi
8883 case "$castflags" in
8884 0)      val="$define"
8885         echo "Yup, it can."
8886         ;;
8887 *)      val="$undef"
8888         echo "Nope, it can't."
8889         ;;
8890 esac
8891 set d_castneg
8892 eval $setvar
8893 $rm -f try.*
8894
8895 : see if vprintf exists
8896 echo " "
8897 if set vprintf val -f d_vprintf; eval $csym; $val; then
8898         echo 'vprintf() found.' >&4
8899         val="$define"
8900         $cat >try.c <<'EOF'
8901 #include <varargs.h>
8902
8903 int main() { xxx("foo"); }
8904
8905 xxx(va_alist)
8906 va_dcl
8907 {
8908         va_list args;
8909         char buf[10];
8910
8911         va_start(args);
8912         exit((unsigned long)vsprintf(buf,"%s",args) > 10L);
8913 }
8914 EOF
8915         set try
8916         if eval $compile && $run ./try; then
8917                 echo "Your vsprintf() returns (int)." >&4
8918                 val2="$undef"
8919         else
8920                 echo "Your vsprintf() returns (char*)." >&4
8921                 val2="$define"
8922         fi
8923 else
8924         echo 'vprintf() NOT found.' >&4
8925                 val="$undef"
8926                 val2="$undef"
8927 fi
8928 $rm -f try try.*
8929 set d_vprintf
8930 eval $setvar
8931 val=$val2
8932 set d_charvspr
8933 eval $setvar
8934
8935 : see if chown exists
8936 set chown d_chown
8937 eval $inlibc
8938
8939 : see if chroot exists
8940 set chroot d_chroot
8941 eval $inlibc
8942
8943 : see if chsize exists
8944 set chsize d_chsize
8945 eval $inlibc
8946
8947 hasstruct='varname=$1; struct=$2; shift; shift;
8948 while $test $# -ge 2; do
8949         case "$1" in
8950         $define) echo "#include <$2>";;
8951         esac ;
8952     shift 2;
8953 done > try.c;
8954 echo "int main () { struct $struct foo; }" >> try.c;
8955 set try;
8956 if eval $compile; then
8957         val="$define";
8958 else
8959         val="$undef";
8960 fi;
8961 set $varname;
8962 eval $setvar;
8963 $rm -f try.c try.o'
8964
8965 : see if sys/types.h has to be included
8966 set sys/types.h i_systypes
8967 eval $inhdr
8968
8969 hasfield='varname=$1; struct=$2; field=$3; shift; shift; shift;
8970 while $test $# -ge 2; do
8971         case "$1" in
8972         $define) echo "#include <$2>";;
8973         esac ;
8974     shift 2;
8975 done > try.c;
8976 echo "int main () { struct $struct foo; char* bar; bar = (char*)foo.$field; }" >> try.c;
8977 set try;
8978 if eval $compile; then
8979         val="$define";
8980 else
8981         val="$undef";
8982 fi;
8983 set $varname;
8984 eval $setvar;
8985 $rm -f try.c try.o'
8986
8987 socketlib=''
8988 sockethdr=''
8989 : see whether socket exists
8990 echo " "
8991 $echo $n "Hmm... $c" >&4
8992 if set socket val -f d_socket; eval $csym; $val; then
8993         echo "Looks like you have Berkeley networking support." >&4
8994         d_socket="$define"
8995         if set setsockopt val -f; eval $csym; $val; then
8996                 d_oldsock="$undef"
8997         else
8998                 echo "...but it uses the old BSD 4.1c interface, rather than 4.2." >&4
8999                 d_oldsock="$define"
9000         fi
9001 else
9002         if $contains socklib libc.list >/dev/null 2>&1; then
9003                 echo "Looks like you have Berkeley networking support." >&4
9004                 d_socket="$define"
9005                 : we will have to assume that it supports the 4.2 BSD interface
9006                 d_oldsock="$undef"
9007         else
9008                 echo "You don't have Berkeley networking in libc$_a..." >&4
9009                 if test "X$d_socket" = "X$define"; then
9010                    echo "...but you seem to believe that you have sockets." >&4
9011                 else
9012                         for net in net socket
9013                         do
9014                                 if test -f /usr/lib/lib$net$_a; then
9015                                         ( ($nm $nm_opt /usr/lib/lib$net$_a | eval $nm_extract) ||  \
9016                                         $ar t /usr/lib/lib$net$_a) 2>/dev/null >> libc.list
9017                                         if $contains socket libc.list >/dev/null 2>&1; then
9018                                                 d_socket="$define"
9019                                                 socketlib="-l$net"
9020                                                 case "$net" in
9021                                                 net)
9022                                                         echo "...but the Wollongong group seems to have hacked it in." >&4
9023                                                         sockethdr="-I/usr/netinclude"
9024                                                         ;;
9025                                                 esac
9026                                                 echo "Found Berkeley sockets interface in lib$net." >& 4 
9027                                                 if $contains setsockopt libc.list >/dev/null 2>&1; then
9028                                                         d_oldsock="$undef"
9029                                                 else
9030                                                         echo "...using the old BSD 4.1c interface, rather than 4.2." >&4
9031                                                         d_oldsock="$define"
9032                                                 fi
9033                                                 break
9034                                         fi
9035                                 fi
9036                         done
9037                         if test "X$d_socket" != "X$define"; then
9038                            echo "or anywhere else I see." >&4
9039                            d_socket="$undef"
9040                            d_oldsock="$undef"
9041                         fi
9042                 fi
9043         fi
9044 fi
9045
9046 : see if socketpair exists
9047 set socketpair d_sockpair
9048 eval $inlibc
9049
9050
9051 echo " "
9052 echo "Checking the availability of certain socket constants..." >& 4
9053 for ENUM in MSG_CTRUNC MSG_DONTROUTE MSG_OOB MSG_PEEK MSG_PROXY SCM_RIGHTS; do
9054         enum=`$echo $ENUM|./tr '[A-Z]' '[a-z]'`
9055         $cat >try.c <<EOF
9056 #include <sys/types.h>
9057 #include <sys/socket.h>
9058 int main() {
9059     int i = $ENUM;
9060 }
9061 EOF
9062         val="$undef"
9063         set try; if eval $compile; then
9064                 val="$define"
9065         fi
9066         set d_${enum}; eval $setvar
9067         $rm -f try.c try
9068 done
9069
9070 : see if this is a sys/uio.h system
9071 set sys/uio.h i_sysuio
9072 eval $inhdr
9073
9074
9075 echo " "
9076 echo "Checking to see if your system supports struct cmsghdr..." >&4
9077 set d_cmsghdr_s cmsghdr $i_systypes sys/types.h $d_socket sys/socket.h $i_sysuio sys/uio.h
9078 eval $hasstruct
9079 case "$d_cmsghdr_s" in
9080 "$define")      echo "Yes, it does."   ;;
9081 *)              echo "No, it doesn't." ;;
9082 esac
9083
9084
9085 : check for const keyword
9086 echo " "
9087 echo 'Checking to see if your C compiler knows about "const"...' >&4
9088 $cat >const.c <<'EOCP'
9089 typedef struct spug { int drokk; } spug;
9090 int main()
9091 {
9092         const char *foo;
9093         const spug y;
9094 }
9095 EOCP
9096 if $cc -c $ccflags const.c >/dev/null 2>&1 ; then
9097         val="$define"
9098         echo "Yup, it does."
9099 else
9100         val="$undef"
9101         echo "Nope, it doesn't."
9102 fi
9103 set d_const
9104 eval $setvar
9105
9106 : see if crypt exists
9107 echo " "
9108 if set crypt val -f d_crypt; eval $csym; $val; then
9109         echo 'crypt() found.' >&4
9110         val="$define"
9111         cryptlib=''
9112 else
9113         cryptlib=`./loc Slibcrypt$_a "" $xlibpth`
9114         if $test -z "$cryptlib"; then
9115                 cryptlib=`./loc Mlibcrypt$_a "" $xlibpth`
9116         else
9117                 cryptlib=-lcrypt
9118         fi
9119         if $test -z "$cryptlib"; then
9120                 cryptlib=`./loc Llibcrypt$_a "" $xlibpth`
9121         else
9122                 cryptlib=-lcrypt
9123         fi
9124         if $test -z "$cryptlib"; then
9125                 cryptlib=`./loc libcrypt$_a "" $libpth`
9126         else
9127                 cryptlib=-lcrypt
9128         fi
9129         if $test -z "$cryptlib"; then
9130                 echo 'crypt() NOT found.' >&4
9131                 val="$undef"
9132         else
9133                 val="$define"
9134         fi
9135 fi
9136 set d_crypt
9137 eval $setvar
9138
9139 : get csh whereabouts
9140 case "$csh" in
9141 'csh') val="$undef" ;;
9142 *) val="$define" ;;
9143 esac
9144 set d_csh
9145 eval $setvar
9146 : Respect a hint or command line value for full_csh.
9147 case "$full_csh" in
9148 '') full_csh=$csh ;;
9149 esac
9150
9151 : see if cuserid exists
9152 set cuserid d_cuserid
9153 eval $inlibc
9154
9155 : see if this is a limits.h system
9156 set limits.h i_limits
9157 eval $inhdr
9158
9159 : see if this is a float.h system
9160 set float.h i_float
9161 eval $inhdr
9162
9163 : See if number of significant digits in a double precision number is known
9164 echo " "
9165 $cat >dbl_dig.c <<EOM
9166 #$i_limits I_LIMITS
9167 #$i_float I_FLOAT
9168 #ifdef I_LIMITS
9169 #include <limits.h>
9170 #endif
9171 #ifdef I_FLOAT
9172 #include <float.h>
9173 #endif
9174 #ifdef DBL_DIG
9175 printf("Contains DBL_DIG");
9176 #endif
9177 EOM
9178 $cppstdin $cppflags $cppminus < dbl_dig.c >dbl_dig.E 2>/dev/null
9179 if $contains 'DBL_DIG' dbl_dig.E >/dev/null 2>&1; then
9180         echo "DBL_DIG found." >&4
9181         val="$define"
9182 else
9183         echo "DBL_DIG NOT found." >&4
9184         val="$undef"
9185 fi
9186 $rm -f dbl_dig.?
9187 set d_dbl_dig
9188 eval $setvar
9189
9190 hasproto='varname=$1; func=$2; shift; shift;
9191 while $test $# -ge 2; do
9192         case "$1" in
9193         $define) echo "#include <$2>";;
9194         esac ;
9195     shift 2;
9196 done > try.c;
9197 $cppstdin $cppflags $cppminus < try.c > tryout.c 2>/dev/null;
9198 if $contains "$func.*(" tryout.c >/dev/null 2>&1; then
9199         echo "$func() prototype found.";
9200         val="$define";
9201 else
9202         echo "$func() prototype NOT found.";
9203         val="$undef";
9204 fi;
9205 set $varname;
9206 eval $setvar;
9207 $rm -f try.c tryout.c'
9208
9209 : see if dbm.h is available
9210 : see if dbmclose exists
9211 set dbmclose d_dbmclose
9212 eval $inlibc
9213
9214 case "$d_dbmclose" in
9215 $define)
9216         set dbm.h i_dbm
9217         eval $inhdr
9218         case "$i_dbm" in
9219         $define)
9220                 val="$undef"
9221                 set i_rpcsvcdbm
9222                 eval $setvar
9223                 ;;
9224         *)      set rpcsvc/dbm.h i_rpcsvcdbm
9225                 eval $inhdr
9226                 ;;
9227         esac
9228         ;;
9229 *)      echo "We won't be including <dbm.h>"
9230         val="$undef"
9231         set i_dbm
9232         eval $setvar
9233         val="$undef"
9234         set i_rpcsvcdbm
9235         eval $setvar
9236         ;;
9237 esac
9238
9239 : see if prototype for dbminit is available
9240 echo " "
9241 set d_dbminitproto dbminit $i_dbm dbm.h
9242 eval $hasproto
9243
9244 : see if difftime exists
9245 set difftime d_difftime
9246 eval $inlibc
9247
9248 : see if this is a dirent system
9249 echo " "
9250 if xinc=`./findhdr dirent.h`; $test "$xinc"; then
9251         val="$define"
9252         echo "<dirent.h> found." >&4
9253 else
9254         val="$undef"
9255         if xinc=`./findhdr sys/dir.h`; $test "$xinc"; then
9256                 echo "<sys/dir.h> found." >&4
9257                 echo " "
9258         else
9259                 xinc=`./findhdr sys/ndir.h`
9260         fi
9261         echo "<dirent.h> NOT found." >&4
9262 fi
9263 set i_dirent
9264 eval $setvar
9265
9266 : Look for type of directory structure.
9267 echo " "
9268 $cppstdin $cppflags $cppminus < "$xinc" > try.c
9269
9270 case "$direntrytype" in
9271 ''|' ')
9272         case "$i_dirent" in
9273         $define) guess1='struct dirent' ;;
9274         *) guess1='struct direct'  ;;
9275         esac
9276         ;;
9277 *)      guess1="$direntrytype"
9278         ;;
9279 esac
9280
9281 case "$guess1" in
9282 'struct dirent') guess2='struct direct' ;;
9283 *) guess2='struct dirent' ;;
9284 esac
9285                 
9286 if $contains "$guess1" try.c >/dev/null 2>&1; then
9287         direntrytype="$guess1"
9288         echo "Your directory entries are $direntrytype." >&4
9289 elif $contains "$guess2" try.c >/dev/null 2>&1; then
9290         direntrytype="$guess2"
9291         echo "Your directory entries seem to be $direntrytype." >&4
9292 else
9293         echo "I don't recognize your system's directory entries." >&4
9294         rp="What type is used for directory entries on this system?"
9295         dflt="$guess1"
9296         . ./myread
9297         direntrytype="$ans"
9298 fi
9299 $rm -f try.c
9300
9301
9302 : see if the directory entry stores field length
9303 echo " "
9304 $cppstdin $cppflags $cppminus < "$xinc" > try.c
9305 if $contains 'd_namlen' try.c >/dev/null 2>&1; then
9306         echo "Good, your directory entry keeps length information in d_namlen." >&4
9307         val="$define"
9308 else
9309         echo "Your directory entry does not know about the d_namlen field." >&4
9310         val="$undef"
9311 fi
9312 set d_dirnamlen
9313 eval $setvar
9314 $rm -f try.c
9315
9316 : see if dlerror exists
9317 xxx_runnm="$runnm"
9318 runnm=false
9319 set dlerror d_dlerror
9320 eval $inlibc
9321 runnm="$xxx_runnm"
9322
9323 : see if dlfcn is available
9324 set dlfcn.h i_dlfcn
9325 eval $inhdr
9326
9327 case "$usedl" in
9328 $define|y|true)
9329         $cat << EOM
9330
9331 On a few systems, the dynamically loaded modules that perl generates and uses
9332 will need a different extension than shared libs. The default will probably
9333 be appropriate.
9334
9335 EOM
9336         case "$dlext" in
9337         '')     dflt="$so" ;;
9338         *)      dflt="$dlext" ;;
9339         esac
9340         rp='What is the extension of dynamically loaded modules'
9341         . ./myread
9342         dlext="$ans"
9343         ;;
9344 *)
9345         dlext="none"
9346         ;;
9347 esac
9348
9349 : Check if dlsym need a leading underscore
9350 echo " "
9351 val="$undef"
9352
9353 case "$dlsrc" in
9354 dl_dlopen.xs)
9355         echo "Checking whether your dlsym() needs a leading underscore ..." >&4
9356         $cat >dyna.c <<'EOM'
9357 fred () { }
9358 EOM
9359
9360 $cat >fred.c<<EOM
9361
9362 #include <stdio.h>
9363 #$i_dlfcn I_DLFCN
9364 #ifdef I_DLFCN
9365 #include <dlfcn.h>      /* the dynamic linker include file for SunOS/Solaris */
9366 #else
9367 #include <sys/types.h>
9368 #include <nlist.h>
9369 #include <link.h>
9370 #endif
9371
9372 extern int fred() ;
9373
9374 int main()
9375 {
9376     void * handle ;
9377     void * symbol ;
9378 #ifndef RTLD_LAZY
9379     int mode = 1 ;
9380 #else
9381     int mode = RTLD_LAZY ;
9382 #endif
9383     handle = dlopen("./dyna.$dlext", mode) ;
9384     if (handle == NULL) {
9385         printf ("1\n") ;
9386         fflush (stdout) ;
9387         exit(0);
9388     }
9389     symbol = dlsym(handle, "fred") ;
9390     if (symbol == NULL) {
9391         /* try putting a leading underscore */
9392         symbol = dlsym(handle, "_fred") ;
9393         if (symbol == NULL) {
9394             printf ("2\n") ;
9395             fflush (stdout) ;
9396             exit(0);
9397         }
9398         printf ("3\n") ;
9399     }
9400     else
9401         printf ("4\n") ;
9402     fflush (stdout) ;
9403     exit(0);
9404 }
9405 EOM
9406         : Call the object file tmp-dyna.o in case dlext=o.
9407         if $cc $ccflags $cccdlflags -c dyna.c > /dev/null 2>&1 && 
9408                 mv dyna${_o} tmp-dyna${_o} > /dev/null 2>&1 && 
9409                 $ld -o dyna.$dlext $ldflags $lddlflags tmp-dyna${_o} > /dev/null 2>&1 && 
9410                 $cc -o fred $ccflags $ldflags $cccdlflags $ccdlflags fred.c $libs > /dev/null 2>&1 && $to dyna.$dlext; then
9411                 xxx=`$run ./fred`
9412                 case $xxx in
9413                 1)      echo "Test program failed using dlopen." >&4
9414                         echo "Perhaps you should not use dynamic loading." >&4;;
9415                 2)      echo "Test program failed using dlsym." >&4
9416                         echo "Perhaps you should not use dynamic loading." >&4;;
9417                 3)      echo "dlsym needs a leading underscore" >&4
9418                         val="$define" ;;
9419                 4)      echo "dlsym doesn't need a leading underscore." >&4;;
9420                 esac
9421         else
9422                 echo "I can't compile and run the test program." >&4
9423                 echo "I'm guessing that dlsym doesn't need a leading underscore." >&4
9424         fi
9425         ;;
9426 esac
9427                 
9428 $rm -f fred fred.? dyna.$dlext dyna.? tmp-dyna.?
9429
9430 set d_dlsymun
9431 eval $setvar
9432
9433 : see if prototype for drand48 is available
9434 echo " "
9435 set d_drand48proto drand48 $i_stdlib stdlib.h $i_unistd unistd.h
9436 eval $hasproto
9437
9438 : see if dup2 exists
9439 set dup2 d_dup2
9440 eval $inlibc
9441
9442 : see if eaccess exists
9443 set eaccess d_eaccess
9444 eval $inlibc
9445
9446 : see if endgrent exists
9447 set endgrent d_endgrent
9448 eval $inlibc
9449
9450 : see if endhostent exists
9451 set endhostent d_endhent
9452 eval $inlibc
9453
9454 : see if endnetent exists
9455 set endnetent d_endnent
9456 eval $inlibc
9457
9458 : see if endprotoent exists
9459 set endprotoent d_endpent
9460 eval $inlibc
9461
9462 : see if endpwent exists
9463 set endpwent d_endpwent
9464 eval $inlibc
9465
9466 : see if endservent exists
9467 set endservent d_endsent
9468 eval $inlibc
9469
9470 : Locate the flags for 'open()'
9471 echo " "
9472 $cat >try.c <<'EOCP'
9473 #include <sys/types.h>
9474 #ifdef I_FCNTL
9475 #include <fcntl.h>
9476 #endif
9477 #ifdef I_SYS_FILE
9478 #include <sys/file.h>
9479 #endif
9480 int main() {
9481         if(O_RDONLY);
9482 #ifdef O_TRUNC
9483         exit(0);
9484 #else
9485         exit(1);
9486 #endif
9487 }
9488 EOCP
9489 : check sys/file.h first to get FREAD on Sun
9490 if $test `./findhdr sys/file.h` && \
9491                 set try -DI_SYS_FILE && eval $compile; then
9492         h_sysfile=true;
9493         echo "<sys/file.h> defines the O_* constants..." >&4
9494         if $run ./try; then
9495                 echo "and you have the 3 argument form of open()." >&4
9496                 val="$define"
9497         else
9498                 echo "but not the 3 argument form of open().  Oh, well." >&4
9499                 val="$undef"
9500         fi
9501 elif $test `./findhdr fcntl.h` && \
9502                 set try -DI_FCNTL && eval $compile; then
9503         h_fcntl=true;
9504         echo "<fcntl.h> defines the O_* constants..." >&4
9505         if $run ./try; then
9506                 echo "and you have the 3 argument form of open()." >&4
9507                 val="$define"
9508         else
9509                 echo "but not the 3 argument form of open().  Oh, well." >&4
9510                 val="$undef"
9511         fi
9512 else
9513         val="$undef"
9514         echo "I can't find the O_* constant definitions!  You got problems." >&4
9515 fi
9516 set d_open3
9517 eval $setvar
9518 $rm -f try try.*
9519
9520 : see which of string.h or strings.h is needed
9521 echo " "
9522 strings=`./findhdr string.h`
9523 if $test "$strings" && $test -r "$strings"; then
9524         echo "Using <string.h> instead of <strings.h>." >&4
9525         val="$define"
9526 else
9527         val="$undef"
9528         strings=`./findhdr strings.h`
9529         if $test "$strings" && $test -r "$strings"; then
9530                 echo "Using <strings.h> instead of <string.h>." >&4
9531         else
9532                 echo "No string header found -- You'll surely have problems." >&4
9533         fi
9534 fi
9535 set i_string
9536 eval $setvar
9537 case "$i_string" in
9538 "$undef") strings=`./findhdr strings.h`;;
9539 *)        strings=`./findhdr string.h`;;
9540 esac
9541
9542 : check for non-blocking I/O stuff
9543 case "$h_sysfile" in
9544 true) echo "#include <sys/file.h>" > head.c;;
9545 *)
9546        case "$h_fcntl" in
9547        true) echo "#include <fcntl.h>" > head.c;;
9548        *) echo "#include <sys/fcntl.h>" > head.c;;
9549        esac
9550        ;;
9551 esac
9552 echo " "
9553 echo "Figuring out the flag used by open() for non-blocking I/O..." >&4
9554 case "$o_nonblock" in
9555 '')
9556         $cat head.c > try.c
9557         $cat >>try.c <<'EOCP'
9558 #include <stdio.h>
9559 int main() {
9560 #ifdef O_NONBLOCK
9561         printf("O_NONBLOCK\n");
9562         exit(0);
9563 #endif
9564 #ifdef O_NDELAY
9565         printf("O_NDELAY\n");
9566         exit(0);
9567 #endif
9568 #ifdef FNDELAY
9569         printf("FNDELAY\n");
9570         exit(0);
9571 #endif
9572         exit(0);
9573 }
9574 EOCP
9575         set try
9576         if eval $compile_ok; then
9577                 o_nonblock=`$run ./try`
9578                 case "$o_nonblock" in
9579                 '') echo "I can't figure it out, assuming O_NONBLOCK will do.";;
9580                 *) echo "Seems like we can use $o_nonblock.";;
9581                 esac
9582         else
9583                 echo "(I can't compile the test program; pray O_NONBLOCK is right!)"
9584         fi
9585         ;;
9586 *) echo "Using $hint value $o_nonblock.";;
9587 esac
9588 $rm -f try try.* .out core
9589
9590 echo " "
9591 echo "Let's see what value errno gets from read() on a $o_nonblock file..." >&4
9592 case "$eagain" in
9593 '')
9594         $cat head.c > try.c
9595         $cat >>try.c <<EOCP
9596 #include <errno.h>
9597 #include <sys/types.h>
9598 #include <signal.h>
9599 #include <stdio.h> 
9600 #define MY_O_NONBLOCK $o_nonblock
9601 #ifndef errno  /* XXX need better Configure test */
9602 extern int errno;
9603 #endif
9604 #$i_unistd I_UNISTD
9605 #ifdef I_UNISTD
9606 #include <unistd.h>
9607 #endif
9608 #$i_string I_STRING
9609 #ifdef I_STRING
9610 #include <string.h>
9611 #else
9612 #include <strings.h>
9613 #endif
9614 $signal_t blech(x) int x; { exit(3); }
9615 EOCP
9616         $cat >> try.c <<'EOCP'
9617 int main()
9618 {
9619         int pd[2];
9620         int pu[2];
9621         char buf[1];
9622         char string[100];
9623
9624         pipe(pd);       /* Down: child -> parent */
9625         pipe(pu);       /* Up: parent -> child */
9626         if (0 != fork()) {
9627                 int ret;
9628                 close(pd[1]);   /* Parent reads from pd[0] */
9629                 close(pu[0]);   /* Parent writes (blocking) to pu[1] */
9630 #ifdef F_SETFL
9631                 if (-1 == fcntl(pd[0], F_SETFL, MY_O_NONBLOCK))
9632                         exit(1);
9633 #else
9634                 exit(4);
9635 #endif
9636                 signal(SIGALRM, blech);
9637                 alarm(5);
9638                 if ((ret = read(pd[0], buf, 1)) > 0)    /* Nothing to read! */
9639                         exit(2);
9640                 sprintf(string, "%d\n", ret);
9641                 write(2, string, strlen(string));
9642                 alarm(0);
9643 #ifdef EAGAIN
9644                 if (errno == EAGAIN) {
9645                         printf("EAGAIN\n");
9646                         goto ok;
9647                 }
9648 #endif
9649 #ifdef EWOULDBLOCK
9650                 if (errno == EWOULDBLOCK)
9651                         printf("EWOULDBLOCK\n");
9652 #endif
9653         ok:
9654                 write(pu[1], buf, 1);   /* Unblocks child, tell it to close our pipe */
9655                 sleep(2);                               /* Give it time to close our pipe */
9656                 alarm(5);
9657                 ret = read(pd[0], buf, 1);      /* Should read EOF */
9658                 alarm(0);
9659                 sprintf(string, "%d\n", ret);
9660                 write(3, string, strlen(string));
9661                 exit(0);
9662         }
9663
9664         close(pd[0]);                   /* We write to pd[1] */
9665         close(pu[1]);                   /* We read from pu[0] */
9666         read(pu[0], buf, 1);    /* Wait for parent to signal us we may continue */
9667         close(pd[1]);                   /* Pipe pd is now fully closed! */
9668         exit(0);                                /* Bye bye, thank you for playing! */
9669 }
9670 EOCP
9671         set try
9672         if eval $compile_ok; then
9673                 echo "$startsh" >mtry
9674                 echo "$run ./try >try.out 2>try.ret 3>try.err || exit 4" >>mtry
9675                 chmod +x mtry
9676                 ./mtry >/dev/null 2>&1
9677                 case $? in
9678                 0) eagain=`$cat try.out`;;
9679                 1) echo "Could not perform non-blocking setting!";;
9680                 2) echo "I did a successful read() for something that was not there!";;
9681                 3) echo "Hmm... non-blocking I/O does not seem to be working!";;
9682                 4) echo "Could not find F_SETFL!";;
9683                 *) echo "Something terribly wrong happened during testing.";;
9684                 esac
9685                 rd_nodata=`$cat try.ret`
9686                 echo "A read() system call with no data present returns $rd_nodata."
9687                 case "$rd_nodata" in
9688                 0|-1) ;;
9689                 *)
9690                         echo "(That's peculiar, fixing that to be -1.)"
9691                         rd_nodata=-1
9692                         ;;
9693                 esac
9694                 case "$eagain" in
9695                 '')
9696                         echo "Forcing errno EAGAIN on read() with no data available."
9697                         eagain=EAGAIN
9698                         ;;
9699                 *)
9700                         echo "Your read() sets errno to $eagain when no data is available."
9701                         ;;
9702                 esac
9703                 status=`$cat try.err`
9704                 case "$status" in
9705                 0) echo "And it correctly returns 0 to signal EOF.";;
9706                 -1) echo "But it also returns -1 to signal EOF, so be careful!";;
9707                 *) echo "However, your read() returns '$status' on EOF??";;
9708                 esac
9709                 val="$define"
9710                 if test "$status" = "$rd_nodata"; then
9711                         echo "WARNING: you can't distinguish between EOF and no data!"
9712                         val="$undef"
9713                 fi
9714         else
9715                 echo "I can't compile the test program--assuming errno EAGAIN will do."
9716                 eagain=EAGAIN
9717         fi
9718         set d_eofnblk
9719         eval $setvar
9720         ;;
9721 *)
9722         echo "Using $hint value $eagain."
9723         echo "Your read() returns $rd_nodata when no data is present."
9724         case "$d_eofnblk" in
9725         "$define") echo "And you can see EOF because read() returns 0.";;
9726         "$undef") echo "But you can't see EOF status from read() returned value.";;
9727         *)
9728                 echo "(Assuming you can't see EOF status from read anyway.)"
9729                 d_eofnblk=$undef
9730                 ;;
9731         esac
9732         ;;
9733 esac
9734 $rm -f try try.* .out core head.c mtry
9735
9736 : see if fchmod exists
9737 set fchmod d_fchmod
9738 eval $inlibc
9739
9740 : see if fchown exists
9741 set fchown d_fchown
9742 eval $inlibc
9743
9744 : see if this is an fcntl system
9745 set fcntl d_fcntl
9746 eval $inlibc
9747
9748 echo " "
9749 : See if fcntl-based locking works.
9750 $cat >try.c <<'EOCP'
9751 #include <stdlib.h>
9752 #include <unistd.h>
9753 #include <fcntl.h>
9754 int main() {
9755 #if defined(F_SETLK) && defined(F_SETLKW)
9756      struct flock flock;
9757      int retval, fd;
9758      fd = open("try.c", O_RDONLY);
9759      flock.l_type = F_RDLCK;
9760      flock.l_whence = SEEK_SET;
9761      flock.l_start = flock.l_len = 0;
9762      retval = fcntl(fd, F_SETLK, &flock);
9763      close(fd);
9764      (retval < 0 ? exit(2) : exit(0));
9765 #else
9766      exit(2);
9767 #endif
9768 }
9769 EOCP
9770 echo "Checking if fcntl-based file locking works... "
9771 case "$d_fcntl" in
9772 "$define")
9773         set try
9774         if eval $compile_ok; then
9775                 if $run ./try; then
9776                         echo "Yes, it seems to work."
9777                         val="$define"
9778                 else
9779                         echo "Nope, it didn't work."
9780                         val="$undef"
9781                 fi
9782         else
9783                 echo "I'm unable to compile the test program, so I'll assume not."
9784                 val="$undef"
9785         fi
9786         ;;
9787 *) val="$undef";
9788         echo "Nope, since you don't even have fcntl()."
9789         ;;
9790 esac
9791 set d_fcntl_can_lock
9792 eval $setvar
9793 $rm -f try*
9794
9795
9796 : see if sys/select.h has to be included
9797 set sys/select.h i_sysselct
9798 eval $inhdr
9799
9800 : see if we should include time.h, sys/time.h, or both
9801 echo " "
9802 if test "X$timeincl" = X; then
9803         echo "Testing to see if we should include <time.h>, <sys/time.h> or both." >&4
9804         $echo $n "I'm now running the test program...$c"
9805         $cat >try.c <<'EOCP'
9806 #include <sys/types.h>
9807 #ifdef I_TIME
9808 #include <time.h>
9809 #endif
9810 #ifdef I_SYSTIME
9811 #ifdef SYSTIMEKERNEL
9812 #define KERNEL
9813 #endif
9814 #include <sys/time.h>
9815 #endif
9816 #ifdef I_SYSSELECT
9817 #include <sys/select.h>
9818 #endif
9819 int main()
9820 {
9821         struct tm foo;
9822 #ifdef S_TIMEVAL
9823         struct timeval bar;
9824 #endif
9825 #ifdef S_TIMEZONE
9826         struct timezone tzp;
9827 #endif
9828         if (foo.tm_sec == foo.tm_sec)
9829                 exit(0);
9830 #ifdef S_TIMEVAL
9831         if (bar.tv_sec == bar.tv_sec)
9832                 exit(0);
9833 #endif
9834         exit(1);
9835 }
9836 EOCP
9837         flags=''
9838         for s_timezone in '-DS_TIMEZONE' ''; do
9839         sysselect=''
9840         for s_timeval in '-DS_TIMEVAL' ''; do
9841         for i_systimek in '' '-DSYSTIMEKERNEL'; do
9842         for i_time in '' '-DI_TIME'; do
9843         for i_systime in '-DI_SYSTIME' ''; do
9844                 case "$flags" in
9845                 '') $echo $n ".$c"
9846                         set try $i_time $i_systime $i_systimek $sysselect $s_timeval $s_timezone
9847                         if eval $compile; then
9848                                 set X $i_time $i_systime $i_systimek $sysselect $s_timeval
9849                                 shift
9850                                 flags="$*"
9851                                 echo " "
9852                                 $echo $n "Succeeded with $flags$c"
9853                         fi
9854                         ;;
9855                 esac
9856         done
9857         done
9858         done
9859         done
9860         done
9861         timeincl=''
9862         echo " "
9863         case "$flags" in
9864         *SYSTIMEKERNEL*) i_systimek="$define"
9865                 timeincl=`./findhdr sys/time.h`
9866                 echo "We'll include <sys/time.h> with KERNEL defined." >&4;;
9867         *) i_systimek="$undef";;
9868         esac
9869         case "$flags" in
9870         *I_TIME*) i_time="$define"
9871                 timeincl=`./findhdr time.h`" $timeincl"
9872                 echo "We'll include <time.h>." >&4;;
9873         *) i_time="$undef";;
9874         esac
9875         case "$flags" in
9876         *I_SYSTIME*) i_systime="$define"
9877                 timeincl=`./findhdr sys/time.h`" $timeincl"
9878                 echo "We'll include <sys/time.h>." >&4;;
9879         *) i_systime="$undef";;
9880         esac
9881         $rm -f try.c try
9882 fi
9883
9884 : check for fd_set items
9885 $cat <<EOM
9886
9887 Checking to see how well your C compiler handles fd_set and friends ...
9888 EOM
9889 $cat >try.c <<EOCP
9890 #$i_systime I_SYS_TIME
9891 #$i_sysselct I_SYS_SELECT
9892 #$d_socket HAS_SOCKET
9893 #include <sys/types.h>
9894 #ifdef HAS_SOCKET
9895 #include <sys/socket.h> /* Might include <sys/bsdtypes.h> */
9896 #endif
9897 #ifdef I_SYS_TIME
9898 #include <sys/time.h>
9899 #endif
9900 #ifdef I_SYS_SELECT
9901 #include <sys/select.h>
9902 #endif
9903 int main() {
9904         fd_set fds;
9905
9906 #ifdef TRYBITS
9907         if(fds.fds_bits);
9908 #endif
9909
9910 #if defined(FD_SET) && defined(FD_CLR) && defined(FD_ISSET) && defined(FD_ZERO)
9911         exit(0);
9912 #else
9913         exit(1);
9914 #endif
9915 }
9916 EOCP
9917 set try -DTRYBITS
9918 if eval $compile; then
9919         d_fds_bits="$define"
9920         d_fd_set="$define"
9921         echo "Well, your system knows about the normal fd_set typedef..." >&4
9922         if $run ./try; then
9923                 echo "and you have the normal fd_set macros (just as I'd expect)." >&4
9924                 d_fd_macros="$define"
9925         else
9926                 $cat >&4 <<'EOM'
9927 but not the normal fd_set macros!  Gaaack!  I'll have to cover for you.
9928 EOM
9929                 d_fd_macros="$undef"
9930         fi
9931 else
9932         $cat <<'EOM'
9933 Hmm, your compiler has some difficulty with fd_set.  Checking further...
9934 EOM
9935         set try
9936         if eval $compile; then
9937                 d_fds_bits="$undef"
9938                 d_fd_set="$define"
9939                 echo "Well, your system has some sort of fd_set available..." >&4
9940                 if $run ./try; then
9941                         echo "and you have the normal fd_set macros." >&4
9942                         d_fd_macros="$define"
9943                 else
9944                         $cat <<'EOM'
9945 but not the normal fd_set macros!  Gross!  More work for me...
9946 EOM
9947                         d_fd_macros="$undef"
9948                 fi
9949         else
9950         echo "Well, you got zip.  That's OK, I can roll my own fd_set stuff." >&4
9951                 d_fd_set="$undef"
9952                 d_fds_bits="$undef"
9953                 d_fd_macros="$undef"
9954         fi
9955 fi
9956 $rm -f try try.*
9957
9958 : see if fgetpos exists
9959 set fgetpos d_fgetpos
9960 eval $inlibc
9961
9962 : see if flock exists
9963 set flock d_flock
9964 eval $inlibc
9965
9966 : see if this is a sys/file.h system
9967 val=''
9968 set sys/file.h val
9969 eval $inhdr
9970
9971 : do we need to include sys/file.h ?
9972 case "$val" in
9973 "$define")
9974         echo " "
9975         if $h_sysfile; then
9976                 val="$define"
9977                 echo "We'll be including <sys/file.h>." >&4
9978         else
9979                 val="$undef"
9980                 echo "We won't be including <sys/file.h>." >&4
9981         fi
9982         ;;
9983 *)
9984         h_sysfile=false
9985         ;;
9986 esac
9987 set i_sysfile
9988 eval $setvar
9989
9990 : see if prototype for flock is available
9991 echo " "
9992 set d_flockproto flock $i_sysfile sys/file.h
9993 eval $hasproto
9994
9995 : see if fork exists
9996 set fork d_fork
9997 eval $inlibc
9998
9999 : see if pathconf exists
10000 set pathconf d_pathconf
10001 eval $inlibc
10002
10003 : see if fpathconf exists
10004 set fpathconf d_fpathconf
10005 eval $inlibc
10006
10007
10008 : check for fpos64_t
10009 echo " "
10010 echo "Checking to see if you have fpos64_t..." >&4
10011 $cat >try.c <<EOCP
10012 #include <stdio.h>
10013 int main() { fpos64_t x = 7; }
10014 EOCP
10015 set try
10016 if eval $compile; then
10017         val="$define"
10018         echo "You have fpos64_t."
10019 else
10020         val="$undef"
10021         echo "You do not have fpos64_t."
10022         case "$fpossize" in
10023         8) echo "(Your fpos_t is 64 bits, so you could use that.)" ;;
10024         esac
10025 fi
10026 $rm -f try.* try
10027 set d_fpos64_t
10028 eval $setvar
10029
10030 : see if frexpl exists
10031 set frexpl d_frexpl
10032 eval $inlibc
10033
10034 : see if this is a sys/param system
10035 set sys/param.h i_sysparam
10036 eval $inhdr
10037
10038 : see if this is a sys/mount.h system
10039 set sys/mount.h i_sysmount
10040 eval $inhdr
10041
10042
10043 echo " "
10044 echo "Checking to see if your system supports struct fs_data..." >&4
10045 set d_fs_data_s fs_data $i_systypes sys/types.h $i_sysparam sys/param.h $i_sysmount sys/mount.h
10046 eval $hasstruct
10047 case "$d_fs_data_s" in
10048 "$define")      echo "Yes, it does."   ;;
10049 *)              echo "No, it doesn't." ;;
10050 esac
10051
10052 : see if fseeko exists
10053 set fseeko d_fseeko
10054 eval $inlibc
10055 case "$longsize" in
10056 8) echo "(Your long is 64 bits, so you could use fseek.)" ;;
10057 esac
10058
10059 : see if fsetpos exists
10060 set fsetpos d_fsetpos
10061 eval $inlibc
10062
10063
10064 : see if fstatfs exists
10065 set fstatfs d_fstatfs
10066 eval $inlibc
10067
10068
10069 : see if statvfs exists
10070 set statvfs d_statvfs
10071 eval $inlibc
10072
10073 : see if fstatvfs exists
10074 set fstatvfs d_fstatvfs
10075 eval $inlibc
10076
10077
10078 : see if fsync exists
10079 set fsync d_fsync
10080 eval $inlibc
10081
10082 : see if ftello exists
10083 set ftello d_ftello
10084 eval $inlibc
10085 case "$longsize" in
10086 8) echo "(Your long is 64 bits, so you could use ftell.)" ;;
10087 esac
10088
10089 : see if getcwd exists
10090 set getcwd d_getcwd
10091 eval $inlibc
10092
10093 : see if getespwnam exists
10094 set getespwnam d_getespwnam
10095 eval $inlibc
10096
10097
10098 : see if getfsstat exists
10099 set getfsstat d_getfsstat
10100 eval $inlibc
10101
10102 : see if getgrent exists
10103 set getgrent d_getgrent
10104 eval $inlibc
10105
10106 : see if gethostbyaddr exists
10107 set gethostbyaddr d_gethbyaddr
10108 eval $inlibc
10109
10110 : see if gethostbyname exists
10111 set gethostbyname d_gethbyname
10112 eval $inlibc
10113
10114 : see if gethostent exists
10115 set gethostent d_gethent
10116 eval $inlibc
10117
10118 : see how we will look up host name
10119 echo " "
10120 call=''
10121 if set gethostname val -f d_gethname; eval $csym; $val; then
10122         echo 'gethostname() found.' >&4
10123         d_gethname="$define"
10124         call=gethostname
10125 fi
10126 if set uname val -f d_uname; eval $csym; $val; then
10127         if ./xenix; then
10128                 $cat <<'EOM'
10129 uname() was found, but you're running xenix, and older versions of xenix
10130 have a broken uname(). If you don't really know whether your xenix is old
10131 enough to have a broken system call, use the default answer.
10132
10133 EOM
10134                 dflt=y
10135                 case "$d_uname" in
10136                 "$define") dflt=n;;
10137                 esac
10138                 rp='Is your uname() broken?'
10139                 . ./myread
10140                 case "$ans" in
10141                 n*) d_uname="$define"; call=uname;;
10142                 esac
10143         else
10144                 echo 'uname() found.' >&4
10145                 d_uname="$define"
10146                 case "$call" in
10147                 '') call=uname ;;
10148                 esac
10149         fi
10150 fi
10151 case "$d_gethname" in
10152 '') d_gethname="$undef";;
10153 esac
10154 case "$d_uname" in
10155 '') d_uname="$undef";;
10156 esac
10157 case "$d_uname$d_gethname" in
10158 *define*)
10159         dflt=n
10160         cat <<EOM
10161  
10162 Every now and then someone has a $call() that lies about the hostname
10163 but can't be fixed for political or economic reasons.  If you wish, I can
10164 pretend $call() isn't there and maybe compute hostname at run-time
10165 thanks to the '$phostname' command.
10166
10167 EOM
10168         rp="Shall I ignore $call() from now on?"
10169         . ./myread
10170         case "$ans" in
10171         y*) d_uname="$undef" d_gethname="$undef"; $echo $n "Okay...$c";;
10172         esac;;
10173 esac
10174 case "$phostname" in
10175 '') aphostname='';;
10176 *) case "$aphostname" in
10177         /*) ;;
10178         *) set X $phostname
10179                 shift
10180                 file=$1
10181                 shift
10182                 file=`./loc $file $file $pth`
10183                 aphostname=`echo $file $*`
10184                 ;;
10185         esac
10186         ;;
10187 esac
10188 case "$d_uname$d_gethname" in
10189 *define*) ;;
10190 *)
10191         case "$phostname" in
10192         '')
10193                 echo "There will be no way for $package to get your hostname." >&4;;
10194         *)
10195         echo "I'll use 'popen("'"'$aphostname'", "r")'"' to get your hostname." >&4
10196                 ;;
10197         esac;;
10198 esac
10199 case "$d_phostname" in
10200 '') d_phostname="$undef";;
10201 esac
10202
10203 : see if this is a netdb.h system
10204 set netdb.h i_netdb
10205 eval $inhdr
10206
10207 : see if prototypes for various gethostxxx netdb.h functions are available
10208 echo " "
10209 set d_gethostprotos gethostent $i_netdb netdb.h
10210 eval $hasproto
10211
10212 : see if getitimer exists
10213 set getitimer d_getitimer
10214 eval $inlibc
10215
10216 : see if getlogin exists
10217 set getlogin d_getlogin
10218 eval $inlibc
10219
10220 : see if getmnt exists
10221 set getmnt d_getmnt
10222 eval $inlibc
10223
10224 : see if getmntent exists
10225 set getmntent d_getmntent
10226 eval $inlibc
10227
10228 : see if getnetbyaddr exists
10229 set getnetbyaddr d_getnbyaddr
10230 eval $inlibc
10231
10232 : see if getnetbyname exists
10233 set getnetbyname d_getnbyname
10234 eval $inlibc
10235
10236 : see if getnetent exists
10237 set getnetent d_getnent
10238 eval $inlibc
10239
10240 : see if prototypes for various getnetxxx netdb.h functions are available
10241 echo " "
10242 set d_getnetprotos getnetent $i_netdb netdb.h
10243 eval $hasproto
10244
10245 : see if getpagesize exists
10246 set getpagesize d_getpagsz
10247 eval $inlibc
10248
10249
10250 : see if getprotobyname exists
10251 set getprotobyname d_getpbyname
10252 eval $inlibc
10253
10254 : see if getprotobynumber exists
10255 set getprotobynumber d_getpbynumber
10256 eval $inlibc
10257
10258 : see if getprotoent exists
10259 set getprotoent d_getpent
10260 eval $inlibc
10261
10262 : see if getpgid exists
10263 set getpgid d_getpgid
10264 eval $inlibc
10265
10266 : see if getpgrp2 exists
10267 set getpgrp2 d_getpgrp2
10268 eval $inlibc
10269
10270 : see if getppid exists
10271 set getppid d_getppid
10272 eval $inlibc
10273
10274 : see if getpriority exists
10275 set getpriority d_getprior
10276 eval $inlibc
10277
10278 : see if prototypes for various getprotoxxx netdb.h functions are available
10279 echo " "
10280 set d_getprotoprotos getprotoent $i_netdb netdb.h
10281 eval $hasproto
10282
10283 : see if getprpwnam exists
10284 set getprpwnam d_getprpwnam
10285 eval $inlibc
10286
10287 : see if getpwent exists
10288 set getpwent d_getpwent
10289 eval $inlibc
10290
10291
10292 : see if getservbyname exists
10293 set getservbyname d_getsbyname
10294 eval $inlibc
10295
10296 : see if getservbyport exists
10297 set getservbyport d_getsbyport
10298 eval $inlibc
10299
10300 : see if getservent exists
10301 set getservent d_getsent
10302 eval $inlibc
10303
10304 : see if prototypes for various getservxxx netdb.h functions are available
10305 echo " "
10306 set d_getservprotos getservent $i_netdb netdb.h
10307 eval $hasproto
10308
10309 : see if getspnam exists
10310 set getspnam d_getspnam
10311 eval $inlibc
10312
10313 : see if gettimeofday or ftime exists
10314 set gettimeofday d_gettimeod
10315 eval $inlibc
10316 case "$d_gettimeod" in
10317 "$undef")
10318         set ftime d_ftime 
10319         eval $inlibc
10320         ;;
10321 *)
10322         val="$undef"; set d_ftime; eval $setvar
10323         ;;
10324 esac
10325 case "$d_gettimeod$d_ftime" in
10326 "$undef$undef")
10327         echo " "
10328         echo 'No ftime() nor gettimeofday() -- timing may be less accurate.' >&4
10329         ;;
10330 esac
10331
10332 : see if this is an grp system
10333 set grp.h i_grp
10334 eval $inhdr
10335
10336 case "$i_grp" in
10337 $define)
10338         xxx=`./findhdr grp.h`
10339         $cppstdin $cppflags $cppminus < $xxx >$$.h
10340
10341         if $contains 'gr_passwd' $$.h >/dev/null 2>&1; then
10342                 val="$define"
10343         else
10344                 val="$undef"
10345         fi
10346         set d_grpasswd
10347         eval $setvar
10348
10349         $rm -f $$.h
10350         ;;
10351 *)
10352         val="$undef";
10353         set d_grpasswd; eval $setvar
10354         ;;
10355 esac
10356
10357 : see if hasmntopt exists
10358 set hasmntopt d_hasmntopt
10359 eval $inlibc
10360
10361 : see if this is a netinet/in.h or sys/in.h system
10362 set netinet/in.h i_niin sys/in.h i_sysin
10363 eval $inhdr
10364
10365 : see if arpa/inet.h has to be included
10366 set arpa/inet.h i_arpainet
10367 eval $inhdr
10368
10369 : see if htonl --and friends-- exists
10370 val=''
10371 set htonl val
10372 eval $inlibc
10373
10374 : Maybe they are macros.
10375 case "$val" in
10376 $undef)
10377         $cat >htonl.c <<EOM
10378 #include <stdio.h>
10379 #include <sys/types.h>
10380 #$i_niin I_NETINET_IN
10381 #$i_sysin I_SYS_IN
10382 #$i_arpainet I_ARPA_INET
10383 #ifdef I_NETINET_IN
10384 #include <netinet/in.h>
10385 #endif
10386 #ifdef I_SYS_IN
10387 #include <sys/in.h>
10388 #endif
10389 #ifdef I_ARPA_INET
10390 #include <arpa/inet.h>
10391 #endif
10392 #ifdef htonl
10393 printf("Defined as a macro.");
10394 #endif
10395 EOM
10396         $cppstdin $cppflags $cppminus < htonl.c >htonl.E 2>/dev/null
10397         if $contains 'Defined as a macro' htonl.E >/dev/null 2>&1; then
10398                 val="$define"
10399                 echo "But it seems to be defined as a macro." >&4
10400         fi
10401         $rm -f htonl.?
10402         ;;
10403 esac
10404 set d_htonl
10405 eval $setvar
10406
10407 : see if iconv exists
10408 set iconv d_iconv
10409 eval $inlibc
10410
10411 : index or strchr
10412 echo " "
10413 if set index val -f; eval $csym; $val; then
10414         if set strchr val -f d_strchr; eval $csym; $val; then
10415                 if $contains strchr "$strings" >/dev/null 2>&1 ; then
10416                         val="$define"
10417                         vali="$undef"
10418                         echo "strchr() found." >&4
10419                 else
10420                         val="$undef"
10421                         vali="$define"
10422                         echo "index() found." >&4
10423                 fi
10424         else
10425                 val="$undef"
10426                 vali="$define"
10427                 echo "index() found." >&4
10428         fi
10429 else
10430         if set strchr val -f d_strchr; eval $csym; $val; then
10431                 val="$define"
10432                 vali="$undef"
10433                 echo "strchr() found." >&4
10434         else
10435                 echo "No index() or strchr() found!" >&4
10436                 val="$undef"
10437                 vali="$undef"
10438         fi
10439 fi
10440 set d_strchr; eval $setvar
10441 val="$vali"
10442 set d_index; eval $setvar
10443
10444 : check whether inet_aton exists
10445 set inet_aton d_inetaton
10446 eval $inlibc
10447
10448 : Look for isascii
10449 echo " "
10450 $cat >isascii.c <<'EOCP'
10451 #include <stdio.h>
10452 #include <ctype.h>
10453 int main() {
10454         int c = 'A';
10455         if (isascii(c))
10456                 exit(0);
10457         else
10458                 exit(1);
10459 }
10460 EOCP
10461 set isascii
10462 if eval $compile; then
10463         echo "isascii() found." >&4
10464         val="$define"
10465 else
10466         echo "isascii() NOT found." >&4
10467         val="$undef"
10468 fi
10469 set d_isascii
10470 eval $setvar
10471 $rm -f isascii*
10472
10473 : see if isnan exists
10474 set isnan d_isnan
10475 eval $inlibc
10476
10477 : see if isnanl exists
10478 set isnanl d_isnanl
10479 eval $inlibc
10480
10481 : see if killpg exists
10482 set killpg d_killpg
10483 eval $inlibc
10484
10485 : see if lchown exists
10486 echo " "
10487 $cat > try.c <<'EOCP'
10488 /* System header to define __stub macros and hopefully few prototypes,
10489     which can conflict with char lchown(); below.  */
10490 #include <assert.h>
10491 /* Override any gcc2 internal prototype to avoid an error.  */
10492 /* We use char because int might match the return type of a gcc2
10493    builtin and then its argument prototype would still apply.  */
10494 char lchown();
10495 int main() {
10496     /*  The GNU C library defines this for functions which it implements
10497         to always fail with ENOSYS.  Some functions are actually named
10498         something starting with __ and the normal name is an alias.  */
10499 #if defined (__stub_lchown) || defined (__stub___lchown)
10500 choke me
10501 #else
10502 lchown();
10503 #endif
10504 ; return 0; }
10505 EOCP
10506 set try
10507 if eval $compile; then
10508     $echo "lchown() found." >&4
10509     val="$define"
10510 else
10511     $echo "lchown() NOT found." >&4
10512     val="$undef"
10513 fi
10514 set d_lchown
10515 eval $setvar
10516
10517 : See if number of significant digits in a double precision number is known
10518 echo " "
10519 $cat >ldbl_dig.c <<EOM
10520 #$i_limits I_LIMITS
10521 #$i_float I_FLOAT
10522 #ifdef I_LIMITS
10523 #include <limits.h>
10524 #endif
10525 #ifdef I_FLOAT
10526 #include <float.h>
10527 #endif
10528 #ifdef LDBL_DIG
10529 printf("Contains LDBL_DIG");
10530 #endif
10531 EOM
10532 $cppstdin $cppflags $cppminus < ldbl_dig.c >ldbl_dig.E 2>/dev/null
10533 if $contains 'LDBL_DIG' ldbl_dig.E >/dev/null 2>&1; then
10534         echo "LDBL_DIG found." >&4
10535         val="$define"
10536 else
10537         echo "LDBL_DIG NOT found." >&4
10538         val="$undef"
10539 fi
10540 $rm -f ldbl_dig.?
10541 set d_ldbl_dig
10542 eval $setvar
10543
10544 : see if link exists
10545 set link d_link
10546 eval $inlibc
10547
10548 : see if localeconv exists
10549 set localeconv d_locconv
10550 eval $inlibc
10551
10552 : see if lockf exists
10553 set lockf d_lockf
10554 eval $inlibc
10555
10556 : see if prototype for lseek is available
10557 echo " "
10558 set d_lseekproto lseek $i_systypes sys/types.h $i_unistd unistd.h
10559 eval $hasproto
10560
10561 : see if lstat exists
10562 set lstat d_lstat
10563 eval $inlibc
10564
10565 : see if madvise exists
10566 set madvise d_madvise
10567 eval $inlibc
10568
10569 : see if mblen exists
10570 set mblen d_mblen
10571 eval $inlibc
10572
10573 : see if mbstowcs exists
10574 set mbstowcs d_mbstowcs
10575 eval $inlibc
10576
10577 : see if mbtowc exists
10578 set mbtowc d_mbtowc
10579 eval $inlibc
10580
10581 : see if memchr exists
10582 set memchr d_memchr
10583 eval $inlibc
10584
10585 : see if memcmp exists
10586 set memcmp d_memcmp
10587 eval $inlibc
10588
10589 : see if memcpy exists
10590 set memcpy d_memcpy
10591 eval $inlibc
10592
10593 : see if memmove exists
10594 set memmove d_memmove
10595 eval $inlibc
10596
10597 : see if memset exists
10598 set memset d_memset
10599 eval $inlibc
10600
10601 : see if mkdir exists
10602 set mkdir d_mkdir
10603 eval $inlibc
10604
10605 : see if mkdtemp exists
10606 set mkdtemp d_mkdtemp
10607 eval $inlibc
10608
10609 : see if mkfifo exists
10610 set mkfifo d_mkfifo
10611 eval $inlibc
10612
10613 : see if mkstemp exists
10614 set mkstemp d_mkstemp
10615 eval $inlibc
10616
10617 : see if mkstemps exists
10618 set mkstemps d_mkstemps
10619 eval $inlibc
10620
10621 : see if mktime exists
10622 set mktime d_mktime
10623 eval $inlibc
10624
10625 : see if this is a sys/mman.h system
10626 set sys/mman.h i_sysmman
10627 eval $inhdr
10628
10629 : see if mmap exists
10630 set mmap d_mmap
10631 eval $inlibc
10632 : see what shmat returns
10633 : default to something harmless
10634 mmaptype='void *'
10635 case "$i_sysmman$d_mmap" in
10636 "$define$define")
10637         $cat >mmap.c <<'END'
10638 #include <sys/mman.h>
10639 void *mmap();
10640 END
10641         if $cc $ccflags -c mmap.c >/dev/null 2>&1; then
10642                 mmaptype='void *'
10643         else
10644                 mmaptype='caddr_t'
10645         fi
10646         echo "and it returns ($mmaptype)." >&4
10647         ;;
10648 esac
10649
10650
10651
10652 : see if modfl exists
10653 set modfl d_modfl
10654 eval $inlibc
10655
10656 d_modfl_pow32_bug="$undef"
10657
10658 case "$d_longdbl$d_modfl" in
10659 $define$define)
10660         $cat <<EOM
10661 Checking to see whether your modfl() is okay for large values...
10662 EOM
10663 $cat >try.c <<EOCP
10664 #include <math.h> 
10665 #include <stdio.h>
10666 int main() {
10667     long double nv = 4294967303.15;
10668     long double v, w;
10669     v = modfl(nv, &w);         
10670 #ifdef __GLIBC__
10671     printf("glibc");
10672 #endif
10673     printf(" %"$sPRIfldbl" %"$sPRIfldbl" %"$sPRIfldbl"\n", nv, v, w);
10674     return 0;
10675 }
10676 EOCP
10677         case "$osname:$gccversion" in
10678         aix:)   saveccflags="$ccflags"
10679                 ccflags="$ccflags -qlongdouble" ;; # to avoid core dump
10680         esac
10681         set try
10682         if eval $compile; then
10683                 foo=`$run ./try`
10684                 case "$foo" in
10685                 *" 4294967303.150000 1.150000 4294967302.000000")
10686                         echo >&4 "Your modfl() is broken for large values."
10687                         d_modfl_pow32_bug="$define"
10688                         case "$foo" in
10689                         glibc)  echo >&4 "You should upgrade your glibc to at least 2.2.2 to get a fixed modfl()."
10690                         ;;
10691                         esac
10692                         ;;
10693                 *" 4294967303.150000 0.150000 4294967303.000000")
10694                         echo >&4 "Your modfl() seems okay for large values."
10695                         ;;
10696                 *)      echo >&4 "I don't understand your modfl() at all."
10697                         d_modfl="$undef"
10698                         ;;
10699                 esac
10700                 $rm -f try.* try core core.try.*
10701         else
10702                 echo "I cannot figure out whether your modfl() is okay, assuming it isn't."
10703                 d_modfl="$undef"
10704         fi
10705         case "$osname:$gccversion" in
10706         aix:)   $ccflags="saveccflags" ;; # restore
10707         esac
10708         ;;
10709 esac
10710
10711 : see if mprotect exists
10712 set mprotect d_mprotect
10713 eval $inlibc
10714
10715 : see if msgctl exists
10716 set msgctl d_msgctl
10717 eval $inlibc
10718
10719 : see if msgget exists
10720 set msgget d_msgget
10721 eval $inlibc
10722
10723 : see if msgsnd exists
10724 set msgsnd d_msgsnd
10725 eval $inlibc
10726
10727 : see if msgrcv exists
10728 set msgrcv d_msgrcv
10729 eval $inlibc
10730
10731 : see how much of the 'msg*(2)' library is present.
10732 h_msg=true
10733 echo " "
10734 case "$d_msgctl$d_msgget$d_msgsnd$d_msgrcv" in
10735 *"$undef"*) h_msg=false;;
10736 esac
10737 case "$osname" in
10738 freebsd)
10739     case "`ipcs 2>&1`" in
10740     "SVID messages"*"not configured"*)
10741         echo "Your $osname does not have the msg*(2) configured." >&4
10742         h_msg=false
10743         val="$undef"
10744         set msgctl d_msgctl
10745         eval $setvar
10746         set msgget d_msgget
10747         eval $setvar
10748         set msgsnd d_msgsnd
10749         eval $setvar
10750         set msgrcv d_msgrcv
10751         eval $setvar
10752         ;;
10753     esac
10754     ;;
10755 esac
10756 : we could also check for sys/ipc.h ...
10757 if $h_msg && $test `./findhdr sys/msg.h`; then
10758         echo "You have the full msg*(2) library." >&4
10759         val="$define"
10760 else
10761         echo "You don't have the full msg*(2) library." >&4
10762         val="$undef"
10763 fi
10764 set d_msg
10765 eval $setvar
10766
10767
10768 echo " "
10769 echo "Checking to see if your system supports struct msghdr..." >&4
10770 set d_msghdr_s msghdr $i_systypes sys/types.h $d_socket sys/socket.h $i_sysuio sys/uio.h
10771 eval $hasstruct
10772 case "$d_msghdr_s" in
10773 "$define")      echo "Yes, it does."   ;;
10774 *)              echo "No, it doesn't." ;;
10775 esac
10776
10777
10778 : see if msync exists
10779 set msync d_msync
10780 eval $inlibc
10781
10782 : see if munmap exists
10783 set munmap d_munmap
10784 eval $inlibc
10785
10786 : see if nice exists
10787 set nice d_nice
10788 eval $inlibc
10789
10790 : check for length of character
10791 echo " "
10792 case "$charsize" in
10793 '')
10794         echo "Checking to see how big your characters are (hey, you never know)..." >&4
10795         $cat >try.c <<'EOCP'
10796 #include <stdio.h>
10797 int main()
10798 {
10799     printf("%d\n", (int)sizeof(char));
10800     exit(0);
10801 }
10802 EOCP
10803         set try
10804         if eval $compile_ok; then
10805                 dflt=`$run ./try`
10806         else
10807                 dflt='1'
10808                 echo "(I can't seem to compile the test program.  Guessing...)"
10809         fi
10810         ;;
10811 *)
10812         dflt="$charsize"
10813         ;;
10814 esac
10815 rp="What is the size of a character (in bytes)?"
10816 . ./myread
10817 charsize="$ans"
10818 $rm -f try.c try
10819
10820 : check for volatile keyword
10821 echo " "
10822 echo 'Checking to see if your C compiler knows about "volatile"...' >&4
10823 $cat >try.c <<'EOCP'
10824 int main()
10825 {
10826         typedef struct _goo_struct goo_struct;
10827         goo_struct * volatile goo = ((goo_struct *)0);
10828         struct _goo_struct {
10829                 long long_int;
10830                 int reg_int;
10831                 char char_var;
10832         };
10833         typedef unsigned short foo_t;
10834         char *volatile foo;
10835         volatile int bar;
10836         volatile foo_t blech;
10837         foo = foo;
10838 }
10839 EOCP
10840 if $cc -c $ccflags try.c >/dev/null 2>&1 ; then
10841         val="$define"
10842         echo "Yup, it does."
10843 else
10844         val="$undef"
10845         echo "Nope, it doesn't."
10846 fi
10847 set d_volatile
10848 eval $setvar
10849 $rm -f try.*
10850
10851
10852 echo " "
10853 $echo "Choosing the C types to be used for Perl's internal types..." >&4
10854
10855 case "$use64bitint:$d_quad:$quadtype" in
10856 define:define:?*)
10857         ivtype="$quadtype"
10858         uvtype="$uquadtype"
10859         ivsize=8
10860         uvsize=8
10861         ;;
10862 *)      ivtype="long"
10863         uvtype="unsigned long"
10864         ivsize=$longsize
10865         uvsize=$longsize
10866         ;;
10867 esac
10868
10869 case "$uselongdouble:$d_longdbl" in
10870 define:define)
10871         nvtype="long double"
10872         nvsize=$longdblsize
10873         ;;
10874 *)      nvtype=double
10875         nvsize=$doublesize
10876         ;;
10877 esac
10878
10879 $echo "(IV will be "$ivtype", $ivsize bytes)"
10880 $echo "(UV will be "$uvtype", $uvsize bytes)"
10881 $echo "(NV will be "$nvtype", $nvsize bytes)"
10882
10883 $cat >try.c <<EOCP
10884 #$i_inttypes I_INTTYPES
10885 #ifdef I_INTTYPES
10886 #include <inttypes.h>
10887 #endif
10888 #include <stdio.h>
10889 int main() {
10890 #ifdef INT8
10891    int8_t i =  INT8_MAX;
10892   uint8_t u = UINT8_MAX;
10893   printf("int8_t\n");
10894 #endif
10895 #ifdef INT16
10896    int16_t i =  INT16_MAX;
10897   uint16_t i = UINT16_MAX;
10898   printf("int16_t\n");
10899 #endif
10900 #ifdef INT32
10901    int32_t i =  INT32_MAX;
10902   uint32_t u = UINT32_MAX;
10903   printf("int32_t\n");
10904 #endif
10905 }
10906 EOCP
10907
10908 case "$i8type" in
10909 '')     case "$charsize" in
10910         1)      i8type=char
10911                 u8type="unsigned char"
10912                 i8size=$charsize
10913                 u8size=$charsize
10914                 ;;
10915         esac
10916         ;;
10917 esac
10918 case "$i8type" in
10919 '')     set try -DINT8
10920         if eval $compile; then
10921                 case "`$run ./try`" in
10922                 int8_t) i8type=int8_t
10923                         u8type=uint8_t
10924                         i8size=1
10925                         u8size=1
10926                         ;;
10927                 esac
10928         fi
10929         ;;
10930 esac
10931 case "$i8type" in
10932 '')     if $test $charsize -ge 1; then
10933                 i8type=char
10934                 u8type="unsigned char"
10935                 i8size=$charsize
10936                 u8size=$charsize
10937         fi
10938         ;;
10939 esac
10940
10941 case "$i16type" in
10942 '')     case "$shortsize" in
10943         2)      i16type=short
10944                 u16type="unsigned short"
10945                 i16size=$shortsize
10946                 u16size=$shortsize
10947                 ;;
10948         esac
10949         ;;
10950 esac
10951 case "$i16type" in
10952 '')     set try -DINT16
10953         if eval $compile; then
10954                 case "`$run ./try`" in
10955                 int16_t)
10956                         i16type=int16_t
10957                         u16type=uint16_t
10958                         i16size=2
10959                         u16size=2
10960                         ;;
10961                 esac
10962         fi
10963         ;;
10964 esac
10965 case "$i16type" in
10966 '')     if $test $shortsize -ge 2; then
10967                 i16type=short
10968                 u16type="unsigned short"
10969                 i16size=$shortsize
10970                 u16size=$shortsize
10971         fi
10972         ;;
10973 esac
10974
10975 case "$i32type" in
10976 '')     case "$longsize" in
10977         4)      i32type=long
10978                 u32type="unsigned long"
10979                 i32size=$longsize
10980                 u32size=$longsize
10981                 ;;
10982         *)      case "$intsize" in
10983                 4)      i32type=int
10984                         u32type="unsigned int"
10985                         i32size=$intsize
10986                         u32size=$intsize
10987                         ;;
10988                 esac
10989                 ;;
10990         esac
10991         ;;
10992 esac
10993 case "$i32type" in
10994 '')     set try -DINT32
10995         if eval $compile; then
10996                 case "`$run ./try`" in
10997                 int32_t)
10998                         i32type=int32_t
10999                         u32type=uint32_t
11000                         i32size=4
11001                         u32size=4
11002                         ;;
11003                 esac
11004         fi
11005         ;;
11006 esac
11007 case "$i32type" in
11008 '')     if $test $intsize -ge 4; then
11009                 i32type=int
11010                 u32type="unsigned int"
11011                 i32size=$intsize
11012                 u32size=$intsize
11013         fi
11014         ;;
11015 esac
11016
11017 case "$i64type" in
11018 '')     case "$d_quad:$quadtype" in
11019         define:?*)
11020                 i64type="$quadtype"
11021                 u64type="$uquadtype"
11022                 i64size=8
11023                 u64size=8
11024                 ;;
11025         esac
11026         ;;
11027 esac
11028
11029 $echo "Checking how many bits of your UVs your NVs can preserve..." >&4
11030 : volatile so that the compiler has to store it out to memory.
11031 if test X"$d_volatile" = X"$define"; then
11032         volatile=volatile
11033 fi
11034 $cat <<EOP >try.c
11035 #include <stdio.h>
11036 #include <sys/types.h>
11037 #include <signal.h>
11038 #ifdef SIGFPE
11039 $volatile int bletched = 0;
11040 $signal_t blech(s) int s; { bletched = 1; }
11041 #endif
11042 int main() {
11043     $uvtype u = 0;
11044     $nvtype d;
11045     int     n = 8 * $uvsize;
11046     int     i;
11047 #ifdef SIGFPE
11048     signal(SIGFPE, blech);
11049 #endif
11050
11051     for (i = 0; i < n; i++) {
11052       u = u << 1 | ($uvtype)1;
11053       d = ($nvtype)u;
11054       if (($uvtype)d != u)
11055         break;
11056       if (d <= 0)
11057         break;
11058       d = ($nvtype)(u - 1);
11059       if (($uvtype)d != (u - 1))
11060         break;
11061 #ifdef SIGFPE
11062       if (bletched) {
11063         break;
11064 #endif
11065       } 
11066     }
11067     printf("%d\n", ((i == n) ? -n : i));
11068     exit(0);
11069 }
11070 EOP
11071 set try
11072
11073 d_nv_preserves_uv="$undef"
11074 if eval $compile; then
11075         d_nv_preserves_uv_bits="`$run ./try`"
11076 fi
11077 case "$d_nv_preserves_uv_bits" in
11078 \-[1-9]*)       
11079         d_nv_preserves_uv_bits=`expr 0 - $d_nv_preserves_uv_bits`
11080         $echo "Your NVs can preserve all $d_nv_preserves_uv_bits bits of your UVs."  2>&1
11081         d_nv_preserves_uv="$define"
11082         ;;
11083 [1-9]*) $echo "Your NVs can preserve only $d_nv_preserves_uv_bits bits of your UVs."  2>&1
11084         d_nv_preserves_uv="$undef" ;;
11085 *)      $echo "Can't figure out how many bits your NVs preserve." 2>&1
11086         d_nv_preserves_uv_bits="$undef" ;;
11087 esac
11088
11089 $rm -f try.* try
11090
11091
11092 : check for off64_t
11093 echo " "
11094 echo "Checking to see if you have off64_t..." >&4
11095 $cat >try.c <<EOCP
11096 #include <sys/types.h>
11097 #include <unistd.h>
11098 int main() { off64_t x = 7; }
11099 EOCP
11100 set try
11101 if eval $compile; then
11102         val="$define"
11103         echo "You have off64_t."
11104 else
11105         val="$undef"
11106         echo "You do not have off64_t."
11107         case "$lseeksize" in
11108         8) echo "(Your off_t is 64 bits, so you could use that.)" ;;
11109         esac
11110 fi
11111 $rm -f try.* try
11112 set d_off64_t
11113 eval $setvar
11114
11115 : see if POSIX threads are available
11116 set pthread.h i_pthread
11117 eval $inhdr
11118
11119
11120
11121
11122 : how to create joinable pthreads
11123 if test "X$usethreads" = "X$define" -a "X$i_pthread" = "X$define"; then
11124         echo " "
11125         echo "Checking what constant to use for creating joinable pthreads..." >&4 
11126         $cat >try.c <<'EOCP'
11127 #include <pthread.h>
11128 int main() {
11129     int detachstate = JOINABLE;
11130 }
11131 EOCP
11132         set try -DJOINABLE=PTHREAD_CREATE_JOINABLE
11133         if eval $compile; then
11134                 echo "You seem to use PTHREAD_CREATE_JOINABLE." >&4
11135                 val="$undef" # Yes, undef.
11136                 set d_old_pthread_create_joinable
11137                 eval $setvar
11138                 val=""
11139                 set old_pthread_create_joinable
11140                 eval $setvar
11141         else
11142                 set try -DJOINABLE=PTHREAD_CREATE_UNDETACHED
11143                 if eval $compile; then
11144                         echo "You seem to use PTHREAD_CREATE_UNDETACHED." >&4
11145                         val="$define"
11146                         set d_old_pthread_create_joinable
11147                         eval $setvar
11148                         val=PTHREAD_CREATE_UNDETACHED
11149                         set old_pthread_create_joinable
11150                         eval $setvar
11151                 else            
11152                         set try -DJOINABLE=__UNDETACHED
11153                         if eval $compile; then
11154                                 echo "You seem to use __UNDETACHED." >&4
11155                                 val="$define"
11156                                 set d_old_pthread_create_joinable
11157                                 eval $setvar
11158                                 val=__UNDETACHED
11159                                 set old_pthread_create_joinable
11160                                 eval $setvar
11161                         else
11162                                 echo "Egads, nothing obvious found.  Guessing that you use 0." >&4
11163                                 val="$define"
11164                                 set d_old_pthread_create_joinable
11165                                 eval $setvar
11166                                 val=0
11167                                 set old_pthread_create_joinable
11168                                 eval $setvar
11169                         fi
11170                 fi
11171         fi
11172         $rm -f try try.*
11173 else
11174     d_old_pthread_create_joinable="$undef"
11175     old_pthread_create_joinable=""
11176 fi
11177
11178 : see if pause exists
11179 set pause d_pause
11180 eval $inlibc
11181
11182 : see if pipe exists
11183 set pipe d_pipe
11184 eval $inlibc
11185
11186 : see if poll exists
11187 set poll d_poll
11188 eval $inlibc
11189
11190
11191 : see whether the various POSIXish _yields exist
11192 $cat >try.c <<EOP
11193 #include <pthread.h>
11194 #include <stdio.h>
11195 int main() {
11196 #ifdef SCHED_YIELD
11197         sched_yield();
11198 #else
11199 #ifdef PTHREAD_YIELD
11200         pthread_yield();
11201 #else
11202 #ifdef PTHREAD_YIELD_NULL
11203         pthread_yield(NULL);
11204 #endif
11205 #endif
11206 #endif
11207 }
11208 EOP
11209 : see if sched_yield exists
11210 set try -DSCHED_YIELD
11211 if eval $compile; then
11212     val="$define"
11213     sched_yield='sched_yield()'
11214 else
11215     val="$undef"
11216 fi
11217 case "$usethreads" in
11218 $define)
11219         case "$val" in
11220         $define) echo 'sched_yield() found.' >&4        ;;
11221         *)       echo 'sched_yield() NOT found.' >&4    ;;
11222         esac
11223 esac
11224 set d_sched_yield
11225 eval $setvar
11226
11227 : see if pthread_yield exists
11228 set try -DPTHREAD_YIELD
11229 if eval $compile; then
11230     val="$define"
11231     case "$sched_yield" in
11232     '') sched_yield='pthread_yield()' ;;
11233     esac
11234 else
11235     set try -DPTHREAD_YIELD_NULL
11236     if eval $compile; then
11237         val="$define"
11238         case "$sched_yield" in
11239         '') sched_yield='pthread_yield(NULL)' ;;
11240         esac
11241     else
11242         val="$undef"
11243     fi
11244 fi
11245 case "$usethreads" in
11246 $define)
11247         case "$val" in
11248         $define) echo 'pthread_yield() found.' >&4      ;;
11249         *)       echo 'pthread_yield() NOT found.' >&4  ;;
11250         esac
11251         ;;
11252 esac
11253 set d_pthread_yield
11254 eval $setvar
11255
11256 case "$sched_yield" in
11257 '') sched_yield=undef ;;
11258 esac
11259
11260 $rm -f try try.*
11261
11262 : see if this is a pwd.h system
11263 set pwd.h i_pwd
11264 eval $inhdr
11265
11266 case "$i_pwd" in
11267 $define)
11268         xxx=`./findhdr pwd.h`
11269         $cppstdin $cppflags $cppminus < $xxx >$$.h
11270
11271         if $contains 'pw_quota' $$.h >/dev/null 2>&1; then
11272                 val="$define"
11273         else
11274                 val="$undef"
11275         fi
11276         set d_pwquota
11277         eval $setvar
11278
11279         if $contains 'pw_age' $$.h >/dev/null 2>&1; then
11280                 val="$define"
11281         else
11282                 val="$undef"
11283         fi
11284         set d_pwage
11285         eval $setvar
11286
11287         if $contains 'pw_change' $$.h >/dev/null 2>&1; then
11288                 val="$define"
11289         else
11290                 val="$undef"
11291         fi
11292         set d_pwchange
11293         eval $setvar
11294
11295         if $contains 'pw_class' $$.h >/dev/null 2>&1; then
11296                 val="$define"
11297         else
11298                 val="$undef"
11299         fi
11300         set d_pwclass
11301         eval $setvar
11302
11303         if $contains 'pw_expire' $$.h >/dev/null 2>&1; then
11304                 val="$define"
11305         else
11306                 val="$undef"
11307         fi
11308         set d_pwexpire
11309         eval $setvar
11310
11311         if $contains 'pw_comment' $$.h >/dev/null 2>&1; then
11312                 val="$define"
11313         else
11314                 val="$undef"
11315         fi
11316         set d_pwcomment
11317         eval $setvar
11318
11319         if $contains 'pw_gecos' $$.h >/dev/null 2>&1; then
11320                 val="$define"
11321         else
11322                 val="$undef"
11323         fi
11324         set d_pwgecos
11325         eval $setvar
11326
11327         if $contains 'pw_passwd' $$.h >/dev/null 2>&1; then
11328                 val="$define"
11329         else
11330                 val="$undef"
11331         fi
11332         set d_pwpasswd
11333         eval $setvar
11334
11335         $rm -f $$.h
11336         ;;
11337 *)
11338         val="$undef"; 
11339         set d_pwquota; eval $setvar
11340         set d_pwage; eval $setvar
11341         set d_pwchange; eval $setvar
11342         set d_pwclass; eval $setvar
11343         set d_pwexpire; eval $setvar
11344         set d_pwcomment; eval $setvar
11345         set d_pwgecos; eval $setvar
11346         set d_pwpasswd; eval $setvar
11347         ;;
11348 esac
11349
11350 : see if readdir and friends exist
11351 set readdir d_readdir
11352 eval $inlibc
11353 set seekdir d_seekdir
11354 eval $inlibc
11355 set telldir d_telldir
11356 eval $inlibc
11357 set rewinddir d_rewinddir
11358 eval $inlibc
11359
11360 : see if readlink exists
11361 set readlink d_readlink
11362 eval $inlibc
11363
11364 : see if readv exists
11365 set readv d_readv
11366 eval $inlibc
11367
11368 : see if realpath exists
11369 set realpath d_realpath
11370 eval $inlibc
11371
11372 : see if recvmsg exists
11373 set recvmsg d_recvmsg
11374 eval $inlibc
11375
11376 : see if rename exists
11377 set rename d_rename
11378 eval $inlibc
11379
11380 : see if rmdir exists
11381 set rmdir d_rmdir
11382 eval $inlibc
11383
11384 : see if memory.h is available.
11385 val=''
11386 set memory.h val
11387 eval $inhdr
11388
11389 : See if it conflicts with string.h
11390 case "$val" in
11391 $define)
11392         case "$strings" in
11393         '') ;;
11394         *)
11395                 $cppstdin $cppflags $cppminus < $strings > mem.h
11396                 if $contains 'memcpy' mem.h >/dev/null 2>&1; then
11397                         echo " "
11398                         echo "We won't be including <memory.h>."
11399                         val="$undef"
11400                 fi
11401                 $rm -f mem.h
11402                 ;;
11403         esac
11404 esac
11405 set i_memory
11406 eval $setvar
11407
11408 : can bcopy handle overlapping blocks?
11409 val="$undef"
11410 case "$d_bcopy" in
11411 "$define")
11412         echo " "
11413         echo "Checking to see if your bcopy() can do overlapping copies..." >&4
11414         $cat >try.c <<EOCP
11415 #$i_memory I_MEMORY
11416 #$i_stdlib I_STDLIB
11417 #$i_string I_STRING
11418 #$i_unistd I_UNISTD
11419 EOCP
11420         $cat >>try.c <<'EOCP'
11421 #include <stdio.h>
11422 #ifdef I_MEMORY
11423 #  include <memory.h>
11424 #endif
11425 #ifdef I_STDLIB
11426 #  include <stdlib.h>
11427 #endif
11428 #ifdef I_STRING
11429 #  include <string.h>
11430 #else
11431 #  include <strings.h>
11432 #endif
11433 #ifdef I_UNISTD
11434 #  include <unistd.h>  /* Needed for NetBSD */
11435 #endif
11436 int main()
11437 {
11438 char buf[128], abc[128];
11439 char *b;
11440 int len;
11441 int off;
11442 int align;
11443
11444 bcopy("abcdefghijklmnopqrstuvwxyz0123456789", abc, 36);
11445
11446 for (align = 7; align >= 0; align--) {
11447         for (len = 36; len; len--) {
11448                 b = buf+align;
11449                 bcopy(abc, b, len);
11450                 for (off = 1; off <= len; off++) {
11451                         bcopy(b, b+off, len);
11452                         bcopy(b+off, b, len);
11453                         if (bcmp(b, abc, len))
11454                                 exit(1);
11455                 }
11456         }
11457 }
11458 exit(0);
11459 }
11460 EOCP
11461         set try
11462         if eval $compile_ok; then
11463                 if $run ./try 2>/dev/null; then
11464                         echo "Yes, it can."
11465                         val="$define"
11466                 else
11467                         echo "It can't, sorry."
11468                         case "$d_memmove" in
11469                         "$define") echo "But that's Ok since you have memmove()." ;;
11470                         esac
11471                 fi
11472         else
11473                 echo "(I can't compile the test program, so we'll assume not...)"
11474                 case "$d_memmove" in
11475                 "$define") echo "But that's Ok since you have memmove()." ;;
11476                 esac
11477         fi
11478         ;;
11479 esac
11480 $rm -f try.* try core
11481 set d_safebcpy
11482 eval $setvar
11483
11484 : can memcpy handle overlapping blocks?
11485 val="$undef"
11486 case "$d_memcpy" in
11487 "$define")
11488         echo " "
11489         echo "Checking to see if your memcpy() can do overlapping copies..." >&4
11490         $cat >try.c <<EOCP
11491 #$i_memory I_MEMORY
11492 #$i_stdlib I_STDLIB
11493 #$i_string I_STRING
11494 #$i_unistd I_UNISTD
11495 EOCP
11496         $cat >>try.c <<'EOCP'
11497 #include <stdio.h>
11498 #ifdef I_MEMORY
11499 #  include <memory.h>
11500 #endif
11501 #ifdef I_STDLIB
11502 #  include <stdlib.h>
11503 #endif
11504 #ifdef I_STRING
11505 #  include <string.h>
11506 #else
11507 #  include <strings.h>
11508 #endif
11509 #ifdef I_UNISTD
11510 #  include <unistd.h>  /* Needed for NetBSD */
11511 #endif
11512 int main()
11513 {
11514 char buf[128], abc[128];
11515 char *b;
11516 int len;
11517 int off;
11518 int align;
11519
11520 /* Copy "abcde..." string to char abc[] so that gcc doesn't
11521    try to store the string in read-only memory. */
11522 memcpy(abc, "abcdefghijklmnopqrstuvwxyz0123456789", 36);
11523
11524 for (align = 7; align >= 0; align--) {
11525         for (len = 36; len; len--) {
11526                 b = buf+align;
11527                 memcpy(b, abc, len);
11528                 for (off = 1; off <= len; off++) {
11529                         memcpy(b+off, b, len);
11530                         memcpy(b, b+off, len);
11531                         if (memcmp(b, abc, len))
11532                                 exit(1);
11533                 }
11534         }
11535 }
11536 exit(0);
11537 }
11538 EOCP
11539         set try
11540         if eval $compile_ok; then
11541                 if $run ./try 2>/dev/null; then
11542                         echo "Yes, it can."
11543                         val="$define"
11544                 else
11545                         echo "It can't, sorry."
11546                         case "$d_memmove" in
11547                         "$define") echo "But that's Ok since you have memmove()." ;;
11548                         esac
11549                 fi
11550         else
11551                 echo "(I can't compile the test program, so we'll assume not...)"
11552                 case "$d_memmove" in
11553                 "$define") echo "But that's Ok since you have memmove()." ;;
11554                 esac
11555         fi
11556         ;;
11557 esac
11558 $rm -f try.* try core
11559 set d_safemcpy
11560 eval $setvar
11561
11562 : can memcmp be trusted to compare relative magnitude?
11563 val="$undef"
11564 case "$d_memcmp" in
11565 "$define")
11566         echo " "
11567         echo "Checking if your memcmp() can compare relative magnitude..." >&4
11568         $cat >try.c <<EOCP
11569 #$i_memory I_MEMORY
11570 #$i_stdlib I_STDLIB
11571 #$i_string I_STRING
11572 #$i_unistd I_UNISTD
11573 EOCP
11574         $cat >>try.c <<'EOCP'
11575 #include <stdio.h>
11576 #ifdef I_MEMORY
11577 #  include <memory.h>
11578 #endif
11579 #ifdef I_STDLIB
11580 #  include <stdlib.h>
11581 #endif
11582 #ifdef I_STRING
11583 #  include <string.h>
11584 #else
11585 #  include <strings.h>
11586 #endif
11587 #ifdef I_UNISTD
11588 #  include <unistd.h>  /* Needed for NetBSD */
11589 #endif
11590 int main()
11591 {
11592 char a = -1;
11593 char b = 0;
11594 if ((a < b) && memcmp(&a, &b, 1) < 0)
11595         exit(1);
11596 exit(0);
11597 }
11598 EOCP
11599         set try
11600         if eval $compile_ok; then
11601                 if $run ./try 2>/dev/null; then
11602                         echo "Yes, it can."
11603                         val="$define"
11604                 else
11605                         echo "No, it can't (it uses signed chars)."
11606                 fi
11607         else
11608                 echo "(I can't compile the test program, so we'll assume not...)"
11609         fi
11610         ;;
11611 esac
11612 $rm -f try.* try core
11613 set d_sanemcmp
11614 eval $setvar
11615
11616 : see if prototype for sbrk is available
11617 echo " "
11618 set d_sbrkproto sbrk $i_unistd unistd.h
11619 eval $hasproto
11620
11621 : see if select exists
11622 set select d_select
11623 eval $inlibc
11624
11625 : see if semctl exists
11626 set semctl d_semctl
11627 eval $inlibc
11628
11629 : see if semget exists
11630 set semget d_semget
11631 eval $inlibc
11632
11633 : see if semop exists
11634 set semop d_semop
11635 eval $inlibc
11636
11637 : see how much of the 'sem*(2)' library is present.
11638 h_sem=true
11639 echo " "
11640 case "$d_semctl$d_semget$d_semop" in
11641 *"$undef"*) h_sem=false;;
11642 esac
11643 case "$osname" in
11644 freebsd)
11645     case "`ipcs 2>&1`" in
11646     "SVID messages"*"not configured"*)
11647         echo "Your $osname does not have the sem*(2) configured." >&4
11648         h_sem=false
11649         val="$undef"
11650         set semctl d_semctl
11651         eval $setvar
11652         set semget d_semget
11653         eval $setvar
11654         set semop d_semop
11655         eval $setvar
11656         ;;
11657     esac
11658     ;;
11659 esac
11660 : we could also check for sys/ipc.h ...
11661 if $h_sem && $test `./findhdr sys/sem.h`; then
11662         echo "You have the full sem*(2) library." >&4
11663         val="$define"
11664 else
11665         echo "You don't have the full sem*(2) library." >&4
11666         val="$undef"
11667 fi
11668 set d_sem
11669 eval $setvar
11670
11671 : see whether sys/sem.h defines union semun
11672 echo " "
11673 $cat > try.c <<'END'
11674 #include <sys/types.h>
11675 #include <sys/ipc.h>
11676 #include <sys/sem.h>
11677 int main () { union semun semun; semun.buf = 0; }
11678 END
11679 set try
11680 if eval $compile; then
11681     echo "You have union semun in <sys/sem.h>." >&4
11682     val="$define"
11683 else
11684     echo "You do not have union semun in <sys/sem.h>." >&4
11685     val="$undef"
11686 fi
11687 $rm -f try try.c try.h
11688 set d_union_semun
11689 eval $setvar
11690
11691 : see how to do semctl IPC_STAT
11692 case "$d_sem" in
11693 $define)
11694     : see whether semctl IPC_STAT can use union semun
11695     echo " "
11696     $cat > try.h <<END
11697 #ifndef S_IRUSR
11698 #   ifdef S_IREAD
11699 #       define S_IRUSR S_IREAD
11700 #       define S_IWUSR S_IWRITE
11701 #       define S_IXUSR S_IEXEC
11702 #   else
11703 #       define S_IRUSR 0400
11704 #       define S_IWUSR 0200
11705 #       define S_IXUSR 0100
11706 #   endif
11707 #   define S_IRGRP (S_IRUSR>>3)
11708 #   define S_IWGRP (S_IWUSR>>3)
11709 #   define S_IXGRP (S_IXUSR>>3)
11710 #   define S_IROTH (S_IRUSR>>6)
11711 #   define S_IWOTH (S_IWUSR>>6)
11712 #   define S_IXOTH (S_IXUSR>>6)
11713 #endif
11714 #ifndef S_IRWXU
11715 #   define S_IRWXU (S_IRUSR|S_IWUSR|S_IXUSR)
11716 #   define S_IRWXG (S_IRGRP|S_IWGRP|S_IXGRP)
11717 #   define S_IRWXO (S_IROTH|S_IWOTH|S_IXOTH)
11718 #endif
11719 END
11720
11721     $cat > try.c <<END
11722 #include <sys/types.h>
11723 #include <sys/ipc.h>
11724 #include <sys/sem.h>
11725 #include <sys/stat.h>
11726 #include <stdio.h>
11727 #include <errno.h>
11728 #include "try.h"
11729 #ifndef errno
11730 extern int errno;
11731 #endif
11732 #$d_union_semun HAS_UNION_SEMUN
11733 int main() {
11734     union semun
11735 #ifndef HAS_UNION_SEMUN
11736     {
11737         int val;
11738         struct semid_ds *buf;
11739         unsigned short *array;
11740     }
11741 #endif
11742     arg;
11743     int sem, st;
11744
11745 #if defined(IPC_PRIVATE) && defined(S_IRWXU) && defined(S_IRWXG) && defined(S_IRWXO) && defined(IPC_CREAT)
11746     sem = semget(IPC_PRIVATE, 1, S_IRWXU|S_IRWXG|S_IRWXO|IPC_CREAT);
11747     if (sem > -1) {
11748         struct semid_ds argbuf;
11749         arg.buf = &argbuf;
11750 #       ifdef IPC_STAT
11751         st = semctl(sem, 0, IPC_STAT, arg);
11752         if (st == 0)
11753             printf("semun\n");
11754         else
11755 #       endif /* IPC_STAT */
11756             printf("semctl IPC_STAT failed: errno = %d\n", errno);
11757 #       ifdef IPC_RMID
11758         if (semctl(sem, 0, IPC_RMID, arg) != 0)
11759 #       endif /* IPC_RMID */
11760             printf("semctl IPC_RMID failed: errno = %d\n", errno);
11761     } else
11762 #endif /* IPC_PRIVATE && ... */
11763         printf("semget failed: errno = %d\n", errno);
11764   return 0;
11765 }
11766 END
11767     val="$undef"
11768     set try
11769     if eval $compile; then
11770         xxx=`$run ./try`
11771         case "$xxx" in
11772         semun) val="$define" ;;
11773         esac
11774     fi
11775     $rm -f try try.c
11776     set d_semctl_semun
11777     eval $setvar
11778     case "$d_semctl_semun" in
11779     $define)
11780         echo "You can use union semun for semctl IPC_STAT." >&4
11781         also='also'
11782         ;;
11783     *)  echo "You cannot use union semun for semctl IPC_STAT." >&4
11784         also=''
11785         ;;
11786     esac
11787
11788     : see whether semctl IPC_STAT can use struct semid_ds pointer
11789     $cat > try.c <<'END'
11790 #include <sys/types.h>
11791 #include <sys/ipc.h>
11792 #include <sys/sem.h>
11793 #include <sys/stat.h>
11794 #include "try.h"
11795 #include <stdio.h>
11796 #include <errno.h>
11797 #ifndef errno
11798 extern int errno;
11799 #endif
11800 int main() {
11801     struct semid_ds arg;
11802     int sem, st;
11803
11804 #if defined(IPC_PRIVATE) && defined(S_IRWXU) && defined(S_IRWXG) &&  defined(S_IRWXO) && defined(IPC_CREAT)
11805     sem = semget(IPC_PRIVATE, 1, S_IRWXU|S_IRWXG|S_IRWXO|IPC_CREAT);
11806     if (sem > -1) {
11807 #       ifdef IPC_STAT
11808         st = semctl(sem, 0, IPC_STAT, &arg);
11809         if (st == 0)
11810             printf("semid_ds\n");
11811         else
11812 #       endif /* IPC_STAT */
11813             printf("semctl IPC_STAT failed: errno = %d\n", errno);
11814 #       ifdef IPC_RMID
11815         if (semctl(sem, 0, IPC_RMID, &arg) != 0)
11816 #       endif /* IPC_RMID */
11817             printf("semctl IPC_RMID failed: errno = %d\n", errno);
11818     } else
11819 #endif /* IPC_PRIVATE && ... */
11820         printf("semget failed: errno = %d\n", errno);
11821
11822     return 0;
11823 }
11824 END
11825     val="$undef"
11826     set try
11827     if eval $compile; then
11828         xxx=`$run ./try`
11829         case "$xxx" in
11830         semid_ds) val="$define" ;;
11831         esac
11832     fi
11833     $rm -f try try.c
11834     set d_semctl_semid_ds
11835     eval $setvar
11836     case "$d_semctl_semid_ds" in
11837     $define)
11838         echo "You can $also use struct semid_ds* for semctl IPC_STAT." >&4
11839         ;;
11840     *)  echo "You cannot use struct semid_ds* for semctl IPC_STAT." >&4
11841         ;;
11842     esac
11843     $rm -f try.h
11844     ;;
11845 *)  val="$undef"
11846
11847     # We do not have the full sem*(2) library, so assume we can not
11848     # use either.
11849
11850     set d_semctl_semun
11851     eval $setvar
11852
11853     set d_semctl_semid_ds
11854     eval $setvar
11855     ;;
11856 esac
11857
11858 : see if sendmsg exists
11859 set sendmsg d_sendmsg
11860 eval $inlibc
11861
11862 : see if setegid exists
11863 set setegid d_setegid
11864 eval $inlibc
11865
11866 : see if seteuid exists
11867 set seteuid d_seteuid
11868 eval $inlibc
11869
11870 : see if setgrent exists
11871 set setgrent d_setgrent
11872 eval $inlibc
11873
11874 : see if sethostent exists
11875 set sethostent d_sethent
11876 eval $inlibc
11877
11878 : see if setitimer exists
11879 set setitimer d_setitimer
11880 eval $inlibc
11881
11882 : see if setlinebuf exists
11883 set setlinebuf d_setlinebuf
11884 eval $inlibc
11885
11886 : see if setlocale exists
11887 set setlocale d_setlocale
11888 eval $inlibc
11889
11890 : see if setnetent exists
11891 set setnetent d_setnent
11892 eval $inlibc
11893
11894 : see if setprotoent exists
11895 set setprotoent d_setpent
11896 eval $inlibc
11897
11898 : see if setpgid exists
11899 set setpgid d_setpgid
11900 eval $inlibc
11901
11902 : see if setpgrp2 exists
11903 set setpgrp2 d_setpgrp2
11904 eval $inlibc
11905
11906 : see if setpriority exists
11907 set setpriority d_setprior
11908 eval $inlibc
11909
11910 : see if setproctitle exists
11911 set setproctitle d_setproctitle
11912 eval $inlibc
11913
11914 : see if setpwent exists
11915 set setpwent d_setpwent
11916 eval $inlibc
11917
11918 : see if setregid exists
11919 set setregid d_setregid
11920 eval $inlibc
11921 set setresgid d_setresgid
11922 eval $inlibc
11923
11924 : see if setreuid exists
11925 set setreuid d_setreuid
11926 eval $inlibc
11927 set setresuid d_setresuid
11928 eval $inlibc
11929
11930 : see if setrgid exists
11931 set setrgid d_setrgid
11932 eval $inlibc
11933
11934 : see if setruid exists
11935 set setruid d_setruid
11936 eval $inlibc
11937
11938 : see if setservent exists
11939 set setservent d_setsent
11940 eval $inlibc
11941
11942 : see if setsid exists
11943 set setsid d_setsid
11944 eval $inlibc
11945
11946 : see if setvbuf exists
11947 set setvbuf d_setvbuf
11948 eval $inlibc
11949
11950 : see if sfio.h is available
11951 set sfio.h i_sfio
11952 eval $inhdr
11953
11954
11955 : see if sfio library is available
11956 case "$i_sfio" in
11957 $define)
11958         val=''
11959         set sfreserve val
11960         eval $inlibc
11961         ;;
11962 *)
11963         val="$undef"
11964         ;;
11965 esac
11966 : Ok, but do we want to use it.
11967 case "$val" in
11968 $define)
11969         case "$usesfio" in
11970         true|$define|[yY]*) dflt='y';;
11971         *) dflt='n';;
11972         esac
11973         echo "$package can use the sfio library, but it is experimental."
11974         case "$useperlio" in
11975         "$undef")
11976             echo "For sfio also the PerlIO abstraction layer is needed."
11977             echo "Earlier you said you wouldn't want that."
11978             ;;
11979         esac
11980         rp="You seem to have sfio available, do you want to try using it?"
11981         . ./myread
11982         case "$ans" in
11983         y|Y)    echo "Ok, turning on both sfio and PerlIO, then."
11984                 useperlio="$define"
11985                 val="$define"
11986                 ;;
11987         *)      echo "Ok, avoiding sfio this time.  I'll use stdio instead."
11988                 val="$undef"
11989                 ;;
11990         esac
11991         ;;
11992 *)      case "$usesfio" in
11993         true|$define|[yY]*)
11994                 echo "Sorry, cannot find sfio on this machine." >&4
11995                 echo "Ignoring your setting of usesfio=$usesfio." >&4
11996                 val="$undef"
11997                 ;;
11998         esac
11999         ;;
12000 esac
12001 set d_sfio
12002 eval $setvar
12003 case "$d_sfio" in
12004 $define) usesfio='true';;
12005 *) usesfio='false';;
12006 esac
12007 case "$d_sfio" in
12008 $define) ;;
12009 *)      : Remove sfio from list of libraries to use
12010         set `echo X $libs | $sed -e 's/-lsfio / /' -e 's/-lsfio$//'`
12011         shift
12012         libs="$*"
12013         echo "libs = $libs" >&4
12014 ;;
12015 esac
12016
12017
12018 : see if shmctl exists
12019 set shmctl d_shmctl
12020 eval $inlibc
12021
12022 : see if shmget exists
12023 set shmget d_shmget
12024 eval $inlibc
12025
12026 : see if shmat exists
12027 set shmat d_shmat
12028 eval $inlibc
12029 : see what shmat returns
12030 case "$d_shmat" in
12031 "$define")
12032         $cat >shmat.c <<'END'
12033 #include <sys/shm.h>
12034 void *shmat();
12035 END
12036         if $cc $ccflags -c shmat.c >/dev/null 2>&1; then
12037                 shmattype='void *'
12038         else
12039                 shmattype='char *'
12040         fi
12041         echo "and it returns ($shmattype)." >&4
12042         : see if a prototype for shmat is available
12043         xxx=`./findhdr sys/shm.h`
12044         $cppstdin $cppflags $cppminus < $xxx > shmat.c 2>/dev/null
12045         if $contains 'shmat.*(' shmat.c >/dev/null 2>&1; then
12046                 val="$define"
12047         else
12048                 val="$undef"
12049         fi
12050         $rm -f shmat.[co]
12051         ;;
12052 *)
12053         val="$undef"
12054         ;;
12055 esac
12056 set d_shmatprototype
12057 eval $setvar
12058
12059 : see if shmdt exists
12060 set shmdt d_shmdt
12061 eval $inlibc
12062
12063 : see how much of the 'shm*(2)' library is present.
12064 h_shm=true
12065 echo " "
12066 case "$d_shmctl$d_shmget$d_shmat$d_shmdt" in
12067 *"$undef"*) h_shm=false;;
12068 esac
12069 case "$osname" in
12070 freebsd)
12071     case "`ipcs 2>&1`" in
12072     "SVID shared memory"*"not configured"*)
12073         echo "Your $osname does not have the shm*(2) configured." >&4
12074         h_shm=false
12075         val="$undef"
12076         set shmctl d_shmctl
12077         evat $setvar
12078         set shmget d_shmget
12079         evat $setvar
12080         set shmat d_shmat
12081         evat $setvar
12082         set shmdt d_shmdt
12083         evat $setvar
12084         ;;
12085     esac
12086     ;;
12087 esac
12088 : we could also check for sys/ipc.h ...
12089 if $h_shm && $test `./findhdr sys/shm.h`; then
12090         echo "You have the full shm*(2) library." >&4
12091         val="$define"
12092 else
12093         echo "You don't have the full shm*(2) library." >&4
12094         val="$undef"
12095 fi
12096 set d_shm
12097 eval $setvar
12098
12099 echo " "
12100 : see if we have sigaction
12101 if set sigaction val -f d_sigaction; eval $csym; $val; then
12102         echo 'sigaction() found.' >&4
12103         $cat > try.c <<'EOP'
12104 #include <stdio.h>
12105 #include <sys/types.h>
12106 #include <signal.h>
12107 int main()
12108 {
12109     struct sigaction act, oact;
12110     act.sa_flags = 0;
12111     oact.sa_handler = 0;
12112     /* so that act and oact are used */
12113     exit(act.sa_flags == 0 &&  oact.sa_handler == 0);
12114 }
12115 EOP
12116         set try
12117         if eval $compile_ok; then
12118                 val="$define"
12119         else
12120                 echo "But you don't seem to have a useable struct sigaction." >&4
12121                 val="$undef"
12122         fi
12123 else
12124         echo 'sigaction NOT found.' >&4
12125         val="$undef"
12126 fi
12127 set d_sigaction; eval $setvar
12128 $rm -f try try$_o try.c
12129
12130 : see if sigprocmask exists
12131 set sigprocmask d_sigprocmask
12132 eval $inlibc
12133
12134 : see if sigsetjmp exists
12135 echo " "
12136 case "$d_sigsetjmp" in
12137 '')
12138         $cat >try.c <<'EOP'
12139 #include <setjmp.h>
12140 sigjmp_buf env;
12141 int set = 1;
12142 int main()
12143 {
12144         if (sigsetjmp(env,1))
12145                 exit(set);
12146         set = 0;
12147         siglongjmp(env, 1);
12148         exit(1);
12149 }
12150 EOP
12151         set try
12152         if eval $compile; then
12153                 if $run ./try >/dev/null 2>&1; then
12154                         echo "POSIX sigsetjmp found." >&4
12155                         val="$define"
12156                 else
12157                         $cat >&4 <<EOM
12158 Uh-Oh! You have POSIX sigsetjmp and siglongjmp, but they do not work properly!!
12159 I'll ignore them.
12160 EOM
12161                         val="$undef"
12162                 fi
12163         else
12164                 echo "sigsetjmp not found." >&4
12165                 val="$undef"
12166         fi
12167         ;;
12168 *) val="$d_sigsetjmp"
12169         case "$d_sigsetjmp" in
12170         $define) echo "POSIX sigsetjmp found." >&4;;
12171         $undef) echo "sigsetjmp not found." >&4;;
12172         esac
12173         ;;
12174 esac
12175 set d_sigsetjmp
12176 eval $setvar
12177 $rm -f try.c try
12178
12179 : see if sockatmark exists
12180 set sockatmark d_sockatmark
12181 eval $inlibc
12182
12183 : see if prototype for sockatmark is available
12184 echo " "
12185 set d_sockatmarkproto sockatmark $d_socket sys/socket.h
12186 eval $hasproto
12187
12188 : see if socks5_init exists
12189 set socks5_init d_socks5_init
12190 eval $inlibc
12191
12192 : see if prototype for setresgid is available
12193 echo " "
12194 set d_sresgproto setresgid $i_unistd unistd.h
12195 eval $hasproto
12196
12197 : see if prototype for setresuid is available
12198 echo " "
12199 set d_sresuproto setresuid $i_unistd unistd.h
12200 eval $hasproto
12201
12202 : see if sys/stat.h is available
12203 set sys/stat.h i_sysstat
12204 eval $inhdr
12205
12206
12207 : see if stat knows about block sizes
12208 echo " "
12209 echo "Checking to see if your struct stat has st_blocks field..." >&4
12210 set d_statblks stat st_blocks $i_sysstat sys/stat.h
12211 eval $hasfield
12212
12213
12214 : see if this is a sys/vfs.h system
12215 set sys/vfs.h i_sysvfs
12216 eval $inhdr
12217
12218
12219 : see if this is a sys/statfs.h system
12220 set sys/statfs.h i_sysstatfs
12221 eval $inhdr
12222
12223
12224 echo " "
12225 echo "Checking to see if your system supports struct statfs..." >&4
12226 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
12227 eval $hasstruct
12228 case "$d_statfs_s" in
12229 "$define")      echo "Yes, it does."   ;;
12230 *)              echo "No, it doesn't." ;;
12231 esac
12232
12233
12234
12235 : see if struct statfs knows about f_flags
12236 case "$d_statfs_s" in
12237 define) 
12238         echo " "
12239         echo "Checking to see if your struct statfs has f_flags field..." >&4
12240         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
12241         eval $hasfield
12242         ;;
12243 *)      val="$undef"
12244         set d_statfs_f_flags
12245         eval $setvar
12246         ;;
12247 esac
12248 case "$d_statfs_f_flags" in
12249 "$define")      echo "Yes, it does."   ;;
12250 *)              echo "No, it doesn't." ;;
12251 esac
12252
12253 : see if _ptr and _cnt from stdio act std
12254 echo " "
12255
12256 if $contains '_lbfsize' `./findhdr stdio.h` >/dev/null 2>&1 ; then
12257         echo "(Looks like you have stdio.h from BSD.)"
12258         case "$stdio_ptr" in
12259         '') stdio_ptr='((fp)->_p)'
12260                 ptr_lval=$define
12261                 ;;
12262         *)      ptr_lval=$d_stdio_ptr_lval;;
12263         esac
12264         case "$stdio_cnt" in
12265         '') stdio_cnt='((fp)->_r)'
12266                 cnt_lval=$define
12267                 ;;
12268         *)      cnt_lval=$d_stdio_cnt_lval;;
12269         esac
12270         case "$stdio_base" in
12271         '') stdio_base='((fp)->_ub._base ? (fp)->_ub._base : (fp)->_bf._base)';;
12272         esac
12273         case "$stdio_bufsiz" in
12274         '') stdio_bufsiz='((fp)->_ub._base ? (fp)->_ub._size : (fp)->_bf._size)';;
12275         esac
12276 elif $contains '_IO_fpos_t' `./findhdr stdio.h` `./findhdr libio.h` >/dev/null 2>&1 ; then
12277         echo "(Looks like you have stdio.h from Linux.)"
12278         case "$stdio_ptr" in
12279         '') stdio_ptr='((fp)->_IO_read_ptr)'
12280                 ptr_lval=$define
12281                 ;;
12282         *)      ptr_lval=$d_stdio_ptr_lval;;
12283         esac
12284         case "$stdio_cnt" in
12285         '') stdio_cnt='((fp)->_IO_read_end - (fp)->_IO_read_ptr)'
12286                 cnt_lval=$undef
12287                 ;;
12288         *)      cnt_lval=$d_stdio_cnt_lval;;
12289         esac
12290         case "$stdio_base" in
12291         '') stdio_base='((fp)->_IO_read_base)';;
12292         esac
12293         case "$stdio_bufsiz" in
12294         '') stdio_bufsiz='((fp)->_IO_read_end - (fp)->_IO_read_base)';;
12295         esac
12296 else
12297         case "$stdio_ptr" in
12298         '') stdio_ptr='((fp)->_ptr)'
12299                 ptr_lval=$define
12300                 ;;
12301         *)      ptr_lval=$d_stdio_ptr_lval;;
12302         esac
12303         case "$stdio_cnt" in
12304         '') stdio_cnt='((fp)->_cnt)'
12305                 cnt_lval=$define
12306                 ;;
12307         *)      cnt_lval=$d_stdio_cnt_lval;;
12308         esac
12309         case "$stdio_base" in
12310         '') stdio_base='((fp)->_base)';;
12311         esac
12312         case "$stdio_bufsiz" in
12313         '') stdio_bufsiz='((fp)->_cnt + (fp)->_ptr - (fp)->_base)';;
12314         esac
12315 fi
12316
12317 : test whether _ptr and _cnt really work
12318 echo "Checking how std your stdio is..." >&4
12319 $cat >try.c <<EOP
12320 #include <stdio.h>
12321 #define FILE_ptr(fp)    $stdio_ptr
12322 #define FILE_cnt(fp)    $stdio_cnt
12323 int main() {
12324         FILE *fp = fopen("try.c", "r");
12325         char c = getc(fp);
12326         if (
12327                 18 <= FILE_cnt(fp) &&
12328                 strncmp(FILE_ptr(fp), "include <stdio.h>\n", 18) == 0
12329         )
12330                 exit(0);
12331         exit(1);
12332 }
12333 EOP
12334 val="$undef"
12335 set try
12336 if eval $compile && $to try.c; then
12337         if $run ./try; then
12338                 echo "Your stdio acts pretty std."
12339                 val="$define"
12340         else
12341                 echo "Your stdio isn't very std."
12342         fi
12343 else
12344         echo "Your stdio doesn't appear very std."
12345 fi
12346 $rm -f try.c try
12347 set d_stdstdio
12348 eval $setvar
12349
12350 : Can _ptr be used as an lvalue?
12351 case "$d_stdstdio$ptr_lval" in
12352 $define$define) val=$define ;;
12353 *) val=$undef ;;
12354 esac
12355 set d_stdio_ptr_lval
12356 eval $setvar
12357
12358 : Can _cnt be used as an lvalue?
12359 case "$d_stdstdio$cnt_lval" in
12360 $define$define) val=$define ;;
12361 *) val=$undef ;;
12362 esac
12363 set d_stdio_cnt_lval
12364 eval $setvar
12365
12366
12367 : test whether setting _ptr sets _cnt as a side effect
12368 d_stdio_ptr_lval_sets_cnt="$undef"
12369 d_stdio_ptr_lval_nochange_cnt="$undef"
12370 case "$d_stdio_ptr_lval$d_stdstdio" in
12371 $define$define)
12372         echo "Checking to see what happens if we set the stdio ptr..." >&4
12373 $cat >try.c <<EOP
12374 #include <stdio.h>
12375 /* Can we scream? */
12376 /* Eat dust sed :-) */
12377 /* In the buffer space, no one can hear you scream. */
12378 #define FILE_ptr(fp)    $stdio_ptr
12379 #define FILE_cnt(fp)    $stdio_cnt
12380 #include <sys/types.h>
12381 int main() {
12382         FILE *fp = fopen("try.c", "r");
12383         int c;
12384         char *ptr;
12385         size_t cnt;
12386         if (!fp) {
12387             puts("Fail even to read");
12388             exit(1);
12389         }
12390         c = getc(fp); /* Read away the first # */
12391         if (c == EOF) {
12392             puts("Fail even to read");
12393             exit(1);
12394         }
12395         if (!(
12396                 18 <= FILE_cnt(fp) &&
12397                 strncmp(FILE_ptr(fp), "include <stdio.h>\n", 18) == 0
12398         )) {
12399                 puts("Fail even to read");
12400                 exit (1);
12401         }
12402         ptr = (char*) FILE_ptr(fp);
12403         cnt = (size_t)FILE_cnt(fp);
12404
12405         FILE_ptr(fp) += 42;
12406
12407         if ((char*)FILE_ptr(fp) != (ptr + 42)) {
12408                 printf("Fail ptr check %p != %p", FILE_ptr(fp), (ptr + 42));
12409                 exit (1);
12410         }
12411         if (FILE_cnt(fp) <= 20) {
12412                 printf ("Fail (<20 chars to test)");
12413                 exit (1);
12414         }
12415         if (strncmp(FILE_ptr(fp), "Eat dust sed :-) */\n", 20) != 0) {
12416                 puts("Fail compare");
12417                 exit (1);
12418         }
12419         if (cnt == FILE_cnt(fp)) {
12420                 puts("Pass_unchanged");
12421                 exit (0);
12422         }       
12423         if (FILE_cnt(fp) == (cnt - 42)) {
12424                 puts("Pass_changed");
12425                 exit (0);
12426         }
12427         printf("Fail count was %d now %d\n", cnt, FILE_cnt(fp));
12428         return 1;
12429
12430 }
12431 EOP
12432         set try
12433         if eval $compile && $to try.c; then
12434                 case `$run ./try` in
12435                 Pass_changed)
12436                         echo "Increasing ptr in your stdio decreases cnt by the same amount.  Good." >&4
12437                         d_stdio_ptr_lval_sets_cnt="$define" ;;
12438                 Pass_unchanged)
12439                         echo "Increasing ptr in your stdio leaves cnt unchanged.  Good." >&4
12440                         d_stdio_ptr_lval_nochange_cnt="$define" ;;
12441                 Fail*)
12442                         echo "Increasing ptr in your stdio didn't do exactly what I expected.  We'll not be doing that then." >&4 ;;
12443                 *)
12444                         echo "It appears attempting to set ptr in your stdio is a bad plan." >&4 ;;
12445         esac
12446         else
12447                 echo "It seems we can't set ptr in your stdio.  Nevermind." >&4
12448         fi
12449         $rm -f try.c try
12450         ;;
12451 esac
12452
12453 : see if _base is also standard
12454 val="$undef"
12455 case "$d_stdstdio" in
12456 $define)
12457         $cat >try.c <<EOP
12458 #include <stdio.h>
12459 #define FILE_base(fp)   $stdio_base
12460 #define FILE_bufsiz(fp) $stdio_bufsiz
12461 int main() {
12462         FILE *fp = fopen("try.c", "r");
12463         char c = getc(fp);
12464         if (
12465                 19 <= FILE_bufsiz(fp) &&
12466                 strncmp(FILE_base(fp), "#include <stdio.h>\n", 19) == 0
12467         )
12468                 exit(0);
12469         exit(1);
12470 }
12471 EOP
12472         set try
12473         if eval $compile && $to try.c; then
12474                 if $run ./try; then
12475                         echo "And its _base field acts std."
12476                         val="$define"
12477                 else
12478                         echo "But its _base field isn't std."
12479                 fi
12480         else
12481                 echo "However, it seems to be lacking the _base field."
12482         fi
12483         $rm -f try.c try
12484         ;;
12485 esac
12486 set d_stdiobase
12487 eval $setvar
12488
12489 $cat >&4 <<EOM
12490 Checking how to access stdio streams by file descriptor number...
12491 EOM
12492 case "$stdio_stream_array" in
12493 '')     $cat >try.c <<EOCP
12494 #include <stdio.h>
12495 int main() {
12496   if (&STDIO_STREAM_ARRAY[fileno(stdin)] == stdin)
12497     printf("yes\n");
12498 }
12499 EOCP
12500         for s in _iob __iob __sF
12501         do
12502                 set try -DSTDIO_STREAM_ARRAY=$s
12503                 if eval $compile; then
12504                         case "`$run ./try`" in
12505                         yes)    stdio_stream_array=$s; break ;;
12506                         esac
12507                 fi
12508         done
12509         $rm -f try.* try$exe_ext
12510 esac
12511 case "$stdio_stream_array" in
12512 '')     $cat >&4 <<EOM
12513 I can't figure out how to access stdio streams by file descriptor number.
12514 EOM
12515         d_stdio_stream_array="$undef"
12516         ;;
12517 *)      $cat >&4 <<EOM
12518 You can access stdio streams by file descriptor number by the $stdio_stream_array array.
12519 EOM
12520         d_stdio_stream_array="$define"
12521         ;;
12522 esac
12523
12524 : see if strcoll exists
12525 set strcoll d_strcoll
12526 eval $inlibc
12527
12528 : check for structure copying
12529 echo " "
12530 echo "Checking to see if your C compiler can copy structs..." >&4
12531 $cat >try.c <<'EOCP'
12532 int main()
12533 {
12534         struct blurfl {
12535                 int dyick;
12536         } foo, bar;
12537
12538         foo = bar;
12539 }
12540 EOCP
12541 if $cc -c try.c >/dev/null 2>&1 ; then
12542         val="$define"
12543         echo "Yup, it can."
12544 else
12545         val="$undef"
12546         echo "Nope, it can't."
12547 fi
12548 set d_strctcpy
12549 eval $setvar
12550 $rm -f try.*
12551
12552 : see if strerror and/or sys_errlist[] exist
12553 echo " "
12554 if test "X$d_strerror" = X -o "X$d_syserrlst" = X; then
12555     if set strerror val -f d_strerror; eval $csym; $val; then
12556                 echo 'strerror() found.' >&4
12557                 d_strerror="$define"
12558                 d_strerrm='strerror(e)'
12559                 if set sys_errlist val -a d_syserrlst; eval $csym; $val; then   
12560                         echo "(You also have sys_errlist[], so we could roll our own strerror.)" 
12561                         d_syserrlst="$define"
12562                 else
12563                         echo "(Since you don't have sys_errlist[], sterror() is welcome.)"
12564                         d_syserrlst="$undef"
12565                 fi
12566     elif xxx=`./findhdr string.h`; test "$xxx" || xxx=`./findhdr strings.h`; \
12567                         $contains '#[   ]*define.*strerror' "$xxx" >/dev/null 2>&1; then
12568                 echo 'strerror() found in string header.' >&4
12569                 d_strerror="$define"
12570                 d_strerrm='strerror(e)'
12571                 if set sys_errlist val -a d_syserrlst; eval $csym; $val; then   
12572                         echo "(Most probably, strerror() uses sys_errlist[] for descriptions.)"
12573                                 d_syserrlst="$define"
12574                 else
12575                         echo "(You don't appear to have any sys_errlist[], how can this be?)"
12576                         d_syserrlst="$undef"
12577                 fi
12578     elif set sys_errlist val -a d_syserrlst; eval $csym; $val; then
12579                 echo "strerror() not found, but you have sys_errlist[] so we'll use that." >&4
12580                 d_strerror="$undef"
12581                 d_syserrlst="$define"
12582                 d_strerrm='((e)<0||(e)>=sys_nerr?"unknown":sys_errlist[e])'
12583     else
12584                 echo 'strerror() and sys_errlist[] NOT found.' >&4
12585                 d_strerror="$undef"
12586                 d_syserrlst="$undef"
12587                 d_strerrm='"unknown"'
12588     fi
12589 fi
12590
12591 : see if strftime exists
12592 set strftime d_strftime
12593 eval $inlibc
12594
12595 : see if strtod exists
12596 set strtod d_strtod
12597 eval $inlibc
12598
12599 : see if strtol exists
12600 set strtol d_strtol
12601 eval $inlibc
12602
12603 : see if strtold exists
12604 set strtold d_strtold
12605 eval $inlibc
12606
12607 : see if strtoll exists
12608 set strtoll d_strtoll
12609 eval $inlibc
12610
12611 case "$d_longlong-$d_strtoll" in
12612 "$define-$define")
12613         $cat <<EOM
12614 Checking whether your strtoll() works okay...
12615 EOM
12616         $cat >try.c <<'EOCP'
12617 #include <errno.h>
12618 #ifdef __hpux
12619 #define strtoll __strtoll
12620 #endif
12621 #ifdef __EMX__
12622 #define strtoll _strtoll
12623 #endif
12624 #include <stdio.h>
12625 extern long long int strtoll(char *s, char **, int); 
12626 static int bad = 0;
12627 int check(char *s, long long ell, int een) {
12628         long long gll;
12629         errno = 0;
12630         gll = strtoll(s, 0, 10);
12631         if (!((gll == ell) && (errno == een)))
12632                 bad++;
12633 }
12634 int main() {
12635         check(" 1",                                      1LL, 0);
12636         check(" 0",                                      0LL, 0);
12637         check("-1",                                     -1LL, 0);
12638         check("-9223372036854775808", -9223372036854775808LL, 0);
12639         check("-9223372036854775808", -9223372036854775808LL, 0);
12640         check(" 9223372036854775807",  9223372036854775807LL, 0);
12641         check("-9223372036854775808", -9223372036854775808LL, 0);
12642         check(" 9223372036854775808",  9223372036854775807LL, ERANGE);
12643         check("-9223372036854775809", -9223372036854775808LL, ERANGE);
12644         if (!bad)
12645                 printf("ok\n");
12646 }
12647 EOCP
12648         set try
12649         if eval $compile; then
12650                 yyy=`$run ./try`
12651                 case "$yyy" in
12652                 ok) echo "Your strtoll() seems to be working okay." ;;
12653                 *) cat <<EOM >&4
12654 Your strtoll() doesn't seem to be working okay.
12655 EOM
12656                    d_strtoll="$undef"
12657                    ;;
12658                 esac
12659         else
12660                 echo "(I can't seem to compile the test program--assuming it doesn't)"
12661                 d_strtoll="$undef"
12662         fi
12663         ;;
12664 esac
12665
12666 : see if strtoq exists
12667 set strtoq d_strtoq
12668 eval $inlibc
12669
12670 : see if strtoul exists
12671 set strtoul d_strtoul
12672 eval $inlibc
12673
12674 case "$d_strtoul" in
12675 "$define")
12676         $cat <<EOM
12677 Checking whether your strtoul() works okay...
12678 EOM
12679         $cat >try.c <<'EOCP'
12680 #include <errno.h>
12681 #include <stdio.h>
12682 extern unsigned long int strtoul(char *s, char **, int); 
12683 static int bad = 0;
12684 void check(char *s, unsigned long eul, int een) {
12685         unsigned long gul;
12686         errno = 0;
12687         gul = strtoul(s, 0, 10);
12688         if (!((gul == eul) && (errno == een)))
12689                 bad++;
12690 }
12691 int main() {
12692         check(" 1", 1L, 0);
12693         check(" 0", 0L, 0);
12694 EOCP
12695         case "$longsize" in
12696         8)
12697             $cat >>try.c <<'EOCP'
12698         check("18446744073709551615", 18446744073709551615UL, 0);
12699         check("18446744073709551616", 18446744073709551615UL, ERANGE);
12700 #if 0 /* strtoul() for /^-/ strings is undefined. */
12701         check("-1", 18446744073709551615UL, 0);
12702         check("-18446744073709551614", 2, 0);
12703         check("-18446744073709551615", 1, 0);
12704         check("-18446744073709551616", 18446744073709551615UL, ERANGE);
12705         check("-18446744073709551617", 18446744073709551615UL, ERANGE);
12706 #endif
12707 EOCP
12708                 ;;
12709         4)
12710                     $cat >>try.c <<'EOCP'
12711         check("4294967295", 4294967295UL, 0);
12712         check("4294967296", 4294967295UL, ERANGE);
12713 #if 0 /* strtoul() for /^-/ strings is undefined. */
12714         check("-1", 4294967295UL, 0);
12715         check("-4294967294", 2, 0);
12716         check("-4294967295", 1, 0);
12717         check("-4294967296", 4294967295UL, ERANGE);
12718         check("-4294967297", 4294967295UL, ERANGE);
12719 #endif
12720 EOCP
12721                 ;;
12722         *)
12723 : Should we write these tests to be more portable by sprintf-ing
12724 : ~0 and then manipulating that char string as input for strtol?
12725                 ;;
12726         esac
12727         $cat >>try.c <<'EOCP'
12728         if (!bad)
12729                 printf("ok\n");
12730         return 0;
12731 }
12732 EOCP
12733         set try
12734         if eval $compile; then
12735                 case "`$run ./try`" in
12736                 ok) echo "Your strtoul() seems to be working okay." ;;
12737                 *) cat <<EOM >&4
12738 Your strtoul() doesn't seem to be working okay.
12739 EOM
12740                    d_strtoul="$undef"
12741                    ;;
12742                 esac
12743         fi
12744         ;;
12745 esac
12746
12747 : see if strtoull exists
12748 set strtoull d_strtoull
12749 eval $inlibc
12750
12751 case "$d_longlong-$d_strtoull" in
12752 "$define-$define")
12753         $cat <<EOM
12754 Checking whether your strtoull() works okay...
12755 EOM
12756         $cat >try.c <<'EOCP'
12757 #include <errno.h>
12758 #ifdef __hpux
12759 #define strtoull __strtoull
12760 #endif
12761 #include <stdio.h>
12762 extern unsigned long long int strtoull(char *s, char **, int); 
12763 static int bad = 0;
12764 int check(char *s, long long eull, int een) {
12765         long long gull;
12766         errno = 0;
12767         gull = strtoull(s, 0, 10);
12768         if (!((gull == eull) && (errno == een)))
12769                 bad++;
12770 }
12771 int main() {
12772         check(" 1",                                        1LL, 0);
12773         check(" 0",                                        0LL, 0);
12774         check("18446744073709551615",  18446744073709551615ULL, 0);
12775         check("18446744073709551616",  18446744073709551615ULL, ERANGE);
12776 #if 0 /* strtoull() for /^-/ strings is undefined. */
12777         check("-1",                    18446744073709551615ULL, 0);
12778         check("-18446744073709551614",                     2LL, 0);
12779         check("-18446744073709551615",                     1LL, 0);
12780         check("-18446744073709551616", 18446744073709551615ULL, ERANGE);
12781         check("-18446744073709551617", 18446744073709551615ULL, ERANGE);
12782 #endif
12783         if (!bad)
12784                 printf("ok\n");
12785 }
12786 EOCP
12787         set try
12788         if eval $compile; then
12789                 case "`$run ./try`" in
12790                 ok) echo "Your strtoull() seems to be working okay." ;;
12791                 *) cat <<EOM >&4
12792 Your strtoull() doesn't seem to be working okay.
12793 EOM
12794                    d_strtoull="$undef"
12795                    ;;
12796                 esac
12797         fi
12798         ;;
12799 esac
12800
12801 : see if strtouq exists
12802 set strtouq d_strtouq
12803 eval $inlibc
12804
12805 case "$d_strtouq" in
12806 "$define")
12807         $cat <<EOM
12808 Checking whether your strtouq() works okay...
12809 EOM
12810         $cat >try.c <<'EOCP'
12811 #include <errno.h>
12812 #include <stdio.h>
12813 extern unsigned long long int strtouq(char *s, char **, int); 
12814 static int bad = 0;
12815 void check(char *s, unsigned long long eull, int een) {
12816         unsigned long long gull;
12817         errno = 0;
12818         gull = strtouq(s, 0, 10);
12819         if (!((gull == eull) && (errno == een)))
12820                 bad++;
12821 }
12822 int main() {
12823         check(" 1",                                        1LL, 0);
12824         check(" 0",                                        0LL, 0);
12825         check("18446744073709551615",  18446744073709551615ULL, 0);
12826         check("18446744073709551616",  18446744073709551615ULL, ERANGE);
12827 #if 0 /* strtouq() for /^-/ strings is undefined. */
12828         check("-1",                    18446744073709551615ULL, 0);
12829         check("-18446744073709551614",                     2LL, 0);
12830         check("-18446744073709551615",                     1LL, 0);
12831         check("-18446744073709551616", 18446744073709551615ULL, ERANGE);
12832         check("-18446744073709551617", 18446744073709551615ULL, ERANGE);
12833 #endif
12834         if (!bad)
12835                 printf("ok\n");
12836         return 0;
12837 }
12838 EOCP
12839         set try
12840         if eval $compile; then
12841                 case "`$run ./try`" in
12842                 ok) echo "Your strtouq() seems to be working okay." ;;
12843                 *) cat <<EOM >&4
12844 Your strtouq() doesn't seem to be working okay.
12845 EOM
12846                    d_strtouq="$undef"
12847                    ;;
12848                 esac
12849         fi
12850         ;;
12851 esac
12852
12853 : see if strxfrm exists
12854 set strxfrm d_strxfrm
12855 eval $inlibc
12856
12857 : see if symlink exists
12858 set symlink d_symlink
12859 eval $inlibc
12860
12861 : see if syscall exists
12862 set syscall d_syscall
12863 eval $inlibc
12864
12865 : see if prototype for syscall is available
12866 echo " "
12867 set d_syscallproto syscall $i_unistd unistd.h
12868 eval $hasproto
12869
12870 : see if sysconf exists
12871 set sysconf d_sysconf
12872 eval $inlibc
12873
12874 : see if system exists
12875 set system d_system
12876 eval $inlibc
12877
12878 : see if tcgetpgrp exists
12879 set tcgetpgrp d_tcgetpgrp
12880 eval $inlibc
12881
12882 : see if tcsetpgrp exists
12883 set tcsetpgrp d_tcsetpgrp
12884 eval $inlibc
12885
12886 : see if prototype for telldir is available
12887 echo " "
12888 set d_telldirproto telldir $i_systypes sys/types.h $i_dirent dirent.h
12889 eval $hasproto
12890
12891 : see if this is a sys/times.h system
12892 set sys/times.h i_systimes
12893 eval $inhdr
12894
12895 : see if times exists
12896 echo " "
12897 if set times val -f d_times; eval $csym; $val; then
12898         echo 'times() found.' >&4
12899         d_times="$define"
12900         inc=''
12901         case "$i_systimes" in
12902         "$define") inc='sys/times.h';;
12903         esac
12904         rp="What is the type returned by times() on this system?"
12905         set clock_t clocktype long stdio.h sys/types.h $inc
12906         eval $typedef_ask
12907 else
12908         echo 'times() NOT found, hope that will do.' >&4
12909         d_times="$undef"
12910         clocktype='int'
12911 fi
12912
12913 : see if truncate exists
12914 set truncate d_truncate
12915 eval $inlibc
12916
12917 : see if tzname[] exists
12918 echo " "
12919 if set tzname val -a d_tzname; eval $csym; $val; then
12920         val="$define"
12921         echo 'tzname[] found.' >&4
12922 else
12923         val="$undef"
12924         echo 'tzname[] NOT found.' >&4
12925 fi
12926 set d_tzname
12927 eval $setvar
12928
12929 case "$osname" in
12930 next|rhapsody|darwin) multiarch="$define" ;;
12931 esac
12932 case "$multiarch" in
12933 ''|[nN]*) multiarch="$undef" ;;
12934 esac
12935
12936 : check for ordering of bytes in a long
12937 echo " "
12938 case "$usecrosscompile$multiarch" in
12939 *$define*)
12940         $cat <<EOM
12941 You seem to be either cross-compiling or doing a multiarchitecture build,
12942 skipping the byteorder check.
12943
12944 EOM
12945         byteorder='ffff'
12946         ;;
12947 *)
12948         case "$byteorder" in
12949         '')
12950                 $cat <<'EOM'
12951 In the following, larger digits indicate more significance.  A big-endian
12952 machine like a Pyramid or a Motorola 680?0 chip will come out to 4321. A
12953 little-endian machine like a Vax or an Intel 80?86 chip would be 1234. Other
12954 machines may have weird orders like 3412.  A Cray will report 87654321,
12955 an Alpha will report 12345678. If the test program works the default is
12956 probably right.
12957 I'm now running the test program...
12958 EOM
12959                 $cat >try.c <<'EOCP'
12960 #include <stdio.h>
12961 int main()
12962 {
12963         int i;
12964         union {
12965                 unsigned long l;
12966                 char c[sizeof(long)];
12967         } u;
12968
12969         if (sizeof(long) > 4)
12970                 u.l = (0x08070605L << 32) | 0x04030201L;
12971         else
12972                 u.l = 0x04030201L;
12973         for (i = 0; i < sizeof(long); i++)
12974                 printf("%c", u.c[i]+'0');
12975         printf("\n");
12976         exit(0);
12977 }
12978 EOCP
12979                 xxx_prompt=y
12980                 set try
12981                 if eval $compile && ./try > /dev/null; then
12982                         dflt=`$run ./try`
12983                         case "$dflt" in
12984                         [1-4][1-4][1-4][1-4]|12345678|87654321)
12985                                 echo "(The test program ran ok.)"
12986                                 echo "byteorder=$dflt"
12987                                 xxx_prompt=n
12988                         ;;
12989                         ????|????????) echo "(The test program ran ok.)" ;;
12990                         *) echo "(The test program didn't run right for some reason.)" ;;
12991                         esac
12992                 else
12993                         dflt='4321'
12994                         cat <<'EOM'
12995 (I can't seem to compile the test program.  Guessing big-endian...)
12996 EOM
12997                 fi
12998                 case "$xxx_prompt" in
12999                 y)
13000                         rp="What is the order of bytes in a long?"
13001                         . ./myread
13002                         byteorder="$ans"
13003                         ;;
13004                 *)      byteorder=$dflt
13005                         ;;
13006                 esac
13007                 ;;
13008         esac
13009         $rm -f try.c try
13010         ;;
13011 esac
13012
13013
13014 $cat <<EOM
13015
13016 Checking to see whether you can access character data unalignedly...
13017 EOM
13018 $cat >try.c <<EOCP
13019 #include <stdio.h>
13020 #define U32 $u32type
13021 #define BYTEORDER $byteorder
13022 int main() {
13023 #if BYTEORDER == 0x1234 || BYTEORDER == 0x4321
13024     U8 buf[] = "\0\0\0\1\0\0\0\0";
13025     U32 *up;
13026     int i;
13027
13028     if (sizeof(U32) != 4) {
13029         printf("sizeof(U32) is not 4, but %d\n", sizeof(U32));
13030         exit(1);
13031     }
13032
13033     fflush(stdout);
13034
13035     for (i = 0; i < 4; i++) {
13036         up = (U32*)(buf + i);
13037         if (! ((*up == 1 << (8*i)) ||   /* big-endian */
13038                (*up == 1 << (8*(3-i)))  /* little-endian */
13039               )
13040            )
13041         {
13042             printf("read failed (%x)\n", *up);
13043             exit(2);
13044         }
13045     }
13046
13047     /* write test */
13048     for (i = 0; i < 4; i++) {
13049         up = (U32*)(buf + i);
13050         *up = 0xBeef;
13051         if (*up != 0xBeef) {
13052             printf("write failed (%x)\n", *up);
13053             exit(3);
13054         }
13055     }
13056
13057     exit(0);
13058 #else
13059     printf("1\n");
13060     exit(1);
13061 #endif
13062     return 0;
13063 }
13064 EOCP
13065 set try
13066 if eval $compile_ok; then
13067         echo "(Testing for character data alignment may dump core.)" >&4
13068         $run ./try 2>&1 >/dev/null
13069         case "$?" in
13070         0)      cat >&4 <<EOM
13071 You can access character data pretty unalignedly.
13072 EOM
13073                 d_u32align="$undef"
13074                 ;;
13075         *)      cat >&4 <<EOM
13076 It seems that you must access character data in an aligned manner.
13077 EOM
13078                 d_u32align="$define"
13079                 ;;
13080         esac
13081         $rm -f core core.try.* try.core
13082 else
13083         rp='Can you access character data at unaligned addresses?'
13084         dflt='n'
13085         . ./myread
13086         case "$ans" in
13087         [yY]*)  d_u32align="$undef"  ;;
13088         *)      d_u32align="$define" ;;
13089         esac
13090 fi
13091
13092 : see if ualarm exists
13093 set ualarm d_ualarm
13094 eval $inlibc
13095
13096 : see if umask exists
13097 set umask d_umask
13098 eval $inlibc
13099
13100 : see if usleep exists
13101 set usleep d_usleep
13102 eval $inlibc
13103
13104 : see if prototype for usleep is available
13105 echo " "
13106 set d_usleepproto usleep $i_unistd unistd.h
13107 eval $hasproto
13108
13109 : see if ustat exists
13110 set ustat d_ustat
13111 eval $inlibc
13112
13113 : backward compatibility for d_hvfork
13114 if test X$d_hvfork != X; then
13115         d_vfork="$d_hvfork"
13116         d_hvfork=''
13117 fi
13118 : see if there is a vfork
13119 val=''
13120 set vfork val
13121 eval $inlibc
13122
13123 : Ok, but do we want to use it. vfork is reportedly unreliable in 
13124 : perl on Solaris 2.x, and probably elsewhere.
13125 case "$val" in
13126 $define)
13127         echo " "
13128         case "$usevfork" in
13129         false) dflt='n';;
13130         *) dflt='y';;
13131         esac
13132         cat <<'EOM'
13133  
13134 Perl can only use a vfork() that doesn't suffer from strict
13135 restrictions on calling functions or modifying global data in
13136 the child.  For example, glibc-2.1 contains such a vfork()
13137 that is unsuitable.  If your system provides a proper fork()
13138 call, chances are that you do NOT want perl to use vfork().
13139
13140 EOM
13141         rp="Do you still want to use vfork()?"
13142         . ./myread
13143         case "$ans" in
13144         y|Y) ;;
13145         *)
13146                 echo "Ok, we won't use vfork()."
13147                 val="$undef"
13148                 ;;
13149         esac
13150         ;;
13151 esac
13152 set d_vfork
13153 eval $setvar
13154 case "$d_vfork" in
13155 $define) usevfork='true';;
13156 *) usevfork='false';;
13157 esac
13158
13159 : see if this is an sysdir system
13160 set sys/dir.h i_sysdir
13161 eval $inhdr
13162
13163 : see if this is an sysndir system
13164 set sys/ndir.h i_sysndir
13165 eval $inhdr
13166
13167 : see if closedir exists
13168 set closedir d_closedir
13169 eval $inlibc
13170
13171 case "$d_closedir" in
13172 "$define")
13173         echo " "
13174         echo "Checking whether closedir() returns a status..." >&4
13175         cat > try.c <<EOM
13176 #$i_dirent I_DIRENT             /**/
13177 #$i_sysdir I_SYS_DIR            /**/
13178 #$i_sysndir I_SYS_NDIR          /**/
13179 #$i_systypes I_SYS_TYPES        /**/
13180
13181 #if defined(I_SYS_TYPES)
13182 #include <sys/types.h>
13183 #endif
13184 #if defined(I_DIRENT)
13185 #include <dirent.h>
13186 #if defined(NeXT) && defined(I_SYS_DIR) /* NeXT needs dirent + sys/dir.h */
13187 #include <sys/dir.h>
13188 #endif
13189 #else
13190 #ifdef I_SYS_NDIR
13191 #include <sys/ndir.h>
13192 #else
13193 #ifdef I_SYS_DIR
13194 #ifdef hp9000s500
13195 #include <ndir.h>       /* may be wrong in the future */
13196 #else
13197 #include <sys/dir.h>
13198 #endif
13199 #endif
13200 #endif
13201 #endif 
13202 int main() { return closedir(opendir(".")); }
13203 EOM
13204         set try
13205         if eval $compile_ok; then
13206                 if $run ./try > /dev/null 2>&1 ; then
13207                         echo "Yes, it does."
13208                         val="$undef"
13209                 else
13210                         echo "No, it doesn't."
13211                         val="$define"
13212                 fi
13213         else
13214                 echo "(I can't seem to compile the test program--assuming it doesn't)"
13215                 val="$define"
13216         fi
13217         ;;
13218 *)
13219         val="$undef";
13220         ;;
13221 esac
13222 set d_void_closedir
13223 eval $setvar
13224 $rm -f try try.*
13225 : see if there is a wait4
13226 set wait4 d_wait4
13227 eval $inlibc
13228
13229 : see if waitpid exists
13230 set waitpid d_waitpid
13231 eval $inlibc
13232
13233 : see if wcstombs exists
13234 set wcstombs d_wcstombs
13235 eval $inlibc
13236
13237 : see if wctomb exists
13238 set wctomb d_wctomb
13239 eval $inlibc
13240
13241 : see if writev exists
13242 set writev d_writev
13243 eval $inlibc
13244
13245 : preserve RCS keywords in files with variable substitution, grrr
13246 Date='$Date'
13247 Id='$Id'
13248 Log='$Log'
13249 RCSfile='$RCSfile'
13250 Revision='$Revision'
13251
13252 : check for alignment requirements
13253 echo " "
13254 case "$usecrosscompile$multiarch" in
13255 *$define*)
13256         $cat <<EOM
13257 You seem to be either cross-compiling or doing a multiarchitecture build,
13258 skipping the memory alignment check.
13259
13260 EOM
13261         case "$alignbytes" in
13262         '') alignbytes=8 ;;
13263         esac
13264         ;;
13265 *)
13266         case "$alignbytes" in
13267         '') echo "Checking alignment constraints..." >&4
13268                 if $test "X$uselongdouble" = Xdefine -a "X$d_longdbl" = Xdefine; then
13269                         $cat >try.c <<'EOCP'
13270 typedef long double NV;
13271 EOCP
13272                 else
13273                         $cat >try.c <<'EOCP'
13274 typedef double NV;
13275 EOCP
13276                 fi
13277                 $cat >>try.c <<'EOCP'
13278 #include <stdio.h>
13279 struct foobar {
13280         char foo;
13281         NV bar;
13282 } try_algn;
13283 int main()
13284 {
13285     printf("%d\n", (int)((char *)&try_algn.bar - (char *)&try_algn.foo));
13286     return(0);
13287 }
13288 EOCP
13289                 set try
13290                 if eval $compile_ok; then
13291                         dflt=`$run ./try`
13292                 else
13293                         dflt='8'
13294                         echo "(I can't seem to compile the test program...)"
13295                 fi
13296                 ;;
13297         *) dflt="$alignbytes"
13298                 ;;
13299         esac
13300         rp="Doubles must be aligned on a how-many-byte boundary?"
13301         . ./myread
13302         alignbytes="$ans"
13303         $rm -f try.c try
13304         ;;
13305 esac
13306
13307
13308 : set the base revision
13309 baserev=5.0
13310
13311 : how do we catenate cpp tokens here?
13312 echo " "
13313 echo "Checking to see how your cpp does stuff like catenate tokens..." >&4
13314 $cat >cpp_stuff.c <<'EOCP'
13315 #define RCAT(a,b)a/**/b
13316 #define ACAT(a,b)a ## b
13317 RCAT(Rei,ser)
13318 ACAT(Cir,cus)
13319 EOCP
13320 $cppstdin $cppflags $cppminus <cpp_stuff.c >cpp_stuff.out 2>&1
13321 if $contains 'Circus' cpp_stuff.out >/dev/null 2>&1; then
13322         echo "Oh!  Smells like ANSI's been here." >&4
13323         echo "We can catify or stringify, separately or together!"
13324         cpp_stuff=42
13325 elif $contains 'Reiser' cpp_stuff.out >/dev/null 2>&1; then
13326         echo "Ah, yes!  The good old days!" >&4
13327         echo "However, in the good old days we don't know how to stringify and"
13328         echo "catify at the same time."
13329         cpp_stuff=1
13330 else
13331         $cat >&4 <<EOM
13332 Hmm, I don't seem to be able to catenate tokens with your cpp.  You're going
13333 to have to edit the values of CAT[2-5] in config.h...
13334 EOM
13335         cpp_stuff="/* Help! How do we handle cpp_stuff? */*/"
13336 fi
13337 $rm -f cpp_stuff.*
13338
13339 : see if this is a db.h system
13340 set db.h i_db
13341 eval $inhdr
13342
13343 case "$i_db" in
13344 $define)
13345         : Check db version.
13346         echo " "
13347         echo "Checking Berkeley DB version ..." >&4
13348         $cat >try.c <<EOCP
13349 #$d_const HASCONST
13350 #ifndef HASCONST
13351 #define const
13352 #endif
13353 #include <sys/types.h>
13354 #include <stdio.h>
13355 #include <db.h>
13356 int main(int argc, char *argv[])
13357 {
13358 #ifdef DB_VERSION_MAJOR /* DB version >= 2 */
13359     int Major, Minor, Patch ;
13360     unsigned long Version ;
13361     (void)db_version(&Major, &Minor, &Patch) ;
13362     if (argc == 2) {
13363         printf("%d %d %d %d %d %d\n",
13364                DB_VERSION_MAJOR, DB_VERSION_MINOR, DB_VERSION_PATCH,
13365                Major, Minor, Patch);
13366         exit(0);
13367     }
13368     printf("You have Berkeley DB Version 2 or greater.\n");
13369
13370     printf("db.h is from Berkeley DB Version %d.%d.%d\n",
13371                 DB_VERSION_MAJOR, DB_VERSION_MINOR, DB_VERSION_PATCH);
13372     printf("libdb is from Berkeley DB Version %d.%d.%d\n",
13373                 Major, Minor, Patch) ;
13374
13375     /* check that db.h & libdb are compatible */
13376     if (DB_VERSION_MAJOR != Major || DB_VERSION_MINOR != Minor || DB_VERSION_PATCH != Patch) {
13377         printf("db.h and libdb are incompatible.\n") ;
13378         exit(3);        
13379     }
13380
13381     printf("db.h and libdb are compatible.\n") ;
13382
13383     Version = DB_VERSION_MAJOR * 1000000 + DB_VERSION_MINOR * 1000
13384                 + DB_VERSION_PATCH ;
13385
13386     /* needs to be >= 2.3.4 */
13387     if (Version < 2003004) {
13388     /* if (DB_VERSION_MAJOR == 2 && DB_VERSION_MINOR == 0 && DB_VERSION_PATCH < 5) { */
13389         printf("Perl needs Berkeley DB 2.3.4 or greater.\n") ;
13390         exit(2);        
13391     }
13392
13393     exit(0);
13394 #else
13395 #if defined(_DB_H_) && defined(BTREEMAGIC) && defined(HASHMAGIC)
13396     if (argc == 2) {
13397         printf("1 0 0\n");
13398         exit(0);
13399     }
13400     printf("You have Berkeley DB Version 1.\n");
13401     exit(0);    /* DB version < 2: the coast is clear. */
13402 #else
13403     exit(1);    /* <db.h> not Berkeley DB? */
13404 #endif
13405 #endif
13406 }
13407 EOCP
13408         set try
13409         if eval $compile_ok && $run ./try; then
13410                 echo 'Looks OK.' >&4
13411                 set `$run ./try 1`
13412                 db_version_major=$1
13413                 db_version_minor=$2
13414                 db_version_patch=$3
13415         else
13416                 echo "I can't use Berkeley DB with your <db.h>.  I'll disable Berkeley DB." >&4
13417                 i_db=$undef
13418                 case " $libs " in
13419                 *"-ldb "*)
13420                         : Remove db from list of libraries to use
13421                         echo "Removing unusable -ldb from library list" >&4
13422                         set `echo X $libs | $sed -e 's/-ldb / /' -e 's/-ldb$//'`
13423                         shift
13424                         libs="$*"
13425                         echo "libs = $libs" >&4
13426                         ;;
13427                 esac
13428         fi
13429         $rm -f try.*
13430         ;;
13431 esac
13432
13433 case "$i_db" in
13434 define)
13435         : Check the return type needed for hash 
13436         echo " "
13437         echo "Checking return type needed for hash for Berkeley DB ..." >&4
13438         $cat >try.c <<EOCP
13439 #$d_const HASCONST
13440 #ifndef HASCONST
13441 #define const
13442 #endif
13443 #include <sys/types.h>
13444 #include <db.h>
13445
13446 #ifndef DB_VERSION_MAJOR
13447 u_int32_t hash_cb (ptr, size)
13448 const void *ptr;
13449 size_t size;
13450 {
13451 }
13452 HASHINFO info;
13453 int main()
13454 {
13455         info.hash = hash_cb;
13456 }
13457 #endif
13458 EOCP
13459         if $cc $ccflags -c try.c >try.out 2>&1 ; then
13460                 if $contains warning try.out >>/dev/null 2>&1 ; then
13461                         db_hashtype='int'
13462                 else
13463                         db_hashtype='u_int32_t'
13464                 fi
13465         else
13466                 : XXX Maybe we should just give up here.
13467                 db_hashtype=u_int32_t
13468                 $cat try.out >&4
13469                 echo "Help:  I can't seem to compile the db test program." >&4
13470                 echo "Something's wrong, but I'll assume you use $db_hashtype." >&4
13471         fi
13472         $rm -f try.*
13473         echo "Your version of Berkeley DB uses $db_hashtype for hash."
13474         ;;
13475 *)      db_hashtype=u_int32_t
13476         ;;
13477 esac
13478 case "$i_db" in
13479 define)
13480         : Check the return type needed for prefix 
13481         echo " "
13482         echo "Checking return type needed for prefix for Berkeley DB ..." >&4
13483         cat >try.c <<EOCP
13484 #$d_const HASCONST
13485 #ifndef HASCONST
13486 #define const
13487 #endif
13488 #include <sys/types.h>
13489 #include <db.h>
13490
13491 #ifndef DB_VERSION_MAJOR
13492 size_t prefix_cb (key1, key2)
13493 const DBT *key1;
13494 const DBT *key2;
13495 {
13496 }
13497 BTREEINFO info;
13498 int main()
13499 {
13500         info.prefix = prefix_cb;
13501 }
13502 #endif
13503 EOCP
13504         if $cc $ccflags -c try.c  >try.out 2>&1 ; then
13505                 if $contains warning try.out >>/dev/null 2>&1 ; then
13506                         db_prefixtype='int'
13507                 else
13508                         db_prefixtype='size_t'
13509                 fi
13510         else
13511                 db_prefixtype='size_t'
13512                 : XXX Maybe we should just give up here.
13513                 $cat try.out >&4
13514                 echo "Help:  I can't seem to compile the db test program." >&4
13515                 echo "Something's wrong, but I'll assume you use $db_prefixtype." >&4
13516         fi
13517         $rm -f try.*
13518         echo "Your version of Berkeley DB uses $db_prefixtype for prefix."
13519         ;;
13520 *)      db_prefixtype='size_t'
13521         ;;
13522 esac
13523
13524
13525 : How can we generate normalized random numbers ?
13526 echo " "
13527 echo "Looking for a random number function..." >&4
13528 case "$randfunc" in
13529 '')
13530         if set drand48 val -f; eval $csym; $val; then
13531                 dflt="drand48"
13532                 echo "Good, found drand48()." >&4
13533         elif set random val -f; eval $csym; $val; then
13534                 dflt="random"
13535                 echo "OK, found random()." >&4
13536         else
13537                 dflt="rand"
13538                 echo "Yick, looks like I have to use rand()." >&4
13539         fi
13540         echo " "
13541         ;;
13542 *)
13543         dflt="$randfunc"
13544         ;;
13545 esac
13546 cont=true
13547
13548 case "$ccflags" in
13549 *-Dmy_rand=*|*-Dmy_srand=*)
13550         echo "Removing obsolete -Dmy_rand, -Dmy_srand, and -Drandbits from ccflags." >&4
13551         ccflags="`echo $ccflags | sed -e 's/-Dmy_rand=random/ /'`"
13552         ccflags="`echo $ccflags | sed -e 's/-Dmy_srand=srandom/ /'`"
13553         ccflags="`echo $ccflags | sed -e 's/-Drandbits=[0-9][0-9]*/ /'`"
13554         ;;
13555 esac
13556
13557 while $test "$cont"; do
13558         rp="Use which function to generate random numbers?"
13559         . ./myread
13560         if $test "$ans" = "$dflt"; then
13561                 : null
13562         else
13563                 randbits=''
13564         fi
13565         randfunc="$ans"
13566         if set $ans val -f; eval $csym; $val; then
13567                 cont=''
13568         else
13569                 dflt=y
13570                 rp="I cannot find function $ans. Use that name anyway?"
13571                 . ./myread
13572                 dflt=rand
13573                 case "$ans" in
13574                         [yY]*) cont='';;
13575                 esac
13576         fi
13577         case "$cont" in
13578         '')
13579                 case "$randfunc" in
13580                 drand48)
13581                         drand01="drand48()"
13582                         seedfunc="srand48"
13583                         randbits=48
13584                         randseedtype=long
13585                         ;;
13586                 rand|random)
13587                         case "$randbits" in
13588                         '')
13589 echo "Checking to see how many bits your $randfunc() function produces..." >&4
13590                                 $cat >try.c <<EOCP
13591 #$i_unistd I_UNISTD
13592 #$i_stdlib I_STDLIB
13593 #include <stdio.h>
13594 #ifdef I_UNISTD
13595 #  include <unistd.h>
13596 #endif
13597 #ifdef I_STDLIB
13598 #  include <stdlib.h>
13599 #endif
13600 int main()
13601 {
13602         register int i;
13603         register unsigned long tmp;
13604         register unsigned long max = 0L;
13605
13606         for (i = 1000; i; i--) {
13607                 tmp = (unsigned long) $randfunc();
13608                 if (tmp > max) max = tmp;
13609         }
13610         for (i = 0; max; i++)
13611                 max /= 2;
13612         printf("%d\n",i);
13613 }
13614 EOCP
13615                                 set try
13616                                 if eval $compile_ok; then
13617                                         dflt=`try`
13618                                 else
13619                                         dflt='?'
13620                                         echo "(I can't seem to compile the test program...)"
13621                                 fi
13622                                 ;;
13623                         *)
13624                                 dflt="$randbits"
13625                                 ;;
13626                         esac
13627                         rp="How many bits does your $randfunc() function produce?"
13628                         . ./myread
13629                         randbits="$ans"
13630                         $rm -f try.c try
13631                         drand01="($randfunc() / (double) ((unsigned long)1 << $randbits))"
13632                         seedfunc="s$randfunc"
13633                         randseedtype=unsigned
13634                         ;;
13635                 *)
13636                         dflt="31"
13637                         rp="How many bits does your $randfunc() function produce?"
13638                         . ./myread
13639                         randbits="$ans"
13640                         seedfunc="s$randfunc"
13641                         drand01="($randfunc() / (double) ((unsigned long)1 << $randbits))"
13642                         if set $seedfunc val -f; eval $csym; $val; then
13643                                 echo "(Using $seedfunc() to seed random generator)"
13644                         else
13645                                 echo "(Warning: no $seedfunc() to seed random generator)"
13646                                 seedfunc=rand
13647                         fi
13648                         randseedtype=unsigned
13649                         ;;
13650                 esac
13651                 ;;
13652         esac
13653 done
13654
13655 echo " "
13656 echo "Determining whether or not we are on an EBCDIC system..." >&4
13657 $cat >try.c <<'EOM'
13658 int main()
13659 {
13660   if ('M'==0xd4) return 0;
13661   return 1;
13662 }
13663 EOM
13664
13665 val=$undef
13666 set try
13667 if eval $compile_ok; then
13668         if $run ./try; then
13669                 echo "You seem to speak EBCDIC." >&4
13670                 val="$define"
13671         else
13672                 echo "Nope, no EBCDIC, probably ASCII or some ISO Latin. Or UTF-8." >&4
13673         fi
13674 else
13675         echo "I'm unable to compile the test program." >&4
13676         echo "I'll assume ASCII or some ISO Latin. Or UTF8." >&4
13677 fi
13678 $rm -f try try.*
13679 set ebcdic
13680 eval $setvar
13681
13682 echo " "
13683 $cat >&4 <<EOM
13684 Checking how to flush all pending stdio output...
13685 EOM
13686 # I only know how to find the first 32 possibly open files on SunOS.
13687 # See also hints/sunos_4_1.sh and util.c  --AD
13688 case "$osname" in
13689 sunos) $echo '#define PERL_FFLUSH_ALL_FOPEN_MAX 32' > try.c ;;
13690 esac
13691 $cat >>try.c <<EOCP
13692 #include <stdio.h>
13693 #$i_unistd I_UNISTD
13694 #ifdef I_UNISTD
13695 # include <unistd.h>
13696 #endif
13697 #$d_sysconf HAS_SYSCONF
13698 #$d_stdio_stream_array HAS_STDIO_STREAM_ARRAY
13699 #ifdef HAS_STDIO_STREAM_ARRAY
13700 # define STDIO_STREAM_ARRAY $stdio_stream_array
13701 #endif
13702 int main() {
13703   FILE* p;
13704   unlink("try.out");
13705   p = fopen("try.out", "w");
13706 #ifdef TRY_FPUTC
13707   fputc('x', p);
13708 #else
13709 # ifdef TRY_FPRINTF
13710   fprintf(p, "x");
13711 # endif
13712 #endif
13713 #ifdef TRY_FFLUSH_NULL
13714   fflush(NULL);
13715 #endif
13716 #ifdef TRY_FFLUSH_ALL
13717   {
13718     long open_max = -1;
13719 # ifdef PERL_FFLUSH_ALL_FOPEN_MAX
13720     open_max = PERL_FFLUSH_ALL_FOPEN_MAX;
13721 # else
13722 #  if defined(HAS_SYSCONF) && defined(_SC_OPEN_MAX)
13723     open_max = sysconf(_SC_OPEN_MAX);
13724 #  else
13725 #   ifdef FOPEN_MAX
13726     open_max = FOPEN_MAX;
13727 #   else
13728 #    ifdef OPEN_MAX
13729     open_max = OPEN_MAX;
13730 #    else
13731 #     ifdef _NFILE
13732     open_max = _NFILE;
13733 #     endif
13734 #    endif
13735 #   endif
13736 #  endif
13737 # endif 
13738 # ifdef HAS_STDIO_STREAM_ARRAY
13739     if (open_max > 0) {
13740       long i;
13741       for (i = 0; i < open_max; i++)
13742             if (STDIO_STREAM_ARRAY[i]._file >= 0 &&
13743                 STDIO_STREAM_ARRAY[i]._file < open_max &&
13744                 STDIO_STREAM_ARRAY[i]._flag)
13745                 fflush(&STDIO_STREAM_ARRAY[i]);
13746     }   
13747   }
13748 # endif
13749 #endif
13750   _exit(42);
13751 }
13752 EOCP
13753 : first we have to find out how _not_ to flush
13754 $to try.c
13755 if $test "X$fflushNULL" = X -o "X$fflushall" = X; then
13756     output=''
13757     set try -DTRY_FPUTC
13758     if eval $compile; then
13759             $run ./try 2>/dev/null
13760             $rm -f try.out
13761             $from try.out
13762             if $test ! -s try.out -a "X$?" = X42; then
13763                 output=-DTRY_FPUTC
13764             fi
13765     fi
13766     case "$output" in
13767     '')
13768             set try -DTRY_FPRINTF
13769             if eval $compile; then
13770                     $run ./try 2>/dev/null
13771                     $rm -f try.out
13772                     $from try.out
13773                     if $test ! -s try.out -a "X$?" = X42; then
13774                         output=-DTRY_FPRINTF
13775                     fi
13776             fi
13777         ;;
13778     esac
13779 fi
13780 : check for fflush NULL behaviour
13781 case "$fflushNULL" in
13782 '')     set try -DTRY_FFLUSH_NULL $output
13783         if eval $compile; then
13784                 $run ./try 2>/dev/null
13785                 code="$?"
13786                 $rm -f try.out
13787                 $from try.out
13788                 if $test -s try.out -a "X$code" = X42; then
13789                         fflushNULL="`$cat try.out`"
13790                 else
13791                         if $test "X$code" != X42; then
13792                                 $cat >&4 <<EOM
13793 (If this test failed, don't worry, we'll try another method shortly.)
13794 EOM
13795                         fi
13796                 fi
13797         fi
13798         $rm -f core try.core core.try.*
13799         case "$fflushNULL" in
13800         x)      $cat >&4 <<EOM
13801 Your fflush(NULL) works okay for output streams.
13802 Let's see if it clobbers input pipes...
13803 EOM
13804 # As of mid-March 2000 all versions of Solaris appear to have a stdio
13805 # bug that improperly flushes the input end of pipes.  So we avoid the
13806 # autoflush on fork/system/exec support for now. :-(
13807 $cat >tryp.c <<EOCP
13808 #include <stdio.h>
13809 int
13810 main(int argc, char **argv)
13811 {
13812     char buf[1024];
13813     int i;
13814     char *bp = buf;
13815     while (1) {
13816         while ((i = getc(stdin)) != -1
13817                && (*bp++ = i) != '\n'
13818                && bp < &buf[1024])
13819         /* DO NOTHING */ ;
13820         *bp = '\0';
13821         fprintf(stdout, "%s", buf);
13822         fflush(NULL);
13823         if (i == -1)
13824             return 0;
13825         bp = buf;
13826     }
13827 }
13828 EOCP
13829                 fflushNULL="$define"
13830                 set tryp
13831                 if eval $compile; then
13832                     $rm -f tryp.out
13833                     $cat tryp.c | $run ./tryp 2>/dev/null > tryp.out
13834                     if cmp tryp.c tryp.out >/dev/null 2>&1; then
13835                        $cat >&4 <<EOM
13836 fflush(NULL) seems to behave okay with input streams.
13837 EOM
13838                         fflushNULL="$define"
13839                     else
13840                         $cat >&4 <<EOM
13841 Ouch, fflush(NULL) clobbers input pipes!  We will not use it.
13842 EOM
13843                         fflushNULL="$undef"
13844                     fi
13845                 fi
13846                 $rm -f core tryp.c tryp.core core.tryp.*
13847                 ;;
13848         '')     $cat >&4 <<EOM
13849 Your fflush(NULL) isn't working (contrary to ANSI C).
13850 EOM
13851                 fflushNULL="$undef"
13852                 ;;
13853         *)      $cat >&4 <<EOM
13854 Cannot figure out whether your fflush(NULL) works or not.
13855 I'm assuming it doesn't (contrary to ANSI C).
13856 EOM
13857                 fflushNULL="$undef"
13858                 ;;
13859         esac
13860         ;;
13861 $define|true|[yY]*)
13862         fflushNULL="$define"
13863         ;;
13864 *)
13865         fflushNULL="$undef"
13866         ;;
13867 esac
13868 : check explicit looping only if NULL did not work, and if the pipe
13869 : bug does not show up on an explicit flush too
13870 case "$fflushNULL" in
13871 "$undef")
13872         $cat >tryp.c <<EOCP
13873 #include <stdio.h>
13874 int
13875 main(int argc, char **argv)
13876 {
13877     char buf[1024];
13878     int i;
13879     char *bp = buf;
13880     while (1) {
13881         while ((i = getc(stdin)) != -1
13882                && (*bp++ = i) != '\n'
13883                && bp < &buf[1024])
13884         /* DO NOTHING */ ;
13885         *bp = '\0';
13886         fprintf(stdout, "%s", buf);
13887         fflush(stdin);
13888         if (i == -1)
13889             return 0;
13890         bp = buf;
13891     }
13892 }
13893 EOCP
13894         set tryp
13895         if eval $compile; then
13896             $rm -f tryp.out
13897             $cat tryp.c | $run ./tryp 2>/dev/null > tryp.out
13898             if cmp tryp.c tryp.out >/dev/null 2>&1; then
13899                $cat >&4 <<EOM
13900 Good, at least fflush(stdin) seems to behave okay when stdin is a pipe.
13901 EOM
13902                 : now check for fflushall behaviour
13903                 case "$fflushall" in
13904                 '')     set try -DTRY_FFLUSH_ALL $output
13905                         if eval $compile; then
13906                                 $cat >&4 <<EOM
13907 (Now testing the other method--but note that this also may fail.)
13908 EOM
13909                                 $rm -f try.out
13910                                 $run ./try 2>/dev/null
13911                                 if $test -s try.out -a "X$?" = X42; then
13912                                         fflushall="`$cat try.out`"
13913                                 fi
13914                         fi
13915                         $rm -f core try.core core.try.*
13916                         case "$fflushall" in
13917                         x)      $cat >&4 <<EOM
13918 Whew. Flushing explicitly all the stdio streams works.
13919 EOM
13920                                 fflushall="$define"
13921                                 ;;
13922                         '')     $cat >&4 <<EOM
13923 Sigh. Flushing explicitly all the stdio streams doesn't work.
13924 EOM
13925                                 fflushall="$undef"
13926                                 ;;
13927                         *)      $cat >&4 <<EOM
13928 Cannot figure out whether flushing stdio streams explicitly works or not.
13929 I'm assuming it doesn't.
13930 EOM
13931                                 fflushall="$undef"
13932                                 ;;
13933                         esac
13934                         ;;
13935                 "$define"|true|[yY]*)
13936                         fflushall="$define"
13937                         ;;
13938                 *)
13939                         fflushall="$undef"
13940                         ;;
13941                 esac
13942             else
13943                 $cat >&4 <<EOM
13944 All is futile.  Even fflush(stdin) clobbers input pipes!
13945 EOM
13946                 fflushall="$undef"
13947             fi
13948         else
13949             fflushall="$undef"
13950         fi
13951         $rm -f core tryp.c tryp.core core.tryp.*
13952         ;;
13953 *)      fflushall="$undef"
13954         ;;
13955 esac
13956
13957 case "$fflushNULL$fflushall" in
13958 undefundef)
13959         $cat <<EOM
13960 OK, I give up.  I cannot figure out how to flush pending stdio output.
13961 We won't be flushing handles at all before fork/exec/popen.
13962 EOM
13963         ;;
13964 esac
13965 $rm -f try.* try$exe_ext
13966
13967 : Store the full pathname to the ar program for use in the C program
13968 : Respect a hint or command line value for full_ar.
13969 case "$full_ar" in
13970 '') full_ar=$ar ;;
13971 esac
13972
13973 : Store the full pathname to the sed program for use in the C program
13974 full_sed=$sed
13975
13976 : see what type gids are declared as in the kernel
13977 echo " "
13978 echo "Looking for the type for group ids returned by getgid()."
13979 set gid_t gidtype xxx stdio.h sys/types.h
13980 eval $typedef
13981 case "$gidtype" in
13982 xxx)
13983         xxx=`./findhdr sys/user.h`
13984         set `grep 'groups\[NGROUPS\];' "$xxx" 2>/dev/null` unsigned short
13985         case $1 in
13986         unsigned) dflt="$1 $2" ;;
13987         *) dflt="$1" ;;
13988         esac
13989         ;;
13990 *) dflt="$gidtype";;
13991 esac
13992 case "$gidtype" in
13993 gid_t) echo "gid_t found." ;;
13994 *)      rp="What is the type for group ids returned by getgid()?"
13995         . ./myread
13996         gidtype="$ans"
13997         ;;
13998 esac
13999
14000 echo " "
14001 case "$gidtype" in
14002 *_t) zzz="$gidtype"     ;;
14003 *)   zzz="gid"          ;;
14004 esac
14005 echo "Checking the size of $zzz..." >&4 
14006 cat > try.c <<EOCP
14007 #include <sys/types.h>
14008 #include <stdio.h>
14009 int main() {
14010     printf("%d\n", (int)sizeof($gidtype));
14011     exit(0);
14012 }
14013 EOCP
14014 set try
14015 if eval $compile_ok; then
14016         yyy=`$run ./try`
14017         case "$yyy" in
14018         '')     gidsize=4
14019                 echo "(I can't execute the test program--guessing $gidsize.)" >&4
14020                 ;;
14021         *)      gidsize=$yyy
14022                 echo "Your $zzz is $gidsize bytes long."
14023                 ;;
14024         esac
14025 else
14026         gidsize=4
14027         echo "(I can't compile the test program--guessing $gidsize.)" >&4
14028 fi
14029
14030
14031 echo " "
14032 case "$gidtype" in
14033 *_t) zzz="$gidtype"     ;;
14034 *)   zzz="gid"          ;;
14035 esac
14036 echo "Checking the sign of $zzz..." >&4 
14037 cat > try.c <<EOCP
14038 #include <sys/types.h>
14039 #include <stdio.h>
14040 int main() {
14041         $gidtype foo = -1;
14042         if (foo < 0)
14043                 printf("-1\n");
14044         else
14045                 printf("1\n");
14046 }
14047 EOCP
14048 set try
14049 if eval $compile; then
14050         yyy=`$run ./try`
14051         case "$yyy" in
14052         '')     gidsign=1
14053                 echo "(I can't execute the test program--guessing unsigned.)" >&4
14054                 ;;
14055         *)      gidsign=$yyy
14056                 case "$gidsign" in
14057                  1) echo "Your $zzz is unsigned." ;;
14058                 -1) echo "Your $zzz is signed."   ;;
14059                 esac
14060                 ;;
14061         esac
14062 else
14063         gidsign=1
14064         echo "(I can't compile the test program--guessing unsigned.)" >&4
14065 fi
14066
14067
14068 echo " "
14069
14070 if $test X"$quadtype" != X; then
14071
14072 echo "Checking how to print 64-bit integers..." >&4
14073
14074 if $test X"$sPRId64" = X -a X"$quadtype" = Xint; then
14075         $cat >try.c <<'EOCP'
14076 #include <sys/types.h>
14077 #include <stdio.h>
14078 int main() {
14079   int q = 12345678901;
14080   printf("%ld\n", q);
14081 }
14082 EOCP
14083         set try
14084         if eval $compile; then
14085                 yyy=`$run ./try`
14086                 case "$yyy" in
14087                 12345678901)
14088                         sPRId64='"d"'; sPRIi64='"i"'; sPRIu64='"u"';
14089                         sPRIo64='"o"'; sPRIx64='"x"'; sPRIXU64='"X"';
14090                         echo "We will use %d."
14091                         ;;
14092                 esac
14093         fi
14094 fi
14095
14096 if $test X"$sPRId64" = X -a X"$quadtype" = Xlong; then
14097         $cat >try.c <<'EOCP'
14098 #include <sys/types.h>
14099 #include <stdio.h>
14100 int main() {
14101   long q = 12345678901;
14102   printf("%ld\n", q);
14103 }
14104 EOCP
14105         set try
14106         if eval $compile; then
14107                 yyy=`$run ./try`
14108                 case "$yyy" in
14109                 12345678901)
14110                         sPRId64='"ld"'; sPRIi64='"li"'; sPRIu64='"lu"';
14111                         sPRIo64='"lo"'; sPRIx64='"lx"'; sPRIXU64='"lX"';
14112                         echo "We will use %ld."
14113                         ;;
14114                 esac
14115         fi
14116 fi
14117
14118 if $test X"$sPRId64" = X -a X"$i_inttypes" = X"$define" -a X"$quadtype" = Xint64_t; then
14119         $cat >try.c <<'EOCP'
14120 #include <sys/types.h>
14121 #include <inttypes.h>
14122 #include <stdio.h>
14123 int main() {
14124   int64_t q = 12345678901;
14125   printf("%" PRId64 "\n", q);
14126 }
14127 EOCP
14128         set try
14129         if eval $compile; then
14130                 yyy=`$run ./try`
14131                 case "$yyy" in
14132                 12345678901)
14133                         sPRId64=PRId64; sPRIi64=PRIi64; sPRIu64=PRIu64;
14134                         sPRIo64=PRIo64; sPRIx64=PRIx64; sPRIXU64=PRIXU64;
14135                         echo "We will use the C9X style."
14136                         ;;
14137                 esac
14138         fi
14139 fi
14140
14141 if $test X"$sPRId64" = X -a X"$quadtype" != X; then
14142         $cat >try.c <<EOCP
14143 #include <sys/types.h>
14144 #include <stdio.h>
14145 int main() {
14146   $quadtype q = 12345678901;
14147   printf("%Ld\n", q);
14148 }
14149 EOCP
14150         set try
14151         if eval $compile; then
14152                 yyy=`$run ./try`
14153                 case "$yyy" in
14154                 12345678901)
14155                         sPRId64='"Ld"'; sPRIi64='"Li"'; sPRIu64='"Lu"';
14156                         sPRIo64='"Lo"'; sPRIx64='"Lx"'; sPRIXU64='"LX"';
14157                         echo "We will use %Ld."
14158                         ;;
14159                 esac
14160         fi
14161 fi
14162
14163 if $test X"$sPRId64" = X -a X"$quadtype" = X"long long"; then
14164         $cat >try.c <<'EOCP'
14165 #include <sys/types.h>
14166 #include <stdio.h>
14167 int main() {
14168   long long q = 12345678901LL; /* AIX cc requires the LL suffix. */
14169   printf("%lld\n", q);
14170 }
14171 EOCP
14172         set try
14173         if eval $compile; then
14174                 yyy=`$run ./try`
14175                 case "$yyy" in
14176                 12345678901)
14177                         sPRId64='"lld"'; sPRIi64='"lli"'; sPRIu64='"llu"';
14178                         sPRIo64='"llo"'; sPRIx64='"llx"'; sPRIXU64='"llX"';
14179                         echo "We will use the %lld style."
14180                         ;;
14181                 esac
14182         fi
14183 fi
14184
14185 if $test X"$sPRId64" = X -a X"$quadtype" != X; then
14186         $cat >try.c <<EOCP
14187 #include <sys/types.h>
14188 #include <stdio.h>
14189 int main() {
14190   $quadtype q = 12345678901;
14191   printf("%qd\n", q);
14192 }
14193 EOCP
14194         set try
14195         if eval $compile; then
14196                 yyy=`$run ./try`
14197                 case "$yyy" in
14198                 12345678901)
14199                         sPRId64='"qd"'; sPRIi64='"qi"'; sPRIu64='"qu"';
14200                         sPRIo64='"qo"'; sPRIx64='"qx"'; sPRIXU64='"qX"';
14201                         echo "We will use %qd."
14202                         ;;
14203                 esac
14204         fi
14205 fi
14206
14207 if $test X"$sPRId64" = X; then
14208         echo "Cannot figure out how to print 64-bit integers." >&4
14209 fi
14210
14211 $rm -f try try.*
14212
14213 fi
14214
14215 case "$sPRId64" in
14216 '')     d_PRId64="$undef"; d_PRIi64="$undef"; d_PRIu64="$undef"; 
14217         d_PRIo64="$undef"; d_PRIx64="$undef"; d_PRIXU64="$undef"; 
14218         ;;
14219 *)      d_PRId64="$define"; d_PRIi64="$define"; d_PRIu64="$define"; 
14220         d_PRIo64="$define"; d_PRIx64="$define"; d_PRIXU64="$define"; 
14221         ;;
14222 esac
14223
14224
14225 echo " "
14226 $echo "Checking the format strings to be used for Perl's internal types..." >&4
14227
14228 if $test X"$ivsize" = X8; then
14229         ivdformat="$sPRId64"
14230         uvuformat="$sPRIu64"
14231         uvoformat="$sPRIo64"
14232         uvxformat="$sPRIx64"
14233         uvXUformat="$sPRIXU64"
14234 else
14235         if $test X"$ivsize" = X"$longsize"; then
14236                 ivdformat='"ld"'
14237                 uvuformat='"lu"'
14238                 uvoformat='"lo"'
14239                 uvxformat='"lx"'
14240                 uvXUformat='"lX"'
14241         else
14242                 if $test X"$ivsize" = X"$intsize"; then
14243                         ivdformat='"d"'
14244                         uvuformat='"u"'
14245                         uvoformat='"o"'
14246                         uvxformat='"x"'
14247                         uvXUformat='"X"'
14248                 else
14249                         : far out
14250                         if $test X"$ivsize" = X"$shortsize"; then
14251                                 ivdformat='"hd"'
14252                                 uvuformat='"hu"'
14253                                 uvoformat='"ho"'
14254                                 uvxformat='"hx"'
14255                                 uvXUformat='"hX"'
14256                         fi
14257                 fi
14258         fi
14259 fi
14260
14261 if $test X"$uselongdouble" = X"$define" -a X"$d_longdbl" = X"$define" -a X"$d_PRIgldbl" = X"$define"; then
14262         nveformat="$sPRIeldbl"
14263         nvfformat="$sPRIfldbl"
14264         nvgformat="$sPRIgldbl"
14265         nvEUformat="$sPRIEUldbl"
14266         nvFUformat="$sPRIFUldbl"
14267         nvGUformat="$sPRIGUldbl"
14268 else
14269         nveformat='"e"'
14270         nvfformat='"f"'
14271         nvgformat='"g"'
14272         nvEUformat='"E"'
14273         nvFUformat='"F"'
14274         nvGUformat='"G"'
14275 fi
14276
14277 case "$ivdformat" in
14278 '') echo "$0: Fatal: failed to find format strings, cannot continue." >& 4
14279     exit 1
14280     ;;
14281 esac
14282
14283
14284 echo " "
14285 $echo "Checking the format string to be used for gids..." >&4
14286
14287 case "$gidsign" in
14288 -1)     if $test X"$gidsize" = X"$ivsize"; then
14289                 gidformat="$ivdformat"
14290         else
14291                 if $test X"$gidsize" = X"$longsize"; then
14292                         gidformat='"ld"'
14293                 else
14294                         if $test X"$gidsize" = X"$intsize"; then
14295                                 gidformat='"d"'
14296                         else
14297                                 if $test X"$gidsize" = X"$shortsize"; then
14298                                         gidformat='"hd"'
14299                                 fi
14300                         fi
14301                 fi
14302         fi
14303         ;;
14304 *)      if $test X"$gidsize" = X"$uvsize"; then
14305                 gidformat="$uvuformat"
14306         else
14307                 if $test X"$gidsize" = X"$longsize"; then
14308                         gidformat='"lu"'
14309                 else
14310                         if $test X"$gidsize" = X"$intsize"; then
14311                                 gidformat='"u"'
14312                         else
14313                                 if $test X"$gidsize" = X"$shortsize"; then
14314                                         gidformat='"hu"'
14315                                 fi
14316                         fi
14317                 fi
14318         fi
14319         ;;
14320 esac
14321
14322 : see if getgroups exists
14323 set getgroups d_getgrps
14324 eval $inlibc
14325
14326 : see if setgroups exists
14327 set setgroups d_setgrps
14328 eval $inlibc
14329
14330
14331 : Find type of 2nd arg to 'getgroups()' and 'setgroups()'
14332 echo " "
14333 case "$d_getgrps$d_setgrps" in
14334 *define*)
14335         case "$groupstype" in
14336         '') dflt="$gidtype" ;;
14337         *)  dflt="$groupstype" ;;
14338         esac
14339         $cat <<EOM
14340 What type of pointer is the second argument to getgroups() and setgroups()?
14341 Usually this is the same as group ids, $gidtype, but not always.
14342
14343 EOM
14344         rp='What type pointer is the second argument to getgroups() and setgroups()?'
14345         . ./myread
14346         groupstype="$ans"
14347         ;;
14348 *)  groupstype="$gidtype";;
14349 esac
14350
14351 echo " "
14352 echo "Checking if your $make program sets \$(MAKE)..." >&4
14353 case "$make_set_make" in
14354 '')
14355         $sed 's/^X //' > testmake.mak << 'EOF'
14356 Xall:
14357 X       @echo 'maketemp="$(MAKE)"'
14358 EOF
14359         case "`$make -f testmake.mak 2>/dev/null`" in
14360         *maketemp=*) make_set_make='#' ;;
14361         *)      make_set_make="MAKE=$make" ;;
14362         esac
14363         $rm -f testmake.mak
14364         ;;
14365 esac
14366 case "$make_set_make" in
14367 '#') echo "Yup, it does.";;
14368 *) echo "Nope, it doesn't.";;
14369 esac
14370
14371 : see what type is used for mode_t
14372 rp="What is the type used for file modes for system calls (e.g. fchmod())?"
14373 set mode_t modetype int stdio.h sys/types.h
14374 eval $typedef_ask
14375
14376 : see if stdarg is available
14377 echo " "
14378 if $test `./findhdr stdarg.h`; then
14379         echo "<stdarg.h> found." >&4
14380         valstd="$define"
14381 else
14382         echo "<stdarg.h> NOT found." >&4
14383         valstd="$undef"
14384 fi
14385
14386 : see if varags is available
14387 echo " "
14388 if $test `./findhdr varargs.h`; then
14389         echo "<varargs.h> found." >&4
14390 else
14391         echo "<varargs.h> NOT found, but that's ok (I hope)." >&4
14392 fi
14393
14394 : set up the varargs testing programs
14395 $cat > varargs.c <<EOP
14396 #ifdef I_STDARG
14397 #include <stdarg.h>
14398 #endif
14399 #ifdef I_VARARGS
14400 #include <varargs.h>
14401 #endif
14402
14403 #ifdef I_STDARG
14404 int f(char *p, ...)
14405 #else
14406 int f(va_alist)
14407 va_dcl
14408 #endif
14409 {
14410         va_list ap;
14411 #ifndef I_STDARG
14412         char *p;
14413 #endif
14414 #ifdef I_STDARG
14415         va_start(ap,p);
14416 #else
14417         va_start(ap);
14418         p = va_arg(ap, char *);
14419 #endif
14420         va_end(ap);
14421 }
14422 EOP
14423 $cat > varargs <<EOP
14424 $startsh
14425 if $cc -c $ccflags -D\$1 varargs.c >/dev/null 2>&1; then
14426         echo "true"
14427 else
14428         echo "false"
14429 fi
14430 $rm -f varargs$_o
14431 EOP
14432 chmod +x varargs
14433
14434 : now check which varargs header should be included
14435 echo " "
14436 i_varhdr=''
14437 case "$valstd" in
14438 "$define")
14439         if `./varargs I_STDARG`; then
14440                 val='stdarg.h'
14441         elif `./varargs I_VARARGS`; then
14442                 val='varargs.h'
14443         fi
14444         ;;
14445 *)
14446         if `./varargs I_VARARGS`; then
14447                 val='varargs.h'
14448         fi
14449         ;;
14450 esac
14451 case "$val" in
14452 '')
14453 echo "I could not find the definition for va_dcl... You have problems..." >&4
14454         val="$undef"; set i_stdarg; eval $setvar
14455         val="$undef"; set i_varargs; eval $setvar
14456         ;;
14457 *) 
14458         set i_varhdr
14459         eval $setvar
14460         case "$i_varhdr" in
14461         stdarg.h)
14462                 val="$define"; set i_stdarg; eval $setvar
14463                 val="$undef"; set i_varargs; eval $setvar
14464                 ;;
14465         varargs.h)
14466                 val="$undef"; set i_stdarg; eval $setvar
14467                 val="$define"; set i_varargs; eval $setvar
14468                 ;;
14469         esac
14470         echo "We'll include <$i_varhdr> to get va_dcl definition." >&4;;
14471 esac
14472 $rm -f varargs*
14473
14474 : see if we need va_copy
14475 echo " "
14476 case "$i_stdarg" in
14477 "$define")
14478         $cat >try.c <<EOCP
14479 #include <stdarg.h>
14480 #include <stdio.h>
14481 #$i_stdlib I_STDLIB
14482 #ifdef I_STDLIB
14483 #include <stdlib.h>
14484 #endif
14485 #include <signal.h>
14486
14487 int
14488 ivfprintf(FILE *f, const char *fmt, va_list *valp)
14489 {
14490   return vfprintf(f, fmt, *valp);
14491 }
14492  
14493 int    
14494 myvfprintf(FILE *f, const  char *fmt, va_list val)
14495 {
14496   return ivfprintf(f, fmt, &val);
14497 }
14498       
14499 int
14500 myprintf(char *fmt, ...) 
14501 {
14502   va_list val;
14503   va_start(val, fmt);
14504   return myvfprintf(stdout, fmt, val); 
14505 }         
14506
14507 int
14508 main(int ac, char **av)
14509 {
14510   signal(SIGSEGV, exit);
14511
14512   myprintf("%s%cs all right, then\n", "that", '\'');                            
14513   exit(0);      
14514 }
14515 EOCP
14516         set try
14517         if eval $compile && $run ./try 2>&1 >/dev/null; then
14518                 case "`$run ./try`" in
14519                 "that's all right, then")
14520                         okay=yes
14521                         ;;
14522                 esac
14523         fi
14524         case "$okay" in
14525         yes)    echo "It seems that you don't need va_copy()." >&4
14526                 need_va_copy="$undef"
14527                 ;;
14528         *)      echo "It seems that va_copy() or similar will be needed." >&4
14529                 need_va_copy="$define"
14530                 ;;
14531         esac
14532         $rm -f try.* core core.* *.core *.core.*
14533         ;;
14534 *)      echo "You don't have <stdarg.h>, not checking for va_copy()." >&4
14535         ;;
14536 esac
14537
14538 : define a fucntion to check prototypes
14539 $cat > protochk <<EOSH
14540 $startsh
14541 cc="$cc"
14542 optimize="$optimize"
14543 ccflags="$ccflags"
14544 prototype="$prototype"
14545 define="$define"
14546 rm=$rm
14547 EOSH
14548
14549 $cat >> protochk <<'EOSH'
14550
14551 $rm -f try.c
14552 foo="$1"
14553 shift
14554 while test $# -ge 2; do
14555         case "$1" in
14556                 $define) echo "#include <$2>" >> try.c ;;
14557                 literal) echo "$2" >> try.c ;;
14558         esac
14559     shift 2
14560 done
14561 test "$prototype" = "$define"  && echo '#define CAN_PROTOTYPE' >> try.c
14562 cat >> try.c <<'EOCP'
14563 #ifdef CAN_PROTOTYPE
14564 #define _(args) args
14565 #else
14566 #define _(args) ()
14567 #endif
14568 EOCP
14569 echo "$foo" >> try.c
14570 echo 'int no_real_function_has_this_name _((void)) { return 0; }' >> try.c
14571 $cc $optimize $ccflags -c try.c > /dev/null 2>&1
14572 status=$?
14573 $rm -f try.[co]
14574 exit $status
14575 EOSH
14576 chmod +x protochk
14577 $eunicefix protochk
14578
14579 : see what type is used for size_t
14580 rp="What is the type used for the length parameter for string functions?"
14581 set size_t sizetype 'unsigned int' stdio.h sys/types.h
14582 eval $typedef_ask
14583
14584 : check for type of arguments to gethostbyaddr. 
14585 if test "X$netdb_host_type" = X -o "X$netdb_hlen_type" = X; then
14586         case "$d_gethbyaddr" in
14587         $define)
14588                 $cat <<EOM
14589
14590 Checking to see what type of arguments are accepted by gethostbyaddr().
14591 EOM
14592                 hdrs="$define sys/types.h
14593                         $d_socket sys/socket.h 
14594                         $i_niin netinet/in.h 
14595                         $i_netdb netdb.h
14596                         $i_unistd unistd.h"
14597                 : The first arg can 'char *' or 'void *'
14598                 : The second arg is some of integral type
14599                 for xxx in in_addr_t 'const void *' 'const char *' 'void *' 'char *'; do
14600                         for yyy in size_t long int; do
14601                                 case "$netdb_host_type" in
14602                                 '')     try="extern struct hostent *gethostbyaddr($xxx, $yyy, int);"
14603                                         if ./protochk "$try" $hdrs; then
14604                                                 echo "Your system accepts $xxx for the first arg."
14605                                                 echo "...and $yyy for the second arg."
14606                                                 netdb_host_type="$xxx"
14607                                                 netdb_hlen_type="$yyy"
14608                                         fi
14609                                         ;;
14610                                 esac
14611                         done
14612                 done
14613                 : In case none of those worked, prompt the user.
14614                 case "$netdb_host_type" in
14615                 '')     rp='What is the type for the 1st argument to gethostbyaddr?'
14616                         dflt='char *'
14617                         . ./myread
14618                         netdb_host_type=$ans
14619                         rp='What is the type for the 2nd argument to gethostbyaddr?'
14620                         dflt="$sizetype"
14621                         . ./myread
14622                         netdb_hlen_type=$ans
14623                         ;;
14624                 esac
14625                 ;;
14626         *)      : no gethostbyaddr, so pick harmless defaults
14627                 netdb_host_type='char *'
14628                 netdb_hlen_type="$sizetype"
14629                 ;;
14630         esac
14631         # Remove the "const" if needed. -- but then we'll have a 
14632         # prototype clash!
14633         # netdb_host_type=`echo "$netdb_host_type" | sed 's/^const //'`
14634 fi
14635
14636 : check for type of argument to gethostbyname. 
14637 if test "X$netdb_name_type" = X ; then
14638         case "$d_gethbyname" in
14639         $define)
14640                 $cat <<EOM
14641
14642 Checking to see what type of argument is accepted by gethostbyname().
14643 EOM
14644                 hdrs="$define sys/types.h
14645                         $d_socket sys/socket.h 
14646                         $i_niin netinet/in.h 
14647                         $i_netdb netdb.h
14648                         $i_unistd unistd.h"
14649                 for xxx in "const char *" "char *"; do
14650                         case "$netdb_name_type" in
14651                         '')     try="extern struct hostent *gethostbyname($xxx);"
14652                                 if ./protochk "$try" $hdrs; then
14653                                         echo "Your system accepts $xxx."
14654                                         netdb_name_type="$xxx"
14655                                 fi
14656                                 ;;
14657                         esac
14658                 done
14659                 : In case none of those worked, prompt the user.
14660                 case "$netdb_name_type" in
14661                 '')     rp='What is the type for the 1st argument to gethostbyname?'
14662                         dflt='char *'
14663                         . ./myread
14664                         netdb_name_type=$ans
14665                         ;;
14666                 esac
14667                 ;;
14668         *)      : no gethostbyname, so pick harmless default
14669                 netdb_name_type='char *'
14670                 ;;
14671         esac
14672 fi
14673
14674 : check for type of 1st argument to getnetbyaddr. 
14675 if test "X$netdb_net_type" = X ; then
14676         case "$d_getnbyaddr" in
14677         $define)
14678                 $cat <<EOM
14679
14680 Checking to see what type of 1st argument is accepted by getnetbyaddr().
14681 EOM
14682                 hdrs="$define sys/types.h
14683                         $d_socket sys/socket.h 
14684                         $i_niin netinet/in.h 
14685                         $i_netdb netdb.h
14686                         $i_unistd unistd.h"
14687                 for xxx in in_addr_t "unsigned long" long "unsigned int" int; do
14688                         case "$netdb_net_type" in
14689                         '')     try="extern struct netent *getnetbyaddr($xxx, int);"
14690                                 if ./protochk "$try" $hdrs; then
14691                                         echo "Your system accepts $xxx."
14692                                         netdb_net_type="$xxx"
14693                                 fi
14694                                 ;;
14695                         esac
14696                 done
14697                 : In case none of those worked, prompt the user.
14698                 case "$netdb_net_type" in
14699                 '')     rp='What is the type for the 1st argument to getnetbyaddr?'
14700                         dflt='long'
14701                         . ./myread
14702                         netdb_net_type=$ans
14703                         ;;
14704                 esac
14705                 ;;
14706         *)      : no getnetbyaddr, so pick harmless default
14707                 netdb_net_type='long'
14708                 ;;
14709         esac
14710 fi
14711 : locate the preferred pager for this system
14712 case "$pager" in
14713 '')
14714         dflt=''
14715         case "$pg" in
14716         /*) dflt=$pg;;
14717         [a-zA-Z]:/*) dflt=$pg;;
14718         esac
14719         case "$more" in
14720         /*) dflt=$more;;
14721         [a-zA-Z]:/*) dflt=$more;;
14722         esac
14723         case "$less" in
14724         /*) dflt=$less;;
14725         [a-zA-Z]:/*) dflt=$less;;
14726         esac
14727         case "$dflt" in
14728         '') dflt=/usr/ucb/more;;
14729         esac
14730         ;;
14731 *) dflt="$pager";;
14732 esac
14733 echo " "
14734 fn=f/
14735 rp='What pager is used on your system?'
14736 . ./getfile
14737 pager="$ans"
14738
14739 : see what type pids are declared as in the kernel
14740 rp="What is the type of process ids on this system?"
14741 set pid_t pidtype int stdio.h sys/types.h
14742 eval $typedef_ask
14743
14744 : Find earliest binary compatible site_perl subdirectory perl can use.
14745 case "$bincompat5005" in
14746 "$define") xs_apiversion='5.005' ;;
14747 *) xs_apiversion=$version ;;   # The current site_perl version.
14748 esac
14749 : Find earliest pure perl site_perl subdirectory perl can use.
14750 : The versioned directories started at 5.005.
14751 pm_apiversion='5.005'
14752
14753 : see if ar generates random libraries by itself
14754 echo " "
14755 echo "Checking how to generate random libraries on your machine..." >&4
14756 echo 'int bar1() { return bar2(); }' > bar1.c
14757 echo 'int bar2() { return 2; }' > bar2.c
14758 $cat > foo.c <<'EOP'
14759 int main() { printf("%d\n", bar1()); exit(0); }
14760 EOP
14761 $cc $ccflags -c bar1.c >/dev/null 2>&1
14762 $cc $ccflags -c bar2.c >/dev/null 2>&1
14763 $cc $ccflags -c foo.c >/dev/null 2>&1
14764 $ar rc bar$_a bar2$_o bar1$_o >/dev/null 2>&1
14765 if $cc -o foobar $ccflags $ldflags foo$_o bar$_a $libs > /dev/null 2>&1 &&
14766         $run ./foobar >/dev/null 2>&1; then
14767         echo "$ar appears to generate random libraries itself."
14768         orderlib=false
14769         ranlib=":"
14770 elif $ar ts bar$_a >/dev/null 2>&1 &&
14771         $cc -o foobar $ccflags $ldflags foo$_o bar$_a $libs > /dev/null 2>&1 &&
14772         $run ./foobar >/dev/null 2>&1; then
14773                 echo "a table of contents needs to be added with '$ar ts'."
14774                 orderlib=false
14775                 ranlib="$ar ts"
14776 else
14777         case "$ranlib" in
14778         :) ranlib='';;
14779         '')
14780                 ranlib=`./loc ranlib X /usr/bin /bin /usr/local/bin`
14781                 $test -f $ranlib || ranlib=''
14782                 ;;
14783         esac
14784         if $test -n "$ranlib"; then
14785                 echo "your system has '$ranlib'; we'll use that."
14786                 orderlib=false
14787         else
14788                 echo "your system doesn't seem to support random libraries"
14789                 echo "so we'll use lorder and tsort to order the libraries."
14790                 orderlib=true
14791                 ranlib=":"
14792         fi
14793 fi
14794 $rm -f foo* bar* 
14795
14796 : check for type of arguments to select. 
14797 case "$selecttype" in
14798 '') case "$d_select" in
14799         $define)
14800                 echo " "
14801                 $cat <<EOM
14802 Checking to see what type of arguments are accepted by select().
14803 EOM
14804                 hdrs="$define sys/types.h
14805                         $i_systime sys/time.h 
14806                         $i_sysselct sys/select.h
14807                         $d_socket sys/socket.h"
14808                 : The first arg can be int, unsigned, or size_t
14809                 : The last arg may or may not be 'const'
14810                 val=''
14811                 : void pointer has been seen but using that
14812                 : breaks the selectminbits test
14813                 for xxx in 'fd_set *' 'int *'; do
14814                         for nfd in 'int' 'size_t' 'unsigned long' 'unsigned' ; do
14815                                 for tmo in 'struct timeval *' 'const struct timeval *'; do
14816                                         case "$val" in
14817                                         '')     try="extern select _(($nfd, $xxx, $xxx, $xxx, $tmo));"
14818                                                 if ./protochk "$try" $hdrs; then
14819                                                         echo "Your system accepts $xxx."
14820                                                         val="$xxx"
14821                                                 fi
14822                                                 ;;
14823                                         esac
14824                                 done
14825                         done
14826                 done
14827                 case "$val" in
14828                 '')     rp='What is the type for the 2nd, 3rd, and 4th arguments to select?'
14829                         case "$d_fd_set" in
14830                                 $define) dflt="fd_set *" ;;
14831                                 *)              dflt="int *" ;;
14832                         esac
14833                         . ./myread
14834                         val=$ans
14835                         ;;
14836                 esac
14837                 selecttype="$val"
14838                 ;;
14839         *)      : no select, so pick a harmless default
14840                 selecttype='int *'
14841                 ;;
14842         esac
14843         ;;
14844 esac
14845
14846 : check for the select 'width'
14847 case "$selectminbits" in
14848 '') case "$d_select" in
14849         $define)
14850                 $cat <<EOM
14851
14852 Checking to see on how many bits at a time your select() operates...
14853 EOM
14854                 $cat >try.c <<EOCP
14855 #include <sys/types.h>
14856 #$i_time I_TIME
14857 #$i_systime I_SYS_TIME
14858 #$i_systimek I_SYS_TIME_KERNEL
14859 #ifdef I_TIME
14860 #   include <time.h>
14861 #endif
14862 #ifdef I_SYS_TIME
14863 #   ifdef I_SYS_TIME_KERNEL
14864 #       define KERNEL
14865 #   endif
14866 #   include <sys/time.h>
14867 #   ifdef I_SYS_TIME_KERNEL
14868 #       undef KERNEL
14869 #   endif
14870 #endif
14871 #$i_sysselct I_SYS_SELECT
14872 #ifdef I_SYS_SELECT
14873 #include <sys/select.h>
14874 #endif
14875 #$d_socket HAS_SOCKET
14876 #ifdef HAS_SOCKET
14877 #   include <sys/socket.h> /* Might include <sys/bsdtypes.h> */
14878 #endif
14879 #include <stdio.h>
14880 $selecttype b;
14881 #define S sizeof(*(b))
14882 #define MINBITS 64
14883 #define NBYTES (S * 8 > MINBITS ? S : MINBITS/8)
14884 #define NBITS  (NBYTES * 8)
14885 int main() {
14886     char s[NBYTES];
14887     struct timeval t;
14888     int i;
14889     FILE* fp;
14890     int fd;
14891
14892     fclose(stdin);
14893     fp = fopen("try.c", "r");
14894     if (fp == 0)
14895       exit(1);
14896     fd = fileno(fp);
14897     if (fd < 0)
14898       exit(2);
14899     b = ($selecttype)s;
14900     for (i = 0; i < NBITS; i++)
14901         FD_SET(i, b);
14902     t.tv_sec  = 0;
14903     t.tv_usec = 0;
14904     select(fd + 1, b, 0, 0, &t);
14905     for (i = NBITS - 1; i > fd && FD_ISSET(i, b); i--);
14906     printf("%d\n", i + 1);
14907     return 0;
14908 }
14909 EOCP
14910                 set try
14911                 if eval $compile_ok; then
14912                         selectminbits=`$run ./try`
14913                         case "$selectminbits" in
14914                         '')     cat >&4 <<EOM
14915 Cannot figure out on how many bits at a time your select() operates.
14916 I'll play safe and guess it is 32 bits.
14917 EOM
14918                                 selectminbits=32
14919                                 bits="32 bits"
14920                                 ;;
14921                         1)      bits="1 bit" ;;
14922                         *)      bits="$selectminbits bits" ;;
14923                         esac
14924                         echo "Your select() operates on $bits at a time." >&4
14925                 else
14926                         rp='What is the minimum number of bits your select() operates on?'
14927                         case "$byteorder" in
14928                         1234|12345678)  dflt=32 ;;
14929                         *)              dflt=1  ;;
14930                         esac
14931                         . ./myread
14932                         val=$ans
14933                         selectminbits="$val"
14934                 fi
14935                 $rm -f try.* try
14936                 ;;
14937         *)      : no select, so pick a harmless default
14938                 selectminbits='32'
14939                 ;;
14940         esac
14941         ;;
14942 esac
14943
14944 : Trace out the files included by signal.h, then look for SIGxxx names.
14945 : Remove SIGARRAYSIZE used by HPUX.
14946 : Remove SIGSTKSIZE used by Linux.
14947 : Remove SIGSTKSZ used by Posix.
14948 : Remove SIGTYP void lines used by OS2.
14949 : Some cpps, like os390, dont give the file name anywhere
14950 if [ "X$fieldn" = X ]; then
14951         : Just make some guesses.  We check them later.
14952         xxx='/usr/include/signal.h /usr/include/sys/signal.h'
14953 else
14954         xxx=`echo '#include <signal.h>' |
14955         $cppstdin $cppminus $cppflags 2>/dev/null |
14956         $grep '^[       ]*#.*include' | 
14957         $awk "{print \\$$fieldn}" | $sed 's!"!!g' | $sed 's!\\\\\\\\!/!g' | $sort | $uniq`
14958 fi
14959 : Check this list of files to be sure we have parsed the cpp output ok.
14960 : This will also avoid potentially non-existent files, such 
14961 : as ../foo/bar.h
14962 xxxfiles=''
14963 for xx in $xxx /dev/null ; do
14964         $test -f "$xx" && xxxfiles="$xxxfiles $xx"
14965 done
14966 : If we have found no files, at least try signal.h
14967 case "$xxxfiles" in
14968 '')     xxxfiles=`./findhdr signal.h` ;;
14969 esac
14970 xxx=`awk '
14971 $1 ~ /^#define$/ && $2 ~ /^SIG[A-Z0-9]*$/ && $2 !~ /SIGARRAYSIZE/ && $2 !~ /SIGSTKSIZE/ && $2 !~ /SIGSTKSZ/ && $3 !~ /void/ {
14972         print substr($2, 4, 20)
14973 }
14974 $1 == "#" && $2 ~ /^define$/ && $3 ~ /^SIG[A-Z0-9]*$/ && $3 !~ /SIGARRAYSIZE/ && $4 !~ /void/ {
14975         print substr($3, 4, 20)
14976 }' $xxxfiles`
14977 : Append some common names just in case the awk scan failed.
14978 xxx="$xxx ABRT ALRM BUS CANCEL CHLD CLD CONT DIL EMT FPE"
14979 xxx="$xxx FREEZE HUP ILL INT IO IOT KILL LOST LWP PHONE"
14980 xxx="$xxx PIPE POLL PROF PWR QUIT RTMAX RTMIN SEGV STKFLT STOP"
14981 xxx="$xxx SYS TERM THAW TRAP TSTP TTIN TTOU URG USR1 USR2"
14982 xxx="$xxx USR3 USR4 VTALRM WAITING WINCH WIND WINDOW XCPU XFSZ"
14983
14984 : generate a few handy files for later
14985 $cat > signal.c <<'EOCP'
14986 #include <sys/types.h>
14987 #include <signal.h>
14988 #include <stdio.h>
14989 int main() {
14990
14991 /* Strange style to avoid deeply-nested #if/#else/#endif */
14992 #ifndef NSIG
14993 #  ifdef _NSIG
14994 #    define NSIG (_NSIG)
14995 #  endif
14996 #endif
14997
14998 #ifndef NSIG
14999 #  ifdef SIGMAX
15000 #    define NSIG (SIGMAX+1)
15001 #  endif
15002 #endif
15003
15004 #ifndef NSIG
15005 #  ifdef SIG_MAX
15006 #    define NSIG (SIG_MAX+1)
15007 #  endif
15008 #endif
15009
15010 #ifndef NSIG
15011 #  ifdef MAXSIG
15012 #    define NSIG (MAXSIG+1)
15013 #  endif
15014 #endif
15015
15016 #ifndef NSIG
15017 #  ifdef MAX_SIG
15018 #    define NSIG (MAX_SIG+1)
15019 #  endif
15020 #endif
15021
15022 #ifndef NSIG
15023 #  ifdef SIGARRAYSIZE
15024 #    define NSIG (SIGARRAYSIZE+1) /* Not sure of the +1 */
15025 #  endif
15026 #endif
15027
15028 #ifndef NSIG
15029 #  ifdef _sys_nsig
15030 #    define NSIG (_sys_nsig) /* Solaris 2.5 */
15031 #  endif
15032 #endif
15033
15034 /* Default to some arbitrary number that's big enough to get most
15035    of the common signals.
15036 */
15037 #ifndef NSIG
15038 #    define NSIG 50
15039 #endif
15040
15041 printf("NSIG %d\n", NSIG);
15042
15043 #ifndef JUST_NSIG
15044
15045 EOCP
15046
15047 echo $xxx | $tr ' ' $trnl | $sort | $uniq | $awk '
15048 {
15049         printf "#ifdef SIG"; printf $1; printf "\n"
15050         printf "printf(\""; printf $1; printf " %%d\\n\",SIG";
15051         printf $1; printf ");\n"
15052         printf "#endif\n"
15053 }
15054 END {
15055         printf "#endif /* JUST_NSIG */\n";
15056         printf "exit(0);\n}\n";
15057 }
15058 ' >>signal.c
15059 $cat >signal.awk <<'EOP'
15060 BEGIN { ndups = 0 }
15061 $1 ~ /^NSIG$/ { nsig = $2 }
15062 ($1 !~ /^NSIG$/) && (NF == 2) {
15063     if ($2 > maxsig) { maxsig = $2 }
15064     if (sig_name[$2]) {
15065         dup_name[ndups] = $1
15066         dup_num[ndups] = $2
15067         ndups++ 
15068     }
15069     else {
15070         sig_name[$2] = $1
15071         sig_num[$2] = $2
15072     }
15073 }
15074 END { 
15075     if (nsig == 0) {
15076         nsig = maxsig + 1
15077     }
15078     printf("NSIG %d\n", nsig);
15079     for (n = 1; n < nsig; n++) {
15080         if (sig_name[n]) {
15081             printf("%s %d\n", sig_name[n], sig_num[n])
15082         }
15083         else {
15084             printf("NUM%d %d\n", n, n) 
15085         }
15086     }
15087     for (n = 0; n < ndups; n++) {
15088         printf("%s %d\n", dup_name[n], dup_num[n])
15089     }
15090 }
15091 EOP
15092 $cat >signal_cmd <<EOS
15093 $startsh
15094 if $test -s signal.lst; then
15095     echo "Using your existing signal.lst file"
15096         exit 0
15097 fi
15098 xxx="$xxx"
15099 EOS
15100 $cat >>signal_cmd <<'EOS'
15101
15102 set signal
15103 if eval $compile_ok; then
15104         $run ./signal$_exe | $sort -n +1 | $uniq | $awk -f signal.awk >signal.lst
15105 else
15106         echo "(I can't seem be able to compile the whole test program)" >&4
15107         echo "(I'll try it in little pieces.)" >&4
15108         set signal -DJUST_NSIG
15109         if eval $compile_ok; then
15110                 $run ./signal$_exe > signal.nsg
15111                 $cat signal.nsg
15112         else
15113                 echo "I can't seem to figure out how many signals you have." >&4
15114                 echo "Guessing 50." >&4
15115                 echo 'NSIG 50' > signal.nsg
15116         fi
15117         : Now look at all the signal names, one at a time.
15118         for xx in `echo $xxx | $tr ' ' $trnl | $sort | $uniq`; do
15119                 $cat > signal.c <<EOCP
15120 #include <sys/types.h>
15121 #include <signal.h>
15122 #include <stdio.h>
15123 int main() {
15124 printf("$xx %d\n", SIG${xx});
15125 return 0;
15126 }
15127 EOCP
15128                 set signal
15129                 if eval $compile; then
15130                         echo "SIG${xx} found."
15131                         $run ./signal$_exe  >> signal.ls1
15132                 else
15133                         echo "SIG${xx} NOT found."
15134                 fi
15135         done
15136         if $test -s signal.ls1; then
15137                 $cat signal.nsg signal.ls1 |
15138                         $sort -n +1 | $uniq | $awk -f signal.awk >signal.lst
15139         fi
15140
15141 fi
15142 if $test -s signal.lst; then
15143         :
15144 else
15145         echo "(AAK! I can't compile the test programs -- Guessing)" >&4
15146         echo 'kill -l' >signal
15147         set X `csh -f <signal`
15148         $rm -f signal
15149         shift
15150         case $# in
15151         0) set HUP INT QUIT ILL TRAP ABRT EMT FPE KILL BUS SEGV SYS PIPE ALRM TERM;;
15152         esac
15153         echo $@ | $tr ' ' $trnl | \
15154             $awk '{ printf "%s %d\n", $1, ++s; }
15155                   END { printf "NSIG %d\n", ++s }' >signal.lst
15156 fi
15157 $rm -f signal.c signal$_exe signal$_o signal.nsg signal.ls1
15158 EOS
15159 chmod a+x signal_cmd
15160 $eunicefix signal_cmd
15161
15162 : generate list of signal names
15163 echo " "
15164 case "$sig_name_init" in
15165 '') doinit=yes ;;
15166 *)  case "$sig_num_init" in
15167     ''|*,*) doinit=yes ;;
15168     esac ;;
15169 esac
15170 case "$doinit" in
15171 yes)
15172         echo "Generating a list of signal names and numbers..." >&4
15173         . ./signal_cmd
15174         sig_count=`$awk '/^NSIG/ { printf "%d", $2 }' signal.lst`
15175         sig_name=`$awk 'BEGIN { printf "ZERO " }
15176                         !/^NSIG/ { printf "%s ", $1 }' signal.lst`
15177         sig_num=`$awk  'BEGIN { printf "0 " }
15178                         !/^NSIG/ { printf "%d ", $2 }' signal.lst`
15179         sig_name_init=`$awk 'BEGIN      { printf "\"ZERO\", " }
15180                              !/^NSIG/   { printf "\"%s\", ", $1 }
15181                              END        { printf "0\n" }' signal.lst`
15182         sig_num_init=`$awk  'BEGIN      { printf "0, " }
15183                              !/^NSIG/   { printf "%d, ", $2}
15184                              END        { printf "0\n"}' signal.lst`
15185         ;;
15186 esac
15187 echo "The following $sig_count signals are available:"
15188 echo " "
15189 echo $sig_name | $awk \
15190 'BEGIN { linelen = 0 }
15191 {
15192         for (i = 1; i <= NF; i++) {
15193                 name = "SIG" $i " "
15194                 linelen = linelen + length(name)
15195                 if (linelen > 70) {
15196                         printf "\n"
15197                         linelen = length(name)
15198                 }
15199                 printf "%s", name
15200         }
15201         printf "\n"
15202 }'
15203 sig_size=`echo $sig_name | awk '{print NF}'`
15204 $rm -f signal signal.c signal.awk signal.lst signal_cmd 
15205
15206 echo " "
15207 case "$sizetype" in
15208 *_t) zzz="$sizetype"    ;;
15209 *)   zzz="filesize"     ;;
15210 esac
15211 echo "Checking the size of $zzz..." >&4 
15212 cat > try.c <<EOCP
15213 #include <sys/types.h>
15214 #include <stdio.h>
15215 int main() {
15216     printf("%d\n", (int)sizeof($sizetype));
15217     exit(0);
15218 }
15219 EOCP
15220 set try
15221 if eval $compile_ok; then
15222         yyy=`$run ./try`
15223         case "$yyy" in
15224         '')     sizesize=4
15225                 echo "(I can't execute the test program--guessing $sizesize.)" >&4
15226                 ;;
15227         *)      sizesize=$yyy
15228                 echo "Your $zzz size is $sizesize bytes."
15229                 ;;
15230         esac
15231 else
15232         sizesize=4
15233         echo "(I can't compile the test program--guessing $sizesize.)" >&4
15234 fi
15235
15236
15237 : check for socklen_t
15238 echo " "
15239 echo "Checking to see if you have socklen_t..." >&4
15240 $cat >try.c <<EOCP
15241 #include <sys/types.h>
15242 #$d_socket HAS_SOCKET
15243 #ifdef HAS_SOCKET
15244 #include <sys/socket.h>
15245 #endif
15246 int main() { socklen_t x = 16; }
15247 EOCP
15248 set try
15249 if eval $compile; then
15250         val="$define"
15251         echo "You have socklen_t."
15252 else
15253         val="$undef"
15254         echo "You do not have socklen_t."
15255         case "$sizetype" in
15256         size_t) echo "(You do have size_t, that might work. Some people are happy with just an int.)" ;;
15257         esac
15258 fi
15259 $rm -f try try.*
15260 set d_socklen_t
15261 eval $setvar
15262
15263 : see if this is a socks.h system
15264 set socks.h i_socks
15265 eval $inhdr
15266
15267 : check for type of the size argument to socket calls
15268 case "$d_socket" in
15269 "$define")
15270         $cat <<EOM
15271
15272 Checking to see what type is the last argument of accept().
15273 EOM
15274         yyy=''
15275         case "$d_socklen_t" in
15276         "$define") yyy="$yyy socklen_t"
15277         esac
15278         yyy="$yyy $sizetype int long unsigned"
15279         for xxx in $yyy; do
15280                 case "$socksizetype" in
15281                 '')     try="extern int accept(int, struct sockaddr *, $xxx *);"
15282                         case "$usesocks" in
15283                         "$define")
15284                                 if ./protochk "$try" $i_systypes sys/types.h $d_socket sys/socket.h literal '#define INCLUDE_PROTOTYPES' $i_socks socks.h.; then
15285                                         echo "Your system accepts '$xxx *' for the last argument of accept()."
15286                                         socksizetype="$xxx"
15287                                 fi
15288                                 ;;
15289                         *)      if ./protochk "$try"  $i_systypes sys/types.h $d_socket sys/socket.h; then
15290                                         echo "Your system accepts '$xxx *' for the last argument of accept()."
15291                                         socksizetype="$xxx"
15292                                 fi
15293                                 ;;
15294                         esac
15295                         ;;
15296                 esac
15297         done
15298 : In case none of those worked, prompt the user.
15299         case "$socksizetype" in
15300         '')     rp='What is the type for socket address structure sizes?'
15301                 dflt='int'
15302                 . ./myread
15303                 socksizetype=$ans
15304                 ;;
15305         esac
15306         ;;
15307 *)      : no sockets, so pick relatively harmless default
15308         socksizetype='int'
15309         ;;
15310 esac
15311
15312 : see what type is used for signed size_t
15313 set ssize_t ssizetype int stdio.h sys/types.h
15314 eval $typedef
15315 dflt="$ssizetype"
15316 $cat > try.c <<EOM
15317 #include <stdio.h>
15318 #include <sys/types.h>
15319 #define Size_t $sizetype
15320 #define SSize_t $dflt
15321 int main()
15322 {
15323         if (sizeof(Size_t) == sizeof(SSize_t))
15324                 printf("$dflt\n");
15325         else if (sizeof(Size_t) == sizeof(int))
15326                 printf("int\n");
15327         else 
15328                 printf("long\n");
15329         exit(0);
15330 }
15331 EOM
15332 echo " "
15333 set try
15334 if eval $compile_ok && $run ./try > /dev/null; then
15335         ssizetype=`$run ./try`
15336         echo "I'll be using $ssizetype for functions returning a byte count." >&4
15337 else
15338         $cat >&4 <<EOM
15339 Help! I can't compile and run the ssize_t test program: please enlighten me!
15340 (This is probably a misconfiguration in your system or libraries, and
15341 you really ought to fix it.  Still, I'll try anyway.)
15342
15343 I need a type that is the same size as $sizetype, but is guaranteed to
15344 be signed.  Common values are ssize_t, int and long.
15345
15346 EOM
15347         rp="What signed type is the same size as $sizetype?"
15348         . ./myread
15349         ssizetype="$ans"
15350 fi
15351 $rm -f try try.*
15352
15353 : see what type of char stdio uses.
15354 echo " "
15355 echo '#include <stdio.h>' | $cppstdin $cppminus > stdioh
15356 if $contains 'unsigned.*char.*_ptr;' stdioh >/dev/null 2>&1 ; then
15357         echo "Your stdio uses unsigned chars." >&4
15358         stdchar="unsigned char"
15359 else
15360         echo "Your stdio uses signed chars." >&4
15361         stdchar="char"
15362 fi
15363 $rm -f stdioh
15364
15365
15366
15367 : see if time exists
15368 echo " "
15369 if test "X$d_time" = X -o X"$timetype" = X; then
15370     if set time val -f d_time; eval $csym; $val; then
15371                 echo 'time() found.' >&4
15372                 val="$define"
15373                 rp="What is the type returned by time() on this system?"
15374                 set time_t timetype long stdio.h sys/types.h
15375                 eval $typedef_ask
15376     else
15377                 echo 'time() not found, hope that will do.' >&4
15378                 val="$undef"
15379                 timetype='int';
15380     fi
15381     set d_time
15382     eval $setvar
15383 fi
15384
15385 : see what type uids are declared as in the kernel
15386 echo " "
15387 echo "Looking for the type for user ids returned by getuid()."
15388 set uid_t uidtype xxx stdio.h sys/types.h
15389 eval $typedef
15390 case "$uidtype" in
15391 xxx)
15392         xxx=`./findhdr sys/user.h`
15393         set `grep '_ruid;' "$xxx" 2>/dev/null` unsigned short
15394         case $1 in
15395         unsigned) dflt="$1 $2" ;;
15396         *) dflt="$1" ;;
15397         esac
15398         ;;
15399 *) dflt="$uidtype";;
15400 esac
15401 case "$uidtype" in
15402 uid_t)  echo "uid_t found." ;;
15403 *)      rp="What is the type for user ids returned by getuid()?"
15404         . ./myread
15405         uidtype="$ans"
15406         ;;
15407 esac
15408
15409 echo " "
15410 case "$uidtype" in
15411 *_t) zzz="$uidtype"     ;;
15412 *)   zzz="uid"          ;;
15413 esac
15414 echo "Checking the size of $zzz..." >&4 
15415 cat > try.c <<EOCP
15416 #include <sys/types.h>
15417 #include <stdio.h>
15418 int main() {
15419     printf("%d\n", (int)sizeof($uidtype));
15420     exit(0);
15421 }
15422 EOCP
15423 set try
15424 if eval $compile_ok; then
15425         yyy=`$run ./try`
15426         case "$yyy" in
15427         '')     uidsize=4
15428                 echo "(I can't execute the test program--guessing $uidsize.)" >&4
15429                 ;;
15430         *)      uidsize=$yyy
15431                 echo "Your $zzz is $uidsize bytes long."
15432                 ;;
15433         esac
15434 else
15435         uidsize=4
15436         echo "(I can't compile the test program--guessing $uidsize.)" >&4
15437 fi
15438
15439 echo " "
15440 case "$uidtype" in
15441 *_t) zzz="$uidtype"     ;;
15442 *)   zzz="uid"          ;;
15443 esac
15444 echo "Checking the sign of $zzz..." >&4
15445 cat > try.c <<EOCP
15446 #include <sys/types.h>
15447 #include <stdio.h>
15448 int main() {
15449         $uidtype foo = -1;
15450         if (foo < 0)
15451                 printf("-1\n");
15452         else
15453                 printf("1\n");
15454 }
15455 EOCP
15456 set try
15457 if eval $compile; then
15458         yyy=`$run ./try`
15459         case "$yyy" in
15460         '')     uidsign=1
15461                 echo "(I can't execute the test program--guessing unsigned.)" >&4
15462                 ;;
15463         *)      uidsign=$yyy
15464                 case "$uidsign" in
15465                  1) echo "Your $zzz is unsigned." ;;
15466                 -1) echo "Your $zzz is signed."   ;;
15467                 esac
15468                 ;;
15469         esac
15470 else
15471         uidsign=1
15472         echo "(I can't compile the test program--guessing unsigned.)" >&4
15473 fi
15474
15475
15476
15477 echo " "
15478 $echo "Checking the format string to be used for uids..." >&4
15479
15480 case "$uidsign" in
15481 -1)     if $test X"$uidsize" = X"$ivsize"; then
15482                 uidformat="$ivdformat"
15483         else
15484                 if $test X"$uidsize" = X"$longsize"; then
15485                         uidformat='"ld"'
15486                 else
15487                         if $test X"$uidsize" = X"$intsize"; then
15488                                 uidformat='"d"'
15489                         else
15490                                 if $test X"$uidsize" = X"$shortsize"; then
15491                                         uidformat='"hd"'
15492                                 fi
15493                         fi
15494                 fi
15495         fi
15496         ;;
15497 *)      if $test X"$uidsize" = X"$uvsize"; then
15498                 uidformat="$uvuformat"
15499         else
15500                 if $test X"$uidsize" = X"$longsize"; then
15501                         uidformat='"lu"'
15502                 else
15503                         if $test X"$uidsize" = X"$intsize"; then
15504                                 uidformat='"u"'
15505                         else
15506                                 if $test X"$uidsize" = X"$shortsize"; then
15507                                         uidformat='"hu"'
15508                                 fi
15509                         fi
15510                 fi
15511         fi
15512         ;;
15513 esac
15514
15515 : determine compiler compiler
15516 case "$yacc" in
15517 '')
15518         dflt=yacc;;
15519 *)
15520         dflt="$yacc";;
15521 esac
15522 echo " "
15523 comp='yacc'
15524 if $test -f "$byacc"; then
15525         dflt="$byacc"
15526         comp="byacc or $comp"
15527 fi
15528 if $test -f "$bison"; then
15529         comp="$comp or bison -y"
15530 fi
15531 rp="Which compiler compiler ($comp) shall I use?"
15532 . ./myread
15533 yacc="$ans"
15534 case "$yacc" in
15535 *bis*)
15536         case "$yacc" in
15537         *-y*) ;;
15538         *)
15539                 yacc="$yacc -y"
15540                 echo "(Adding -y option to bison to get yacc-compatible behaviour.)"
15541                 ;;
15542         esac
15543         ;;
15544 esac
15545
15546 : see if fcntl.h is there
15547 val=''
15548 set fcntl.h val
15549 eval $inhdr
15550
15551 : see if we can include fcntl.h
15552 case "$val" in
15553 "$define")
15554         echo " "
15555         if $h_fcntl; then
15556                 val="$define"
15557                 echo "We'll be including <fcntl.h>." >&4
15558         else
15559                 val="$undef"
15560                 if $h_sysfile; then
15561         echo "We don't need to include <fcntl.h> if we include <sys/file.h>." >&4
15562                 else
15563                         echo "We won't be including <fcntl.h>." >&4
15564                 fi
15565         fi
15566         ;;
15567 *)
15568         h_fcntl=false
15569         val="$undef"
15570         ;;
15571 esac
15572 set i_fcntl
15573 eval $setvar
15574
15575 : see if this is a iconv.h system
15576 set iconv.h i_iconv
15577 eval $inhdr
15578
15579 : see if this is a ieeefp.h system
15580 set ieeefp.h i_ieeefp
15581 eval $inhdr
15582
15583 : see if this is a libutil.h system
15584 set libutil.h i_libutil
15585 eval $inhdr
15586
15587 : see if locale.h is available
15588 set locale.h i_locale
15589 eval $inhdr
15590
15591 : see if mach cthreads are available
15592 if test "X$usethreads" = "X$define"; then
15593         set mach/cthreads.h i_machcthr
15594         eval $inhdr
15595 else
15596         i_machcthr="$undef"
15597 fi
15598
15599
15600
15601 : see if this is a math.h system
15602 set math.h i_math
15603 eval $inhdr
15604
15605 : see if this is a mntent.h system
15606 set mntent.h i_mntent
15607 eval $inhdr
15608
15609 : see if ndbm.h is available
15610 set ndbm.h t_ndbm
15611 eval $inhdr
15612 case "$t_ndbm" in
15613 $define)
15614         : see if dbm_open exists
15615         set dbm_open d_dbm_open
15616         eval $inlibc
15617         case "$d_dbm_open" in
15618         $undef)
15619                 t_ndbm="$undef"
15620                 echo "We won't be including <ndbm.h>"
15621                 ;;
15622         esac
15623         ;;
15624 esac
15625 val="$t_ndbm"
15626 set i_ndbm
15627 eval $setvar
15628
15629 : see if net/errno.h is available
15630 val=''
15631 set net/errno.h val
15632 eval $inhdr
15633
15634 : Unfortunately, it causes problems on some systems.  Arrgh.
15635 case "$val" in
15636 $define)
15637         cat > try.c <<'EOM'
15638 #include <stdio.h>
15639 #include <errno.h>
15640 #include <net/errno.h>
15641 int func()
15642 {
15643         return ENOTSOCK;
15644 }
15645 EOM
15646         if $cc $ccflags -c try.c >/dev/null 2>&1; then
15647                 echo "We'll be including <net/errno.h>." >&4
15648         else
15649                 echo "We won't be including <net/errno.h>." >&4
15650                 val="$undef"
15651         fi
15652         $rm -f try.* try
15653         ;;
15654 esac
15655 set i_neterrno
15656 eval $setvar
15657
15658 : see if netinet/tcp.h is available
15659 set netinet/tcp.h i_netinettcp
15660 eval $inhdr
15661
15662 : see if this is a poll.h system
15663 set poll.h i_poll
15664 eval $inhdr
15665
15666 : see if this is a prot.h system
15667 set prot.h i_prot
15668 eval $inhdr
15669
15670 echo " "
15671 $echo "Guessing which symbols your C compiler and preprocessor define..." >&4 
15672 $cat <<'EOSH' > Cppsym.know
15673 a29k ABI64 aegis AES_SOURCE AIX AIX32 AIX370
15674 AIX41 AIX42 AIX43 AIX_SOURCE aixpc ALL_SOURCE
15675 alliant alpha am29000 AM29000 AMD64 amiga AMIGAOS AMIX
15676 ansi ANSI_C_SOURCE apollo ardent ARM32 atarist att386 att3b
15677 BeOS BIG_ENDIAN BIT_MSF bsd BSD bsd43 bsd4_2 bsd4_3 BSD4_3 bsd4_4
15678 BSD_4_3 BSD_4_4 BSD_NET2 BSD_TIME BSD_TYPES BSDCOMPAT bsdi
15679 bull c cadmus clipper CMU COFF COMPILER_VERSION
15680 concurrent convex cpu cray CRAY CRAYMPP ctix CX_UX
15681 CYGWIN DGUX DGUX_SOURCE DJGPP dmert DOLPHIN DPX2 DSO
15682 Dynix DynixPTX ELF encore EPI EXTENSIONS FILE_OFFSET_BITS
15683 FreeBSD GCC_NEW_VARARGS gcos gcx gimpel
15684 GNU_SOURCE GNUC GNUC_MINOR GO32 gould GOULD_PN
15685 H3050R H3050RX hbullx20 hcx host_mips
15686 hp200 hp300 hp700 HP700 hp800 hp9000
15687 hp9000s200 hp9000s300 hp9000s400 hp9000s500
15688 hp9000s700 hp9000s800 hp9k8 hp_osf hppa hpux HPUX_SOURCE
15689 i186 i286 i386 i486 i586 i686 i8086 i80960 i860 I960
15690 IA64 iAPX286 ibm ibm032 ibmesa IBMR2 ibmrt ILP32 ILP64
15691 INLINE_INTRINSICS INTRINSICS INT64 interdata is68k ksr1
15692 LANGUAGE_C LARGE_FILE_API LARGEFILE64_SOURCE
15693 LARGEFILE_SOURCE LFS64_LARGEFILE LFS_LARGEFILE
15694 Linux LITTLE_ENDIAN LONG64 LONG_DOUBLE LONG_LONG
15695 LONGDOUBLE LONGLONG LP64 luna luna88k Lynx
15696 M68000 m68k m88100 m88k M88KBCS_TARGET M_COFF
15697 M_I186 M_I286 M_I386 M_I8086 M_I86 M_I86SM M_SYS3
15698 M_SYS5 M_SYSIII M_SYSV M_UNIX M_XENIX MACH machine MachTen
15699 MATH_HAS_NO_SIDE_EFFECTS
15700 mc300 mc500 mc68000 mc68010 mc68020 mc68030 mc68040
15701 mc68060 mc68k mc68k32 mc700 mc88000 mc88100 merlin
15702 mert MiNT mips MIPS_FPSET MIPS_ISA MIPS_SIM MIPS_SZINT
15703 MIPS_SZLONG MIPS_SZPTR MIPSEB MIPSEL MODERN_C motorola
15704 mpeix MSDOS MTXINU MULTIMAX mvs MVS n16 ncl_el ncl_mr
15705 NetBSD news1500 news1700 news1800 news1900 news3700
15706 news700 news800 news900 NeXT NLS nonstopux ns16000 ns32000
15707 ns32016 ns32332 ns32k nsc32000
15708 OCS88 OEMVS OpenBSD os OS2 OS390 osf OSF1 OSF_SOURCE
15709 pa_risc PA_RISC1_1 PA_RISC2_0 PARAGON parisc
15710 pc532 pdp11 PGC PIC plexus PORTAR posix
15711 POSIX1B_SOURCE POSIX2_SOURCE POSIX4_SOURCE
15712 POSIX_C_SOURCE POSIX_SOURCE POWER
15713 PROTOTYPES PWB pyr QNX R3000 REENTRANT RES Rhapsody RISC6000
15714 riscix riscos RT S390 SA110 scs SCO sequent sgi SGI_SOURCE SH3 sinix
15715 SIZE_INT SIZE_LONG SIZE_PTR SOCKET_SOURCE SOCKETS_SOURCE
15716 sony sony_news sonyrisc sparc sparclite spectrum
15717 stardent stdc STDC_EXT stratos sun sun3 sun386
15718 Sun386i svr3 svr4 SVR4_2 SVR4_SOURCE svr5
15719 SX system SYSTYPE_BSD SYSTYPE_BSD43 SYSTYPE_BSD44
15720 SYSTYPE_SVR4 SYSTYPE_SVR5 SYSTYPE_SYSV SYSV SYSV3 SYSV4 SYSV5
15721 sysV68 sysV88 Tek4132 Tek4300 titan
15722 TM3200 TM5400 TM5600
15723 tower tower32 tower32_200 tower32_600 tower32_700
15724 tower32_800 tower32_850 tss
15725 u370 u3b u3b2 u3b20 u3b200 u3b20d u3b5
15726 ultrix UMAXV UnicomPBB UnicomPBD UNICOS UNICOSMK
15727 unix UNIX95 UNIX99 unixpc unos USGr4 USGr4_2
15728 Utek UTek UTS UWIN uxpm uxps vax venix VMESA vms xenix Xenix286
15729 XOPEN_SOURCE XOPEN_SOURCE_EXTENDED XPG2 XPG2_EXTENDED
15730 XPG3 XPG3_EXTENDED XPG4 XPG4_EXTENDED
15731 z8000
15732 EOSH
15733 # Maybe put other stuff here too.
15734 cat <<EOSH >>Cppsym.know
15735 $osname
15736 EOSH
15737 ./tr '[a-z]' '[A-Z]' < Cppsym.know > Cppsym.a
15738 ./tr '[A-Z]' '[a-z]' < Cppsym.know > Cppsym.b
15739 $cat Cppsym.know > Cppsym.c
15740 $cat Cppsym.a Cppsym.b Cppsym.c | $tr ' ' $trnl | $sort | $uniq > Cppsym.know
15741 $rm -f Cppsym.a Cppsym.b Cppsym.c
15742 cat <<EOSH > Cppsym
15743 $startsh
15744 if $test \$# -gt 0; then
15745     echo \$* | $tr " " "$trnl" | ./Cppsym.try > Cppsym.got
15746     if $test -s Cppsym.got; then
15747         $rm -f Cppsym.got
15748         exit 0
15749     fi
15750     $rm -f Cppsym.got
15751     exit 1
15752 else
15753     $tr " " "$trnl" | ./Cppsym.try
15754     exit 0
15755 fi
15756 EOSH
15757 chmod +x Cppsym
15758 $eunicefix Cppsym
15759 cat <<EOSH > Cppsym.try
15760 $startsh
15761 cat <<'EOCP' > try.c
15762 #include <stdio.h>
15763 int main() {
15764 EOCP
15765 $awk \\
15766 EOSH
15767 cat <<'EOSH' >> Cppsym.try
15768 'length($1) > 0 {
15769     printf "#ifdef %s\n#if %s+0\nprintf(\"%s=%%ld\\n\", (long)%s);\n#else\nprintf(\"%s\\n\");\n#endif\n#endif\n", $1, $1, $1, $1, $1
15770     printf "#ifdef _%s\n#if _%s+0\nprintf(\"_%s=%%ld\\n\", (long)_%s);\n#else\nprintf(\"_%s\\n\");\n#endif\n#endif\n", $1, $1, $1, $1, $1
15771     printf "#ifdef __%s\n#if __%s+0\nprintf(\"__%s=%%ld\\n\", (long)__%s);\n#else\nprintf(\"__%s\\n\");\n#endif\n#endif\n", $1, $1, $1, $1, $1
15772     printf "#ifdef __%s__\n#if __%s__+0\nprintf(\"__%s__=%%ld\\n\", (long)__%s__);\n#else\nprintf(\"__%s__\\n\");\n#endif\n#endif\n", $1, $1, $1, $1, $1
15773 }'       >> try.c
15774 echo 'return 0;}' >> try.c
15775 EOSH
15776 cat <<EOSH >> Cppsym.try
15777 ccflags="$ccflags"
15778 case "$osname-$gccversion" in
15779 irix-) ccflags="\$ccflags -woff 1178" ;;
15780 os2-*) ccflags="\$ccflags -Zlinker /PM:VIO" ;;
15781 esac
15782 $cc -o try $optimize \$ccflags $ldflags try.c $libs && $run ./try
15783 EOSH
15784 chmod +x Cppsym.try
15785 $eunicefix Cppsym.try
15786 ./Cppsym < Cppsym.know > Cppsym.true
15787 : now check the C compiler for additional symbols
15788 postprocess_cc_v=''
15789 case "$osname" in
15790 aix) postprocess_cc_v="|$tr , ' '" ;;
15791 esac
15792 $cat >ccsym <<EOS
15793 $startsh
15794 $cat >tmp.c <<EOF
15795 extern int foo;
15796 EOF
15797 for i in \`$cc -v -c tmp.c 2>&1 $postprocess_cc_v\`
15798 do
15799         case "\$i" in
15800         -D*) echo "\$i" | $sed 's/^-D//';;
15801         -A*) $test "$gccversion" && echo "\$i" | $sed 's/^-A\(.*\)(\(.*\))/\1=\2/';;
15802         esac
15803 done
15804 $rm -f try.c
15805 EOS
15806 postprocess_cc_v=''
15807 chmod +x ccsym
15808 $eunicefix ccsym
15809 ./ccsym > ccsym1.raw
15810 if $test -s ccsym1.raw; then
15811        $sort ccsym1.raw | $uniq >ccsym.raw
15812 else
15813        mv ccsym1.raw ccsym.raw
15814 fi
15815
15816 $awk '/\=/ { print $0; next }
15817         { print $0"=1" }' ccsym.raw >ccsym.list
15818 $awk '/\=/ { print $0; next }
15819         { print $0"=1" }' Cppsym.true >ccsym.true
15820 $comm -13 ccsym.true ccsym.list >ccsym.own
15821 $comm -12 ccsym.true ccsym.list >ccsym.com
15822 $comm -23 ccsym.true ccsym.list >ccsym.cpp
15823 also=''
15824 if $test -z ccsym.raw; then
15825         echo "Your C compiler doesn't seem to define any symbols!" >&4
15826         echo " "
15827         echo "However, your C preprocessor defines the following symbols:"
15828         $cat Cppsym.true
15829         ccsymbols=''
15830         cppsymbols=`$cat Cppsym.true`
15831         cppsymbols=`echo $cppsymbols`
15832         cppccsymbols="$cppsymbols"
15833 else
15834         if $test -s ccsym.com; then
15835                 echo "Your C compiler and pre-processor define these symbols:"
15836                 $sed -e 's/\(..*\)=.*/\1/' ccsym.com
15837                 also='also '
15838                 symbols='ones'
15839                 cppccsymbols=`$cat ccsym.com`
15840                 cppccsymbols=`echo $cppccsymbols`
15841                 $test "$silent" || sleep 1
15842         fi
15843         if $test -s ccsym.cpp; then
15844                 $test "$also" && echo " "
15845                 echo "Your C pre-processor ${also}defines the following symbols:"
15846                 $sed -e 's/\(..*\)=.*/\1/' ccsym.cpp
15847                 also='further '
15848                 cppsymbols=`$cat ccsym.cpp`
15849                 cppsymbols=`echo $cppsymbols`
15850                 $test "$silent" || sleep 1
15851         fi
15852         if $test -s ccsym.own; then
15853                 $test "$also" && echo " "
15854                 echo "Your C compiler ${also}defines the following cpp symbols:"
15855                 $sed -e 's/\(..*\)=1/\1/' ccsym.own
15856                 $sed -e 's/\(..*\)=.*/\1/' ccsym.own | $uniq >>Cppsym.true
15857                 ccsymbols=`$cat ccsym.own`
15858                 ccsymbols=`echo $ccsymbols`
15859                 $test "$silent" || sleep 1
15860         fi
15861 fi
15862 $rm -f ccsym* Cppsym.*
15863
15864 : see if this is a termio system
15865 val="$undef"
15866 val2="$undef"
15867 val3="$undef"
15868 if $test `./findhdr termios.h`; then
15869         set tcsetattr i_termios
15870         eval $inlibc
15871         val3="$i_termios"
15872 fi
15873 echo " "
15874 case "$val3" in
15875 "$define") echo "You have POSIX termios.h... good!" >&4;;
15876 *) if ./Cppsym pyr; then
15877                 case "`/bin/universe`" in
15878                 ucb) if $test `./findhdr sgtty.h`; then
15879                                 val2="$define"
15880                                 echo "<sgtty.h> found." >&4
15881                         else
15882                                 echo "System is pyramid with BSD universe."
15883                                 echo "<sgtty.h> not found--you could have problems." >&4
15884                         fi;;
15885                 *) if $test `./findhdr termio.h`; then
15886                                 val="$define"
15887                                 echo "<termio.h> found." >&4
15888                         else
15889                                 echo "System is pyramid with USG universe."
15890                                 echo "<termio.h> not found--you could have problems." >&4
15891                         fi;;
15892                 esac
15893         elif ./usg; then
15894                 if $test `./findhdr termio.h`; then
15895                         echo "<termio.h> found." >&4
15896                         val="$define"
15897                 elif $test `./findhdr sgtty.h`; then
15898                         echo "<sgtty.h> found." >&4
15899                         val2="$define"
15900                 else
15901 echo "Neither <termio.h> nor <sgtty.h> found--you could have problems." >&4
15902                 fi
15903         else
15904                 if $test `./findhdr sgtty.h`; then
15905                         echo "<sgtty.h> found." >&4
15906                         val2="$define"
15907                 elif $test `./findhdr termio.h`; then
15908                         echo "<termio.h> found." >&4
15909                         val="$define"
15910                 else
15911 echo "Neither <sgtty.h> nor <termio.h> found--you could have problems." >&4
15912                 fi
15913         fi;;
15914 esac
15915 set i_termio; eval $setvar
15916 val=$val2; set i_sgtty; eval $setvar
15917 val=$val3; set i_termios; eval $setvar
15918
15919 : see if this is a shadow.h system
15920 set shadow.h i_shadow
15921 eval $inhdr
15922
15923 : see if stddef is available
15924 set stddef.h i_stddef
15925 eval $inhdr
15926
15927 : see if this is a sunmath.h system
15928 set sunmath.h i_sunmath
15929 eval $inhdr
15930
15931 : see if sys/access.h is available
15932 set sys/access.h i_sysaccess
15933 eval $inhdr
15934
15935 : see if ioctl defs are in sgtty, termio, sys/filio or sys/ioctl
15936 set sys/filio.h i_sysfilio
15937 eval $inhdr
15938 echo " "
15939 if $test `./findhdr sys/ioctl.h`; then
15940         val="$define"
15941         echo '<sys/ioctl.h> found.' >&4
15942 else
15943         val="$undef"
15944         if $test $i_sysfilio = "$define"; then
15945             echo '<sys/ioctl.h> NOT found.' >&4
15946         else
15947                 $test $i_sgtty = "$define" && xxx="sgtty.h"
15948                 $test $i_termio = "$define" && xxx="termio.h"
15949                 $test $i_termios = "$define" && xxx="termios.h"
15950 echo "No <sys/ioctl.h> found, assuming ioctl args are defined in <$xxx>." >&4
15951         fi
15952 fi
15953 set i_sysioctl
15954 eval $setvar
15955
15956 : see if socket ioctl defs are in sys/sockio.h
15957 echo " "
15958 xxx=`./findhdr sys/sockio.h`
15959 if $test "$xxx"; then
15960         if $contains SIOCATMARK $xxx >/dev/null 2>&1; then
15961                 val="$define"
15962                 echo "You have socket ioctls defined in <sys/sockio.h>." >&4
15963         else
15964                 val="$undef"
15965                 echo "No socket ioctls found in <sys/sockio.h>." >&4
15966         fi
15967 else
15968         val="$undef"
15969         $cat <<EOM
15970 <sys/sockio.h> not found, assuming socket ioctls are in <sys/ioctl.h>.
15971 EOM
15972 fi
15973 set i_syssockio
15974 eval $setvar
15975
15976
15977 : see if this is a syslog.h system
15978 set syslog.h i_syslog
15979 eval $inhdr
15980
15981
15982 : see if this is a sys/mode.h system
15983 set sys/mode.h i_sysmode
15984 eval $inhdr
15985
15986 : see if sys/resource.h has to be included
15987 set sys/resource.h i_sysresrc
15988 eval $inhdr
15989
15990 : see if sys/security.h is available
15991 set sys/security.h i_syssecrt
15992 eval $inhdr
15993
15994 : see if this is a sys/statvfs.h system
15995 set sys/statvfs.h i_sysstatvfs
15996 eval $inhdr
15997
15998 : see if this is a sys/un.h system
15999 set sys/un.h i_sysun
16000 eval $inhdr
16001
16002
16003 : see if this is a sys/utsname.h system
16004 set sys/utsname.h i_sysutsname
16005 eval $inhdr
16006
16007 : see if this is a syswait system
16008 set sys/wait.h i_syswait
16009 eval $inhdr
16010
16011 : see if this is a ustat.h system
16012 set ustat.h i_ustat
16013 eval $inhdr
16014
16015 : see if this is an utime system
16016 set utime.h i_utime
16017 eval $inhdr
16018
16019 : see if this is a values.h system
16020 set values.h i_values
16021 eval $inhdr
16022
16023 : see if this is a vfork system
16024 case "$d_vfork" in
16025 "$define")
16026         set vfork.h i_vfork
16027         eval $inhdr
16028         ;;
16029 *)
16030         i_vfork="$undef"
16031         ;;
16032 esac
16033
16034 : see if gdbm.h is available
16035 set gdbm.h t_gdbm
16036 eval $inhdr
16037 case "$t_gdbm" in
16038 $define)
16039         : see if gdbm_open exists
16040         set gdbm_open d_gdbm_open
16041         eval $inlibc
16042         case "$d_gdbm_open" in
16043         $undef)
16044                 t_gdbm="$undef"
16045                 echo "We won't be including <gdbm.h>"
16046                 ;;
16047         esac
16048         ;;
16049 esac
16050 val="$t_gdbm"
16051 set i_gdbm
16052 eval $setvar
16053
16054 echo " "
16055 echo "Looking for extensions..." >&4
16056 : If we are using the old config.sh, known_extensions may contain
16057 : old or inaccurate or duplicate values.
16058 known_extensions=''
16059 nonxs_extensions=''
16060 : We do not use find because it might not be available.
16061 : We do not just use MANIFEST because the user may have dropped
16062 : some additional extensions into the source tree and expect them
16063 : to be built.
16064
16065 : Function to recursively find available extensions, ignoring DynaLoader
16066 : NOTE: recursion limit of 10 to prevent runaway in case of symlink madness
16067 find_extensions='
16068     for xxx in *; do
16069        case "$xxx" in
16070            DynaLoader|dynaload) ;;
16071            *)
16072            if $test -f $xxx/$xxx.xs; then
16073                known_extensions="$known_extensions $1$xxx";
16074            elif $test -f $xxx/Makefile.PL; then
16075                nonxs_extensions="$nonxs_extensions $1$xxx";
16076            else
16077                if $test -d $xxx -a $# -lt 10; then
16078                    set $1$xxx/ $*;
16079                    cd $xxx;
16080                    eval $find_extensions;
16081                    cd ..;
16082                    shift;
16083                fi;
16084            fi
16085            ;;
16086        esac;
16087     done'
16088 tdir=`pwd`
16089 cd $rsrc/ext
16090 set X
16091 shift
16092 eval $find_extensions
16093 set X $nonxs_extensions
16094 shift
16095 nonxs_extensions="$*"
16096 set X $known_extensions
16097 shift
16098 known_extensions="$*"
16099 cd $tdir
16100
16101 : Now see which are supported on this system.
16102 avail_ext=''
16103 for xxx in $known_extensions ; do
16104         case "$xxx" in
16105         DB_File|db_file)
16106                 case "$i_db" in
16107                 $define) avail_ext="$avail_ext $xxx" ;;
16108                 esac
16109                 ;;
16110         GDBM_File|gdbm_fil)
16111                 case "$i_gdbm" in 
16112                 $define) avail_ext="$avail_ext $xxx" ;;
16113                 esac
16114                 ;;
16115         NDBM_File|ndbm_fil)
16116                 case "$i_ndbm" in
16117                 $define)
16118                     case "$osname-$use64bitint" in
16119                     hpux-define)
16120                         case "$libs" in
16121                         *-lndbm*) avail_ext="$avail_ext $xxx" ;;
16122                         esac
16123                         ;;
16124                     *) avail_ext="$avail_ext $xxx" ;;
16125                     esac
16126                     ;;
16127                 esac
16128                 ;;
16129         ODBM_File|odbm_fil) 
16130                 case "${i_dbm}${i_rpcsvcdbm}" in
16131                 *"${define}"*)
16132                     case "$osname-$use64bitint" in
16133                     hpux-define)
16134                         case "$libs" in
16135                         *-ldbm*) avail_ext="$avail_ext $xxx" ;;
16136                         esac
16137                         ;;
16138                     *) avail_ext="$avail_ext $xxx" ;;
16139                     esac
16140                     ;;
16141                 esac
16142                 ;;
16143         POSIX|posix)
16144                 case "$useposix" in
16145                 true|define|y) avail_ext="$avail_ext $xxx" ;;
16146                 esac
16147                 ;;
16148         Opcode|opcode)
16149                 case "$useopcode" in
16150                 true|define|y) avail_ext="$avail_ext $xxx" ;;
16151                 esac
16152                 ;;
16153         Socket|socket)
16154                 case "$d_socket" in 
16155                 true|$define|y) avail_ext="$avail_ext $xxx" ;;
16156                 esac
16157                 ;;
16158         Sys/Syslog|sys/syslog)
16159                 : XXX syslog requires socket
16160                 case "$d_socket" in 
16161                 true|$define|y) avail_ext="$avail_ext $xxx" ;;
16162                 esac
16163                 ;;
16164         Thread|thread)
16165                 case "$usethreads" in
16166                 true|$define|y)
16167                         case "$useithreads" in
16168                         $undef|false|[nN]*) avail_ext="$avail_ext $xxx" ;;
16169                         esac
16170                 esac
16171                 ;;
16172         IPC/SysV|ipc/sysv)
16173                 : XXX Do we need a useipcsysv variable here
16174                 case "${d_msg}${d_sem}${d_shm}" in 
16175                 *"${define}"*) avail_ext="$avail_ext $xxx" ;;
16176                 esac
16177                 ;;
16178         *)      avail_ext="$avail_ext $xxx"
16179                 ;;
16180         esac
16181 done
16182
16183 set X $avail_ext
16184 shift
16185 avail_ext="$*"
16186
16187 : Now see which nonxs extensions are supported on this system.
16188 : For now assume all are.
16189 nonxs_ext=''
16190 for xxx in $nonxs_extensions ; do
16191         case "$xxx" in
16192         *)      nonxs_ext="$nonxs_ext $xxx"
16193                 ;;
16194         esac
16195 done
16196
16197 set X $nonxs_ext
16198 shift
16199 nonxs_ext="$*"
16200
16201 case $usedl in
16202 $define)
16203         $cat <<EOM
16204 A number of extensions are supplied with $package.  You may choose to
16205 compile these extensions for dynamic loading (the default), compile
16206 them into the $package executable (static loading), or not include
16207 them at all.  Answer "none" to include no extensions.
16208 Note that DynaLoader is always built and need not be mentioned here.
16209
16210 EOM
16211         case "$dynamic_ext" in
16212         '') dflt="$avail_ext" ;;
16213         *)      dflt="$dynamic_ext"
16214                 # Perhaps we are reusing an old out-of-date config.sh.
16215                 case "$hint" in
16216                 previous)
16217                         if test X"$dynamic_ext" != X"$avail_ext"; then
16218                                 $cat <<EOM
16219 NOTICE:  Your previous config.sh list may be incorrect. 
16220 The extensions now available to you are 
16221         ${avail_ext}
16222 but the default list from your previous config.sh is
16223         ${dynamic_ext} 
16224
16225 EOM
16226                         fi
16227                         ;;
16228                 esac
16229                 ;;
16230         esac
16231         case "$dflt" in
16232         '')     dflt=none;;
16233         esac
16234         rp="What extensions do you wish to load dynamically?"
16235         . ./myread
16236         case "$ans" in
16237         none) dynamic_ext=' ' ;;
16238         *) dynamic_ext="$ans" ;;
16239         esac
16240
16241         case "$static_ext" in
16242         '')
16243                 : Exclude those already listed in dynamic linking
16244                 dflt=''
16245                 for xxx in $avail_ext; do
16246                         case " $dynamic_ext " in
16247                         *" $xxx "*) ;;
16248                         *) dflt="$dflt $xxx" ;;
16249                         esac
16250                 done
16251                 set X $dflt
16252                 shift
16253                 dflt="$*"
16254                 ;;
16255         *)  dflt="$static_ext" 
16256                 ;;
16257         esac
16258
16259         case "$dflt" in
16260         '')     dflt=none;;
16261         esac
16262         rp="What extensions do you wish to load statically?"
16263         . ./myread
16264         case "$ans" in
16265         none) static_ext=' ' ;;
16266         *) static_ext="$ans" ;;
16267         esac
16268         ;;
16269 *)
16270         $cat <<EOM
16271 A number of extensions are supplied with $package.  Answer "none" 
16272 to include no extensions. 
16273 Note that DynaLoader is always built and need not be mentioned here.
16274
16275 EOM
16276         case "$static_ext" in
16277         '') dflt="$avail_ext" ;;
16278         *)      dflt="$static_ext"
16279                 # Perhaps we are reusing an old out-of-date config.sh.
16280                 case "$hint" in
16281                 previous)
16282                         if test X"$static_ext" != X"$avail_ext"; then
16283                                 $cat <<EOM
16284 NOTICE:  Your previous config.sh list may be incorrect. 
16285 The extensions now available to you are 
16286         ${avail_ext}
16287 but the default list from your previous config.sh is
16288         ${static_ext} 
16289
16290 EOM
16291                         fi
16292                         ;;
16293                 esac
16294                 ;;
16295         esac
16296         : Exclude those that are not xs extensions
16297         case "$dflt" in
16298         '')     dflt=none;;
16299         esac
16300         rp="What extensions do you wish to include?"
16301         . ./myread
16302         case "$ans" in
16303         none) static_ext=' ' ;;
16304         *) static_ext="$ans" ;;
16305         esac
16306         ;;
16307 esac
16308
16309 set X $dynamic_ext $static_ext $nonxs_ext
16310 shift
16311 extensions="$*"
16312
16313 : Remove libraries needed only for extensions
16314 : The appropriate ext/Foo/Makefile.PL will add them back in, if necessary.
16315 : The exception is SunOS 4.x, which needs them.
16316 case "${osname}X${osvers}" in
16317 sunos*X4*)
16318     perllibs="$libs"
16319     ;;
16320 *) case "$usedl" in
16321     $define|true|[yY]*)
16322             set X `echo " $libs " | sed -e 's@ -lndbm @ @' -e 's@ -lgdbm @ @' -e 's@ -ldbm @ @' -e 's@ -ldb @ @'` 
16323             shift
16324             perllibs="$*"
16325             ;;
16326     *)  perllibs="$libs"
16327             ;;
16328     esac
16329     ;;
16330 esac
16331
16332 : Remove build directory name from cppstdin so it can be used from
16333 : either the present location or the final installed location.
16334 echo " "
16335 : Get out of the UU directory to get correct path name.
16336 cd ..
16337 case "$cppstdin" in
16338 `pwd`/cppstdin)
16339         echo "Stripping down cppstdin path name"
16340         cppstdin=cppstdin
16341         ;;
16342 esac
16343 cd UU
16344
16345 : end of configuration questions
16346 echo " "
16347 echo "End of configuration questions."
16348 echo " "
16349
16350 : back to where it started
16351 if test -d ../UU; then
16352         cd ..
16353 fi
16354
16355 : configuration may be patched via a 'config.over' file
16356 if $test -f config.over; then
16357         echo " "
16358         dflt=y
16359         rp='I see a config.over file.  Do you wish to load it?'
16360         . UU/myread
16361         case "$ans" in
16362         n*) echo "OK, I'll ignore it.";;
16363         *)      . ./config.over
16364                 echo "Configuration override changes have been loaded."
16365                 ;;
16366         esac
16367 fi
16368
16369 : in case they want portability, strip down executable paths
16370 case "$d_portable" in
16371 "$define")
16372         echo " "
16373         echo "Stripping down executable paths..." >&4
16374         for file in $loclist $trylist; do
16375                 eval temp=\$$file
16376                 eval $file=`basename $temp`
16377         done
16378         ;;
16379 esac
16380
16381 : create config.sh file
16382 echo " "
16383 echo "Creating config.sh..." >&4
16384 $spitshell <<EOT >config.sh
16385 $startsh
16386 #
16387 # This file was produced by running the Configure script. It holds all the
16388 # definitions figured out by Configure. Should you modify one of these values,
16389 # do not forget to propagate your changes by running "Configure -der". You may
16390 # instead choose to run each of the .SH files by yourself, or "Configure -S".
16391 #
16392
16393 # Package name      : $package
16394 # Source directory  : $src
16395 # Configuration time: $cf_time
16396 # Configured by     : $cf_by
16397 # Target system     : $myuname
16398
16399 Author='$Author'
16400 Date='$Date'
16401 Header='$Header'
16402 Id='$Id'
16403 Locker='$Locker'
16404 Log='$Log'
16405 Mcc='$Mcc'
16406 RCSfile='$RCSfile'
16407 Revision='$Revision'
16408 Source='$Source'
16409 State='$State'
16410 _a='$_a'
16411 _exe='$_exe'
16412 _o='$_o'
16413 afs='$afs'
16414 afsroot='$afsroot'
16415 alignbytes='$alignbytes'
16416 ansi2knr='$ansi2knr'
16417 aphostname='$aphostname'
16418 api_revision='$api_revision'
16419 api_subversion='$api_subversion'
16420 api_version='$api_version'
16421 api_versionstring='$api_versionstring'
16422 ar='$ar'
16423 archlib='$archlib'
16424 archlibexp='$archlibexp'
16425 archname64='$archname64'
16426 archname='$archname'
16427 archobjs='$archobjs'
16428 awk='$awk'
16429 baserev='$baserev'
16430 bash='$bash'
16431 bin='$bin'
16432 bincompat5005='$bincompat5005'
16433 binexp='$binexp'
16434 bison='$bison'
16435 byacc='$byacc'
16436 byteorder='$byteorder'
16437 c='$c'
16438 castflags='$castflags'
16439 cat='$cat'
16440 cc='$cc'
16441 cccdlflags='$cccdlflags'
16442 ccdlflags='$ccdlflags'
16443 ccflags='$ccflags'
16444 ccflags_uselargefiles='$ccflags_uselargefiles'
16445 ccname='$ccname'
16446 ccsymbols='$ccsymbols'
16447 ccversion='$ccversion'
16448 cf_by='$cf_by'
16449 cf_email='$cf_email'
16450 cf_time='$cf_time'
16451 charsize='$charsize'
16452 chgrp='$chgrp'
16453 chmod='$chmod'
16454 chown='$chown'
16455 clocktype='$clocktype'
16456 comm='$comm'
16457 compress='$compress'
16458 contains='$contains'
16459 cp='$cp'
16460 cpio='$cpio'
16461 cpp='$cpp'
16462 cpp_stuff='$cpp_stuff'
16463 cppccsymbols='$cppccsymbols'
16464 cppflags='$cppflags'
16465 cpplast='$cpplast'
16466 cppminus='$cppminus'
16467 cpprun='$cpprun'
16468 cppstdin='$cppstdin'
16469 cppsymbols='$cppsymbols'
16470 cryptlib='$cryptlib'
16471 csh='$csh'
16472 d_Gconvert='$d_Gconvert'
16473 d_PRIEUldbl='$d_PRIEUldbl'
16474 d_PRIFUldbl='$d_PRIFUldbl'
16475 d_PRIGUldbl='$d_PRIGUldbl'
16476 d_PRIXU64='$d_PRIXU64'
16477 d_PRId64='$d_PRId64'
16478 d_PRIeldbl='$d_PRIeldbl'
16479 d_PRIfldbl='$d_PRIfldbl'
16480 d_PRIgldbl='$d_PRIgldbl'
16481 d_PRIi64='$d_PRIi64'
16482 d_PRIo64='$d_PRIo64'
16483 d_PRIu64='$d_PRIu64'
16484 d_PRIx64='$d_PRIx64'
16485 d_SCNfldbl='$d_SCNfldbl'
16486 d__fwalk='$d__fwalk'
16487 d_access='$d_access'
16488 d_accessx='$d_accessx'
16489 d_alarm='$d_alarm'
16490 d_archlib='$d_archlib'
16491 d_atolf='$d_atolf'
16492 d_atoll='$d_atoll'
16493 d_attribut='$d_attribut'
16494 d_bcmp='$d_bcmp'
16495 d_bcopy='$d_bcopy'
16496 d_bincompat5005='$d_bincompat5005'
16497 d_bsd='$d_bsd'
16498 d_bsdgetpgrp='$d_bsdgetpgrp'
16499 d_bsdsetpgrp='$d_bsdsetpgrp'
16500 d_bzero='$d_bzero'
16501 d_casti32='$d_casti32'
16502 d_castneg='$d_castneg'
16503 d_charvspr='$d_charvspr'
16504 d_chown='$d_chown'
16505 d_chroot='$d_chroot'
16506 d_chsize='$d_chsize'
16507 d_closedir='$d_closedir'
16508 d_cmsghdr_s='$d_cmsghdr_s'
16509 d_const='$d_const'
16510 d_crypt='$d_crypt'
16511 d_csh='$d_csh'
16512 d_cuserid='$d_cuserid'
16513 d_dbl_dig='$d_dbl_dig'
16514 d_dbminitproto='$d_dbminitproto'
16515 d_difftime='$d_difftime'
16516 d_dirnamlen='$d_dirnamlen'
16517 d_dlerror='$d_dlerror'
16518 d_dlopen='$d_dlopen'
16519 d_dlsymun='$d_dlsymun'
16520 d_dosuid='$d_dosuid'
16521 d_drand48proto='$d_drand48proto'
16522 d_dup2='$d_dup2'
16523 d_eaccess='$d_eaccess'
16524 d_endgrent='$d_endgrent'
16525 d_endhent='$d_endhent'
16526 d_endnent='$d_endnent'
16527 d_endpent='$d_endpent'
16528 d_endpwent='$d_endpwent'
16529 d_endsent='$d_endsent'
16530 d_eofnblk='$d_eofnblk'
16531 d_eunice='$d_eunice'
16532 d_fchmod='$d_fchmod'
16533 d_fchown='$d_fchown'
16534 d_fcntl='$d_fcntl'
16535 d_fcntl_can_lock='$d_fcntl_can_lock'
16536 d_fd_macros='$d_fd_macros'
16537 d_fd_set='$d_fd_set'
16538 d_fds_bits='$d_fds_bits'
16539 d_fgetpos='$d_fgetpos'
16540 d_flexfnam='$d_flexfnam'
16541 d_flock='$d_flock'
16542 d_flockproto='$d_flockproto'
16543 d_fork='$d_fork'
16544 d_fpathconf='$d_fpathconf'
16545 d_fpos64_t='$d_fpos64_t'
16546 d_frexpl='$d_frexpl'
16547 d_fs_data_s='$d_fs_data_s'
16548 d_fseeko='$d_fseeko'
16549 d_fsetpos='$d_fsetpos'
16550 d_fstatfs='$d_fstatfs'
16551 d_fstatvfs='$d_fstatvfs'
16552 d_fsync='$d_fsync'
16553 d_ftello='$d_ftello'
16554 d_ftime='$d_ftime'
16555 d_getcwd='$d_getcwd'
16556 d_getespwnam='$d_getespwnam'
16557 d_getfsstat='$d_getfsstat'
16558 d_getgrent='$d_getgrent'
16559 d_getgrps='$d_getgrps'
16560 d_gethbyaddr='$d_gethbyaddr'
16561 d_gethbyname='$d_gethbyname'
16562 d_gethent='$d_gethent'
16563 d_gethname='$d_gethname'
16564 d_gethostprotos='$d_gethostprotos'
16565 d_getitimer='$d_getitimer'
16566 d_getlogin='$d_getlogin'
16567 d_getmnt='$d_getmnt'
16568 d_getmntent='$d_getmntent'
16569 d_getnbyaddr='$d_getnbyaddr'
16570 d_getnbyname='$d_getnbyname'
16571 d_getnent='$d_getnent'
16572 d_getnetprotos='$d_getnetprotos'
16573 d_getpagsz='$d_getpagsz'
16574 d_getpbyname='$d_getpbyname'
16575 d_getpbynumber='$d_getpbynumber'
16576 d_getpent='$d_getpent'
16577 d_getpgid='$d_getpgid'
16578 d_getpgrp2='$d_getpgrp2'
16579 d_getpgrp='$d_getpgrp'
16580 d_getppid='$d_getppid'
16581 d_getprior='$d_getprior'
16582 d_getprotoprotos='$d_getprotoprotos'
16583 d_getprpwnam='$d_getprpwnam'
16584 d_getpwent='$d_getpwent'
16585 d_getsbyname='$d_getsbyname'
16586 d_getsbyport='$d_getsbyport'
16587 d_getsent='$d_getsent'
16588 d_getservprotos='$d_getservprotos'
16589 d_getspnam='$d_getspnam'
16590 d_gettimeod='$d_gettimeod'
16591 d_gnulibc='$d_gnulibc'
16592 d_grpasswd='$d_grpasswd'
16593 d_hasmntopt='$d_hasmntopt'
16594 d_htonl='$d_htonl'
16595 d_iconv='$d_iconv'
16596 d_index='$d_index'
16597 d_inetaton='$d_inetaton'
16598 d_int64_t='$d_int64_t'
16599 d_isascii='$d_isascii'
16600 d_isnan='$d_isnan'
16601 d_isnanl='$d_isnanl'
16602 d_killpg='$d_killpg'
16603 d_lchown='$d_lchown'
16604 d_ldbl_dig='$d_ldbl_dig'
16605 d_link='$d_link'
16606 d_locconv='$d_locconv'
16607 d_lockf='$d_lockf'
16608 d_longdbl='$d_longdbl'
16609 d_longlong='$d_longlong'
16610 d_lseekproto='$d_lseekproto'
16611 d_lstat='$d_lstat'
16612 d_madvise='$d_madvise'
16613 d_mblen='$d_mblen'
16614 d_mbstowcs='$d_mbstowcs'
16615 d_mbtowc='$d_mbtowc'
16616 d_memchr='$d_memchr'
16617 d_memcmp='$d_memcmp'
16618 d_memcpy='$d_memcpy'
16619 d_memmove='$d_memmove'
16620 d_memset='$d_memset'
16621 d_mkdir='$d_mkdir'
16622 d_mkdtemp='$d_mkdtemp'
16623 d_mkfifo='$d_mkfifo'
16624 d_mkstemp='$d_mkstemp'
16625 d_mkstemps='$d_mkstemps'
16626 d_mktime='$d_mktime'
16627 d_mmap='$d_mmap'
16628 d_modfl='$d_modfl'
16629 d_modfl_pow32_bug='$d_modfl_pow32_bug'
16630 d_mprotect='$d_mprotect'
16631 d_msg='$d_msg'
16632 d_msg_ctrunc='$d_msg_ctrunc'
16633 d_msg_dontroute='$d_msg_dontroute'
16634 d_msg_oob='$d_msg_oob'
16635 d_msg_peek='$d_msg_peek'
16636 d_msg_proxy='$d_msg_proxy'
16637 d_msgctl='$d_msgctl'
16638 d_msgget='$d_msgget'
16639 d_msghdr_s='$d_msghdr_s'
16640 d_msgrcv='$d_msgrcv'
16641 d_msgsnd='$d_msgsnd'
16642 d_msync='$d_msync'
16643 d_munmap='$d_munmap'
16644 d_mymalloc='$d_mymalloc'
16645 d_nice='$d_nice'
16646 d_nv_preserves_uv='$d_nv_preserves_uv'
16647 d_nv_preserves_uv_bits='$d_nv_preserves_uv_bits'
16648 d_off64_t='$d_off64_t'
16649 d_old_pthread_create_joinable='$d_old_pthread_create_joinable'
16650 d_oldpthreads='$d_oldpthreads'
16651 d_oldsock='$d_oldsock'
16652 d_open3='$d_open3'
16653 d_pathconf='$d_pathconf'
16654 d_pause='$d_pause'
16655 d_perl_otherlibdirs='$d_perl_otherlibdirs'
16656 d_phostname='$d_phostname'
16657 d_pipe='$d_pipe'
16658 d_poll='$d_poll'
16659 d_portable='$d_portable'
16660 d_pthread_yield='$d_pthread_yield'
16661 d_pwage='$d_pwage'
16662 d_pwchange='$d_pwchange'
16663 d_pwclass='$d_pwclass'
16664 d_pwcomment='$d_pwcomment'
16665 d_pwexpire='$d_pwexpire'
16666 d_pwgecos='$d_pwgecos'
16667 d_pwpasswd='$d_pwpasswd'
16668 d_pwquota='$d_pwquota'
16669 d_qgcvt='$d_qgcvt'
16670 d_quad='$d_quad'
16671 d_readdir='$d_readdir'
16672 d_readlink='$d_readlink'
16673 d_readv='$d_readv'
16674 d_realpath='$d_realpath'
16675 d_recvmsg='$d_recvmsg'
16676 d_rename='$d_rename'
16677 d_rewinddir='$d_rewinddir'
16678 d_rmdir='$d_rmdir'
16679 d_safebcpy='$d_safebcpy'
16680 d_safemcpy='$d_safemcpy'
16681 d_sanemcmp='$d_sanemcmp'
16682 d_sbrkproto='$d_sbrkproto'
16683 d_sched_yield='$d_sched_yield'
16684 d_scm_rights='$d_scm_rights'
16685 d_seekdir='$d_seekdir'
16686 d_select='$d_select'
16687 d_sem='$d_sem'
16688 d_semctl='$d_semctl'
16689 d_semctl_semid_ds='$d_semctl_semid_ds'
16690 d_semctl_semun='$d_semctl_semun'
16691 d_semget='$d_semget'
16692 d_semop='$d_semop'
16693 d_sendmsg='$d_sendmsg'
16694 d_setegid='$d_setegid'
16695 d_seteuid='$d_seteuid'
16696 d_setgrent='$d_setgrent'
16697 d_setgrps='$d_setgrps'
16698 d_sethent='$d_sethent'
16699 d_setitimer='$d_setitimer'
16700 d_setlinebuf='$d_setlinebuf'
16701 d_setlocale='$d_setlocale'
16702 d_setnent='$d_setnent'
16703 d_setpent='$d_setpent'
16704 d_setpgid='$d_setpgid'
16705 d_setpgrp2='$d_setpgrp2'
16706 d_setpgrp='$d_setpgrp'
16707 d_setprior='$d_setprior'
16708 d_setproctitle='$d_setproctitle'
16709 d_setpwent='$d_setpwent'
16710 d_setregid='$d_setregid'
16711 d_setresgid='$d_setresgid'
16712 d_setresuid='$d_setresuid'
16713 d_setreuid='$d_setreuid'
16714 d_setrgid='$d_setrgid'
16715 d_setruid='$d_setruid'
16716 d_setsent='$d_setsent'
16717 d_setsid='$d_setsid'
16718 d_setvbuf='$d_setvbuf'
16719 d_sfio='$d_sfio'
16720 d_shm='$d_shm'
16721 d_shmat='$d_shmat'
16722 d_shmatprototype='$d_shmatprototype'
16723 d_shmctl='$d_shmctl'
16724 d_shmdt='$d_shmdt'
16725 d_shmget='$d_shmget'
16726 d_sigaction='$d_sigaction'
16727 d_sigprocmask='$d_sigprocmask'
16728 d_sigsetjmp='$d_sigsetjmp'
16729 d_sockatmark='$d_sockatmark'
16730 d_sockatmarkproto='$d_sockatmarkproto'
16731 d_socket='$d_socket'
16732 d_socklen_t='$d_socklen_t'
16733 d_sockpair='$d_sockpair'
16734 d_socks5_init='$d_socks5_init'
16735 d_sqrtl='$d_sqrtl'
16736 d_sresgproto='$d_sresgproto'
16737 d_sresuproto='$d_sresuproto'
16738 d_statblks='$d_statblks'
16739 d_statfs_f_flags='$d_statfs_f_flags'
16740 d_statfs_s='$d_statfs_s'
16741 d_statvfs='$d_statvfs'
16742 d_stdio_cnt_lval='$d_stdio_cnt_lval'
16743 d_stdio_ptr_lval='$d_stdio_ptr_lval'
16744 d_stdio_ptr_lval_nochange_cnt='$d_stdio_ptr_lval_nochange_cnt'
16745 d_stdio_ptr_lval_sets_cnt='$d_stdio_ptr_lval_sets_cnt'
16746 d_stdio_stream_array='$d_stdio_stream_array'
16747 d_stdiobase='$d_stdiobase'
16748 d_stdstdio='$d_stdstdio'
16749 d_strchr='$d_strchr'
16750 d_strcoll='$d_strcoll'
16751 d_strctcpy='$d_strctcpy'
16752 d_strerrm='$d_strerrm'
16753 d_strerror='$d_strerror'
16754 d_strftime='$d_strftime'
16755 d_strtod='$d_strtod'
16756 d_strtol='$d_strtol'
16757 d_strtold='$d_strtold'
16758 d_strtoll='$d_strtoll'
16759 d_strtoq='$d_strtoq'
16760 d_strtoul='$d_strtoul'
16761 d_strtoull='$d_strtoull'
16762 d_strtouq='$d_strtouq'
16763 d_strxfrm='$d_strxfrm'
16764 d_suidsafe='$d_suidsafe'
16765 d_symlink='$d_symlink'
16766 d_syscall='$d_syscall'
16767 d_syscallproto='$d_syscallproto'
16768 d_sysconf='$d_sysconf'
16769 d_sysernlst='$d_sysernlst'
16770 d_syserrlst='$d_syserrlst'
16771 d_system='$d_system'
16772 d_tcgetpgrp='$d_tcgetpgrp'
16773 d_tcsetpgrp='$d_tcsetpgrp'
16774 d_telldir='$d_telldir'
16775 d_telldirproto='$d_telldirproto'
16776 d_time='$d_time'
16777 d_times='$d_times'
16778 d_truncate='$d_truncate'
16779 d_tzname='$d_tzname'
16780 d_u32align='$d_u32align'
16781 d_ualarm='$d_ualarm'
16782 d_umask='$d_umask'
16783 d_uname='$d_uname'
16784 d_union_semun='$d_union_semun'
16785 d_usleep='$d_usleep'
16786 d_usleepproto='$d_usleepproto'
16787 d_ustat='$d_ustat'
16788 d_vendorarch='$d_vendorarch'
16789 d_vendorbin='$d_vendorbin'
16790 d_vendorlib='$d_vendorlib'
16791 d_vfork='$d_vfork'
16792 d_void_closedir='$d_void_closedir'
16793 d_voidsig='$d_voidsig'
16794 d_voidtty='$d_voidtty'
16795 d_volatile='$d_volatile'
16796 d_vprintf='$d_vprintf'
16797 d_wait4='$d_wait4'
16798 d_waitpid='$d_waitpid'
16799 d_wcstombs='$d_wcstombs'
16800 d_wctomb='$d_wctomb'
16801 d_writev='$d_writev'
16802 d_xenix='$d_xenix'
16803 date='$date'
16804 db_hashtype='$db_hashtype'
16805 db_prefixtype='$db_prefixtype'
16806 db_version_major='$db_version_major'
16807 db_version_minor='$db_version_minor'
16808 db_version_patch='$db_version_patch'
16809 defvoidused='$defvoidused'
16810 direntrytype='$direntrytype'
16811 dlext='$dlext'
16812 dlsrc='$dlsrc'
16813 doublesize='$doublesize'
16814 drand01='$drand01'
16815 dynamic_ext='$dynamic_ext'
16816 eagain='$eagain'
16817 ebcdic='$ebcdic'
16818 echo='$echo'
16819 egrep='$egrep'
16820 emacs='$emacs'
16821 eunicefix='$eunicefix'
16822 exe_ext='$exe_ext'
16823 expr='$expr'
16824 extensions='$extensions'
16825 fflushNULL='$fflushNULL'
16826 fflushall='$fflushall'
16827 find='$find'
16828 firstmakefile='$firstmakefile'
16829 flex='$flex'
16830 fpossize='$fpossize'
16831 fpostype='$fpostype'
16832 freetype='$freetype'
16833 from='$from'
16834 full_ar='$full_ar'
16835 full_csh='$full_csh'
16836 full_sed='$full_sed'
16837 gccosandvers='$gccosandvers'
16838 gccversion='$gccversion'
16839 gidformat='$gidformat'
16840 gidsign='$gidsign'
16841 gidsize='$gidsize'
16842 gidtype='$gidtype'
16843 glibpth='$glibpth'
16844 grep='$grep'
16845 groupcat='$groupcat'
16846 groupstype='$groupstype'
16847 gzip='$gzip'
16848 h_fcntl='$h_fcntl'
16849 h_sysfile='$h_sysfile'
16850 hint='$hint'
16851 hostcat='$hostcat'
16852 i16size='$i16size'
16853 i16type='$i16type'
16854 i32size='$i32size'
16855 i32type='$i32type'
16856 i64size='$i64size'
16857 i64type='$i64type'
16858 i8size='$i8size'
16859 i8type='$i8type'
16860 i_arpainet='$i_arpainet'
16861 i_bsdioctl='$i_bsdioctl'
16862 i_db='$i_db'
16863 i_dbm='$i_dbm'
16864 i_dirent='$i_dirent'
16865 i_dld='$i_dld'
16866 i_dlfcn='$i_dlfcn'
16867 i_fcntl='$i_fcntl'
16868 i_float='$i_float'
16869 i_gdbm='$i_gdbm'
16870 i_grp='$i_grp'
16871 i_iconv='$i_iconv'
16872 i_ieeefp='$i_ieeefp'
16873 i_inttypes='$i_inttypes'
16874 i_libutil='$i_libutil'
16875 i_limits='$i_limits'
16876 i_locale='$i_locale'
16877 i_machcthr='$i_machcthr'
16878 i_malloc='$i_malloc'
16879 i_math='$i_math'
16880 i_memory='$i_memory'
16881 i_mntent='$i_mntent'
16882 i_ndbm='$i_ndbm'
16883 i_netdb='$i_netdb'
16884 i_neterrno='$i_neterrno'
16885 i_netinettcp='$i_netinettcp'
16886 i_niin='$i_niin'
16887 i_poll='$i_poll'
16888 i_prot='$i_prot'
16889 i_pthread='$i_pthread'
16890 i_pwd='$i_pwd'
16891 i_rpcsvcdbm='$i_rpcsvcdbm'
16892 i_sfio='$i_sfio'
16893 i_sgtty='$i_sgtty'
16894 i_shadow='$i_shadow'
16895 i_socks='$i_socks'
16896 i_stdarg='$i_stdarg'
16897 i_stddef='$i_stddef'
16898 i_stdlib='$i_stdlib'
16899 i_string='$i_string'
16900 i_sunmath='$i_sunmath'
16901 i_sysaccess='$i_sysaccess'
16902 i_sysdir='$i_sysdir'
16903 i_sysfile='$i_sysfile'
16904 i_sysfilio='$i_sysfilio'
16905 i_sysin='$i_sysin'
16906 i_sysioctl='$i_sysioctl'
16907 i_syslog='$i_syslog'
16908 i_sysmman='$i_sysmman'
16909 i_sysmode='$i_sysmode'
16910 i_sysmount='$i_sysmount'
16911 i_sysndir='$i_sysndir'
16912 i_sysparam='$i_sysparam'
16913 i_sysresrc='$i_sysresrc'
16914 i_syssecrt='$i_syssecrt'
16915 i_sysselct='$i_sysselct'
16916 i_syssockio='$i_syssockio'
16917 i_sysstat='$i_sysstat'
16918 i_sysstatfs='$i_sysstatfs'
16919 i_sysstatvfs='$i_sysstatvfs'
16920 i_systime='$i_systime'
16921 i_systimek='$i_systimek'
16922 i_systimes='$i_systimes'
16923 i_systypes='$i_systypes'
16924 i_sysuio='$i_sysuio'
16925 i_sysun='$i_sysun'
16926 i_sysutsname='$i_sysutsname'
16927 i_sysvfs='$i_sysvfs'
16928 i_syswait='$i_syswait'
16929 i_termio='$i_termio'
16930 i_termios='$i_termios'
16931 i_time='$i_time'
16932 i_unistd='$i_unistd'
16933 i_ustat='$i_ustat'
16934 i_utime='$i_utime'
16935 i_values='$i_values'
16936 i_varargs='$i_varargs'
16937 i_varhdr='$i_varhdr'
16938 i_vfork='$i_vfork'
16939 ignore_versioned_solibs='$ignore_versioned_solibs'
16940 inc_version_list='$inc_version_list'
16941 inc_version_list_init='$inc_version_list_init'
16942 incpath='$incpath'
16943 inews='$inews'
16944 installarchlib='$installarchlib'
16945 installbin='$installbin'
16946 installman1dir='$installman1dir'
16947 installman3dir='$installman3dir'
16948 installprefix='$installprefix'
16949 installprefixexp='$installprefixexp'
16950 installprivlib='$installprivlib'
16951 installscript='$installscript'
16952 installsitearch='$installsitearch'
16953 installsitebin='$installsitebin'
16954 installsitelib='$installsitelib'
16955 installstyle='$installstyle'
16956 installusrbinperl='$installusrbinperl'
16957 installvendorarch='$installvendorarch'
16958 installvendorbin='$installvendorbin'
16959 installvendorlib='$installvendorlib'
16960 intsize='$intsize'
16961 issymlink='$issymlink'
16962 ivdformat='$ivdformat'
16963 ivsize='$ivsize'
16964 ivtype='$ivtype'
16965 known_extensions='$known_extensions'
16966 ksh='$ksh'
16967 ld='$ld'
16968 lddlflags='$lddlflags'
16969 ldflags='$ldflags'
16970 ldflags_uselargefiles='$ldflags_uselargefiles'
16971 ldlibpthname='$ldlibpthname'
16972 less='$less'
16973 lib_ext='$lib_ext'
16974 libc='$libc'
16975 libperl='$libperl'
16976 libpth='$libpth'
16977 libs='$libs'
16978 libsdirs='$libsdirs'
16979 libsfiles='$libsfiles'
16980 libsfound='$libsfound'
16981 libspath='$libspath'
16982 libswanted='$libswanted'
16983 libswanted_uselargefiles='$libswanted_uselargefiles'
16984 line='$line'
16985 lint='$lint'
16986 lkflags='$lkflags'
16987 ln='$ln'
16988 lns='$lns'
16989 locincpth='$locincpth'
16990 loclibpth='$loclibpth'
16991 longdblsize='$longdblsize'
16992 longlongsize='$longlongsize'
16993 longsize='$longsize'
16994 lp='$lp'
16995 lpr='$lpr'
16996 ls='$ls'
16997 lseeksize='$lseeksize'
16998 lseektype='$lseektype'
16999 mail='$mail'
17000 mailx='$mailx'
17001 make='$make'
17002 make_set_make='$make_set_make'
17003 mallocobj='$mallocobj'
17004 mallocsrc='$mallocsrc'
17005 malloctype='$malloctype'
17006 man1dir='$man1dir'
17007 man1direxp='$man1direxp'
17008 man1ext='$man1ext'
17009 man3dir='$man3dir'
17010 man3direxp='$man3direxp'
17011 man3ext='$man3ext'
17012 mips_type='$mips_type'
17013 mkdir='$mkdir'
17014 mmaptype='$mmaptype'
17015 modetype='$modetype'
17016 more='$more'
17017 multiarch='$multiarch'
17018 mv='$mv'
17019 myarchname='$myarchname'
17020 mydomain='$mydomain'
17021 myhostname='$myhostname'
17022 myuname='$myuname'
17023 n='$n'
17024 need_va_copy='$need_va_copy'
17025 netdb_hlen_type='$netdb_hlen_type'
17026 netdb_host_type='$netdb_host_type'
17027 netdb_name_type='$netdb_name_type'
17028 netdb_net_type='$netdb_net_type'
17029 nm='$nm'
17030 nm_opt='$nm_opt'
17031 nm_so_opt='$nm_so_opt'
17032 nonxs_ext='$nonxs_ext'
17033 nroff='$nroff'
17034 nvEUformat='$nvEUformat'
17035 nvFUformat='$nvFUformat'
17036 nvGUformat='$nvGUformat'
17037 nveformat='$nveformat'
17038 nvfformat='$nvfformat'
17039 nvgformat='$nvgformat'
17040 nvsize='$nvsize'
17041 nvtype='$nvtype'
17042 o_nonblock='$o_nonblock'
17043 obj_ext='$obj_ext'
17044 old_pthread_create_joinable='$old_pthread_create_joinable'
17045 optimize='$optimize'
17046 orderlib='$orderlib'
17047 osname='$osname'
17048 osvers='$osvers'
17049 otherlibdirs='$otherlibdirs'
17050 package='$package'
17051 pager='$pager'
17052 passcat='$passcat'
17053 patchlevel='$patchlevel'
17054 path_sep='$path_sep'
17055 perl5='$perl5'
17056 perl='$perl'
17057 perl_patchlevel='$perl_patchlevel'
17058 perladmin='$perladmin'
17059 perllibs='$perllibs'
17060 perlpath='$perlpath'
17061 pg='$pg'
17062 phostname='$phostname'
17063 pidtype='$pidtype'
17064 plibpth='$plibpth'
17065 pm_apiversion='$pm_apiversion'
17066 pmake='$pmake'
17067 pr='$pr'
17068 prefix='$prefix'
17069 prefixexp='$prefixexp'
17070 privlib='$privlib'
17071 privlibexp='$privlibexp'
17072 prototype='$prototype'
17073 ptrsize='$ptrsize'
17074 quadkind='$quadkind'
17075 quadtype='$quadtype'
17076 randbits='$randbits'
17077 randfunc='$randfunc'
17078 randseedtype='$randseedtype'
17079 ranlib='$ranlib'
17080 rd_nodata='$rd_nodata'
17081 revision='$revision'
17082 rm='$rm'
17083 rmail='$rmail'
17084 run='$run'
17085 runnm='$runnm'
17086 sPRIEUldbl='$sPRIEUldbl'
17087 sPRIFUldbl='$sPRIFUldbl'
17088 sPRIGUldbl='$sPRIGUldbl'
17089 sPRIXU64='$sPRIXU64'
17090 sPRId64='$sPRId64'
17091 sPRIeldbl='$sPRIeldbl'
17092 sPRIfldbl='$sPRIfldbl'
17093 sPRIgldbl='$sPRIgldbl'
17094 sPRIi64='$sPRIi64'
17095 sPRIo64='$sPRIo64'
17096 sPRIu64='$sPRIu64'
17097 sPRIx64='$sPRIx64'
17098 sSCNfldbl='$sSCNfldbl'
17099 sched_yield='$sched_yield'
17100 scriptdir='$scriptdir'
17101 scriptdirexp='$scriptdirexp'
17102 sed='$sed'
17103 seedfunc='$seedfunc'
17104 selectminbits='$selectminbits'
17105 selecttype='$selecttype'
17106 sendmail='$sendmail'
17107 sh='$sh'
17108 shar='$shar'
17109 sharpbang='$sharpbang'
17110 shmattype='$shmattype'
17111 shortsize='$shortsize'
17112 shrpenv='$shrpenv'
17113 shsharp='$shsharp'
17114 sig_count='$sig_count'
17115 sig_name='$sig_name'
17116 sig_name_init='$sig_name_init'
17117 sig_num='$sig_num'
17118 sig_num_init='$sig_num_init'
17119 sig_size='$sig_size'
17120 signal_t='$signal_t'
17121 sitearch='$sitearch'
17122 sitearchexp='$sitearchexp'
17123 sitebin='$sitebin'
17124 sitebinexp='$sitebinexp'
17125 sitelib='$sitelib'
17126 sitelib_stem='$sitelib_stem'
17127 sitelibexp='$sitelibexp'
17128 siteprefix='$siteprefix'
17129 siteprefixexp='$siteprefixexp'
17130 sizesize='$sizesize'
17131 sizetype='$sizetype'
17132 sleep='$sleep'
17133 smail='$smail'
17134 so='$so'
17135 sockethdr='$sockethdr'
17136 socketlib='$socketlib'
17137 socksizetype='$socksizetype'
17138 sort='$sort'
17139 spackage='$spackage'
17140 spitshell='$spitshell'
17141 src='$src'
17142 ssizetype='$ssizetype'
17143 startperl='$startperl'
17144 startsh='$startsh'
17145 static_ext='$static_ext'
17146 stdchar='$stdchar'
17147 stdio_base='$stdio_base'
17148 stdio_bufsiz='$stdio_bufsiz'
17149 stdio_cnt='$stdio_cnt'
17150 stdio_filbuf='$stdio_filbuf'
17151 stdio_ptr='$stdio_ptr'
17152 stdio_stream_array='$stdio_stream_array'
17153 strings='$strings'
17154 submit='$submit'
17155 subversion='$subversion'
17156 sysman='$sysman'
17157 tail='$tail'
17158 tar='$tar'
17159 targetarch='$targetarch'
17160 tbl='$tbl'
17161 tee='$tee'
17162 test='$test'
17163 timeincl='$timeincl'
17164 timetype='$timetype'
17165 to='$to'
17166 touch='$touch'
17167 tr='$tr'
17168 trnl='$trnl'
17169 troff='$troff'
17170 u16size='$u16size'
17171 u16type='$u16type'
17172 u32size='$u32size'
17173 u32type='$u32type'
17174 u64size='$u64size'
17175 u64type='$u64type'
17176 u8size='$u8size'
17177 u8type='$u8type'
17178 uidformat='$uidformat'
17179 uidsign='$uidsign'
17180 uidsize='$uidsize'
17181 uidtype='$uidtype'
17182 uname='$uname'
17183 uniq='$uniq'
17184 uquadtype='$uquadtype'
17185 use5005threads='$use5005threads'
17186 use64bitall='$use64bitall'
17187 use64bitint='$use64bitint'
17188 usecrosscompile='$usecrosscompile'
17189 usedl='$usedl'
17190 useithreads='$useithreads'
17191 uselargefiles='$uselargefiles'
17192 uselongdouble='$uselongdouble'
17193 usemorebits='$usemorebits'
17194 usemultiplicity='$usemultiplicity'
17195 usemymalloc='$usemymalloc'
17196 usenm='$usenm'
17197 useopcode='$useopcode'
17198 useperlio='$useperlio'
17199 useposix='$useposix'
17200 usereentrant='$usereentrant'
17201 usesfio='$usesfio'
17202 useshrplib='$useshrplib'
17203 usesocks='$usesocks'
17204 usethreads='$usethreads'
17205 usevendorprefix='$usevendorprefix'
17206 usevfork='$usevfork'
17207 usrinc='$usrinc'
17208 uuname='$uuname'
17209 uvXUformat='$uvXUformat'
17210 uvoformat='$uvoformat'
17211 uvsize='$uvsize'
17212 uvtype='$uvtype'
17213 uvuformat='$uvuformat'
17214 uvxformat='$uvxformat'
17215 vendorarch='$vendorarch'
17216 vendorarchexp='$vendorarchexp'
17217 vendorbin='$vendorbin'
17218 vendorbinexp='$vendorbinexp'
17219 vendorlib='$vendorlib'
17220 vendorlib_stem='$vendorlib_stem'
17221 vendorlibexp='$vendorlibexp'
17222 vendorprefix='$vendorprefix'
17223 vendorprefixexp='$vendorprefixexp'
17224 version='$version'
17225 versiononly='$versiononly'
17226 vi='$vi'
17227 voidflags='$voidflags'
17228 xlibpth='$xlibpth'
17229 xs_apiversion='$xs_apiversion'
17230 yacc='$yacc'
17231 yaccflags='$yaccflags'
17232 zcat='$zcat'
17233 zip='$zip'
17234 EOT
17235
17236 : Add in command line options if available
17237 $test -f UU/cmdline.opt && $cat UU/cmdline.opt >> config.sh
17238
17239 : add special variables
17240 $test -f $src/patchlevel.h && \
17241 awk '/^#define[         ]+PERL_/ {printf "%s=%s\n",$2,$3}' $src/patchlevel.h >>config.sh
17242 echo "PERL_PATCHLEVEL=$perl_patchlevel" >>config.sh
17243 echo "PERL_CONFIG_SH=true" >>config.sh
17244
17245 : propagate old symbols
17246 if $test -f UU/config.sh; then
17247         <UU/config.sh $sort | $uniq >UU/oldconfig.sh
17248         sed -n 's/^\([a-zA-Z_0-9]*\)=.*/\1/p' config.sh config.sh UU/oldconfig.sh |\
17249         $sort | $uniq -u >UU/oldsyms
17250         set X `cat UU/oldsyms`
17251         shift
17252         case $# in
17253         0) ;;
17254         *)
17255                 cat <<EOM
17256 Hmm...You had some extra variables I don't know about...I'll try to keep 'em...
17257 EOM
17258                 echo "# Variables propagated from previous config.sh file." >>config.sh
17259                 for sym in `cat UU/oldsyms`; do
17260                         echo "    Propagating $hint variable "'$'"$sym..."
17261                         eval 'tmp="$'"${sym}"'"'
17262                         echo "$tmp" | \
17263                                 sed -e "s/'/'\"'\"'/g" -e "s/^/$sym='/" -e "s/$/'/" >>config.sh
17264                 done
17265                 ;;
17266         esac
17267 fi
17268
17269 : Finish up by extracting the .SH files
17270 case "$alldone" in
17271 exit)
17272         $rm -rf UU
17273         echo "Extraction done."
17274         exit 0
17275         ;;
17276 cont)
17277         ;;
17278 '')
17279         dflt=''
17280         nostick=true
17281         $cat <<EOM
17282
17283 If you'd like to make any changes to the config.sh file before I begin
17284 to configure things, do it as a shell escape now (e.g. !vi config.sh).
17285
17286 EOM
17287         rp="Press return or use a shell escape to edit config.sh:"
17288         . UU/myread
17289         nostick=''
17290         case "$ans" in
17291         '') ;;
17292         *) : in case they cannot read
17293                 sh 1>&4 -c "$ans";;
17294         esac
17295         ;;
17296 esac
17297
17298 : if this fails, just run all the .SH files by hand
17299 . ./config.sh
17300
17301 echo " "
17302 exec 1>&4
17303 . ./UU/extract
17304
17305 if $contains '^depend:' [Mm]akefile >/dev/null 2>&1; then
17306         dflt=y
17307         case "$silent" in
17308         true) ;;
17309         *)
17310                 $cat <<EOM
17311
17312 Now you need to generate make dependencies by running "$make depend".
17313 You might prefer to run it in background: "$make depend > makedepend.out &"
17314 It can take a while, so you might not want to run it right now.
17315
17316 EOM
17317                 ;;
17318         esac
17319         rp="Run $make depend now?"
17320         . UU/myread
17321         case "$ans" in
17322         y*)
17323                 $make depend && echo "Now you must run '$make'."
17324                 ;;
17325         *)
17326                 echo "You must run '$make depend' then '$make'."
17327                 ;;
17328         esac
17329 elif test -f [Mm]akefile; then
17330         echo " "
17331         echo "Now you must run a $make."
17332 else
17333         echo "Configure done."
17334 fi
17335
17336 if $test -f Policy.sh; then
17337     $cat <<EOM
17338
17339 If you compile $package on a different machine or from a different object
17340 directory, copy the Policy.sh file from this object directory to the
17341 new one before you run Configure -- this will help you with most of
17342 the policy defaults.
17343
17344 EOM
17345 fi
17346 if $test -f config.msg; then
17347     echo "Hmm.  I also noted the following information while running:"
17348     echo " "
17349     $cat config.msg >&4
17350     $rm -f config.msg
17351 fi
17352 $rm -f kit*isdone ark*isdone
17353 $rm -rf UU
17354
17355 : End of Configure
17356