This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
cc, cflags, and optimize tweaks for UTS from Hal Morris.
[perl5.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 Wed Apr 25 03:57:52 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 perllibs=''
169 dynamic_ext=''
170 extensions=''
171 known_extensions=''
172 nonxs_ext=''
173 static_ext=''
174 useopcode=''
175 useposix=''
176 d_bsd=''
177 d_eunice=''
178 d_xenix=''
179 eunicefix=''
180 Mcc=''
181 ar=''
182 awk=''
183 bash=''
184 bison=''
185 byacc=''
186 cat=''
187 chgrp=''
188 chmod=''
189 chown=''
190 comm=''
191 compress=''
192 cp=''
193 cpio=''
194 cpp=''
195 csh=''
196 date=''
197 echo=''
198 egrep=''
199 emacs=''
200 expr=''
201 find=''
202 flex=''
203 grep=''
204 gzip=''
205 inews=''
206 ksh=''
207 less=''
208 line=''
209 lint=''
210 ln=''
211 lp=''
212 lpr=''
213 ls=''
214 mail=''
215 mailx=''
216 make=''
217 mkdir=''
218 more=''
219 mv=''
220 nm=''
221 nroff=''
222 perl=''
223 pg=''
224 pmake=''
225 pr=''
226 rm=''
227 rmail=''
228 sed=''
229 sendmail=''
230 shar=''
231 sleep=''
232 smail=''
233 sort=''
234 submit=''
235 tail=''
236 tar=''
237 tbl=''
238 tee=''
239 test=''
240 touch=''
241 tr=''
242 troff=''
243 uname=''
244 uniq=''
245 uuname=''
246 vi=''
247 zcat=''
248 zip=''
249 full_ar=''
250 full_sed=''
251 libswanted=''
252 hint=''
253 myuname=''
254 osname=''
255 osvers=''
256 Author=''
257 Date=''
258 Header=''
259 Id=''
260 Locker=''
261 Log=''
262 RCSfile=''
263 Revision=''
264 Source=''
265 State=''
266 _a=''
267 _exe=''
268 _o=''
269 archobjs=''
270 exe_ext=''
271 firstmakefile=''
272 lib_ext=''
273 obj_ext=''
274 path_sep=''
275 afs=''
276 alignbytes=''
277 ansi2knr=''
278 archlib=''
279 archlibexp=''
280 d_archlib=''
281 installarchlib=''
282 archname=''
283 myarchname=''
284 d_atolf=''
285 d_atoll=''
286 baserev=''
287 bin=''
288 binexp=''
289 installbin=''
290 bincompat5005=''
291 d_bincompat5005=''
292 byteorder=''
293 cc=''
294 ccflags=''
295 cppflags=''
296 ldflags=''
297 lkflags=''
298 locincpth=''
299 optimize=''
300 cf_email=''
301 cf_by=''
302 cf_time=''
303 charsize=''
304 contains=''
305 cpp_stuff=''
306 cpplast=''
307 cppminus=''
308 cpprun=''
309 cppstdin=''
310 crosscompile=''
311 d__fwalk=''
312 d_access=''
313 d_accessx=''
314 d_alarm=''
315 d_attribut=''
316 d_bcmp=''
317 d_bcopy=''
318 d_bzero=''
319 d_casti32=''
320 castflags=''
321 d_castneg=''
322 d_chown=''
323 d_chroot=''
324 d_chsize=''
325 d_closedir=''
326 d_void_closedir=''
327 d_cmsghdr_s=''
328 d_const=''
329 cryptlib=''
330 d_crypt=''
331 d_csh=''
332 full_csh=''
333 d_cuserid=''
334 d_dbl_dig=''
335 d_difftime=''
336 d_dlerror=''
337 d_dlopen=''
338 d_dlsymun=''
339 d_dosuid=''
340 d_suidsafe=''
341 d_drand48proto=''
342 d_dup2=''
343 d_eaccess=''
344 d_endgrent=''
345 d_endhent=''
346 d_endnent=''
347 d_endpent=''
348 d_endpwent=''
349 d_endsent=''
350 d_fchmod=''
351 d_fchown=''
352 d_fcntl=''
353 d_fcntl_can_lock=''
354 d_fd_macros=''
355 d_fd_set=''
356 d_fds_bits=''
357 d_fgetpos=''
358 d_flexfnam=''
359 d_flock=''
360 d_fork=''
361 d_fpos64_t=''
362 d_frexpl=''
363 d_fs_data_s=''
364 d_fseeko=''
365 d_fsetpos=''
366 d_fstatfs=''
367 d_fsync=''
368 d_ftello=''
369 d_ftime=''
370 d_gettimeod=''
371 d_Gconvert=''
372 d_getcwd=''
373 d_getespwnam=''
374 d_getfsstat=''
375 d_getgrent=''
376 d_getgrps=''
377 d_gethbyaddr=''
378 d_gethbyname=''
379 d_gethent=''
380 aphostname=''
381 d_gethname=''
382 d_phostname=''
383 d_uname=''
384 d_gethostprotos=''
385 d_getitimer=''
386 d_getlogin=''
387 d_getmnt=''
388 d_getmntent=''
389 d_getnbyaddr=''
390 d_getnbyname=''
391 d_getnent=''
392 d_getnetprotos=''
393 d_getpagsz=''
394 d_getpent=''
395 d_getpgid=''
396 d_getpgrp2=''
397 d_bsdgetpgrp=''
398 d_getpgrp=''
399 d_getppid=''
400 d_getprior=''
401 d_getpbyname=''
402 d_getpbynumber=''
403 d_getprotoprotos=''
404 d_getprpwnam=''
405 d_getpwent=''
406 d_getsent=''
407 d_getservprotos=''
408 d_getspnam=''
409 d_getsbyname=''
410 d_getsbyport=''
411 d_gnulibc=''
412 d_hasmntopt=''
413 d_htonl=''
414 d_iconv=''
415 d_inetaton=''
416 d_int64_t=''
417 d_isascii=''
418 d_isnan=''
419 d_isnanl=''
420 d_killpg=''
421 d_lchown=''
422 d_ldbl_dig=''
423 d_link=''
424 d_locconv=''
425 d_lockf=''
426 d_longdbl=''
427 longdblsize=''
428 d_longlong=''
429 longlongsize=''
430 d_lseekproto=''
431 d_lstat=''
432 d_madvise=''
433 d_mblen=''
434 d_mbstowcs=''
435 d_mbtowc=''
436 d_memchr=''
437 d_memcmp=''
438 d_memcpy=''
439 d_memmove=''
440 d_memset=''
441 d_mkdir=''
442 d_mkdtemp=''
443 d_mkfifo=''
444 d_mkstemp=''
445 d_mkstemps=''
446 d_mktime=''
447 d_mmap=''
448 mmaptype=''
449 d_modfl=''
450 d_mprotect=''
451 d_msg=''
452 d_msgctl=''
453 d_msgget=''
454 d_msghdr_s=''
455 d_msgrcv=''
456 d_msgsnd=''
457 d_msync=''
458 d_munmap=''
459 d_nice=''
460 d_off64_t=''
461 d_open3=''
462 d_fpathconf=''
463 d_pathconf=''
464 d_pause=''
465 d_pipe=''
466 d_poll=''
467 d_portable=''
468 d_old_pthread_create_joinable=''
469 old_pthread_create_joinable=''
470 d_pthread_yield=''
471 d_sched_yield=''
472 sched_yield=''
473 d_qgcvt=''
474 d_readdir=''
475 d_rewinddir=''
476 d_seekdir=''
477 d_telldir=''
478 d_readlink=''
479 d_readv=''
480 d_recvmsg=''
481 d_rename=''
482 d_rmdir=''
483 d_safebcpy=''
484 d_safemcpy=''
485 d_sanemcmp=''
486 d_sbrkproto=''
487 d_select=''
488 d_sem=''
489 d_semctl=''
490 d_semget=''
491 d_semop=''
492 d_sendmsg=''
493 d_setegid=''
494 d_seteuid=''
495 d_setgrent=''
496 d_setgrps=''
497 d_sethent=''
498 d_setitimer=''
499 d_setlinebuf=''
500 d_setlocale=''
501 d_setnent=''
502 d_setpent=''
503 d_setpgid=''
504 d_setpgrp2=''
505 d_bsdsetpgrp=''
506 d_setpgrp=''
507 d_setprior=''
508 d_setproctitle=''
509 d_setpwent=''
510 d_setregid=''
511 d_setresgid=''
512 d_setresuid=''
513 d_setreuid=''
514 d_setrgid=''
515 d_setruid=''
516 d_setsent=''
517 d_setsid=''
518 d_setvbuf=''
519 d_sfio=''
520 usesfio=''
521 d_shm=''
522 d_shmat=''
523 d_shmatprototype=''
524 shmattype=''
525 d_shmctl=''
526 d_shmdt=''
527 d_shmget=''
528 d_sigaction=''
529 d_sigprocmask=''
530 d_sigsetjmp=''
531 d_sockatmark=''
532 d_msg_ctrunc=''
533 d_msg_dontroute=''
534 d_msg_oob=''
535 d_msg_peek=''
536 d_msg_proxy=''
537 d_oldsock=''
538 d_scm_rights=''
539 d_socket=''
540 d_sockpair=''
541 sockethdr=''
542 socketlib=''
543 d_socklen_t=''
544 d_socks5_init=''
545 d_sqrtl=''
546 d_statblks=''
547 d_statfs_f_flags=''
548 d_statfs_s=''
549 d_fstatvfs=''
550 d_statvfs=''
551 d_stdio_cnt_lval=''
552 d_stdio_ptr_lval=''
553 d_stdio_ptr_lval_nochange_cnt=''
554 d_stdio_ptr_lval_sets_cnt=''
555 d_stdiobase=''
556 d_stdstdio=''
557 stdio_base=''
558 stdio_bufsiz=''
559 stdio_cnt=''
560 stdio_filbuf=''
561 stdio_ptr=''
562 d_index=''
563 d_strchr=''
564 d_strcoll=''
565 d_strctcpy=''
566 d_strerrm=''
567 d_strerror=''
568 d_sysernlst=''
569 d_syserrlst=''
570 d_strftime=''
571 d_strtod=''
572 d_strtol=''
573 d_strtold=''
574 d_strtoll=''
575 d_strtoq=''
576 d_strtoul=''
577 d_strtoull=''
578 d_strtouq=''
579 d_strxfrm=''
580 d_symlink=''
581 d_syscall=''
582 d_sysconf=''
583 d_system=''
584 d_tcgetpgrp=''
585 d_tcsetpgrp=''
586 d_telldirproto=''
587 d_time=''
588 timetype=''
589 clocktype=''
590 d_times=''
591 d_truncate=''
592 d_tzname=''
593 d_u32align=''
594 d_ualarm=''
595 d_umask=''
596 d_semctl_semid_ds=''
597 d_semctl_semun=''
598 d_union_semun=''
599 d_usleep=''
600 d_ustat=''
601 d_vfork=''
602 usevfork=''
603 d_voidsig=''
604 signal_t=''
605 d_volatile=''
606 d_charvspr=''
607 d_vprintf=''
608 d_wait4=''
609 d_waitpid=''
610 d_wcstombs=''
611 d_wctomb=''
612 d_writev=''
613 dlext=''
614 cccdlflags=''
615 ccdlflags=''
616 dlsrc=''
617 ld=''
618 lddlflags=''
619 usedl=''
620 doublesize=''
621 ebcdic=''
622 fflushNULL=''
623 fflushall=''
624 fpossize=''
625 fpostype=''
626 gccosandvers=''
627 gccversion=''
628 gidformat=''
629 gidsign=''
630 gidsize=''
631 gidtype=''
632 groupstype=''
633 h_fcntl=''
634 h_sysfile=''
635 i_arpainet=''
636 db_hashtype=''
637 db_prefixtype=''
638 i_db=''
639 i_dbm=''
640 i_rpcsvcdbm=''
641 d_dirnamlen=''
642 direntrytype=''
643 i_dirent=''
644 i_dld=''
645 i_dlfcn=''
646 i_fcntl=''
647 i_float=''
648 i_gdbm=''
649 d_grpasswd=''
650 i_grp=''
651 i_iconv=''
652 i_ieeefp=''
653 i_inttypes=''
654 i_libutil=''
655 i_limits=''
656 i_locale=''
657 i_machcthr=''
658 i_malloc=''
659 i_math=''
660 i_memory=''
661 i_mntent=''
662 i_ndbm=''
663 i_netdb=''
664 i_neterrno=''
665 i_netinettcp=''
666 i_niin=''
667 i_sysin=''
668 i_poll=''
669 i_prot=''
670 i_pthread=''
671 d_pwage=''
672 d_pwchange=''
673 d_pwclass=''
674 d_pwcomment=''
675 d_pwexpire=''
676 d_pwgecos=''
677 d_pwpasswd=''
678 d_pwquota=''
679 i_pwd=''
680 i_sfio=''
681 i_shadow=''
682 i_socks=''
683 i_stddef=''
684 i_stdlib=''
685 i_string=''
686 strings=''
687 i_sunmath=''
688 i_sysaccess=''
689 i_sysdir=''
690 i_sysfile=''
691 d_voidtty=''
692 i_bsdioctl=''
693 i_sysfilio=''
694 i_sysioctl=''
695 i_syssockio=''
696 i_syslog=''
697 i_sysmman=''
698 i_sysmode=''
699 i_sysmount=''
700 i_sysndir=''
701 i_sysparam=''
702 i_sysresrc=''
703 i_syssecrt=''
704 i_sysselct=''
705 i_sysstat=''
706 i_sysstatfs=''
707 i_sysstatvfs=''
708 i_systimes=''
709 i_systypes=''
710 i_sysuio=''
711 i_sysun=''
712 i_sysutsname=''
713 i_sysvfs=''
714 i_syswait=''
715 i_sgtty=''
716 i_termio=''
717 i_termios=''
718 i_systime=''
719 i_systimek=''
720 i_time=''
721 timeincl=''
722 i_unistd=''
723 i_ustat=''
724 i_utime=''
725 i_values=''
726 i_stdarg=''
727 i_varargs=''
728 i_varhdr=''
729 i_vfork=''
730 inc_version_list=''
731 inc_version_list_init=''
732 installprefix=''
733 installprefixexp=''
734 installstyle=''
735 installusrbinperl=''
736 intsize=''
737 longsize=''
738 shortsize=''
739 issymlink=''
740 libc=''
741 ldlibpthname=''
742 libperl=''
743 shrpenv=''
744 useshrplib=''
745 glibpth=''
746 libpth=''
747 loclibpth=''
748 plibpth=''
749 xlibpth=''
750 ignore_versioned_solibs=''
751 libs=''
752 libsdirs=''
753 libsfiles=''
754 libsfound=''
755 libspath=''
756 lns=''
757 d_PRIEUldbl=''
758 d_PRIFUldbl=''
759 d_PRIGUldbl=''
760 d_PRIeldbl=''
761 d_PRIfldbl=''
762 d_PRIgldbl=''
763 d_SCNfldbl=''
764 sPRIEUldbl=''
765 sPRIFUldbl=''
766 sPRIGUldbl=''
767 sPRIeldbl=''
768 sPRIfldbl=''
769 sPRIgldbl=''
770 sSCNfldbl=''
771 lseeksize=''
772 lseektype=''
773 make_set_make=''
774 d_mymalloc=''
775 freetype=''
776 mallocobj=''
777 mallocsrc=''
778 malloctype=''
779 usemymalloc=''
780 installman1dir=''
781 man1dir=''
782 man1direxp=''
783 man1ext=''
784 installman3dir=''
785 man3dir=''
786 man3direxp=''
787 man3ext=''
788 modetype=''
789 multiarch=''
790 mydomain=''
791 myhostname=''
792 phostname=''
793 c=''
794 n=''
795 d_eofnblk=''
796 eagain=''
797 o_nonblock=''
798 rd_nodata=''
799 need_va_copy=''
800 netdb_hlen_type=''
801 netdb_host_type=''
802 netdb_name_type=''
803 netdb_net_type=''
804 groupcat=''
805 hostcat=''
806 passcat=''
807 orderlib=''
808 ranlib=''
809 d_perl_otherlibdirs=''
810 otherlibdirs=''
811 package=''
812 spackage=''
813 pager=''
814 api_revision=''
815 api_subversion=''
816 api_version=''
817 api_versionstring=''
818 patchlevel=''
819 revision=''
820 subversion=''
821 version=''
822 perl5=''
823 perladmin=''
824 perlpath=''
825 d_nv_preserves_uv=''
826 d_nv_preserves_uv_bits=''
827 i16size=''
828 i16type=''
829 i32size=''
830 i32type=''
831 i64size=''
832 i64type=''
833 i8size=''
834 i8type=''
835 ivsize=''
836 ivtype=''
837 nvsize=''
838 nvtype=''
839 u16size=''
840 u16type=''
841 u32size=''
842 u32type=''
843 u64size=''
844 u64type=''
845 u8size=''
846 u8type=''
847 uvsize=''
848 uvtype=''
849 ivdformat=''
850 nvEUformat=''
851 nvFUformat=''
852 nvGUformat=''
853 nveformat=''
854 nvfformat=''
855 nvgformat=''
856 uvXUformat=''
857 uvoformat=''
858 uvuformat=''
859 uvxformat=''
860 pidtype=''
861 prefix=''
862 prefixexp=''
863 installprivlib=''
864 privlib=''
865 privlibexp=''
866 prototype=''
867 ptrsize=''
868 d_PRIXU64=''
869 d_PRId64=''
870 d_PRIi64=''
871 d_PRIo64=''
872 d_PRIu64=''
873 d_PRIx64=''
874 sPRIXU64=''
875 sPRId64=''
876 sPRIi64=''
877 sPRIo64=''
878 sPRIu64=''
879 sPRIx64=''
880 d_quad=''
881 quadkind=''
882 quadtype=''
883 uquadtype=''
884 drand01=''
885 randbits=''
886 randfunc=''
887 randseedtype=''
888 seedfunc=''
889 installscript=''
890 scriptdir=''
891 scriptdirexp=''
892 selectminbits=''
893 selecttype=''
894 sh=''
895 sig_count=''
896 sig_name=''
897 sig_name_init=''
898 sig_num=''
899 sig_num_init=''
900 sig_size=''
901 installsitearch=''
902 sitearch=''
903 sitearchexp=''
904 installsitebin=''
905 sitebin=''
906 sitebinexp=''
907 installsitelib=''
908 sitelib=''
909 sitelib_stem=''
910 sitelibexp=''
911 siteprefix=''
912 siteprefixexp=''
913 sizesize=''
914 sizetype=''
915 so=''
916 socksizetype=''
917 sharpbang=''
918 shsharp=''
919 spitshell=''
920 src=''
921 ssizetype=''
922 startperl=''
923 startsh=''
924 stdchar=''
925 d_stdio_stream_array=''
926 stdio_stream_array=''
927 sysman=''
928 trnl=''
929 uidformat=''
930 uidsign=''
931 uidsize=''
932 uidtype=''
933 archname64=''
934 use64bitall=''
935 use64bitint=''
936 ccflags_uselargefiles=''
937 ldflags_uselargefiles=''
938 libswanted_uselargefiles=''
939 uselargefiles=''
940 uselongdouble=''
941 usemorebits=''
942 usemultiplicity=''
943 nm_opt=''
944 nm_so_opt=''
945 runnm=''
946 usenm=''
947 useperlio=''
948 usesocks=''
949 d_oldpthreads=''
950 use5005threads=''
951 useithreads=''
952 usethreads=''
953 incpath=''
954 mips_type=''
955 usrinc=''
956 d_vendorarch=''
957 installvendorarch=''
958 vendorarch=''
959 vendorarchexp=''
960 d_vendorbin=''
961 installvendorbin=''
962 vendorbin=''
963 vendorbinexp=''
964 d_vendorlib=''
965 installvendorlib=''
966 vendorlib=''
967 vendorlib_stem=''
968 vendorlibexp=''
969 usevendorprefix=''
970 vendorprefix=''
971 vendorprefixexp=''
972 versiononly=''
973 defvoidused=''
974 voidflags=''
975 pm_apiversion=''
976 xs_apiversion=''
977 yacc=''
978 yaccflags=''
979 CONFIG=''
980
981 define='define'
982 undef='undef'
983 smallmach='pdp11 i8086 z8000 i80286 iAPX286'
984 rmlist=''
985
986 : We must find out about Eunice early
987 eunicefix=':'
988 if test -f /etc/unixtovms; then
989         eunicefix=/etc/unixtovms
990 fi
991 if test -f /etc/unixtovms.exe; then
992         eunicefix=/etc/unixtovms.exe
993 fi
994
995 i_whoami=''
996 ccname=''
997 ccversion=''
998 perllibs=''
999 : set useposix=false in your hint file to disable the POSIX extension.
1000 useposix=true
1001 : set useopcode=false in your hint file to disable the Opcode extension.
1002 useopcode=true
1003 : Trailing extension.  Override this in a hint file, if needed.
1004 _exe=''
1005 : Extra object files, if any, needed on this platform.
1006 archobjs=''
1007 archname=''
1008 : Possible local include directories to search.
1009 : Set locincpth to "" in a hint file to defeat local include searches.
1010 locincpth="/usr/local/include /opt/local/include /usr/gnu/include"
1011 locincpth="$locincpth /opt/gnu/include /usr/GNU/include /opt/GNU/include"
1012 :
1013 : no include file wanted by default
1014 inclwanted=''
1015
1016 groupstype=''
1017 : change the next line if compiling for Xenix/286 on Xenix/386
1018 xlibpth='/usr/lib/386 /lib/386'
1019 : Possible local library directories to search.
1020 loclibpth="/usr/local/lib /opt/local/lib /usr/gnu/lib"
1021 loclibpth="$loclibpth /opt/gnu/lib /usr/GNU/lib /opt/GNU/lib"
1022
1023 : general looking path for locating libraries
1024 glibpth="/lib /usr/lib $xlibpth"
1025 glibpth="$glibpth /usr/ccs/lib /usr/ucblib /usr/local/lib"
1026 test -f /usr/shlib/libc.so && glibpth="/usr/shlib $glibpth"
1027 test -f /shlib/libc.so     && glibpth="/shlib $glibpth"
1028
1029 : Private path used by Configure to find libraries.  Its value
1030 : is prepended to libpth. This variable takes care of special
1031 : machines, like the mips.  Usually, it should be empty.
1032 plibpth=''
1033
1034 : default library list
1035 libswanted=''
1036 : some systems want to use only the non-versioned libso:s
1037 ignore_versioned_solibs=''
1038 archname64=''
1039 ccflags_uselargefiles=''
1040 ldflags_uselargefiles=''
1041 libswanted_uselargefiles=''
1042 : set usemultiplicity on the Configure command line to enable multiplicity.
1043 : set usesocks on the Configure command line to enable socks.
1044 : set usethreads on the Configure command line to enable threads.
1045 : full support for void wanted by default
1046 defvoidused=15
1047
1048 : List of libraries we want.
1049 : If anyone needs -lnet, put it in a hint file.
1050 libswanted='sfio socket bind inet nsl nm ndbm gdbm dbm db malloc dl'
1051 libswanted="$libswanted dld ld sun m c cposix posix"
1052 libswanted="$libswanted ndir dir crypt sec"
1053 libswanted="$libswanted ucb bsd BSD PW x iconv util"
1054 : We probably want to search /usr/shlib before most other libraries.
1055 : This is only used by the lib/ExtUtils/MakeMaker.pm routine extliblist.
1056 glibpth=`echo " $glibpth " | sed -e 's! /usr/shlib ! !'`
1057 glibpth="/usr/shlib $glibpth"
1058 : Do not use vfork unless overridden by a hint file.
1059 usevfork=false
1060
1061 : Find the basic shell for Bourne shell scripts
1062 case "$sh" in
1063 '')
1064         case "$SYSTYPE" in
1065         *bsd*|sys5*) xxx="/$SYSTYPE/bin/sh";;
1066         *) xxx='/bin/sh';;
1067         esac
1068         if test -f "$xxx"; then
1069                 sh="$xxx"
1070         else
1071                 : Build up a list and do a single loop so we can 'break' out.
1072                 pth=`echo $PATH | sed -e "s/$p_/ /g"`
1073                 for xxx in sh bash ksh pdksh ash; do
1074                         for p in $pth; do
1075                                 try="$try ${p}/${xxx}"
1076                         done
1077                 done
1078                 for xxx in $try; do
1079                         if test -f "$xxx"; then
1080                                 sh="$xxx";
1081                                 break
1082                         elif test -f "$xxx.exe"; then
1083                                 sh="$xxx";
1084                                 break
1085                         fi
1086                 done
1087         fi
1088         ;;
1089 esac
1090
1091 case "$sh" in
1092 '')     cat <<EOM >&2
1093 $me:  Fatal Error:  I can't find a Bourne Shell anywhere.  
1094
1095 Usually it's in /bin/sh.  How did you even get this far?
1096 Please contact me (Perl Maintainers) at perlbug@perl.org and 
1097 we'll try to straighten this all out.
1098 EOM
1099         exit 1
1100         ;;
1101 esac
1102
1103 : see if sh knows # comments
1104 if `$sh -c '#' >/dev/null 2>&1`; then
1105         shsharp=true
1106         spitshell=cat
1107         xcat=/bin/cat
1108         test -f $xcat || xcat=/usr/bin/cat
1109         echo "#!$xcat" >try
1110         $eunicefix try
1111         chmod +x try
1112         ./try > today
1113         if test -s today; then
1114                 sharpbang='#!'
1115         else
1116                 echo "#! $xcat" > try
1117                 $eunicefix try
1118                 chmod +x try
1119                 ./try > today
1120                 if test -s today; then
1121                         sharpbang='#! '
1122                 else
1123                         sharpbang=': use '
1124                 fi
1125         fi
1126 else
1127         echo " "
1128         echo "Your $sh doesn't grok # comments--I will strip them later on."
1129         shsharp=false
1130         cd ..
1131         echo "exec grep -v '^[  ]*#'" >spitshell
1132         chmod +x spitshell
1133         $eunicefix spitshell
1134         spitshell=`pwd`/spitshell
1135         cd UU
1136         echo "I presume that if # doesn't work, #! won't work either!"
1137         sharpbang=': use '
1138 fi
1139 rm -f try today
1140
1141 : figure out how to guarantee sh startup
1142 case "$startsh" in
1143 '') startsh=${sharpbang}${sh} ;;
1144 *)
1145 esac
1146 cat >try <<EOSS
1147 $startsh
1148 set abc
1149 test "$?abc" != 1
1150 EOSS
1151
1152 chmod +x try
1153 $eunicefix try
1154 if ./try; then
1155         : echo "Yup, it does."
1156 else
1157         echo "Hmm... '$startsh' does not guarantee sh startup..."
1158         echo "You may have to fix up the shell scripts to make sure $sh runs them."
1159 fi
1160 rm -f try
1161
1162
1163 : Save command line options in file UU/cmdline.opt for later use in
1164 : generating config.sh.
1165 cat > cmdline.opt <<EOSH
1166 # Configure command line arguments.
1167 config_arg0='$0'
1168 config_args='$*'
1169 config_argc=$#
1170 EOSH
1171 argn=1
1172 for arg in "$@"; do
1173         cat >>cmdline.opt <<EOSH
1174 config_arg$argn='$arg'
1175 EOSH
1176         argn=`expr $argn + 1`
1177 done
1178
1179 : produce awk script to parse command line options
1180 cat >options.awk <<'EOF'
1181 BEGIN {
1182         optstr = "A:dD:eEf:hKOrsSU:V";  # getopt-style specification
1183
1184         len = length(optstr);
1185         for (i = 1; i <= len; i++) {
1186                 c = substr(optstr, i, 1);
1187                 if (i < len) a = substr(optstr, i + 1, 1); else a = "";
1188                 if (a == ":") {
1189                         arg[c] = 1;
1190                         i++;
1191                 }
1192                 opt[c] = 1;
1193         }
1194 }
1195 {
1196         expect = 0;
1197         str = $0;
1198         if (substr(str, 1, 1) != "-") {
1199                 printf("'%s'\n", str);
1200                 next;
1201         }
1202         len = length($0);
1203         for (i = 2; i <= len; i++) {
1204                 c = substr(str, i, 1);
1205                 if (!opt[c]) {
1206                         printf("-%s\n", substr(str, i));
1207                         next;
1208                 }
1209                 printf("-%s\n", c);
1210                 if (arg[c]) {
1211                         if (i < len)
1212                                 printf("'%s'\n", substr(str, i + 1));
1213                         else
1214                                 expect = 1;
1215                         next;
1216                 }
1217         }
1218 }
1219 END {
1220         if (expect)
1221                 print "?";
1222 }
1223 EOF
1224
1225 : process the command line options
1226 set X `for arg in "$@"; do echo "X$arg"; done |
1227         sed -e s/X// | awk -f options.awk`
1228 eval "set $*"
1229 shift
1230 rm -f options.awk
1231
1232 : set up default values
1233 fastread=''
1234 reuseval=false
1235 config_sh=''
1236 alldone=''
1237 error=''
1238 silent=''
1239 extractsh=''
1240 override=''
1241 knowitall=''
1242 rm -f optdef.sh posthint.sh
1243 cat >optdef.sh <<EOS
1244 $startsh
1245 EOS
1246
1247
1248 : option parsing
1249 while test $# -gt 0; do
1250         case "$1" in
1251         -d) shift; fastread=yes;;
1252         -e) shift; alldone=cont;;
1253         -f)
1254                 shift
1255                 cd ..
1256                 if test -r "$1"; then
1257                         config_sh="$1"
1258                 else
1259                         echo "$me: cannot read config file $1." >&2
1260                         error=true
1261                 fi
1262                 cd UU
1263                 shift;;
1264         -h) shift; error=true;;
1265         -r) shift; reuseval=true;;
1266         -s) shift; silent=true; realsilent=true;;
1267         -E) shift; alldone=exit;;
1268         -K) shift; knowitall=true;;
1269         -O) shift; override=true;;
1270         -S) shift; silent=true; extractsh=true;;
1271         -D)
1272                 shift
1273                 case "$1" in
1274                 *=)
1275                         echo "$me: use '-U symbol=', not '-D symbol='." >&2
1276                         echo "$me: ignoring -D $1" >&2
1277                         ;;
1278                 *=*) echo "$1" | \
1279                                 sed -e "s/'/'\"'\"'/g" -e "s/=\(.*\)/='\1'/" >> optdef.sh;;
1280                 *) echo "$1='define'" >> optdef.sh;;
1281                 esac
1282                 shift
1283                 ;;
1284         -U)
1285                 shift
1286                 case "$1" in
1287                 *=) echo "$1" >> optdef.sh;;
1288                 *=*)
1289                         echo "$me: use '-D symbol=val', not '-U symbol=val'." >&2
1290                         echo "$me: ignoring -U $1" >&2
1291                         ;;
1292                 *) echo "$1='undef'" >> optdef.sh;;
1293                 esac
1294                 shift
1295                 ;;
1296         -A)
1297             shift
1298             xxx=''
1299             yyy="$1"
1300             zzz=''
1301             uuu=undef
1302             case "$yyy" in
1303             *=*) zzz=`echo $yyy|sed 's!=.*!!'`
1304                  case "$zzz" in
1305                  *:*) zzz='' ;;
1306                  *)   xxx=append
1307                       zzz=" "`echo $yyy|sed 's!^[^=]*=!!'` 
1308                       yyy=`echo $yyy|sed 's!=.*!!'` ;;
1309                  esac
1310                  ;;
1311             esac
1312             case "$xxx" in
1313             '')  case "$yyy" in
1314                  *:*) xxx=`echo $yyy|sed 's!:.*!!'`
1315                       yyy=`echo $yyy|sed 's!^[^:]*:!!'`
1316                       zzz=`echo $yyy|sed 's!^[^=]*=!!'`
1317                       yyy=`echo $yyy|sed 's!=.*!!'` ;;
1318                  *)   xxx=`echo $yyy|sed 's!:.*!!'`
1319                       yyy=`echo $yyy|sed 's!^[^:]*:!!'` ;;
1320                  esac
1321                  ;;       
1322             esac
1323             case "$xxx" in
1324             append)
1325                 echo "$yyy=\"\${$yyy}$zzz\""    >> posthint.sh ;;
1326             clear)
1327                 echo "$yyy=''"                  >> posthint.sh ;;
1328             define)
1329                 case "$zzz" in
1330                 '') zzz=define ;;
1331                 esac
1332                 echo "$yyy='$zzz'"              >> posthint.sh ;;
1333             eval)
1334                 echo "eval \"$yyy=$zzz\""       >> posthint.sh ;;
1335             prepend)
1336                 echo "$yyy=\"$zzz\${$yyy}\""    >> posthint.sh ;;
1337             undef)
1338                 case "$zzz" in
1339                 '') zzz="$uuu" ;;
1340                 esac
1341                 echo "$yyy=$zzz"                >> posthint.sh ;;
1342             *)  echo "$me: unknown -A command '$xxx', ignoring -A $1" >&2 ;;
1343             esac
1344             shift
1345             ;;
1346         -V) echo "$me generated by metaconfig 3.0 PL70." >&2
1347             exit 0;;
1348         --) break;;
1349         -*) echo "$me: unknown option $1" >&2; shift; error=true;;
1350         *) break;;
1351         esac
1352 done
1353
1354 case "$error" in
1355 true)
1356         cat >&2 <<EOM
1357 Usage: $me [-dehrsEKOSV] [-f config.sh] [-D symbol] [-D symbol=value]
1358                  [-U symbol] [-U symbol=] [-A command:symbol...]
1359   -d : use defaults for all answers.
1360   -e : go on without questioning past the production of config.sh.
1361   -f : specify an alternate default configuration file.
1362   -h : print this help message and exit (with an error status).
1363   -r : reuse C symbols value if possible (skips costly nm extraction).
1364   -s : silent mode, only echoes questions and essential information.
1365   -D : define symbol to have some value:
1366          -D symbol         symbol gets the value 'define'
1367          -D symbol=value   symbol gets the value 'value'
1368   -E : stop at the end of questions, after having produced config.sh.
1369   -K : do not use unless you know what you are doing.
1370   -O : let -D and -U override definitions from loaded configuration file.
1371   -S : perform variable substitutions on all .SH files (can mix with -f)
1372   -U : undefine symbol:
1373          -U symbol    symbol gets the value 'undef'
1374          -U symbol=   symbol gets completely empty
1375   -A : manipulate symbol after the platform specific hints have been applied:
1376          -A symbol=value                append " "value to symbol
1377          -A append:symbol=value         append value to symbol
1378          -A define:symbol=value         define symbol to have value
1379          -A clear:symbol                define symbol to be ''
1380          -A define:symbol               define symbol to be 'define'
1381          -A eval:symbol=value           define symbol to be eval of value
1382          -A prepend:symbol=value        prepend value to symbol
1383          -A undef:symbol                define symbol to be 'undef'
1384          -A undef:symbol=               define symbol to be ''
1385   -V : print version number and exit (with a zero status).
1386 EOM
1387         exit 1
1388         ;;
1389 esac
1390
1391 : Sanity checks
1392 case "$fastread$alldone" in
1393 yescont|yesexit) ;;
1394 *)
1395         case "$extractsh" in
1396         true) ;;
1397         *)
1398                 if test ! -t 0; then
1399                         echo "Say 'sh Configure', not 'sh <Configure'"
1400                         exit 1
1401                 fi
1402                 ;;
1403         esac
1404         ;;
1405 esac
1406
1407 exec 4>&1
1408 case "$silent" in
1409 true) exec 1>/dev/null;;
1410 esac
1411
1412 : run the defines and the undefines, if any, but leave the file out there...
1413 touch optdef.sh
1414 . ./optdef.sh
1415 : create the posthint manipulation script and leave the file out there...
1416 touch posthint.sh
1417
1418 : set package name
1419 package=perl5
1420 first=`echo $package | sed -e 's/^\(.\).*/\1/'`
1421 last=`echo $package | sed -e 's/^.\(.*\)/\1/'`
1422 case "`echo AbyZ | tr '[:lower:]' '[:upper:]' 2>/dev/null`" in
1423 ABYZ) spackage=`echo $first | tr '[:lower:]' '[:upper:]'`$last;;
1424 *) spackage=`echo $first | tr '[a-z]' '[A-Z]'`$last;;
1425 esac
1426
1427 : Some greps do not return status, grrr.
1428 echo "grimblepritz" >grimble
1429 if grep blurfldyick grimble >/dev/null 2>&1 ; then
1430         contains=contains
1431 elif grep grimblepritz grimble >/dev/null 2>&1 ; then
1432         contains=grep
1433 else
1434         contains=contains
1435 fi
1436 rm -f grimble
1437 : the following should work in any shell
1438 case "$contains" in
1439 contains*)
1440         echo " "
1441         echo "AGH!  Grep doesn't return a status.  Attempting remedial action."
1442         cat >contains <<'EOSS'
1443 grep "$1" "$2" >.greptmp && cat .greptmp && test -s .greptmp
1444 EOSS
1445 chmod +x contains
1446 esac
1447
1448 : Find the path to the source tree
1449 case "$src" in
1450 '') case "$0" in
1451     */*) src=`echo $0 | sed -e 's%/[^/][^/]*$%%'`
1452          case "$src" in
1453          /*)    ;;
1454          .)     ;;
1455          *)     src=`cd ../$src && pwd` ;;
1456          esac
1457          ;;
1458     *)   src='.';;
1459     esac;;
1460 esac
1461 case "$src" in
1462 '')     src=/
1463         rsrc=/
1464         ;;
1465 /*) rsrc="$src";;
1466 *) rsrc="../$src";;
1467 esac
1468 if test -f $rsrc/Configure && \
1469         $contains "^package=$package$" $rsrc/Configure >/dev/null 2>&1
1470 then
1471    : found it, so we are ok.
1472 else
1473         rsrc=''
1474         for src in . .. ../.. ../../.. ../../../..; do
1475                 if test -f ../$src/Configure && \
1476                         $contains "^package=$package$" ../$src/Configure >/dev/null 2>&1
1477                 then
1478                         rsrc=../$src
1479                         break
1480                 fi
1481         done
1482 fi
1483 case "$rsrc" in
1484 '')
1485         cat <<EOM >&4
1486
1487 Sorry, I can't seem to locate the source dir for $package.  Please start
1488 Configure with an explicit path -- i.e. /some/path/Configure.
1489
1490 EOM
1491         exit 1
1492         ;;
1493 ../.)   rsrc='..';;
1494 *)
1495         echo " "
1496         echo "Sources for $package found in \"$src\"." >&4
1497         ;;
1498 esac
1499
1500 : script used to extract .SH files with variable substitutions
1501 cat >extract <<'EOS'
1502 CONFIGDOTSH=true
1503 echo "Doing variable substitutions on .SH files..."
1504 if test -f $src/MANIFEST; then
1505         set x `awk '{print $1}' <$src/MANIFEST | grep '\.SH$'`
1506 else
1507         echo "(Looking for .SH files under the source directory.)"
1508         set x `(cd $src; find . -name "*.SH" -print)`
1509 fi
1510 shift
1511 case $# in
1512 0) set x `(cd $src; echo *.SH)`; shift;;
1513 esac
1514 if test ! -f $src/$1; then
1515         shift
1516 fi
1517 mkdir_p='
1518 name=$1;
1519 create="";
1520 while test $name; do
1521         if test ! -d "$name"; then
1522                 create="$name $create";
1523                 name=`echo $name | sed -e "s|^[^/]*$||"`;
1524                 name=`echo $name | sed -e "s|\(.*\)/.*|\1|"`;
1525         else
1526                 name="";
1527         fi;
1528 done;
1529 for file in $create; do
1530         mkdir $file;
1531 done
1532 '
1533 for file in $*; do
1534         case "$src" in
1535         ".")
1536                 case "$file" in
1537                 */*)
1538                         dir=`expr X$file : 'X\(.*\)/'`
1539                         file=`expr X$file : 'X.*/\(.*\)'`
1540                         (cd $dir && . ./$file)
1541                         ;;
1542                 *)
1543                         . ./$file
1544                         ;;
1545                 esac
1546                 ;;
1547         *)
1548                 case "$file" in
1549                 */*)
1550                         dir=`expr X$file : 'X\(.*\)/'`
1551                         file=`expr X$file : 'X.*/\(.*\)'`
1552                         (set x $dir; shift; eval $mkdir_p)
1553                         sh <$src/$dir/$file
1554                         ;;
1555                 *)
1556                         sh <$src/$file
1557                         ;;
1558                 esac
1559                 ;;
1560         esac
1561 done
1562 if test -f $src/config_h.SH; then
1563         if test ! -f config.h; then
1564         : oops, they left it out of MANIFEST, probably, so do it anyway.
1565         . $src/config_h.SH
1566         fi
1567 fi
1568 EOS
1569
1570 : extract files and exit if asked to do so
1571 case "$extractsh" in
1572 true)
1573         case "$realsilent" in
1574         true) ;;
1575         *) exec 1>&4;;
1576         esac
1577         case "$config_sh" in
1578         '') config_sh='config.sh';;
1579         esac
1580         echo " "
1581         echo "Fetching answers from $config_sh..."
1582         cd ..
1583         . $config_sh
1584         test "$override" && . ./optdef.sh
1585         echo " "
1586         . UU/extract
1587         rm -rf UU
1588         echo "Done."
1589         exit 0
1590         ;;
1591 esac
1592
1593 : Eunice requires " " instead of "", can you believe it
1594 echo " "
1595 : Here we go...
1596 echo "Beginning of configuration questions for $package."
1597
1598 trap 'echo " "; test -d ../UU && rm -rf X $rmlist; exit 1' 1 2 3 15
1599
1600 : first determine how to suppress newline on echo command
1601 echo " "
1602 echo "Checking echo to see how to suppress newlines..."
1603 (echo "hi there\c" ; echo " ") >.echotmp
1604 if $contains c .echotmp >/dev/null 2>&1 ; then
1605         echo "...using -n."
1606         n='-n'
1607         c=''
1608 else
1609         cat <<'EOM'
1610 ...using \c
1611 EOM
1612         n=''
1613         c='\c'
1614 fi
1615 echo $n "The star should be here-->$c"
1616 echo '*'
1617 rm -f .echotmp
1618
1619 : Now test for existence of everything in MANIFEST
1620 echo " "
1621 if test -f $rsrc/MANIFEST; then
1622         echo "First let's make sure your kit is complete.  Checking..." >&4
1623         awk '$1 !~ /PACK[A-Z]+/ {print $1}' $rsrc/MANIFEST | split -50
1624         rm -f missing
1625         tmppwd=`pwd`
1626         for filelist in x??; do
1627                 (cd $rsrc; ls `cat $tmppwd/$filelist` >/dev/null 2>>$tmppwd/missing)
1628         done
1629         if test -s missing; then
1630                 cat missing >&4
1631                 cat >&4 <<'EOM'
1632
1633 THIS PACKAGE SEEMS TO BE INCOMPLETE.
1634
1635 You have the option of continuing the configuration process, despite the
1636 distinct possibility that your kit is damaged, by typing 'y'es.  If you
1637 do, don't blame me if something goes wrong.  I advise you to type 'n'o
1638 and contact the author (perlbug@perl.org).
1639
1640 EOM
1641                 echo $n "Continue? [n] $c" >&4
1642                 read ans
1643                 case "$ans" in
1644                 y*)
1645                         echo "Continuing..." >&4
1646                         rm -f missing
1647                         ;;
1648                 *)
1649                         echo "ABORTING..." >&4
1650                         kill $$
1651                         ;;
1652                 esac
1653         else
1654                 echo "Looks good..."
1655         fi
1656 else
1657         echo "There is no MANIFEST file.  I hope your kit is complete !"
1658 fi
1659 rm -f missing x??
1660
1661 echo " "
1662 : Find the appropriate value for a newline for tr
1663 if test -n "$DJGPP"; then
1664        trnl='\012'
1665 fi
1666 if test X"$trnl" = X; then
1667         case "`echo foo|tr '\n' x 2>/dev/null`" in
1668         foox) trnl='\n' ;;
1669         esac
1670 fi
1671 if test X"$trnl" = X; then
1672         case "`echo foo|tr '\012' x 2>/dev/null`" in
1673         foox) trnl='\012' ;;
1674         esac
1675 fi
1676 if test X"$trnl" = X; then
1677         cat <<EOM >&2
1678
1679 $me: Fatal Error: cannot figure out how to translate newlines with 'tr'.
1680
1681 EOM
1682         exit 1
1683 fi
1684
1685 : compute the number of columns on the terminal for proper question formatting
1686 case "$COLUMNS" in
1687 '') COLUMNS='80';;
1688 esac
1689
1690 : set up the echo used in my read
1691 myecho="case \"\$xxxm\" in
1692 '') echo $n \"\$rp $c\" >&4;;
1693 *) case \"\$rp\" in
1694         '') echo $n \"[\$xxxm] $c\";;
1695         *)
1696                 if test \`echo \"\$rp [\$xxxm]  \" | wc -c\` -ge $COLUMNS; then
1697                         echo \"\$rp\" >&4
1698                         echo $n \"[\$xxxm] $c\" >&4
1699                 else
1700                         echo $n \"\$rp [\$xxxm] $c\" >&4
1701                 fi
1702                 ;;
1703         esac;;
1704 esac"
1705
1706 : now set up to do reads with possible shell escape and default assignment
1707 cat <<EOSC >myread
1708 $startsh
1709 xxxm=\$dflt
1710 $myecho
1711 ans='!'
1712 case "\$fastread" in
1713 yes) case "\$dflt" in
1714         '') ;;
1715         *) ans='';
1716                 case "\$silent-\$rp" in
1717                 true-) ;;
1718                 *) echo " " >&4;;
1719                 esac;;
1720         esac;;
1721 *) case "\$silent" in
1722         true) case "\$rp" in
1723                 '') ans='';;
1724                 esac;;
1725         esac;;
1726 esac
1727 while expr "X\$ans" : "X!" >/dev/null; do
1728         read answ
1729         set x \$xxxm
1730         shift
1731         aok=''; eval "ans=\\"\$answ\\"" && aok=y
1732         case  "\$answ" in
1733         "!")
1734                 sh 1>&4
1735                 echo " "
1736                 $myecho
1737                 ;;
1738         !*)
1739                 set x \`expr "X\$ans" : "X!\(.*\)\$"\`
1740                 shift
1741                 sh 1>&4 -c "\$*"
1742                 echo " "
1743                 $myecho
1744                 ;;
1745         "\$ans")
1746                 case "\$ans" in
1747                 \\&*)
1748                         set x \`expr "X\$ans" : "X&\(.*\)\$"\`
1749                         shift
1750                         case "\$1" in
1751                         -d)
1752                                 fastread=yes
1753                                 echo "(OK, I'll run with -d after this question.)" >&4
1754                                 ;;
1755                         -*)
1756                                 echo "*** Sorry, \$1 not supported yet." >&4
1757                                 ;;
1758                         esac
1759                         $myecho
1760                         ans=!
1761                         ;;
1762                 esac;;
1763         *)
1764                 case "\$aok" in
1765                 y)
1766                         echo "*** Substitution done -- please confirm."
1767                         xxxm="\$ans"
1768                         ans=\`echo $n "\$ans$c" | tr '$trnl' ' '\`
1769                         xxxm="\$ans"
1770                         ans=!
1771                         ;;
1772                 *)
1773                         echo "*** Error -- try again."
1774                         ans=!
1775                         ;;
1776                 esac
1777                 $myecho
1778                 ;;
1779         esac
1780         case "\$ans\$xxxm\$nostick" in
1781         '')
1782                 ans=!
1783                 $myecho
1784                 ;;
1785         esac
1786 done
1787 case "\$ans" in
1788 '') ans="\$xxxm";;
1789 esac
1790 EOSC
1791
1792 : create .config dir to save info across Configure sessions
1793 test -d ../.config || mkdir ../.config
1794 cat >../.config/README <<EOF
1795 This directory created by Configure to save information that should
1796 persist across sessions for $package.
1797
1798 You may safely delete it if you wish.
1799 EOF
1800
1801 xversion=`awk '/define[         ]+PERL_VERSION/ {print $3}' $rsrc/patchlevel.h`
1802 case "$usedevel" in
1803 $define|true|[yY]*) ;;
1804 *) case "$xversion" in
1805    *[13579])
1806         cat >&4 <<EOH
1807 *** WHOA THERE!!! ***
1808
1809     This is an UNSTABLE DEVELOPMENT release.
1810     The version of this $package distribution is $xversion, that is, odd,
1811     (as opposed to even) and that signifies a development release.
1812     If you want a maintenance release, you want an even-numbered version.
1813
1814     Do ***NOT*** install this into production use.
1815     Data corruption and crashes are possible.
1816
1817     It is most seriously suggested that you do not continue any further
1818     unless you want to help in developing and debugging Perl.
1819
1820     If you *still* want to build perl, you can answer 'y' now,
1821     or pass -Dusedevel to Configure.
1822
1823 EOH
1824         rp='Do you really want to continue?'
1825         dflt='n'
1826         . ./myread
1827         case "$ans" in
1828         [yY]) echo >&4 "Okay, continuing."
1829               usedevel="$define" ;;
1830         *) echo >&4 "Okay, bye."
1831            exit 1
1832            ;;
1833         esac
1834         ;;
1835     esac
1836     ;;
1837 esac
1838 case "$usedevel" in
1839 $define|true|[yY]*)
1840         case "$versiononly" in
1841         '') versiononly="$define" ;;
1842         esac
1843         case "$installusrbinperl" in
1844         '') installusrbinperl="$undef" ;;
1845         esac
1846         ;;
1847 esac
1848
1849 : general instructions
1850 needman=true
1851 firsttime=true
1852 user=`(logname) 2>/dev/null`
1853 case "$user" in
1854 '') user=`whoami 2>&1`;;
1855 esac
1856 if $contains "^$user\$" ../.config/instruct >/dev/null 2>&1; then
1857         firsttime=false
1858         echo " "
1859         rp='Would you like to see the instructions?'
1860         dflt=n
1861         . ./myread
1862         case "$ans" in
1863         [yY]*) ;;
1864         *) needman=false;;
1865         esac
1866 fi
1867 if $needman; then
1868         cat <<EOH
1869
1870 This installation shell script will examine your system and ask you questions
1871 to determine how the perl5 package should be installed. If you get
1872 stuck on a question, you may use a ! shell escape to start a subshell or
1873 execute a command.  Many of the questions will have default answers in square
1874 brackets; typing carriage return will give you the default.
1875
1876 On some of the questions which ask for file or directory names you are allowed
1877 to use the ~name construct to specify the login directory belonging to "name",
1878 even if you don't have a shell which knows about that.  Questions where this is
1879 allowed will be marked "(~name ok)".
1880
1881 EOH
1882         rp=''
1883         dflt='Type carriage return to continue'
1884         . ./myread
1885         cat <<'EOH'
1886
1887 The prompter used in this script allows you to use shell variables and
1888 backticks in your answers.  You may use $1, $2, etc...  to refer to the words
1889 in the default answer, as if the default line was a set of arguments given to a
1890 script shell.  This means you may also use $* to repeat the whole default line,
1891 so you do not have to re-type everything to add something to the default.
1892
1893 Everytime there is a substitution, you will have to confirm.  If there is an
1894 error (e.g. an unmatched backtick), the default answer will remain unchanged
1895 and you will be prompted again.
1896
1897 If you are in a hurry, you may run 'Configure -d'.  This will bypass nearly all
1898 the questions and use the computed defaults (or the previous answers if there
1899 was already a config.sh file). Type 'Configure -h' for a list of options.
1900 You may also start interactively and then answer '& -d' at any prompt to turn
1901 on the non-interactive behaviour for the remainder of the execution.
1902
1903 EOH
1904         . ./myread
1905         cat <<EOH
1906
1907 Much effort has been expended to ensure that this shell script will run on any
1908 Unix system.  If despite that it blows up on yours, your best bet is to edit
1909 Configure and run it again.  If you can't run Configure for some reason,
1910 you'll have to generate a config.sh file by hand.  Whatever problems you
1911 have, let me (perlbug@perl.org) know how I blew it.
1912
1913 This installation script affects things in two ways:
1914
1915 1) it may do direct variable substitutions on some of the files included
1916    in this kit.
1917 2) it builds a config.h file for inclusion in C programs.  You may edit
1918    any of these files as the need arises after running this script.
1919
1920 If you make a mistake on a question, there is no easy way to back up to it
1921 currently.  The easiest thing to do is to edit config.sh and rerun all the SH
1922 files.  Configure will offer to let you do this before it runs the SH files.
1923
1924 EOH
1925         dflt='Type carriage return to continue'
1926         . ./myread
1927         case "$firsttime" in
1928         true) echo $user >>../.config/instruct;;
1929         esac
1930 fi
1931
1932 : find out where common programs are
1933 echo " "
1934 echo "Locating common programs..." >&4
1935 cat <<EOSC >loc
1936 $startsh
1937 case \$# in
1938 0) exit 1;;
1939 esac
1940 thing=\$1
1941 shift
1942 dflt=\$1
1943 shift
1944 for dir in \$*; do
1945         case "\$thing" in
1946         .)
1947         if test -d \$dir/\$thing; then
1948                 echo \$dir
1949                 exit 0
1950         fi
1951         ;;
1952         *)
1953         for thisthing in \$dir/\$thing; do
1954                 : just loop through to pick last item
1955         done
1956         if test -f \$thisthing; then
1957                 echo \$thisthing
1958                 exit 0
1959         elif test -f \$dir/\$thing.exe; then
1960                 if test -n "$DJGPP"; then
1961                         echo \$dir/\$thing.exe
1962                 else
1963                         : on Eunice apparently
1964                         echo \$dir/\$thing
1965                 fi
1966                 exit 0
1967         fi
1968         ;;
1969         esac
1970 done
1971 echo \$dflt
1972 exit 1
1973 EOSC
1974 chmod +x loc
1975 $eunicefix loc
1976 loclist="
1977 awk
1978 cat
1979 comm
1980 cp
1981 echo
1982 expr
1983 grep
1984 ls
1985 make
1986 mkdir
1987 rm
1988 sed
1989 sort
1990 touch
1991 tr
1992 uniq
1993 "
1994 trylist="
1995 Mcc
1996 ar
1997 bison
1998 byacc
1999 cpp
2000 csh
2001 date
2002 egrep
2003 gzip
2004 less
2005 ln
2006 more
2007 nm
2008 nroff
2009 pg
2010 test
2011 uname
2012 zip
2013 "
2014 pth=`echo $PATH | sed -e "s/$p_/ /g"`
2015 pth="$pth /lib /usr/lib"
2016 for file in $loclist; do
2017         eval xxx=\$$file
2018         case "$xxx" in
2019         /*|?:[\\/]*)
2020                 if test -f "$xxx"; then
2021                         : ok
2022                 else
2023                         echo "WARNING: no $xxx -- ignoring your setting for $file." >&4
2024                         xxx=`./loc $file $file $pth`
2025                 fi
2026                 ;;
2027         '') xxx=`./loc $file $file $pth`;;
2028         *) xxx=`./loc $xxx $xxx $pth`;;
2029         esac
2030         eval $file=$xxx
2031         eval _$file=$xxx
2032         case "$xxx" in
2033         /*)
2034                 echo $file is in $xxx.
2035                 ;;
2036         ?:[\\/]*)
2037                 echo $file is in $xxx.
2038                 ;;
2039         *)
2040                 echo "I don't know where '$file' is, and my life depends on it." >&4
2041                 echo "Go find a public domain implementation or fix your PATH setting!" >&4
2042                 exit 1
2043                 ;;
2044         esac
2045 done
2046 echo " "
2047 echo "Don't worry if any of the following aren't found..."
2048 say=offhand
2049 for file in $trylist; do
2050         eval xxx=\$$file
2051         case "$xxx" in
2052         /*|?:[\\/]*)
2053                 if test -f "$xxx"; then
2054                         : ok
2055                 else
2056                         echo "WARNING: no $xxx -- ignoring your setting for $file." >&4
2057                         xxx=`./loc $file $file $pth`
2058                 fi
2059                 ;;
2060         '') xxx=`./loc $file $file $pth`;;
2061         *) xxx=`./loc $xxx $xxx $pth`;;
2062         esac
2063         eval $file=$xxx
2064         eval _$file=$xxx
2065         case "$xxx" in
2066         /*)
2067                 echo $file is in $xxx.
2068                 ;;
2069         ?:[\\/]*)
2070                 echo $file is in $xxx.
2071                 ;;
2072         *)
2073                 echo "I don't see $file out there, $say."
2074                 say=either
2075                 ;;
2076         esac
2077 done
2078 case "$egrep" in
2079 egrep)
2080         echo "Substituting grep for egrep."
2081         egrep=$grep
2082         ;;
2083 esac
2084 case "$ln" in
2085 ln)
2086         echo "Substituting cp for ln."
2087         ln=$cp
2088         ;;
2089 esac
2090 case "$test" in
2091 test)
2092         echo "Hopefully test is built into your sh."
2093         ;;
2094 *)
2095         if `sh -c "PATH= test true" >/dev/null 2>&1`; then
2096                 echo "Using the test built into your sh."
2097                 test=test
2098                 _test=test
2099         fi
2100         ;;
2101 esac
2102 case "$echo" in
2103 echo)
2104         echo "Hopefully echo is built into your sh."
2105         ;;
2106 '') ;;
2107 *)
2108         echo " "
2109 echo "Checking compatibility between $echo and builtin echo (if any)..." >&4
2110         $echo $n "hi there$c" >foo1
2111         echo $n "hi there$c" >foo2
2112         if cmp foo1 foo2 >/dev/null 2>&1; then
2113                 echo "They are compatible.  In fact, they may be identical."
2114         else
2115                 case "$n" in
2116                 '-n') n='' c='\c';;
2117                 *) n='-n' c='';;
2118                 esac
2119                 cat <<FOO
2120 They are not compatible!  You are probably running ksh on a non-USG system.
2121 I'll have to use $echo instead of the builtin, since Bourne shell doesn't
2122 have echo built in and we may have to run some Bourne shell scripts.  That
2123 means I'll have to use '$n$c' to suppress newlines now.  Life is ridiculous.
2124
2125 FOO
2126                 $echo $n "The star should be here-->$c"
2127                 $echo "*"
2128         fi
2129         $rm -f foo1 foo2
2130         ;;
2131 esac
2132
2133 cat <<EOS >checkcc
2134 $startsh
2135 EOS
2136 cat <<'EOSC' >>checkcc
2137 case "$cc" in
2138 '') ;;
2139 *)  $rm -f try try.*
2140     $cat >try.c <<EOM
2141 int main(int argc, char *argv[]) {
2142   return 0;
2143 }
2144 EOM
2145     if $cc -o try $ccflags try.c; then
2146        :
2147     else
2148         echo "Uh-oh, the C compiler '$cc' doesn't seem to be working." >&4
2149         despair=yes
2150         trygcc=yes
2151         case "$cc" in
2152         *gcc*) trygcc=no ;;
2153         esac
2154         case "`$cc -v -c try.c 2>&1`" in
2155         *gcc*) trygcc=no ;;
2156         esac
2157         if $test X"$trygcc" = Xyes; then
2158             if gcc -o try -c try.c; then
2159                 echo " "
2160                 echo "You seem to have a working gcc, though." >&4
2161                 rp="Would you like to use it?"
2162                 dflt=y
2163                 if $test -f myread; then
2164                     . ./myread
2165                 else
2166                     if $test -f UU/myread; then
2167                         . ./UU/myread
2168                     else
2169                         echo "Cannot find myread, sorry.  Aborting." >&2
2170                         exit 1
2171                     fi
2172                 fi  
2173                 case "$ans" in
2174                 [yY]*) cc=gcc; ccname=gcc; ccflags=''; despair=no ;;
2175                 esac
2176             fi
2177         fi
2178         if $test X"$despair" = Xyes; then
2179             $cat >&4 <<EOM
2180 You need to find a working C compiler.
2181 Either (purchase and) install the C compiler supplied by your OS vendor,
2182 or for a free C compiler try http://gcc.gnu.org/
2183 I cannot continue any further, aborting.
2184 EOM
2185             exit 1
2186         fi
2187     fi
2188     $rm -f try try.*
2189     ;;
2190 esac
2191 EOSC
2192
2193 : determine whether symbolic links are supported
2194 echo " "
2195 $touch blurfl
2196 if $ln -s blurfl sym > /dev/null 2>&1 ; then
2197         echo "Symbolic links are supported." >&4
2198         lns="$ln -s"
2199 else
2200         echo "Symbolic links are NOT supported." >&4
2201         lns="$ln"
2202 fi
2203 $rm -f blurfl sym
2204
2205 : determine whether symbolic links are supported
2206 echo " "
2207 case "$lns" in
2208 *"ln -s")
2209         echo "Checking how to test for symbolic links..." >&4
2210         $lns blurfl sym
2211         if $test "X$issymlink" = X; then
2212                 sh -c "PATH= test -h sym" >/dev/null 2>&1
2213                 if test $? = 0; then
2214                         issymlink="test -h"
2215                 fi              
2216         fi
2217         if $test "X$issymlink" = X; then
2218                 if  $test -h >/dev/null 2>&1; then
2219                         issymlink="$test -h"
2220                         echo "Your builtin 'test -h' may be broken, I'm using external '$test -h'." >&4
2221                 fi              
2222         fi
2223         if $test "X$issymlink" = X; then
2224                 if $test -L sym 2>/dev/null; then
2225                         issymlink="$test -L"
2226                 fi
2227         fi
2228         if $test "X$issymlink" != X; then
2229                 echo "You can test for symbolic links with '$issymlink'." >&4
2230         else
2231                 echo "I do not know how you can test for symbolic links." >&4
2232         fi
2233         $rm -f blurfl sym
2234         ;;
2235 *)      echo "No symbolic links, so not testing for their testing..." >&4
2236         ;;
2237 esac
2238 echo " "
2239
2240
2241 case "$mksymlinks" in
2242 $define|true|[yY]*)
2243         case "$src" in
2244         ''|'.') echo "Cannot create symlinks in the original directory." >&4
2245                 exit 1
2246                 ;;
2247         *)      case "$lns:$issymlink" in
2248                 *"ln -s:"*"test -"?)
2249                         echo "Creating the symbolic links..." >&4
2250                         echo "(First creating the subdirectories...)" >&4
2251                         cd ..
2252                         awk '{print $1}' $src/MANIFEST | grep / | sed 's:/[^/]*$::' | sort -u | while true; do
2253                                 read directory
2254                                 test -z "$directory" && break
2255                                 mkdir -p $directory
2256                         done
2257                         # Sanity check 1.
2258                         if test ! -d t/base; then
2259                                 echo "Failed to create the subdirectories.  Aborting." >&4
2260                                 exit 1
2261                         fi
2262                         echo "(Then creating the symlinks...)" >&4
2263                         awk '{print $1}' $src/MANIFEST | while true; do
2264                                 read filename
2265                                 test -z "$filename" && break
2266                                 if test -f $filename; then
2267                                         if $issymlink $filename; then
2268                                                 rm -f $filename
2269                                         fi
2270                                 fi
2271                                 if test -f $filename; then
2272                                         echo "$filename already exists, not symlinking."
2273                                 else
2274                                         ln -s $src/$filename $filename
2275                                 fi
2276                         done
2277                         # Sanity check 2.
2278                         if test ! -f t/base/commonsense.t; then
2279                                 echo "Failed to create the symlinks.  Aborting." >&4
2280                                 exit 1
2281                         fi
2282                         cd UU
2283                         ;;
2284                 *)      echo "(I cannot figure out how to do symbolic links, ignoring mksymlinks)." >&4
2285                         ;;
2286                 esac
2287                 ;;
2288         esac
2289         ;;
2290 esac
2291
2292 : see whether [:lower:] and [:upper:] are supported character classes
2293 echo " "
2294 case "`echo AbyZ | $tr '[:lower:]' '[:upper:]' 2>/dev/null`" in
2295 ABYZ)
2296         echo "Good, your tr supports [:lower:] and [:upper:] to convert case." >&4
2297         up='[:upper:]'
2298         low='[:lower:]'
2299         ;;
2300 *)      # There is a discontinuity in EBCDIC between 'I' and 'J'
2301         # (0xc9 and 0xd1), therefore that is a nice testing point.
2302         if test "X$up" = X -o "X$low" = X; then
2303             case "`echo IJ | $tr '[I-J]' '[i-j]' 2>/dev/null`" in
2304             ij) up='[A-Z]'
2305                 low='[a-z]'
2306                 ;;
2307             esac
2308         fi
2309         if test "X$up" = X -o "X$low" = X; then
2310             case "`echo IJ | $tr I-J i-j 2>/dev/null`" in
2311             ij) up='A-Z'
2312                 low='a-z'
2313                 ;;
2314             esac
2315         fi
2316         if test "X$up" = X -o "X$low" = X; then
2317             case "`echo IJ | od -x 2>/dev/null`" in
2318             *C9D1*|*c9d1*)
2319                 echo "Hey, this might be EBCDIC." >&4
2320                 if test "X$up" = X -o "X$low" = X; then
2321                     case "`echo IJ | $tr '[A-IJ-RS-Z]' '[a-ij-rs-z]' 2>/dev/null`" in
2322                     ij) up='[A-IJ-RS-Z]'
2323                         low='[a-ij-rs-z]'
2324                         ;;
2325                     esac
2326                 fi
2327                 if test "X$up" = X -o "X$low" = X; then
2328                     case "`echo IJ | $tr A-IJ-RS-Z a-ij-rs-z 2>/dev/null`" in
2329                     ij) up='A-IJ-RS-Z'
2330                         low='a-ij-rs-z'
2331                         ;;
2332                     esac
2333                 fi
2334                 ;;
2335             esac
2336         fi
2337 esac
2338 case "`echo IJ | $tr \"$up\" \"$low\" 2>/dev/null`" in
2339 ij)
2340     echo "Using $up and $low to convert case." >&4
2341     ;;
2342 *)
2343     echo "I don't know how to translate letters from upper to lower case." >&4
2344     echo "Your tr is not acting any way I know of." >&4
2345     exit 1
2346     ;;
2347 esac
2348 : set up the translation script tr, must be called with ./tr of course
2349 cat >tr <<EOSC
2350 $startsh
2351 case "\$1\$2" in
2352 '[A-Z][a-z]') exec $tr '$up' '$low';;
2353 '[a-z][A-Z]') exec $tr '$low' '$up';;
2354 esac
2355 exec $tr "\$@"
2356 EOSC
2357 chmod +x tr
2358 $eunicefix tr
2359
2360 : Try to determine whether config.sh was made on this system
2361 case "$config_sh" in
2362 '')
2363 myuname=`$uname -a 2>/dev/null`
2364 $test -z "$myuname" && myuname=`hostname 2>/dev/null`
2365 # tr '[A-Z]' '[a-z]' would not work in EBCDIC
2366 # because the A-Z/a-z are not consecutive.
2367 myuname=`echo $myuname | $sed -e 's/^[^=]*=//' -e 's/\///g' | \
2368         ./tr '[A-Z]' '[a-z]' | $tr $trnl ' '`
2369 newmyuname="$myuname"
2370 dflt=n
2371 case "$knowitall" in
2372 '')
2373         if test -f ../config.sh; then
2374                 if $contains myuname= ../config.sh >/dev/null 2>&1; then
2375                         eval "`grep myuname= ../config.sh`"
2376                 fi
2377                 if test "X$myuname" = "X$newmyuname"; then
2378                         dflt=y
2379                 fi
2380         fi
2381         ;;
2382 *) dflt=y;;
2383 esac
2384
2385 : Get old answers from old config file if Configure was run on the
2386 : same system, otherwise use the hints.
2387 hint=default
2388 cd ..
2389 if test -f config.sh; then
2390         echo " "
2391         rp="I see a config.sh file.  Shall I use it to set the defaults?"
2392         . UU/myread
2393         case "$ans" in
2394         n*|N*) echo "OK, I'll ignore it."
2395                 mv config.sh config.sh.old
2396                 myuname="$newmyuname"
2397                 ;;
2398         *)  echo "Fetching default answers from your old config.sh file..." >&4
2399                 tmp_n="$n"
2400                 tmp_c="$c"
2401                 tmp_sh="$sh"
2402                 . ./config.sh
2403                 cp config.sh UU
2404                 n="$tmp_n"
2405                 c="$tmp_c"
2406                 : Older versions did not always set $sh.  Catch re-use of such
2407                 : an old config.sh.
2408                 case "$sh" in
2409                 '') sh="$tmp_sh" ;;
2410                 esac
2411                 hint=previous
2412                 ;;
2413         esac
2414 fi
2415 . ./UU/checkcc
2416 if test ! -f config.sh; then
2417         $cat <<EOM
2418
2419 First time through, eh?  I have some defaults handy for some systems
2420 that need some extra help getting the Configure answers right:
2421
2422 EOM
2423         (cd $src/hints; ls -C *.sh) | $sed 's/\.sh/   /g' >&4
2424         dflt=''
2425         : Half the following guesses are probably wrong... If you have better
2426         : tests or hints, please send them to perlbug@perl.org
2427         : The metaconfig authors would also appreciate a copy...
2428         $test -f /irix && osname=irix
2429         $test -f /xenix && osname=sco_xenix
2430         $test -f /dynix && osname=dynix
2431         $test -f /dnix && osname=dnix
2432         $test -f /lynx.os && osname=lynxos
2433         $test -f /unicos && osname=unicos && osvers=`$uname -r`
2434         $test -f /unicosmk && osname=unicosmk && osvers=`$uname -r`
2435         $test -f /unicosmk.ar && osname=unicosmk && osvers=`$uname -r`
2436         $test -f /bin/mips && /bin/mips && osname=mips
2437         $test -d /NextApps && set X `hostinfo | grep 'NeXT Mach.*:' | \
2438                 $sed -e 's/://' -e 's/\./_/'` && osname=next && osvers=$4
2439         $test -d /usr/apollo/bin && osname=apollo
2440         $test -f /etc/saf/_sactab && osname=svr4
2441         $test -d /usr/include/minix && osname=minix
2442         if $test -d /MachTen -o -d /MachTen_Folder; then
2443                 osname=machten
2444                 if $test -x /sbin/version; then
2445                         osvers=`/sbin/version | $awk '{print $2}' |
2446                         $sed -e 's/[A-Za-z]$//'`
2447                 elif $test -x /usr/etc/version; then
2448                         osvers=`/usr/etc/version | $awk '{print $2}' |
2449                         $sed -e 's/[A-Za-z]$//'`
2450                 else
2451                         osvers="$2.$3"
2452                 fi
2453         fi
2454
2455         $test -f /sys/posix.dll &&
2456                 $test -f /usr/bin/what &&
2457                 set X `/usr/bin/what /sys/posix.dll` &&
2458                 $test "$3" = UWIN &&
2459                 osname=uwin &&
2460                 osvers="$5"
2461
2462         if $test -f $uname; then
2463                 set X $myuname
2464                 shift
2465
2466                 case "$5" in
2467                 fps*) osname=fps ;;
2468                 mips*)
2469                         case "$4" in
2470                         umips) osname=umips ;;
2471                         *) osname=mips ;;
2472                         esac;;
2473                 [23]100) osname=mips ;;
2474                 next*) osname=next ;;
2475                 i386*)
2476                         tmp=`/bin/uname -X 2>/dev/null|awk '/3\.2v[45]/{ print $(NF) }'`
2477                         if $test "$tmp" != "" -a "$3" = "3.2" -a -f '/etc/systemid'; then
2478                                 osname='sco'
2479                                 osvers=$tmp
2480                         elif $test -f /etc/kconfig; then
2481                                 osname=isc
2482                                 if test "$lns" = "$ln -s"; then
2483                                         osvers=4
2484                                 elif $contains _SYSV3 /usr/include/stdio.h > /dev/null 2>&1 ; then
2485                                         osvers=3
2486                                 elif $contains _POSIX_SOURCE /usr/include/stdio.h > /dev/null 2>&1 ; then
2487                                         osvers=2
2488                                 fi
2489                         fi
2490                         tmp=''
2491                         ;;
2492                 pc*)
2493                         if test -n "$DJGPP"; then
2494                                 osname=dos
2495                                 osvers=djgpp
2496                         fi
2497                         ;;
2498                 esac
2499
2500                 case "$1" in
2501                 aix) osname=aix
2502                         tmp=`( (oslevel) 2>/dev/null || echo "not found") 2>&1`
2503                         case "$tmp" in
2504                         'not found') osvers="$4"."$3" ;;
2505                         '<3240'|'<>3240') osvers=3.2.0 ;;
2506                         '=3240'|'>3240'|'<3250'|'<>3250') osvers=3.2.4 ;;
2507                         '=3250'|'>3250') osvers=3.2.5 ;;
2508                         *) osvers=$tmp;;
2509                         esac
2510                         ;;
2511                 bsd386) osname=bsd386
2512                         osvers=`$uname -r`
2513                         ;;
2514                 cygwin*) osname=cygwin
2515                         osvers="$3"
2516                         ;;
2517                 *dc.osx) osname=dcosx
2518                         osvers="$3"
2519                         ;;
2520                 dnix) osname=dnix
2521                         osvers="$3"
2522                         ;;
2523                 domainos) osname=apollo
2524                         osvers="$3"
2525                         ;;
2526                 dgux) osname=dgux 
2527                         osvers="$3"
2528                         ;;
2529                 dynixptx*) osname=dynixptx
2530                         osvers=`echo "$4"|sed 's/^v//'`
2531                         ;;
2532                 freebsd) osname=freebsd 
2533                         osvers="$3" ;;
2534                 genix) osname=genix ;;
2535                 hp*) osname=hpux 
2536                         osvers=`echo "$3" | $sed 's,.*\.\([0-9]*\.[0-9]*\),\1,'`
2537                         ;;
2538                 irix*) osname=irix
2539                         case "$3" in
2540                         4*) osvers=4 ;;
2541                         5*) osvers=5 ;;
2542                         *)      osvers="$3" ;;
2543                         esac
2544                         ;;
2545                 linux) osname=linux
2546                         case "$3" in
2547                         *)      osvers="$3" ;;
2548                         esac
2549                         ;;
2550                 MiNT) osname=mint
2551                         ;;
2552                 netbsd*) osname=netbsd
2553                         osvers="$3"
2554                         ;;
2555                 news-os) osvers="$3"
2556                         case "$3" in
2557                         4*) osname=newsos4 ;;
2558                         *) osname=newsos ;;
2559                         esac
2560                         ;;
2561                 next*) osname=next ;;
2562                 nonstop-ux) osname=nonstopux ;;
2563                 POSIX-BC | posix-bc ) osname=posix-bc
2564                         osvers="$3"
2565                         ;;
2566                 powerux | power_ux | powermax_os | powermaxos | \
2567                 powerunix | power_unix) osname=powerux
2568                         osvers="$3"
2569                         ;;
2570                 qnx) osname=qnx
2571                         osvers="$4"
2572                         ;;
2573                 solaris) osname=solaris
2574                         case "$3" in
2575                         5*) osvers=`echo $3 | $sed 's/^5/2/g'` ;;
2576                         *)      osvers="$3" ;;
2577                         esac
2578                         ;;
2579                 sunos) osname=sunos
2580                         case "$3" in
2581                         5*) osname=solaris
2582                                 osvers=`echo $3 | $sed 's/^5/2/g'` ;;
2583                         *)      osvers="$3" ;;
2584                         esac
2585                         ;;
2586                 titanos) osname=titanos
2587                         case "$3" in
2588                         1*) osvers=1 ;;
2589                         2*) osvers=2 ;;
2590                         3*) osvers=3 ;;
2591                         4*) osvers=4 ;;
2592                         *)      osvers="$3" ;;
2593                         esac
2594                         ;;
2595                 ultrix) osname=ultrix
2596                         osvers="$3"
2597                         ;;
2598                 osf1|mls+)      case "$5" in
2599                                 alpha)
2600                                         osname=dec_osf
2601                                         osvers=`sizer -v | awk '{print $3}' |  tr '[A-Z]' '[a-z]' | sed 's/^[xvt]//'`
2602                                         case "$osvers" in
2603                                         [1-9].[0-9]*) ;;
2604                                         *) osvers=`echo "$3" | sed 's/^[xvt]//'` ;;
2605                                         esac
2606                                         ;;
2607                         hp*)    osname=hp_osf1  ;;
2608                         mips)   osname=mips_osf1 ;;
2609                         esac
2610                         ;;
2611                 unixware) osname=svr5
2612                         osvers="$4"
2613                         ;;
2614                 uts) osname=uts
2615                         osvers="$3"
2616                         ;;
2617                 $2) case "$osname" in
2618                         *isc*) ;;
2619                         *freebsd*) ;;
2620                         svr*)
2621                                 : svr4.x or possibly later
2622                                 case "svr$3" in 
2623                                 ${osname}*)
2624                                         osname=svr$3
2625                                         osvers=$4
2626                                         ;;
2627                                 esac
2628                                 case "$osname" in
2629                                 svr4.0)
2630                                         : Check for ESIX
2631                                         if test -f /stand/boot ; then
2632                                                 eval `grep '^INITPROG=[a-z/0-9]*$' /stand/boot`
2633                                                 if test -n "$INITPROG" -a -f "$INITPROG"; then
2634                         isesix=`strings -a $INITPROG|grep 'ESIX SYSTEM V/386 Release 4.0'`
2635                                                         if test -n "$isesix"; then
2636                                                                 osname=esix4
2637                                                         fi
2638                                                 fi
2639                                         fi
2640                                         ;;
2641                                 esac
2642                                 ;;
2643                         *)      if test -f /etc/systemid; then
2644                                         osname=sco
2645                                         set `echo $3 | $sed 's/\./ /g'` $4
2646                                         if $test -f $src/hints/sco_$1_$2_$3.sh; then
2647                                                 osvers=$1.$2.$3
2648                                         elif $test -f $src/hints/sco_$1_$2.sh; then
2649                                                 osvers=$1.$2
2650                                         elif $test -f $src/hints/sco_$1.sh; then
2651                                                 osvers=$1
2652                                         fi
2653                                 else
2654                                         case "$osname" in
2655                                         '') : Still unknown.  Probably a generic Sys V.
2656                                                 osname="sysv"
2657                                                 osvers="$3"
2658                                                 ;;
2659                                         esac
2660                                 fi
2661                                 ;;
2662                         esac
2663                         ;;
2664                 *)      case "$osname" in
2665                         '') : Still unknown.  Probably a generic BSD.
2666                                 osname="$1"
2667                                 osvers="$3"
2668                                 ;;
2669                         esac
2670                         ;;
2671                 esac
2672         else
2673                 if test -f /vmunix -a -f $src/hints/news_os.sh; then
2674                         (what /vmunix | UU/tr '[A-Z]' '[a-z]') > UU/kernel.what 2>&1
2675                         if $contains news-os UU/kernel.what >/dev/null 2>&1; then
2676                                 osname=news_os
2677                         fi
2678                         $rm -f UU/kernel.what
2679                 elif test -d c:/.; then
2680                         set X $myuname
2681                         osname=os2
2682                         osvers="$5"
2683                 fi
2684         fi
2685         
2686         : Now look for a hint file osname_osvers, unless one has been
2687         : specified already.
2688         case "$hintfile" in
2689         ''|' ')
2690                 file=`echo "${osname}_${osvers}" | $sed -e 's%\.%_%g' -e 's%_$%%'`
2691                 : Also try without trailing minor version numbers.
2692                 xfile=`echo $file | $sed -e 's%_[^_]*$%%'`
2693                 xxfile=`echo $xfile | $sed -e 's%_[^_]*$%%'`
2694                 xxxfile=`echo $xxfile | $sed -e 's%_[^_]*$%%'`
2695                 xxxxfile=`echo $xxxfile | $sed -e 's%_[^_]*$%%'`
2696                 case "$file" in
2697                 '') dflt=none ;;
2698                 *)  case "$osvers" in
2699                         '') dflt=$file
2700                                 ;;
2701                         *)  if $test -f $src/hints/$file.sh ; then
2702                                         dflt=$file
2703                                 elif $test -f $src/hints/$xfile.sh ; then
2704                                         dflt=$xfile
2705                                 elif $test -f $src/hints/$xxfile.sh ; then
2706                                         dflt=$xxfile
2707                                 elif $test -f $src/hints/$xxxfile.sh ; then
2708                                         dflt=$xxxfile
2709                                 elif $test -f $src/hints/$xxxxfile.sh ; then
2710                                         dflt=$xxxxfile
2711                                 elif $test -f "$src/hints/${osname}.sh" ; then
2712                                         dflt="${osname}"
2713                                 else
2714                                         dflt=none
2715                                 fi
2716                                 ;;
2717                         esac
2718                         ;;
2719                 esac
2720                 if $test -f Policy.sh ; then
2721                         case "$dflt" in
2722                         *Policy*) ;;
2723                         none) dflt="Policy" ;;
2724                         *) dflt="Policy $dflt" ;;
2725                         esac
2726                 fi
2727                 ;;
2728         *)
2729                 dflt=`echo $hintfile | $sed 's/\.sh$//'`
2730                 ;;
2731         esac
2732
2733         if $test -f Policy.sh ; then
2734                 $cat <<EOM
2735
2736 There's also a Policy hint file available, which should make the
2737 site-specific (policy) questions easier to answer.
2738 EOM
2739
2740         fi
2741
2742         $cat <<EOM
2743
2744 You may give one or more space-separated answers, or "none" if appropriate.
2745 A well-behaved OS will have no hints, so answering "none" or just "Policy"
2746 is a good thing.  DO NOT give a wrong version or a wrong OS.
2747
2748 EOM
2749
2750         rp="Which of these apply, if any?"
2751         . UU/myread
2752         tans=$ans
2753         for file in $tans; do
2754                 if $test X$file = XPolicy -a -f Policy.sh; then
2755                         . Policy.sh
2756                         $cat Policy.sh >> UU/config.sh
2757                 elif $test -f $src/hints/$file.sh; then
2758                         . $src/hints/$file.sh
2759                         $cat $src/hints/$file.sh >> UU/config.sh
2760                 elif $test X$tans = X -o X$tans = Xnone ; then
2761                         : nothing
2762                 else
2763                         : Give one chance to correct a possible typo.
2764                         echo "$file.sh does not exist"
2765                         dflt=$file
2766                         rp="hint to use instead?"
2767                         . UU/myread
2768                         for file in $ans; do
2769                                 if $test -f "$src/hints/$file.sh"; then
2770                                         . $src/hints/$file.sh
2771                                         $cat $src/hints/$file.sh >> UU/config.sh
2772                                 elif $test X$ans = X -o X$ans = Xnone ; then
2773                                         : nothing
2774                                 else
2775                                         echo "$file.sh does not exist -- ignored."
2776                                 fi
2777                         done
2778                 fi
2779         done
2780
2781         hint=recommended
2782         : Remember our hint file for later.
2783         if $test -f "$src/hints/$file.sh" ; then
2784                 hintfile="$file"
2785         else
2786                 hintfile=''
2787         fi
2788 fi
2789 cd UU
2790 ;;
2791 *)
2792         echo " "
2793         echo "Fetching default answers from $config_sh..." >&4
2794         tmp_n="$n"
2795         tmp_c="$c"
2796         cd ..
2797         cp $config_sh config.sh 2>/dev/null
2798         chmod +w config.sh
2799         . ./config.sh
2800         cd UU
2801         cp ../config.sh .
2802         n="$tmp_n"
2803         c="$tmp_c"
2804         hint=previous
2805         ;;
2806 esac
2807 test "$override" && . ./optdef.sh
2808
2809 : Restore computed paths
2810 for file in $loclist $trylist; do
2811         eval $file="\$_$file"
2812 done
2813
2814 cat << EOM
2815
2816 Configure uses the operating system name and version to set some defaults.
2817 The default value is probably right if the name rings a bell. Otherwise,
2818 since spelling matters for me, either accept the default or answer "none"
2819 to leave it blank.
2820
2821 EOM
2822 case "$osname" in
2823         ''|' ')
2824                 case "$hintfile" in
2825                 ''|' '|none) dflt=none ;;
2826                 *)  dflt=`echo $hintfile | $sed -e 's/\.sh$//' -e 's/_.*$//'` ;;
2827                 esac
2828                 ;;
2829         *) dflt="$osname" ;;
2830 esac
2831 rp="Operating system name?"
2832 . ./myread
2833 case "$ans" in
2834 none)  osname='' ;;
2835 *) osname=`echo "$ans" | $sed -e 's/[   ][      ]*/_/g' | ./tr '[A-Z]' '[a-z]'`;;
2836 esac
2837 echo " "
2838 case "$osvers" in
2839         ''|' ')
2840                 case "$hintfile" in
2841                 ''|' '|none) dflt=none ;;
2842                 *)      dflt=`echo $hintfile | $sed -e 's/\.sh$//' -e 's/^[^_]*//'`
2843                         dflt=`echo $dflt | $sed -e 's/^_//' -e 's/_/./g'`
2844                         case "$dflt" in
2845                         ''|' ') dflt=none ;;
2846                         esac
2847                         ;;
2848                 esac
2849                 ;;
2850         *) dflt="$osvers" ;;
2851 esac
2852 rp="Operating system version?"
2853 . ./myread
2854 case "$ans" in
2855 none)  osvers='' ;;
2856 *) osvers="$ans" ;;
2857 esac
2858
2859
2860 . ./posthint.sh
2861
2862 : who configured the system
2863 cf_time=`LC_ALL=C; LANGUAGE=C; export LC_ALL; export LANGUAGE; $date 2>&1`
2864 cf_by=`(logname) 2>/dev/null`
2865 case "$cf_by" in
2866 "")
2867         cf_by=`(whoami) 2>/dev/null`
2868         case "$cf_by" in
2869         "") cf_by=unknown ;;
2870         esac ;;
2871 esac
2872
2873 : set up the script used to warn in case of inconsistency
2874 cat <<EOS >whoa
2875 $startsh
2876 EOS
2877 cat <<'EOSC' >>whoa
2878 dflt=y
2879 echo " "
2880 echo "*** WHOA THERE!!! ***" >&4
2881 echo "    The $hint value for \$$var on this machine was \"$was\"!" >&4
2882 rp="    Keep the $hint value?"
2883 . ./myread
2884 case "$ans" in
2885 y) td=$was; tu=$was;;
2886 esac
2887 EOSC
2888
2889 : function used to set $1 to $val
2890 setvar='var=$1; eval "was=\$$1"; td=$define; tu=$undef;
2891 case "$val$was" in
2892 $define$undef) . ./whoa; eval "$var=\$td";;
2893 $undef$define) . ./whoa; eval "$var=\$tu";;
2894 *) eval "$var=$val";;
2895 esac'
2896
2897 case "$usethreads" in
2898 $define|true|[yY]*)     dflt='y';;
2899 *) dflt='n';;
2900 esac
2901 cat <<EOM
2902
2903 Perl can be built to take advantage of threads on some systems.
2904 To do so, Configure can be run with -Dusethreads.
2905
2906 Note that threading is a highly experimental feature, and
2907 some known race conditions still remain.  If you choose to try
2908 it, be very sure to not actually deploy it for production
2909 purposes.  README.threads has more details, and is required
2910 reading if you enable threads.
2911
2912 If this doesn't make any sense to you, just accept the default '$dflt'.
2913 EOM
2914 rp='Build a threading Perl?'
2915 . ./myread
2916 case "$ans" in
2917 y|Y)    val="$define" ;;
2918 *)      val="$undef" ;;
2919 esac
2920 set usethreads
2921 eval $setvar
2922
2923 case "$usethreads" in
2924 $define)
2925         $cat <<EOM
2926
2927 As of 5.5.640, Perl has two different internal threading implementations,
2928 the 5.005 version (5005threads) and an interpreter-based version
2929 (ithreads) that has one interpreter per thread.  Both are very 
2930 experimental.  This arrangement exists to help developers work out
2931 which one is better.
2932
2933 If you're a casual user, you probably don't want interpreter-threads
2934 at this time.  There doesn't yet exist a way to create threads from
2935 within Perl in this model, i.e., "use Thread;" will NOT work.
2936 EOM
2937         : Default to ithreads unless overridden on command line or with
2938         : old config.sh
2939         dflt='y'
2940         case "$use5005threads" in
2941                 $define|true|[yY]*) dflt='n';;
2942         esac
2943         case "$useithreads" in
2944                 $undef|false|[nN]*) dflt='n';;
2945         esac
2946         rp='Use interpreter-based ithreads?'
2947         . ./myread
2948         case "$ans" in
2949         y|Y)    val="$define" ;;
2950         *)      val="$undef" ;;
2951         esac
2952         set useithreads
2953         eval $setvar
2954         : Now set use5005threads to the opposite value.
2955         case "$useithreads" in
2956         $define) val="$undef" ;;
2957         *) val="$define" ;;
2958         esac
2959         set use5005threads
2960         eval $setvar
2961         ;;
2962 *)
2963         useithreads="$undef"
2964         use5005threads="$undef"
2965         ;;
2966 esac
2967
2968 case "$useithreads$use5005threads" in
2969 "$define$define")
2970         $cat >&4 <<EOM
2971
2972 You cannot have both the ithreads and the 5.005 threads enabled
2973 at the same time.  Disabling the 5.005 threads since they are
2974 much less stable than the ithreads.
2975
2976 EOM
2977         use5005threads="$undef"
2978         ;;
2979 esac
2980
2981 case "$d_oldpthreads" in
2982 '')     : Configure tests would be welcome here.  For now, assume undef.
2983         val="$undef" ;;
2984 *)      val="$d_oldpthreads" ;;
2985 esac
2986 set d_oldpthreads
2987 eval $setvar
2988
2989
2990 case "$usethreads" in
2991 "$define"|true|[yY]*)
2992 : Look for a hint-file generated 'call-back-unit'.  If the
2993 : user has specified that a threading perl is to be built,
2994 : we may need to set or change some other defaults.
2995         if $test -f usethreads.cbu; then
2996                 echo "Your platform has some specific hints for threaded builds, using them..."
2997                 . ./usethreads.cbu
2998         else
2999                 $cat <<EOM
3000 (Your platform doesn't have any specific hints for threaded builds.
3001  Assuming POSIX threads, then.)
3002 EOM
3003         fi
3004         ;;
3005 esac
3006
3007 cat <<EOM
3008
3009 Perl can be built so that multiple Perl interpreters can coexist
3010 within the same Perl executable.
3011 EOM
3012
3013 case "$useithreads" in
3014 $define)
3015         cat <<EOM
3016 This multiple interpreter support is required for interpreter-based threads.
3017 EOM
3018         val="$define"
3019         ;;
3020 *)      case "$usemultiplicity" in
3021         $define|true|[yY]*)     dflt='y';;
3022         *) dflt='n';;
3023         esac
3024         echo " "
3025         echo "If this doesn't make any sense to you, just accept the default '$dflt'."
3026         rp='Build Perl for multiplicity?'
3027         . ./myread
3028         case "$ans" in
3029         y|Y)    val="$define" ;;
3030         *)      val="$undef" ;;
3031         esac
3032         ;;
3033 esac
3034 set usemultiplicity
3035 eval $setvar
3036
3037 : make some quick guesses about what we are up against
3038 echo " "
3039 $echo $n "Hmm...  $c"
3040 echo exit 1 >bsd
3041 echo exit 1 >usg
3042 echo exit 1 >v7
3043 echo exit 1 >osf1
3044 echo exit 1 >eunice
3045 echo exit 1 >xenix
3046 echo exit 1 >venix
3047 echo exit 1 >os2
3048 d_bsd="$undef"
3049 $cat /usr/include/signal.h /usr/include/sys/signal.h >foo 2>/dev/null
3050 if test -f /osf_boot || $contains 'OSF/1' /usr/include/ctype.h >/dev/null 2>&1
3051 then
3052         echo "Looks kind of like an OSF/1 system, but we'll see..."
3053         echo exit 0 >osf1
3054 elif test `echo abc | $tr a-z A-Z` = Abc ; then
3055         xxx=`./loc addbib blurfl $pth`
3056         if $test -f $xxx; then
3057         echo "Looks kind of like a USG system with BSD features, but we'll see..."
3058                 echo exit 0 >bsd
3059                 echo exit 0 >usg
3060         else
3061                 if $contains SIGTSTP foo >/dev/null 2>&1 ; then
3062                         echo "Looks kind of like an extended USG system, but we'll see..."
3063                 else
3064                         echo "Looks kind of like a USG system, but we'll see..."
3065                 fi
3066                 echo exit 0 >usg
3067         fi
3068 elif $contains SIGTSTP foo >/dev/null 2>&1 ; then
3069         echo "Looks kind of like a BSD system, but we'll see..."
3070         d_bsd="$define"
3071         echo exit 0 >bsd
3072 else
3073         echo "Looks kind of like a Version 7 system, but we'll see..."
3074         echo exit 0 >v7
3075 fi
3076 case "$eunicefix" in
3077 *unixtovms*)
3078         $cat <<'EOI'
3079 There is, however, a strange, musty smell in the air that reminds me of
3080 something...hmm...yes...I've got it...there's a VMS nearby, or I'm a Blit.
3081 EOI
3082         echo exit 0 >eunice
3083         d_eunice="$define"
3084 : it so happens the Eunice I know will not run shell scripts in Unix format
3085         ;;
3086 *)
3087         echo " "
3088         echo "Congratulations.  You aren't running Eunice."
3089         d_eunice="$undef"
3090         ;;
3091 esac
3092 : Detect OS2.  The p_ variable is set above in the Head.U unit.
3093 : Note that this also -- wrongly -- detects e.g. dos-djgpp, which also uses
3094 : semicolon as a patch separator
3095 case "$p_" in
3096 :) ;;
3097 *)
3098         $cat <<'EOI'
3099 I have the feeling something is not exactly right, however...don't tell me...
3100 lemme think...does HAL ring a bell?...no, of course, you're only running OS/2!
3101 (Or you may be running DOS with DJGPP.)
3102 EOI
3103         echo exit 0 >os2
3104         ;;
3105 esac
3106 if test -f /xenix; then
3107         echo "Actually, this looks more like a XENIX system..."
3108         echo exit 0 >xenix
3109         d_xenix="$define"
3110 else
3111         echo " "
3112         echo "It's not Xenix..."
3113         d_xenix="$undef"
3114 fi
3115 chmod +x xenix
3116 $eunicefix xenix
3117 if test -f /venix; then
3118         echo "Actually, this looks more like a VENIX system..."
3119         echo exit 0 >venix
3120 else
3121         echo " "
3122         if ./xenix; then
3123                 : null
3124         else
3125                 echo "Nor is it Venix..."
3126         fi
3127 fi
3128 chmod +x bsd usg v7 osf1 eunice xenix venix os2
3129 $eunicefix bsd usg v7 osf1 eunice xenix venix os2
3130 $rm -f foo
3131
3132 case "$cc" in
3133 '') dflt=cc;;
3134 *) dflt="$cc";;
3135 esac
3136 rp="Use which C compiler?"
3137 . ./myread
3138 cc="$ans"
3139 : Look for a hint-file generated 'call-back-unit'.  Now that the
3140 : user has specified the compiler, we may need to set or change some
3141 : other defaults.
3142 if $test -f cc.cbu; then
3143     . ./cc.cbu
3144 fi
3145 . ./checkcc
3146
3147 echo " "
3148 echo "Checking for GNU cc in disguise and/or its version number..." >&4
3149 $cat >gccvers.c <<EOM
3150 #include <stdio.h>
3151 int main() {
3152 #ifdef __GNUC__
3153 #ifdef __VERSION__
3154         printf("%s\n", __VERSION__);
3155 #else
3156         printf("%s\n", "1");
3157 #endif
3158 #endif
3159         exit(0);
3160 }
3161 EOM
3162 if $cc -o gccvers $ccflags $ldflags gccvers.c; then
3163         gccversion=`./gccvers`
3164         case "$gccversion" in
3165         '') echo "You are not using GNU cc." ;;
3166         *)  echo "You are using GNU cc $gccversion."
3167             ccname=gcc  
3168             ;;
3169         esac
3170 else
3171         echo " "
3172         echo "*** WHOA THERE!!! ***" >&4
3173         echo "    Your C compiler \"$cc\" doesn't seem to be working!" >&4
3174         case "$knowitall" in
3175         '')
3176         echo "    You'd better start hunting for one and let me know about it." >&4
3177                 exit 1
3178                 ;;
3179         esac
3180 fi
3181 $rm -f gccvers*
3182 case "$gccversion" in
3183 1*) cpp=`./loc gcc-cpp $cpp $pth` ;;
3184 esac
3185 case "$gccversion" in
3186 '') gccosandvers='' ;;
3187 *) gccshortvers=`echo "$gccversion"|sed 's/ .*//'`
3188    gccosandvers=`$cc -v 2>&1|grep '/specs$'|sed "s!.*/[^-/]*-[^-/]*-\([^-/]*\)/$gccshortvers/specs!\1!"`
3189    gccshortvers=''
3190    case "$gccosandvers" in
3191    $osname) gccosandvers='' ;; # linux gccs seem to have no linux osvers, grr
3192    $osname$osvers) ;; # looking good
3193    $osname*) cat <<EOM >&4
3194
3195 *** WHOA THERE!!! ***
3196
3197     Your gcc has not been compiled for the exact release of
3198     your operating system ($gccosandvers versus $osname$osvers).
3199
3200     In general it is a good idea to keep gcc synchronized with
3201     the operating system because otherwise serious problems
3202     may ensue when trying to compile software, like Perl.
3203
3204     I'm trying to be optimistic here, though, and will continue.
3205     If later during the configuration and build icky compilation
3206     problems appear (headerfile conflicts being the most common
3207     manifestation), I suggest reinstalling the gcc to match
3208     your operating system release.
3209
3210 EOM
3211       ;;
3212    *) gccosandvers='' ;; # failed to parse, better be silent
3213    esac
3214    ;;
3215 esac
3216 case "$ccname" in
3217 '') ccname="$cc" ;;
3218 esac
3219
3220 : see how we invoke the C preprocessor
3221 echo " "
3222 echo "Now, how can we feed standard input to your C preprocessor..." >&4
3223 cat <<'EOT' >testcpp.c
3224 #define ABC abc
3225 #define XYZ xyz
3226 ABC.XYZ
3227 EOT
3228 cd ..
3229 if test ! -f cppstdin; then
3230         if test "X$osname" = "Xaix" -a "X$gccversion" = X; then
3231                 # AIX cc -E doesn't show the absolute headerfile
3232                 # locations but we'll cheat by using the -M flag.
3233                 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
3234         else
3235                 echo 'cat >.$$.c; '"$cc"' -E ${1+"$@"} .$$.c; rm .$$.c' >cppstdin
3236         fi
3237 else
3238         echo "Keeping your $hint cppstdin wrapper."
3239 fi
3240 chmod 755 cppstdin
3241 wrapper=`pwd`/cppstdin
3242 ok='false'
3243 cd UU
3244
3245 if $test "X$cppstdin" != "X" && \
3246         $cppstdin $cppminus <testcpp.c >testcpp.out 2>&1 && \
3247         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
3248 then
3249         echo "You used to use $cppstdin $cppminus so we'll use that again."
3250         case "$cpprun" in
3251         '') echo "But let's see if we can live without a wrapper..." ;;
3252         *)
3253                 if $cpprun $cpplast <testcpp.c >testcpp.out 2>&1 && \
3254                         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
3255                 then
3256                         echo "(And we'll use $cpprun $cpplast to preprocess directly.)"
3257                         ok='true'
3258                 else
3259                         echo "(However, $cpprun $cpplast does not work, let's see...)"
3260                 fi
3261                 ;;
3262         esac
3263 else
3264         case "$cppstdin" in
3265         '') ;;
3266         *)
3267                 echo "Good old $cppstdin $cppminus does not seem to be of any help..."
3268                 ;;
3269         esac
3270 fi
3271
3272 if $ok; then
3273         : nothing
3274 elif echo 'Maybe "'"$cc"' -E" will work...'; \
3275         $cc -E <testcpp.c >testcpp.out 2>&1; \
3276         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3277         echo "Yup, it does."
3278         x_cpp="$cc -E"
3279         x_minus='';
3280 elif echo 'Nope...maybe "'"$cc"' -E -" will work...'; \
3281         $cc -E - <testcpp.c >testcpp.out 2>&1; \
3282         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3283         echo "Yup, it does."
3284         x_cpp="$cc -E"
3285         x_minus='-';
3286 elif echo 'Nope...maybe "'"$cc"' -P" will work...'; \
3287         $cc -P <testcpp.c >testcpp.out 2>&1; \
3288         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3289         echo "Yipee, that works!"
3290         x_cpp="$cc -P"
3291         x_minus='';
3292 elif echo 'Nope...maybe "'"$cc"' -P -" will work...'; \
3293         $cc -P - <testcpp.c >testcpp.out 2>&1; \
3294         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3295         echo "At long last!"
3296         x_cpp="$cc -P"
3297         x_minus='-';
3298 elif echo 'No such luck, maybe "'$cpp'" will work...'; \
3299         $cpp <testcpp.c >testcpp.out 2>&1; \
3300         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3301         echo "It works!"
3302         x_cpp="$cpp"
3303         x_minus='';
3304 elif echo 'Nixed again...maybe "'$cpp' -" will work...'; \
3305         $cpp - <testcpp.c >testcpp.out 2>&1; \
3306         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3307         echo "Hooray, it works!  I was beginning to wonder."
3308         x_cpp="$cpp"
3309         x_minus='-';
3310 elif echo 'Uh-uh.  Time to get fancy.  Trying a wrapper...'; \
3311         $wrapper <testcpp.c >testcpp.out 2>&1; \
3312         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3313         x_cpp="$wrapper"
3314         x_minus=''
3315         echo "Eureka!"
3316 else
3317         dflt=''
3318         rp="No dice.  I can't find a C preprocessor.  Name one:"
3319         . ./myread
3320         x_cpp="$ans"
3321         x_minus=''
3322         $x_cpp <testcpp.c >testcpp.out 2>&1
3323         if $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3324                 echo "OK, that will do." >&4
3325         else
3326 echo "Sorry, I can't get that to work.  Go find one and rerun Configure." >&4
3327                 exit 1
3328         fi
3329 fi
3330
3331 case "$ok" in
3332 false)
3333         cppstdin="$x_cpp"
3334         cppminus="$x_minus"
3335         cpprun="$x_cpp"
3336         cpplast="$x_minus"
3337         set X $x_cpp
3338         shift
3339         case "$1" in
3340         "$cpp")
3341                 echo "Perhaps can we force $cc -E using a wrapper..."
3342                 if $wrapper <testcpp.c >testcpp.out 2>&1; \
3343                         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
3344                 then
3345                         echo "Yup, we can."
3346                         cppstdin="$wrapper"
3347                         cppminus='';
3348                 else
3349                         echo "Nope, we'll have to live without it..."
3350                 fi
3351                 ;;
3352         esac
3353         case "$cpprun" in
3354         "$wrapper")
3355                 cpprun=''
3356                 cpplast=''
3357                 ;;
3358         esac
3359         ;;
3360 esac
3361
3362 case "$cppstdin" in
3363 "$wrapper"|'cppstdin') ;;
3364 *) $rm -f $wrapper;;
3365 esac
3366 $rm -f testcpp.c testcpp.out
3367
3368 : decide how portable to be.  Allow command line overrides.
3369 case "$d_portable" in
3370 "$undef") ;;
3371 *)      d_portable="$define" ;;
3372 esac
3373
3374 : set up shell script to do ~ expansion
3375 cat >filexp <<EOSS
3376 $startsh
3377 : expand filename
3378 case "\$1" in
3379  ~/*|~)
3380         echo \$1 | $sed "s|~|\${HOME-\$LOGDIR}|"
3381         ;;
3382  ~*)
3383         if $test -f /bin/csh; then
3384                 /bin/csh -f -c "glob \$1"
3385                 failed=\$?
3386                 echo ""
3387                 exit \$failed
3388         else
3389                 name=\`$expr x\$1 : '..\([^/]*\)'\`
3390                 dir=\`$sed -n -e "/^\${name}:/{s/^[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:\([^:]*\).*"'\$'"/\1/" -e p -e q -e '}' </etc/passwd\`
3391                 if $test ! -d "\$dir"; then
3392                         me=\`basename \$0\`
3393                         echo "\$me: can't locate home directory for: \$name" >&2
3394                         exit 1
3395                 fi
3396                 case "\$1" in
3397                 */*)
3398                         echo \$dir/\`$expr x\$1 : '..[^/]*/\(.*\)'\`
3399                         ;;
3400                 *)
3401                         echo \$dir
3402                         ;;
3403                 esac
3404         fi
3405         ;;
3406 *)
3407         echo \$1
3408         ;;
3409 esac
3410 EOSS
3411 chmod +x filexp
3412 $eunicefix filexp
3413
3414 : now set up to get a file name
3415 cat <<EOS >getfile
3416 $startsh
3417 EOS
3418 cat <<'EOSC' >>getfile
3419 tilde=''
3420 fullpath=''
3421 already=''
3422 skip=''
3423 none_ok=''
3424 exp_file=''
3425 nopath_ok=''
3426 orig_rp="$rp"
3427 orig_dflt="$dflt"
3428 case "$gfpth" in
3429 '') gfpth='.' ;;
3430 esac
3431
3432 case "$fn" in
3433 *\(*)
3434         expr $fn : '.*(\(.*\)).*' | $tr ',' $trnl >getfile.ok
3435         fn=`echo $fn | sed 's/(.*)//'`
3436         ;;
3437 esac
3438
3439 case "$fn" in
3440 *:*)
3441         loc_file=`expr $fn : '.*:\(.*\)'`
3442         fn=`expr $fn : '\(.*\):.*'`
3443         ;;
3444 esac
3445
3446 case "$fn" in
3447 *~*) tilde=true;;
3448 esac
3449 case "$fn" in
3450 */*) fullpath=true;;
3451 esac
3452 case "$fn" in
3453 *+*) skip=true;;
3454 esac
3455 case "$fn" in
3456 *n*) none_ok=true;;
3457 esac
3458 case "$fn" in
3459 *e*) exp_file=true;;
3460 esac
3461 case "$fn" in
3462 *p*) nopath_ok=true;;
3463 esac
3464
3465 case "$fn" in
3466 *f*) type='File';;
3467 *d*) type='Directory';;
3468 *l*) type='Locate';;
3469 esac
3470
3471 what="$type"
3472 case "$what" in
3473 Locate) what='File';;
3474 esac
3475
3476 case "$exp_file" in
3477 '')
3478         case "$d_portable" in
3479         "$define") ;;
3480         *) exp_file=true;;
3481         esac
3482         ;;
3483 esac
3484
3485 cd ..
3486 while test "$type"; do
3487         redo=''
3488         rp="$orig_rp"
3489         dflt="$orig_dflt"
3490         case "$tilde" in
3491         true) rp="$rp (~name ok)";;
3492         esac
3493         . UU/myread
3494         if test -f UU/getfile.ok && \
3495                 $contains "^$ans\$" UU/getfile.ok >/dev/null 2>&1
3496         then
3497                 value="$ans"
3498                 ansexp="$ans"
3499                 break
3500         fi
3501         case "$ans" in
3502         none)
3503                 value=''
3504                 ansexp=''
3505                 case "$none_ok" in
3506                 true) type='';;
3507                 esac
3508                 ;;
3509         *)
3510                 case "$tilde" in
3511                 '') value="$ans"
3512                         ansexp="$ans";;
3513                 *)
3514                         value=`UU/filexp $ans`
3515                         case $? in
3516                         0)
3517                                 if test "$ans" != "$value"; then
3518                                         echo "(That expands to $value on this system.)"
3519                                 fi
3520                                 ;;
3521                         *) value="$ans";;
3522                         esac
3523                         ansexp="$value"
3524                         case "$exp_file" in
3525                         '') value="$ans";;
3526                         esac
3527                         ;;
3528                 esac
3529                 case "$fullpath" in
3530                 true)
3531                         case "$ansexp" in
3532                         /*) value="$ansexp" ;;
3533                         [a-zA-Z]:/*) value="$ansexp" ;;
3534                         *)
3535                                 redo=true
3536                                 case "$already" in
3537                                 true)
3538                                 echo "I shall only accept a full path name, as in /bin/ls." >&4
3539                                 echo "Use a ! shell escape if you wish to check pathnames." >&4
3540                                         ;;
3541                                 *)
3542                                 echo "Please give a full path name, starting with slash." >&4
3543                                         case "$tilde" in
3544                                         true)
3545                                 echo "Note that using ~name is ok provided it expands well." >&4
3546                                                 already=true
3547                                                 ;;
3548                                         esac
3549                                 esac
3550                                 ;;
3551                         esac
3552                         ;;
3553                 esac
3554                 case "$redo" in
3555                 '')
3556                         case "$type" in
3557                         File)
3558                                 for fp in $gfpth; do
3559                                         if test "X$fp" = X.; then
3560                                             pf="$ansexp"
3561                                         else    
3562                                             pf="$fp/$ansexp"
3563                                         fi
3564                                         if test -f "$pf"; then
3565                                                 type=''
3566                                         elif test -r "$pf" || (test -h "$pf") >/dev/null 2>&1
3567                                         then
3568                                                 echo "($value is not a plain file, but that's ok.)"
3569                                                 type=''
3570                                         fi
3571                                         if test X"$type" = X; then
3572                                             value="$pf"
3573                                             break
3574                                         fi
3575                                 done
3576                                 ;;
3577                         Directory)
3578                                 for fp in $gfpth; do
3579                                         if test "X$fp" = X.; then
3580                                             dir="$ans"
3581                                             direxp="$ansexp"
3582                                         else    
3583                                             dir="$fp/$ansexp"
3584                                             direxp="$fp/$ansexp"
3585                                         fi
3586                                         if test -d "$direxp"; then
3587                                                 type=''
3588                                                 value="$dir"
3589                                                 break
3590                                         fi
3591                                 done
3592                                 ;;
3593                         Locate)
3594                                 if test -d "$ansexp"; then
3595                                         echo "(Looking for $loc_file in directory $value.)"
3596                                         value="$value/$loc_file"
3597                                         ansexp="$ansexp/$loc_file"
3598                                 fi
3599                                 if test -f "$ansexp"; then
3600                                         type=''
3601                                 fi
3602                                 case "$nopath_ok" in
3603                                 true)   case "$value" in
3604                                         */*) ;;
3605                                         *)      echo "Assuming $value will be in people's path."
3606                                                 type=''
3607                                                 ;;
3608                                         esac
3609                                         ;;
3610                                 esac
3611                                 ;;
3612                         esac
3613
3614                         case "$skip" in
3615                         true) type='';
3616                         esac
3617
3618                         case "$type" in
3619                         '') ;;
3620                         *)
3621                                 if test "$fastread" = yes; then
3622                                         dflt=y
3623                                 else
3624                                         dflt=n
3625                                 fi
3626                                 rp="$what $value doesn't exist.  Use that name anyway?"
3627                                 . UU/myread
3628                                 dflt=''
3629                                 case "$ans" in
3630                                 y*) type='';;
3631                                 *) echo " ";;
3632                                 esac
3633                                 ;;
3634                         esac
3635                         ;;
3636                 esac
3637                 ;;
3638         esac
3639 done
3640 cd UU
3641 ans="$value"
3642 rp="$orig_rp"
3643 dflt="$orig_dflt"
3644 rm -f getfile.ok
3645 test "X$gfpthkeep" != Xy && gfpth=""
3646 EOSC
3647
3648 : What should the include directory be ?
3649 echo " "
3650 $echo $n "Hmm...  $c"
3651 dflt='/usr/include'
3652 incpath=''
3653 mips_type=''
3654 if $test -f /bin/mips && /bin/mips; then
3655         echo "Looks like a MIPS system..."
3656         $cat >usr.c <<'EOCP'
3657 #ifdef SYSTYPE_BSD43
3658 /bsd43
3659 #endif
3660 EOCP
3661         if cc -E usr.c > usr.out && $contains / usr.out >/dev/null 2>&1; then
3662                 dflt='/bsd43/usr/include'
3663                 incpath='/bsd43'
3664                 mips_type='BSD 4.3'
3665         else
3666                 mips_type='System V'
3667         fi
3668         $rm -f usr.c usr.out
3669         echo "and you're compiling with the $mips_type compiler and libraries."
3670         xxx_prompt=y
3671         echo "exit 0" >mips
3672 else
3673         echo "Doesn't look like a MIPS system."
3674         xxx_prompt=n
3675         echo "exit 1" >mips
3676 fi
3677 chmod +x mips
3678 $eunicefix mips
3679 case "$usrinc" in
3680 '') ;;
3681 *) dflt="$usrinc";;
3682 esac
3683 case "$xxx_prompt" in
3684 y)      fn=d/
3685         echo " "
3686         rp='Where are the include files you want to use?'
3687         . ./getfile
3688         usrinc="$ans"
3689         ;;
3690 *)      usrinc="$dflt"
3691         ;;
3692 esac
3693
3694 : Set private lib path
3695 case "$plibpth" in
3696 '') if ./mips; then
3697                 plibpth="$incpath/usr/lib /usr/local/lib /usr/ccs/lib"
3698         fi;;
3699 esac
3700 case "$libpth" in
3701 ' ') dlist='';;
3702 '') dlist="$loclibpth $plibpth $glibpth";;
3703 *) dlist="$libpth";;
3704 esac
3705
3706 : Now check and see which directories actually exist, avoiding duplicates
3707 libpth=''
3708 for xxx in $dlist
3709 do
3710     if $test -d $xxx; then
3711                 case " $libpth " in
3712                 *" $xxx "*) ;;
3713                 *) libpth="$libpth $xxx";;
3714                 esac
3715     fi
3716 done
3717 $cat <<'EOM'
3718
3719 Some systems have incompatible or broken versions of libraries.  Among
3720 the directories listed in the question below, please remove any you
3721 know not to be holding relevant libraries, and add any that are needed.
3722 Say "none" for none.
3723
3724 EOM
3725 case "$libpth" in
3726 '') dflt='none';;
3727 *)
3728         set X $libpth
3729         shift
3730         dflt=${1+"$@"}
3731         ;;
3732 esac
3733 rp="Directories to use for library searches?"
3734 . ./myread
3735 case "$ans" in
3736 none) libpth=' ';;
3737 *) libpth="$ans";;
3738 esac
3739
3740 : compute shared library extension
3741 case "$so" in
3742 '')
3743         if xxx=`./loc libc.sl X $libpth`; $test -f "$xxx"; then
3744                 dflt='sl'
3745         else
3746                 dflt='so'
3747         fi
3748         ;;
3749 *) dflt="$so";;
3750 esac
3751 $cat <<EOM
3752
3753 On some systems, shared libraries may be available.  Answer 'none' if
3754 you want to suppress searching of shared libraries for the remainder
3755 of this configuration.
3756
3757 EOM
3758 rp='What is the file extension used for shared libraries?'
3759 . ./myread
3760 so="$ans"
3761
3762 : Define several unixisms.
3763 : Hints files or command line option can be used to override them.
3764 : The convoluted testing is in case hints files set either the old
3765 : or the new name.
3766 case "$_exe" in
3767 '')     case "$exe_ext" in
3768     '') ;;
3769         *)      _exe="$exe_ext" ;;
3770         esac
3771         ;;
3772 esac
3773 case "$_a" in
3774 '')     case "$lib_ext" in
3775     '') _a='.a';;
3776         *)      _a="$lib_ext" ;;
3777         esac
3778         ;;
3779 esac
3780 case "$_o" in
3781 '') case "$obj_ext" in
3782         '')     _o='.o';;
3783         *)      _o="$obj_ext";;
3784         esac
3785         ;;
3786 esac
3787 case "$p_" in
3788 '') case "$path_sep" in
3789         '')     p_=':';;
3790         *)      p_="$path_sep";;
3791         esac
3792         ;;
3793 esac
3794 exe_ext=$_exe
3795 lib_ext=$_a
3796 obj_ext=$_o
3797 path_sep=$p_
3798
3799 : Which makefile gets called first.  This is used by make depend.
3800 case "$firstmakefile" in
3801 '') firstmakefile='makefile';;
3802 esac
3803
3804 case "$usesocks" in
3805 $define|true|[yY]*)     dflt='y';;
3806 *) dflt='n';;
3807 esac
3808 cat <<EOM
3809
3810 Perl can be built to use the SOCKS proxy protocol library.  To do so,
3811 Configure must be run with -Dusesocks.  If you use SOCKS you also need
3812 to use the PerlIO abstraction layer, this will be implicitly selected.
3813
3814 If this doesn't make any sense to you, just accept the default '$dflt'.
3815 EOM
3816 rp='Build Perl for SOCKS?'
3817 . ./myread
3818 case "$ans" in
3819 y|Y)    val="$define" ;;     
3820 *)      val="$undef" ;;
3821 esac
3822 set usesocks
3823 eval $setvar
3824
3825 case "$usesocks" in
3826 $define|true|[yY]*) useperlio="$define";;
3827 esac
3828
3829 : Looking for optional libraries
3830 echo " "
3831 echo "Checking for optional libraries..." >&4
3832 case "$libs" in
3833 ' '|'') dflt='';;
3834 *) dflt="$libs";;
3835 esac
3836 case "$libswanted" in
3837 '') libswanted='c_s';;
3838 esac
3839 case "$usesocks" in
3840 "$define") libswanted="$libswanted socks5 socks5_sh" ;;
3841 esac
3842 libsfound=''
3843 libsfiles=''
3844 libsdirs=''
3845 libspath=''
3846 for thisdir in $libpth $xlibpth; do
3847   test -d $thisdir && libspath="$libspath $thisdir"
3848 done
3849 for thislib in $libswanted; do
3850         for thisdir in $libspath; do
3851             xxx=''
3852             if $test ! -f "$xxx" -a "X$ignore_versioned_solibs" = "X"; then
3853                 xxx=`ls $thisdir/lib$thislib.$so.[0-9] 2>/dev/null|tail -1`
3854                 $test -f "$xxx" && eval $libscheck
3855                 $test -f "$xxx" && libstyle=shared
3856             fi
3857             if test ! -f "$xxx"; then
3858                 xxx=$thisdir/lib$thislib.$so
3859                 $test -f "$xxx" && eval $libscheck
3860                 $test -f "$xxx" && libstyle=shared
3861             fi  
3862             if test ! -f "$xxx"; then
3863                 xxx=$thisdir/lib$thislib$_a
3864                 $test -f "$xxx" && eval $libscheck
3865                 $test -f "$xxx" && libstyle=static
3866             fi
3867             if test ! -f "$xxx"; then
3868                 xxx=$thisdir/$thislib$_a
3869                 $test -f "$xxx" && eval $libscheck
3870                 $test -f "$xxx" && libstyle=static
3871             fi
3872             if test ! -f "$xxx"; then
3873                 xxx=$thisdir/lib${thislib}_s$_a
3874                 $test -f "$xxx" && eval $libscheck
3875                 $test -f "$xxx" && libstyle=static
3876                 $test -f "$xxx" && thislib=${thislib}_s
3877             fi
3878             if test ! -f "$xxx"; then
3879                 xxx=$thisdir/Slib$thislib$_a
3880                 $test -f "$xxx" && eval $libscheck
3881                 $test -f "$xxx" && libstyle=static
3882             fi
3883             if $test -f "$xxx"; then
3884                 case "$libstyle" in
3885                 shared) echo "Found -l$thislib (shared)." ;;
3886                 static) echo "Found -l$thislib." ;;
3887                 *)      echo "Found -l$thislib ($libstyle)." ;;
3888                 esac
3889                 case " $dflt " in
3890                 *"-l$thislib "*);;
3891                 *) dflt="$dflt -l$thislib"
3892                    libsfound="$libsfound $xxx"
3893                    yyy=`basename $xxx`
3894                    libsfiles="$libsfiles $yyy"
3895                    yyy=`echo $xxx|$sed -e "s%/$yyy\\$%%"`
3896                    case " $libsdirs " in
3897                    *" $yyy "*) ;;
3898                    *) libsdirs="$libsdirs $yyy" ;;
3899                    esac
3900                    ;;
3901                 esac
3902                 break
3903             fi  
3904         done
3905         if $test ! -f "$xxx"; then
3906             echo "No -l$thislib."
3907         fi
3908 done
3909 set X $dflt
3910 shift
3911 dflt="$*"
3912 case "$libs" in
3913 '') dflt="$dflt";;
3914 *) dflt="$libs";;
3915 esac
3916 case "$dflt" in
3917 ' '|'') dflt='none';;
3918 esac
3919
3920 $cat <<EOM
3921
3922 In order to compile $package on your machine, a number of libraries
3923 are usually needed.  Include any other special libraries here as well.
3924 Say "none" for none.  The default list is almost always right.
3925 EOM
3926
3927 echo " "
3928 rp="What libraries to use?"
3929 . ./myread
3930 case "$ans" in
3931 none) libs=' ';;
3932 *) libs="$ans";;
3933 esac
3934
3935 : determine optimization, if desired, or use for debug flag also
3936 case "$optimize" in
3937 ' '|$undef) dflt='none';;
3938 '') dflt='-O';;
3939 *) dflt="$optimize";;
3940 esac
3941 $cat <<EOH
3942
3943 By default, $package compiles with the -O flag to use the optimizer.
3944 Alternately, you might want to use the symbolic debugger, which uses
3945 the -g flag (on traditional Unix systems).  Either flag can be
3946 specified here.  To use neither flag, specify the word "none".
3947
3948 EOH
3949 rp="What optimizer/debugger flag should be used?"
3950 . ./myread
3951 optimize="$ans"
3952 case "$optimize" in
3953 'none') optimize=" ";;
3954 esac
3955
3956 dflt=''
3957 : We will not override a previous value, but we might want to
3958 : augment a hint file
3959 case "$hint" in
3960 default|recommended)
3961         case "$gccversion" in
3962         1*) dflt='-fpcc-struct-return' ;;
3963         esac
3964         case "$optimize" in
3965         *-g*) dflt="$dflt -DDEBUGGING";;
3966         esac
3967         case "$gccversion" in
3968         2*) if test -d /etc/conf/kconfig.d &&
3969                         $contains _POSIX_VERSION $usrinc/sys/unistd.h >/dev/null 2>&1
3970                 then
3971                         dflt="$dflt -posix"
3972                 fi
3973                 ;;
3974         esac
3975         case "$gccversion" in
3976         1*) ;;
3977         2.[0-8]*) ;;
3978         ?*)     echo " "
3979                 echo "Checking if your compiler accepts -fno-strict-aliasing" 2>&1
3980                 echo 'int main(void) { return 0; }' > gcctest.c
3981                 if $cc -O2 -fno-strict-aliasing -o gcctest gcctest.c; then
3982                         echo "Yes, it does." 2>&1
3983                         case "$ccflags" in
3984                         *strict-aliasing*) 
3985                                 echo "Leaving current flags $ccflags alone." 2>&1
3986                                 ;;
3987                         *) dflt="$dflt -fno-strict-aliasing" ;;
3988                         esac
3989                 else
3990                         echo "Nope, it doesn't, but that's ok." 2>&1
3991                 fi
3992                 ;;
3993         esac
3994         ;;
3995 esac
3996
3997 case "$mips_type" in
3998 *BSD*|'') inclwanted="$locincpth $usrinc";;
3999 *) inclwanted="$locincpth $inclwanted $usrinc/bsd";;
4000 esac
4001 for thisincl in $inclwanted; do
4002         if $test -d $thisincl; then
4003                 if $test x$thisincl != x$usrinc; then
4004                         case "$dflt" in
4005                         *" -I$thisincl "*);;
4006                         *) dflt="$dflt -I$thisincl ";;
4007                         esac
4008                 fi
4009         fi
4010 done
4011
4012 inctest='if $contains $2 $usrinc/$1 >/dev/null 2>&1; then
4013         xxx=true;
4014 elif $contains $2 $usrinc/sys/$1 >/dev/null 2>&1; then
4015         xxx=true;
4016 else
4017         xxx=false;
4018 fi;
4019 if $xxx; then
4020         case "$dflt" in
4021         *$2*);;
4022         *) dflt="$dflt -D$2";;
4023         esac;
4024 fi'
4025
4026 set signal.h LANGUAGE_C; eval $inctest
4027
4028 case "$usesocks" in
4029 $define)
4030         ccflags="$ccflags -DSOCKS"
4031         ;;
4032 esac
4033
4034 case "$hint" in
4035 default|recommended) dflt="$ccflags $dflt" ;;
4036 *) dflt="$ccflags";;
4037 esac
4038
4039 case "$dflt" in
4040 ''|' ') dflt=none;;
4041 esac
4042
4043 $cat <<EOH
4044
4045 Your C compiler may want other flags.  For this question you should include
4046 -I/whatever and -DWHATEVER flags and any other flags used by the C compiler,
4047 but you should NOT include libraries or ld flags like -lwhatever.  If you
4048 want $package to honor its debug switch, you should include -DDEBUGGING here.
4049 Your C compiler might also need additional flags, such as -D_POSIX_SOURCE.
4050
4051 To use no flags, specify the word "none".
4052
4053 EOH
4054 set X $dflt
4055 shift
4056 dflt=${1+"$@"}
4057 rp="Any additional cc flags?"
4058 . ./myread
4059 case "$ans" in
4060 none) ccflags='';;
4061 *) ccflags="$ans";;
4062 esac
4063
4064 : the following weeds options from ccflags that are of no interest to cpp
4065 case "$cppflags" in
4066 '') cppflags="$ccflags" ;;
4067 *)  cppflags="$cppflags $ccflags" ;;
4068 esac
4069 case "$gccversion" in
4070 1*) cppflags="$cppflags -D__GNUC__"
4071 esac
4072 case "$mips_type" in
4073 '');;
4074 *BSD*) cppflags="$cppflags -DSYSTYPE_BSD43";;
4075 esac
4076 case "$cppflags" in
4077 '');;
4078 *)
4079         echo " "
4080         echo "Let me guess what the preprocessor flags are..." >&4
4081         set X $cppflags
4082         shift
4083         cppflags=''
4084         $cat >cpp.c <<'EOM'
4085 #define BLURFL foo
4086
4087 BLURFL xx LFRULB
4088 EOM
4089         previous=''
4090         for flag in $*
4091         do
4092                 case "$flag" in
4093                 -*) ftry="$flag";;
4094                 *) ftry="$previous $flag";;
4095                 esac
4096                 if $cppstdin -DLFRULB=bar $cppflags $ftry $cppminus <cpp.c \
4097                         >cpp1.out 2>/dev/null && \
4098                         $cpprun -DLFRULB=bar $cppflags $ftry $cpplast <cpp.c \
4099                         >cpp2.out 2>/dev/null && \
4100                         $contains 'foo.*xx.*bar' cpp1.out >/dev/null 2>&1 && \
4101                         $contains 'foo.*xx.*bar' cpp2.out >/dev/null 2>&1
4102                 then
4103                         cppflags="$cppflags $ftry"
4104                         previous=''
4105                 else
4106                         previous="$flag"
4107                 fi
4108         done
4109         set X $cppflags
4110         shift
4111         cppflags=${1+"$@"}
4112         case "$cppflags" in
4113         *-*)  echo "They appear to be: $cppflags";;
4114         esac
4115         $rm -f cpp.c cpp?.out
4116         ;;
4117 esac
4118
4119 : flags used in final linking phase
4120 case "$ldflags" in
4121 '') if ./venix; then
4122                 dflt='-i -z'
4123         else
4124                 dflt=''
4125         fi
4126         case "$ccflags" in
4127         *-posix*) dflt="$dflt -posix" ;;
4128         esac
4129         ;;
4130 *) dflt="$ldflags";;
4131 esac
4132
4133 : Try to guess additional flags to pick up local libraries.
4134 for thislibdir in $libpth; do
4135         case " $loclibpth " in
4136         *" $thislibdir "*)
4137                 case "$dflt " in 
4138                 *"-L$thislibdir "*) ;;
4139                 *)  dflt="$dflt -L$thislibdir" ;;
4140                 esac
4141                 ;;
4142         esac
4143 done
4144
4145 case "$dflt" in
4146 '') dflt='none' ;;
4147 esac
4148
4149 $cat <<EOH
4150
4151 Your C linker may need flags.  For this question you should
4152 include -L/whatever and any other flags used by the C linker, but you
4153 should NOT include libraries like -lwhatever.
4154
4155 Make sure you include the appropriate -L/path flags if your C linker
4156 does not normally search all of the directories you specified above,
4157 namely
4158         $libpth
4159 To use no flags, specify the word "none".
4160
4161 EOH
4162
4163 rp="Any additional ld flags (NOT including libraries)?"
4164 . ./myread
4165 case "$ans" in
4166 none) ldflags='';;
4167 *) ldflags="$ans";;
4168 esac
4169 rmlist="$rmlist pdp11"
4170
4171 : coherency check
4172 echo " "
4173 echo "Checking your choice of C compiler and flags for coherency..." >&4
4174 $cat > try.c <<'EOF'
4175 #include <stdio.h>
4176 int main() { printf("Ok\n"); exit(0); }
4177 EOF
4178 set X $cc -o try $optimize $ccflags $ldflags try.c $libs
4179 shift
4180 $cat >try.msg <<'EOM'
4181 I've tried to compile and run the following simple program:
4182
4183 EOM
4184 $cat try.c >> try.msg
4185
4186 $cat >> try.msg <<EOM
4187
4188 I used the command:
4189
4190         $*
4191         ./try
4192
4193 and I got the following output:
4194
4195 EOM
4196 dflt=y
4197 if $sh -c "$cc -o try $optimize $ccflags $ldflags try.c $libs" >>try.msg 2>&1; then
4198         if $sh -c './try' >>try.msg 2>&1; then
4199                 xxx=`./try`
4200                 case "$xxx" in
4201                 "Ok") dflt=n ;;
4202                 *)      echo 'The program compiled OK, but produced no output.' >> try.msg
4203                         case " $libs " in
4204                         *" -lsfio "*)
4205                                 cat >> try.msg <<'EOQS'
4206 If $libs contains -lsfio, and sfio is mis-configured, then it
4207 sometimes (apparently) runs and exits with a 0 status, but with no
4208 output!  It may have to do with sfio's use of _exit vs. exit.
4209
4210 EOQS
4211                                 rp="You have a big problem.  Shall I abort Configure"
4212                                 dflt=y
4213                                 ;;
4214                         esac
4215                         ;;
4216                 esac
4217         else
4218                 echo "The program compiled OK, but exited with status $?." >>try.msg
4219                 rp="You have a problem.  Shall I abort Configure"
4220                 dflt=y
4221         fi
4222 else
4223         echo "I can't compile the test program." >>try.msg
4224         rp="You have a BIG problem.  Shall I abort Configure"
4225         dflt=y
4226 fi
4227 case "$dflt" in
4228 y)
4229         $cat try.msg >&4
4230         case "$knowitall" in
4231         '')
4232                 echo "(The supplied flags or libraries might be incorrect.)"
4233                 ;;
4234         *) dflt=n;;
4235         esac
4236         echo " "
4237         . ./myread
4238         case "$ans" in
4239         n*|N*) ;;
4240         *)      echo "Ok.  Stopping Configure." >&4
4241                 exit 1
4242                 ;;
4243         esac
4244         ;;
4245 n) echo "OK, that should do.";;
4246 esac
4247 $rm -f try try.* core
4248
4249 : define an is-a-typedef? function
4250 typedef='type=$1; var=$2; def=$3; shift; shift; shift; inclist=$@;
4251 case "$inclist" in
4252 "") inclist="sys/types.h";;
4253 esac;
4254 eval "varval=\$$var";
4255 case "$varval" in
4256 "")
4257         $rm -f temp.c;
4258         for inc in $inclist; do
4259                 echo "#include <$inc>" >>temp.c;
4260         done;
4261         echo "#ifdef $type" >> temp.c;
4262         echo "printf(\"We have $type\");" >> temp.c;
4263         echo "#endif" >> temp.c;
4264         $cppstdin $cppflags $cppminus < temp.c >temp.E 2>/dev/null;
4265         if $contains $type temp.E >/dev/null 2>&1; then
4266                 eval "$var=\$type";
4267         else
4268                 eval "$var=\$def";
4269         fi;
4270         $rm -f temp.?;;
4271 *) eval "$var=\$varval";;
4272 esac'
4273
4274 : define an is-a-typedef? function that prompts if the type is not available.
4275 typedef_ask='type=$1; var=$2; def=$3; shift; shift; shift; inclist=$@;
4276 case "$inclist" in
4277 "") inclist="sys/types.h";;
4278 esac;
4279 eval "varval=\$$var";
4280 case "$varval" in
4281 "")
4282         $rm -f temp.c;
4283         for inc in $inclist; do
4284                 echo "#include <$inc>" >>temp.c;
4285         done;
4286         echo "#ifdef $type" >> temp.c;
4287         echo "printf(\"We have $type\");" >> temp.c;
4288         echo "#endif" >> temp.c;
4289         $cppstdin $cppflags $cppminus < temp.c >temp.E 2>/dev/null;
4290         echo " " ;
4291         echo "$rp" | $sed -e "s/What is/Looking for/" -e "s/?/./";
4292         if $contains $type temp.E >/dev/null 2>&1; then
4293                 echo "$type found." >&4;
4294                 eval "$var=\$type";
4295         else
4296                 echo "$type NOT found." >&4;
4297                 dflt="$def";
4298                 . ./myread ;
4299                 eval "$var=\$ans";
4300         fi;
4301         $rm -f temp.?;;
4302 *) eval "$var=\$varval";;
4303 esac'
4304
4305 : define a shorthand compile call
4306 compile='
4307 mc_file=$1;
4308 shift;
4309 $cc -o ${mc_file} $optimize $ccflags $ldflags $* ${mc_file}.c $libs > /dev/null 2>&1;'
4310 : define a shorthand compile call for compilations that should be ok.
4311 compile_ok='
4312 mc_file=$1;
4313 shift;
4314 $cc -o ${mc_file} $optimize $ccflags $ldflags $* ${mc_file}.c $libs;'
4315
4316 : check for lengths of integral types
4317 echo " "
4318 case "$intsize" in
4319 '')
4320         echo "Checking to see how big your integers are..." >&4
4321         $cat >intsize.c <<'EOCP'
4322 #include <stdio.h>
4323 int main()
4324 {
4325         printf("intsize=%d;\n", (int)sizeof(int));
4326         printf("longsize=%d;\n", (int)sizeof(long));
4327         printf("shortsize=%d;\n", (int)sizeof(short));
4328         exit(0);
4329 }
4330 EOCP
4331         set intsize
4332         if eval $compile_ok && ./intsize > /dev/null; then
4333                 eval `./intsize`
4334                 echo "Your integers are $intsize bytes long."
4335                 echo "Your long integers are $longsize bytes long."
4336                 echo "Your short integers are $shortsize bytes long."
4337         else
4338                 $cat >&4 <<EOM
4339 !
4340 Help! I can't compile and run the intsize test program: please enlighten me!
4341 (This is probably a misconfiguration in your system or libraries, and
4342 you really ought to fix it.  Still, I'll try anyway.)
4343 !
4344 EOM
4345                 dflt=4
4346                 rp="What is the size of an integer (in bytes)?"
4347                 . ./myread
4348                 intsize="$ans"
4349                 dflt=$intsize
4350                 rp="What is the size of a long integer (in bytes)?"
4351                 . ./myread
4352                 longsize="$ans"
4353                 dflt=2
4354                 rp="What is the size of a short integer (in bytes)?"
4355                 . ./myread
4356                 shortsize="$ans"
4357         fi
4358         ;;
4359 esac
4360 $rm -f intsize intsize.*
4361
4362 : see what type lseek is declared as in the kernel
4363 rp="What is the type used for lseek's offset on this system?"
4364 set off_t lseektype long stdio.h sys/types.h
4365 eval $typedef_ask
4366
4367 echo " "
4368 echo "Checking to see how big your file offsets are..." >&4
4369 $cat >try.c <<EOCP
4370 #include <sys/types.h>
4371 #include <stdio.h>
4372 int main()
4373 {
4374     printf("%d\n", (int)sizeof($lseektype));
4375     return(0); 
4376 }
4377 EOCP
4378 set try
4379 if eval $compile_ok; then
4380         lseeksize=`./try`
4381         echo "Your file offsets are $lseeksize bytes long."
4382 else
4383         dflt=$longsize
4384         echo " "
4385         echo "(I can't seem to compile the test program.  Guessing...)"
4386         rp="What is the size of your file offsets (in bytes)?"
4387         . ./myread
4388         lseeksize="$ans"
4389 fi
4390 $rm -f try.c try
4391
4392 : see what type file positions are declared as in the library
4393 rp="What is the type for file position used by fsetpos()?"
4394 set fpos_t fpostype long stdio.h sys/types.h
4395 eval $typedef_ask
4396
4397 echo " "
4398 case "$fpostype" in
4399 *_t) zzz="$fpostype"    ;;
4400 *)   zzz="fpos_t"       ;;
4401 esac
4402 echo "Checking the size of $zzz..." >&4 
4403 cat > try.c <<EOCP
4404 #include <sys/types.h>
4405 #include <stdio.h>
4406 int main() {
4407     printf("%d\n", (int)sizeof($fpostype));
4408     exit(0);
4409 }
4410 EOCP
4411 set try
4412 if eval $compile_ok; then
4413         yyy=`./try`
4414         case "$yyy" in
4415         '')     fpossize=4
4416                 echo "(I can't execute the test program--guessing $fpossize.)" >&4
4417                 ;;
4418         *)      fpossize=$yyy
4419                 echo "Your $zzz is $fpossize bytes long."
4420                 ;;
4421         esac
4422 else
4423         dflt="$longsize"
4424         echo " " >&4
4425         echo "(I can't compile the test program.  Guessing...)" >&4
4426         rp="What is the size of your file positions (in bytes)?"
4427         . ./myread
4428         fpossize="$ans"
4429 fi
4430
4431
4432
4433 # Backward compatibility (uselfs is deprecated).
4434 case "$uselfs" in
4435 "$define"|true|[yY]*)
4436         cat <<EOM >&4
4437
4438 *** Configure -Duselfs is deprecated, using -Duselargefiles instead.
4439 EOM
4440         uselargefiles="$define"
4441         ;;
4442 esac                          
4443
4444 case "$lseeksize:$fpossize" in
4445 8:8) cat <<EOM
4446
4447 You can have files larger than 2 gigabytes.
4448 EOM
4449    val="$define" ;;
4450 *)    case "$uselargefiles" in
4451    "$undef"|false|[nN]*) dflt='n' ;;
4452    *)   dflt='y' ;;
4453    esac
4454    cat <<EOM
4455
4456 Perl can be built to understand large files (files larger than 2 gigabytes)
4457 on some systems.  To do so, Configure can be run with -Duselargefiles.
4458
4459 If this doesn't make any sense to you, just accept the default '$dflt'.
4460 EOM
4461    rp='Try to understand large files, if available?'
4462    . ./myread
4463    case "$ans" in
4464    y|Y)         val="$define" ;;
4465    *)           val="$undef"  ;;
4466    esac
4467    ;;
4468 esac
4469 set uselargefiles
4470 eval $setvar
4471 case "$uselargefiles" in
4472 "$define")
4473 : Look for a hint-file generated 'call-back-unit'.  If the
4474 : user has specified that a large files perl is to be built,
4475 : we may need to set or change some other defaults.
4476         if $test -f uselargefiles.cbu; then
4477                 echo "Your platform has some specific hints for large file builds, using them..."
4478                 . ./uselargefiles.cbu
4479                 echo " "
4480                 echo "Rechecking to see how big your file offsets are..." >&4
4481                 $cat >try.c <<EOCP
4482 #include <sys/types.h>
4483 #include <stdio.h>
4484 int main()
4485 {
4486     printf("%d\n", (int)sizeof($lseektype));
4487     return(0); 
4488 }
4489 EOCP
4490                 set try
4491                 if eval $compile_ok; then
4492                         lseeksize=`./try`
4493                         $echo "Your file offsets are now $lseeksize bytes long."
4494                 else
4495                         dflt="$lseeksize"
4496                         echo " "
4497                         echo "(I can't seem to compile the test program.  Guessing...)"
4498                         rp="What is the size of your file offsets (in bytes)?"
4499                         . ./myread
4500                         lseeksize="$ans"
4501                 fi
4502                 case "$fpostype" in
4503                 *_t) zzz="$fpostype"    ;;
4504                 *)   zzz="fpos_t"       ;;
4505                 esac
4506                 $echo $n "Rechecking the size of $zzz...$c" >&4 
4507                 $cat > try.c <<EOCP
4508 #include <sys/types.h>
4509 #include <stdio.h>
4510 int main() {
4511     printf("%d\n", (int)sizeof($fpostype));
4512     exit(0);
4513 }
4514 EOCP
4515                 set try
4516                 if eval $compile_ok; then
4517                         yyy=`./try`
4518                         dflt="$lseeksize"
4519                         case "$yyy" in
4520                         '')     echo " "
4521                                 echo "(I can't execute the test program--guessing $fpossize.)" >&4
4522                                 ;;
4523                         *)      fpossize=$yyy
4524                                 echo " $fpossize bytes." >&4
4525                                 ;;
4526                         esac
4527                 else
4528                         dflt="$fpossize"
4529                         echo " "
4530                         echo "(I can't compile the test program.  Guessing...)" >&4
4531                         rp="What is the size of your file positions (in bytes)?"
4532                         . ./myread
4533                         fpossize="$ans"
4534                 fi
4535                 $rm -f try.c try
4536         fi
4537         ;;
4538 esac
4539
4540
4541 case "$usemorebits" in
4542 "$define"|true|[yY]*)
4543         use64bitint="$define"
4544         uselongdouble="$define"
4545         usemorebits="$define"
4546         ;;
4547 *)      usemorebits="$undef"
4548         ;;
4549 esac
4550
4551 : check for void type
4552 echo " "
4553 echo "Checking to see how well your C compiler groks the void type..." >&4
4554 case "$voidflags" in
4555 '')
4556         $cat >try.c <<'EOCP'
4557 #if TRY & 1
4558 void sub() {
4559 #else
4560 sub() {
4561 #endif
4562         extern void moo();      /* function returning void */
4563         void (*goo)();          /* ptr to func returning void */
4564 #if TRY & 8
4565         void *hue;              /* generic ptr */
4566 #endif
4567 #if TRY & 2
4568         void (*foo[10])();
4569 #endif
4570
4571 #if TRY & 4
4572         if(goo == moo) {
4573                 exit(0);
4574         }
4575 #endif
4576         exit(0);
4577 }
4578 int main() { sub(); }
4579 EOCP
4580         if $cc $ccflags -c -DTRY=$defvoidused try.c >.out 2>&1 ; then
4581                 voidflags=$defvoidused
4582         echo "Good.  It appears to support void to the level $package wants.">&4
4583                 if $contains warning .out >/dev/null 2>&1; then
4584                         echo "However, you might get some warnings that look like this:"
4585                         $cat .out
4586                 fi
4587         else
4588 echo "Hmm, your compiler has some difficulty with void. Checking further..." >&4
4589                 if $cc $ccflags -c -DTRY=1 try.c >/dev/null 2>&1; then
4590                         echo "It supports 1..."
4591                         if $cc $ccflags -c -DTRY=3 try.c >/dev/null 2>&1; then
4592                                 echo "It also supports 2..."
4593                                 if $cc $ccflags -c -DTRY=7 try.c >/dev/null 2>&1; then
4594                                         voidflags=7
4595                                         echo "And it supports 4 but not 8 definitely."
4596                                 else
4597                                         echo "It doesn't support 4..."
4598                                         if $cc $ccflags -c -DTRY=11 try.c >/dev/null 2>&1; then
4599                                                 voidflags=11
4600                                                 echo "But it supports 8."
4601                                         else
4602                                                 voidflags=3
4603                                                 echo "Neither does it support 8."
4604                                         fi
4605                                 fi
4606                         else
4607                                 echo "It does not support 2..."
4608                                 if $cc $ccflags -c -DTRY=13 try.c >/dev/null 2>&1; then
4609                                         voidflags=13
4610                                         echo "But it supports 4 and 8."
4611                                 else
4612                                         if $cc $ccflags -c -DTRY=5 try.c >/dev/null 2>&1; then
4613                                                 voidflags=5
4614                                                 echo "And it supports 4 but has not heard about 8."
4615                                         else
4616                                                 echo "However it supports 8 but not 4."
4617                                         fi
4618                                 fi
4619                         fi
4620                 else
4621                         echo "There is no support at all for void."
4622                         voidflags=0
4623                 fi
4624         fi
4625 esac
4626 case "$voidflags" in
4627 "$defvoidused") ;;
4628 *)      $cat >&4 <<'EOM'
4629   Support flag bits are:
4630     1: basic void declarations.
4631     2: arrays of pointers to functions returning void.
4632     4: operations between pointers to and addresses of void functions.
4633     8: generic void pointers.
4634 EOM
4635         dflt="$voidflags";
4636         rp="Your void support flags add up to what?"
4637         . ./myread
4638         voidflags="$ans"
4639         ;;
4640 esac
4641 $rm -f try.* .out
4642
4643 : check for length of pointer
4644 echo " "
4645 case "$ptrsize" in
4646 '')
4647         echo "Checking to see how big your pointers are..." >&4
4648         if test "$voidflags" -gt 7; then
4649                 echo '#define VOID_PTR char *' > try.c
4650         else
4651                 echo '#define VOID_PTR void *' > try.c
4652         fi
4653         $cat >>try.c <<'EOCP'
4654 #include <stdio.h>
4655 int main()
4656 {
4657     printf("%d\n", (int)sizeof(VOID_PTR));
4658     exit(0);
4659 }
4660 EOCP
4661         set try
4662         if eval $compile_ok; then
4663                 ptrsize=`./try`
4664                 echo "Your pointers are $ptrsize bytes long."
4665         else
4666                 dflt='4'
4667                 echo "(I can't seem to compile the test program.  Guessing...)" >&4
4668                 rp="What is the size of a pointer (in bytes)?"
4669                 . ./myread
4670                 ptrsize="$ans"
4671         fi
4672         ;;
4673 esac
4674 $rm -f try.c try
4675
4676 : check for long long
4677 echo " "
4678 echo "Checking to see if you have long long..." >&4
4679 echo 'int main() { long long x = 7; return 0; }' > try.c
4680 set try
4681 if eval $compile; then
4682         val="$define"
4683         echo "You have long long."
4684 else
4685         val="$undef"
4686         echo "You do not have long long."
4687 fi
4688 $rm try.*
4689 set d_longlong
4690 eval $setvar
4691
4692 : check for length of long long
4693 case "${d_longlong}${longlongsize}" in
4694 $define)
4695         echo " "
4696         echo "Checking to see how big your long longs are..." >&4
4697         $cat >try.c <<'EOCP'
4698 #include <stdio.h>
4699 int main()
4700 {
4701     printf("%d\n", (int)sizeof(long long));
4702     return(0);
4703 }
4704 EOCP
4705         set try
4706         if eval $compile_ok; then
4707                 longlongsize=`./try$exe_ext`
4708                 echo "Your long longs are $longlongsize bytes long."
4709         else
4710                 dflt='8'
4711                 echo " "
4712                 echo "(I can't seem to compile the test program.  Guessing...)"
4713                 rp="What is the size of a long long (in bytes)?"
4714                 . ./myread
4715                 longlongsize="$ans"
4716         fi
4717         if $test "X$longsize" = "X$longlongsize"; then
4718                 echo "(That isn't any different from an ordinary long.)"
4719         fi      
4720         ;;
4721 esac
4722 $rm -f try.* try
4723
4724 : determine filename position in cpp output
4725 echo " "
4726 echo "Computing filename position in cpp output for #include directives..." >&4
4727 echo '#include <stdio.h>' > foo.c
4728 $cat >fieldn <<EOF
4729 $startsh
4730 $cppstdin $cppflags $cppminus <foo.c 2>/dev/null | \
4731 $grep '^[       ]*#.*stdio\.h' | \
4732 while read cline; do
4733         pos=1
4734         set \$cline
4735         while $test \$# -gt 0; do
4736                 if $test -r \`echo \$1 | $tr -d '"'\`; then
4737                         echo "\$pos"
4738                         exit 0
4739                 fi
4740                 shift
4741                 pos=\`expr \$pos + 1\`
4742         done
4743 done
4744 EOF
4745 chmod +x fieldn
4746 fieldn=`./fieldn`
4747 $rm -f foo.c fieldn
4748 case $fieldn in
4749 '') pos='???';;
4750 1) pos=first;;
4751 2) pos=second;;
4752 3) pos=third;;
4753 *) pos="${fieldn}th";;
4754 esac
4755 echo "Your cpp writes the filename in the $pos field of the line."
4756
4757 : locate header file
4758 $cat >findhdr <<EOF
4759 $startsh
4760 wanted=\$1
4761 name=''
4762 for usrincdir in $usrinc
4763 do
4764         if test -f \$usrincdir/\$wanted; then
4765                 echo "\$usrincdir/\$wanted"
4766                 exit 0
4767         fi
4768 done
4769 awkprg='{ print \$$fieldn }'
4770 echo "#include <\$wanted>" > foo\$\$.c
4771 $cppstdin $cppminus $cppflags < foo\$\$.c 2>/dev/null | \
4772 $grep "^[       ]*#.*\$wanted" | \
4773 while read cline; do
4774         name=\`echo \$cline | $awk "\$awkprg" | $tr -d '"'\`
4775         case "\$name" in
4776         *[/\\\\]\$wanted) echo "\$name"; exit 1;;
4777         *[\\\\/]\$wanted) echo "\$name"; exit 1;;
4778         *) exit 2;;
4779         esac;
4780 done;
4781 #
4782 # status = 0: grep returned 0 lines, case statement not executed
4783 # status = 1: headerfile found
4784 # status = 2: while loop executed, no headerfile found
4785 #
4786 status=\$?
4787 $rm -f foo\$\$.c;
4788 if test \$status -eq 1; then
4789         exit 0;
4790 fi
4791 exit 1
4792 EOF
4793 chmod +x findhdr
4794
4795 : define an alternate in-header-list? function
4796 inhdr='echo " "; td=$define; tu=$undef; yyy=$@;
4797 cont=true; xxf="echo \"<\$1> found.\" >&4";
4798 case $# in 2) xxnf="echo \"<\$1> NOT found.\" >&4";;
4799 *) xxnf="echo \"<\$1> NOT found, ...\" >&4";;
4800 esac;
4801 case $# in 4) instead=instead;; *) instead="at last";; esac;
4802 while $test "$cont"; do
4803         xxx=`./findhdr $1`
4804         var=$2; eval "was=\$$2";
4805         if $test "$xxx" && $test -r "$xxx";
4806         then eval $xxf;
4807         eval "case \"\$$var\" in $undef) . ./whoa; esac"; eval "$var=\$td";
4808                 cont="";
4809         else eval $xxnf;
4810         eval "case \"\$$var\" in $define) . ./whoa; esac"; eval "$var=\$tu"; fi;
4811         set $yyy; shift; shift; yyy=$@;
4812         case $# in 0) cont="";;
4813         2) xxf="echo \"but I found <\$1> $instead.\" >&4";
4814                 xxnf="echo \"and I did not find <\$1> either.\" >&4";;
4815         *) xxf="echo \"but I found <\$1\> instead.\" >&4";
4816                 xxnf="echo \"there is no <\$1>, ...\" >&4";;
4817         esac;
4818 done;
4819 while $test "$yyy";
4820 do set $yyy; var=$2; eval "was=\$$2";
4821         eval "case \"\$$var\" in $define) . ./whoa; esac"; eval "$var=\$tu";
4822         set $yyy; shift; shift; yyy=$@;
4823 done'
4824
4825 : see if inttypes.h is available
4826 : we want a real compile instead of Inhdr because some systems
4827 : have an inttypes.h which includes non-existent headers
4828 echo " "
4829 $cat >try.c <<EOCP
4830 #include <inttypes.h>
4831 int main() {
4832         static int32_t foo32 = 0x12345678;
4833 }
4834 EOCP
4835 set try
4836 if eval $compile; then
4837         echo "<inttypes.h> found." >&4
4838         val="$define"
4839 else
4840         echo "<inttypes.h> NOT found." >&4
4841         val="$undef"
4842 fi
4843 $rm -f try.c try
4844 set i_inttypes
4845 eval $setvar
4846
4847 : check for int64_t
4848 echo " "
4849 echo "Checking to see if you have int64_t..." >&4
4850 $cat >try.c <<EOCP
4851 #include <sys/types.h>
4852 #$i_inttypes I_INTTYPES
4853 #ifdef I_INTTYPES
4854 #include <inttypes.h>
4855 #endif
4856 int main() { int64_t x = 7; }
4857 EOCP
4858 set try
4859 if eval $compile; then
4860         val="$define"
4861         echo "You have int64_t."
4862 else
4863         val="$undef"
4864         echo "You do not have int64_t."
4865 fi
4866 $rm -f try try.*
4867 set d_int64_t
4868 eval $setvar
4869
4870
4871 echo " "
4872 echo "Checking which 64-bit integer type we could use..." >&4
4873
4874 case "$intsize" in
4875 8) val=int
4876    set quadtype
4877    eval $setvar
4878    val='"unsigned int"'
4879    set uquadtype
4880    eval $setvar
4881    quadkind=1
4882    ;;
4883 *) case "$longsize" in
4884    8) val=long
4885       set quadtype
4886       eval $setvar
4887       val='"unsigned long"'
4888       set uquadtype
4889       eval $setvar
4890       quadkind=2
4891       ;;
4892    *) case "$d_longlong:$longlongsize" in
4893       define:8)
4894         val='"long long"'
4895         set quadtype
4896         eval $setvar
4897         val='"unsigned long long"'
4898         set uquadtype
4899         eval $setvar
4900         quadkind=3
4901         ;;
4902       *) case "$d_int64_t" in
4903          define)
4904            val=int64_t
4905            set quadtype
4906            eval $setvar
4907            val=uint64_t
4908            set uquadtype
4909            eval $setvar
4910            quadkind=4
4911            ;;
4912          esac
4913          ;;
4914       esac
4915       ;;
4916    esac
4917    ;;
4918 esac
4919
4920 case "$quadtype" in
4921 '')     echo "Alas, no 64-bit integer types in sight." >&4
4922         d_quad="$undef"
4923         ;;
4924 *)      echo "We could use '$quadtype' for 64-bit integers." >&4
4925         d_quad="$define"
4926         ;;
4927 esac
4928
4929
4930 case "$uselonglong" in
4931 "$define"|true|[yY]*)
4932         cat <<EOM >&4
4933
4934 *** Configure -Duselonglong is deprecated, using -Duse64bitint instead.
4935 EOM
4936         use64bitint="$define"
4937         ;;
4938 esac                          
4939 case "$use64bits" in
4940 "$define"|true|[yY]*)
4941         cat <<EOM >&4
4942
4943 *** Configure -Duse64bits is deprecated, using -Duse64bitint instead.
4944 EOM
4945         use64bitint="$define"
4946         ;;
4947 esac                          
4948 case "$use64bitints" in
4949 "$define"|true|[yY]*)
4950         cat <<EOM >&4
4951
4952 *** There is no Configure -Duse64bitints, using -Duse64bitint instead.
4953 EOM
4954         use64bitint="$define"
4955         ;;
4956 esac                          
4957 case "$use64bitsint" in
4958 "$define"|true|[yY]*)
4959         cat <<EOM >&4
4960
4961 *** There is no Configure -Duse64bitsint, using -Duse64bitint instead.
4962 EOM
4963         use64bitint="$define"
4964         ;;
4965 esac                          
4966 case "$uselonglongs" in
4967 "$define"|true|[yY]*)
4968         cat <<EOM >&4
4969
4970 *** There is no Configure -Duselonglongs, using -Duse64bitint instead.
4971 EOM
4972         use64bitint="$define"
4973         ;;
4974 esac                          
4975 case "$use64bitsall" in
4976 "$define"|true|[yY]*)
4977         cat <<EOM >&4
4978
4979 *** There is no Configure -Duse64bitsall, using -Duse64bitall instead.
4980 EOM
4981         use64bitall="$define"
4982         ;;
4983 esac                          
4984
4985 case "$ccflags" in
4986 *-DUSE_LONG_LONG*|*-DUSE_64_BIT_INT*|*-DUSE_64_BIT_ALL*) use64bitint="$define";;
4987 esac
4988 case "$use64bitall" in
4989 "$define"|true|[yY]*) use64bitint="$define" ;;
4990 esac
4991
4992 case "$longsize" in
4993 8) cat <<EOM
4994
4995 You have natively 64-bit long integers.
4996 EOM
4997    val="$define"
4998    ;;
4999 *) case "$use64bitint" in
5000    "$define"|true|[yY]*) dflt='y';;
5001    *) dflt='n';;
5002    esac
5003    case "$d_quad" in
5004    "$define") ;;
5005    *) dflt='n' ;;
5006    esac
5007    cat <<EOM
5008
5009 Perl can be built to take advantage of 64-bit integer types
5010 on some systems.  To do so, Configure can be run with -Duse64bitint.
5011 Choosing this option will most probably introduce binary incompatibilities.
5012
5013 If this doesn't make any sense to you, just accept the default '$dflt'.
5014 (The default has been chosen based on your configuration.)
5015 EOM
5016    rp='Try to use 64-bit integers, if available?'
5017    . ./myread
5018    case "$ans" in
5019    [yY]*) val="$define" ;;
5020    *)     val="$undef"  ;;
5021    esac
5022    ;;
5023 esac
5024 set use64bitint
5025 eval $setvar
5026
5027 case "$use64bitall" in
5028 "$define"|true|[yY]*) dflt='y' ;;
5029 *) case "$longsize" in
5030    8) dflt='y' ;;
5031    *) dflt='n' ;;
5032    esac
5033    ;;
5034 esac    
5035 cat <<EOM
5036
5037 You may also choose to try maximal 64-bitness.  It means using as much
5038 64-bitness as possible on the platform.  This in turn means even more
5039 binary incompatibilities.  On the other hand, your platform may not
5040 have any more 64-bitness available than what you already have chosen.
5041
5042 If this doesn't make any sense to you, just accept the default '$dflt'.
5043 (The default has been chosen based on your configuration.)
5044 EOM
5045 rp='Try to use maximal 64-bit support, if available?'
5046 . ./myread
5047 case "$ans" in
5048 [yY]*) val="$define" ;;
5049 *)     val="$undef"  ;;
5050 esac
5051 set use64bitall
5052 eval $setvar
5053 case "$use64bitall" in
5054 "$define")
5055         case "$use64bitint" in
5056         "$undef")
5057                 cat <<EOM
5058
5059 Since you have chosen a maximally 64-bit build, I'm also turning on
5060 the use of 64-bit integers.
5061 EOM
5062                 use64bitint="$define" ;;
5063         esac
5064         ;;
5065 esac
5066
5067 case "$use64bitall" in
5068 "$define"|true|[yY]*)
5069         case "$ptrsize" in
5070         4)      cat <<EOM >&4
5071
5072 *** You have chosen a maximally 64-bit build, but your pointers
5073 *** are only 4 bytes wide, disabling maximal 64-bitness.
5074
5075 EOM
5076                 use64bitall="$undef"
5077                 case "$use64bitint" in
5078                 "$define"|true|[yY]*) ;;
5079                 *)      cat <<EOM >&4
5080
5081 *** Downgrading from maximal 64-bitness to using 64-bit integers.
5082
5083 EOM
5084                         use64bitint="$define"
5085                         ;;
5086                 esac
5087                 ;;
5088         esac
5089         ;;
5090 esac
5091
5092 case "$use64bitint" in
5093 "$define"|true|[yY]*)
5094 : Look for a hint-file generated 'call-back-unit'.  If the
5095 : user has specified that a 64-bit perl is to be built,
5096 : we may need to set or change some other defaults.
5097         if $test -f use64bitint.cbu; then
5098                 echo "Your platform has some specific hints for 64-bit integers, using them..."
5099                 . ./use64bitint.cbu
5100         fi
5101         case "$longsize" in
5102         4) case "$archname64" in
5103            '') archname64=64int ;;
5104            esac
5105            ;;
5106         esac
5107         ;;
5108 esac
5109
5110 case "$use64bitall" in
5111 "$define"|true|[yY]*)
5112 : Look for a hint-file generated 'call-back-unit'.  If the
5113 : user has specified that a maximally 64-bit perl is to be built,
5114 : we may need to set or change some other defaults.
5115         if $test -f use64bitall.cbu; then
5116                 echo "Your platform has some specific hints for 64-bit builds, using them..."
5117                 . ./use64bitall.cbu
5118         fi
5119         case "$longsize" in
5120         4) case "$archname64" in
5121            ''|64int) archname64=64all ;;
5122            esac
5123            ;;
5124         esac
5125         ;;
5126 esac
5127
5128 echo " "
5129 echo "Checking for GNU C Library..." >&4
5130 cat >gnulibc.c <<EOM
5131 #include <stdio.h>
5132 int main()
5133 {
5134 #ifdef __GLIBC__
5135     exit(0);
5136 #else
5137     exit(1);
5138 #endif
5139 }
5140 EOM
5141 set gnulibc
5142 if eval $compile_ok && ./gnulibc; then
5143         val="$define"
5144         echo "You are using the GNU C Library"
5145 else
5146         val="$undef"
5147         echo "You are not using the GNU C Library"
5148 fi
5149 $rm -f gnulibc*
5150 set d_gnulibc
5151 eval $setvar
5152
5153 : see if nm is to be used to determine whether a symbol is defined or not
5154 case "$usenm" in
5155 '')
5156         dflt=''
5157         case "$d_gnulibc" in
5158         "$define")
5159                 echo " "
5160                 echo "nm probably won't work on the GNU C Library." >&4
5161                 dflt=n
5162                 ;;
5163         esac
5164         case "$dflt" in
5165         '') 
5166                 if $test "$osname" = aix -a ! -f /lib/syscalls.exp; then
5167                         echo " "
5168                         echo "Whoops!  This is an AIX system without /lib/syscalls.exp!" >&4
5169                         echo "'nm' won't be sufficient on this sytem." >&4
5170                         dflt=n
5171                 fi
5172                 ;;
5173         esac
5174         case "$dflt" in
5175         '') dflt=`$egrep 'inlibc|csym' $rsrc/Configure | wc -l 2>/dev/null`
5176                 if $test $dflt -gt 20; then
5177                         dflt=y
5178                 else
5179                         dflt=n
5180                 fi
5181                 ;;
5182         esac
5183         ;;
5184 *)
5185         case "$usenm" in
5186         true|$define) dflt=y;;
5187         *) dflt=n;;
5188         esac
5189         ;;
5190 esac
5191 $cat <<EOM
5192
5193 I can use $nm to extract the symbols from your C libraries. This
5194 is a time consuming task which may generate huge output on the disk (up
5195 to 3 megabytes) but that should make the symbols extraction faster. The
5196 alternative is to skip the 'nm' extraction part and to compile a small
5197 test program instead to determine whether each symbol is present. If
5198 you have a fast C compiler and/or if your 'nm' output cannot be parsed,
5199 this may be the best solution.
5200
5201 You probably shouldn't let me use 'nm' if you are using the GNU C Library.
5202
5203 EOM
5204 rp="Shall I use $nm to extract C symbols from the libraries?"
5205 . ./myread
5206 case "$ans" in
5207 [Nn]*) usenm=false;;
5208 *) usenm=true;;
5209 esac
5210
5211 runnm=$usenm
5212 case "$reuseval" in
5213 true) runnm=false;;
5214 esac
5215
5216 : nm options which may be necessary
5217 case "$nm_opt" in
5218 '') if $test -f /mach_boot; then
5219                 nm_opt=''       # Mach
5220         elif $test -d /usr/ccs/lib; then
5221                 nm_opt='-p'     # Solaris (and SunOS?)
5222         elif $test -f /dgux; then
5223                 nm_opt='-p'     # DG-UX
5224         elif $test -f /lib64/rld; then
5225                 nm_opt='-p'     # 64-bit Irix
5226         else
5227                 nm_opt=''
5228         fi;;
5229 esac
5230
5231 : nm options which may be necessary for shared libraries but illegal
5232 : for archive libraries.  Thank you, Linux.
5233 case "$nm_so_opt" in
5234 '')     case "$myuname" in
5235         *linux*)
5236                 if $nm --help | $grep 'dynamic' > /dev/null 2>&1; then
5237                         nm_so_opt='--dynamic'
5238                 fi
5239                 ;;
5240         esac
5241         ;;
5242 esac
5243
5244 case "$runnm" in
5245 true)
5246 : get list of predefined functions in a handy place
5247 echo " "
5248 case "$libc" in
5249 '') libc=unknown
5250         case "$libs" in
5251         *-lc_s*) libc=`./loc libc_s$_a $libc $libpth`
5252         esac
5253         ;;
5254 esac
5255 libnames='';
5256 case "$libs" in
5257 '') ;;
5258 *)  for thislib in $libs; do
5259         case "$thislib" in
5260         -lc|-lc_s)
5261                 : Handle C library specially below.
5262                 ;;
5263         -l*)
5264                 thislib=`echo $thislib | $sed -e 's/^-l//'`
5265                 if try=`./loc lib$thislib.$so.'*' X $libpth`; $test -f "$try"; then
5266                         :
5267                 elif try=`./loc lib$thislib.$so X $libpth`; $test -f "$try"; then
5268                         :
5269                 elif try=`./loc lib$thislib$_a X $libpth`; $test -f "$try"; then
5270                         :
5271                 elif try=`./loc $thislib$_a X $libpth`; $test -f "$try"; then
5272                         :
5273                 elif try=`./loc lib$thislib X $libpth`; $test -f "$try"; then
5274                         :
5275                 elif try=`./loc $thislib X $libpth`; $test -f "$try"; then
5276                         :
5277                 elif try=`./loc Slib$thislib$_a X $xlibpth`; $test -f "$try"; then
5278                         :
5279                 else
5280                         try=''
5281                 fi
5282                 libnames="$libnames $try"
5283                 ;;
5284         *) libnames="$libnames $thislib" ;;
5285         esac
5286         done
5287         ;;
5288 esac
5289 xxx=normal
5290 case "$libc" in
5291 unknown)
5292         set /lib/libc.$so
5293         for xxx in $libpth; do
5294                 $test -r $1 || set $xxx/libc.$so
5295                 : The messy sed command sorts on library version numbers.
5296                 $test -r $1 || \
5297                         set `echo blurfl; echo $xxx/libc.$so.[0-9]* | \
5298                         tr ' ' $trnl | egrep -v '\.[A-Za-z]*$' | $sed -e '
5299                                 h
5300                                 s/[0-9][0-9]*/0000&/g
5301                                 s/0*\([0-9][0-9][0-9][0-9][0-9]\)/\1/g
5302                                 G
5303                                 s/\n/ /' | \
5304                          $sort | $sed -e 's/^.* //'`
5305                 eval set \$$#
5306         done
5307         $test -r $1 || set /usr/ccs/lib/libc.$so
5308         $test -r $1 || set /lib/libsys_s$_a
5309         ;;
5310 *)
5311         set blurfl
5312         ;;
5313 esac
5314 if $test -r "$1"; then
5315         echo "Your (shared) C library seems to be in $1."
5316         libc="$1"
5317 elif $test -r /lib/libc && $test -r /lib/clib; then
5318         echo "Your C library seems to be in both /lib/clib and /lib/libc."
5319         xxx=apollo
5320         libc='/lib/clib /lib/libc'
5321         if $test -r /lib/syslib; then
5322                 echo "(Your math library is in /lib/syslib.)"
5323                 libc="$libc /lib/syslib"
5324         fi
5325 elif $test -r "$libc" || (test -h "$libc") >/dev/null 2>&1; then
5326         echo "Your C library seems to be in $libc, as you said before."
5327 elif $test -r $incpath/usr/lib/libc$_a; then
5328         libc=$incpath/usr/lib/libc$_a;
5329         echo "Your C library seems to be in $libc.  That's fine."
5330 elif $test -r /lib/libc$_a; then
5331         libc=/lib/libc$_a;
5332         echo "Your C library seems to be in $libc.  You're normal."
5333 else
5334         if tans=`./loc libc$_a blurfl/dyick $libpth`; $test -r "$tans"; then
5335                 :
5336         elif tans=`./loc libc blurfl/dyick $libpth`; $test -r "$tans"; then
5337                 libnames="$libnames "`./loc clib blurfl/dyick $libpth`
5338         elif tans=`./loc clib blurfl/dyick $libpth`; $test -r "$tans"; then
5339                 :
5340         elif tans=`./loc Slibc$_a blurfl/dyick $xlibpth`; $test -r "$tans"; then
5341                 :
5342         elif tans=`./loc Mlibc$_a blurfl/dyick $xlibpth`; $test -r "$tans"; then
5343                 :
5344         else
5345                 tans=`./loc Llibc$_a blurfl/dyick $xlibpth`
5346         fi
5347         if $test -r "$tans"; then
5348                 echo "Your C library seems to be in $tans, of all places."
5349                 libc=$tans
5350         else
5351                 libc='blurfl'
5352         fi
5353 fi
5354 if $test $xxx = apollo -o -r "$libc" || (test -h "$libc") >/dev/null 2>&1; then
5355         dflt="$libc"
5356         cat <<EOM
5357
5358 If the guess above is wrong (which it might be if you're using a strange
5359 compiler, or your machine supports multiple models), you can override it here.
5360
5361 EOM
5362 else
5363         dflt=''
5364         echo $libpth | $tr ' ' $trnl | $sort | $uniq > libpath
5365         cat >&4 <<EOM
5366 I can't seem to find your C library.  I've looked in the following places:
5367
5368 EOM
5369         $sed 's/^/      /' libpath
5370         cat <<EOM
5371
5372 None of these seems to contain your C library. I need to get its name...
5373
5374 EOM
5375 fi
5376 fn=f
5377 rp='Where is your C library?'
5378 . ./getfile
5379 libc="$ans"
5380
5381 echo " "
5382 echo $libc $libnames | $tr ' ' $trnl | $sort | $uniq > libnames
5383 set X `cat libnames`
5384 shift
5385 xxx=files
5386 case $# in 1) xxx=file; esac
5387 echo "Extracting names from the following $xxx for later perusal:" >&4
5388 echo " "
5389 $sed 's/^/      /' libnames >&4
5390 echo " "
5391 $echo $n "This may take a while...$c" >&4
5392
5393 for file in $*; do
5394         case $file in
5395         *$so*) $nm $nm_so_opt $nm_opt $file 2>/dev/null;;
5396         *) $nm $nm_opt $file 2>/dev/null;;
5397         esac
5398 done >libc.tmp
5399
5400 $echo $n ".$c"
5401 $grep fprintf libc.tmp > libc.ptf
5402 xscan='eval "<libc.ptf $com >libc.list"; $echo $n ".$c" >&4'
5403 xrun='eval "<libc.tmp $com >libc.list"; echo "done" >&4'
5404 xxx='[ADTSIW]'
5405 if com="$sed -n -e 's/__IO//' -e 's/^.* $xxx  *_[_.]*//p' -e 's/^.* $xxx  *//p'";\
5406         eval $xscan;\
5407         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5408                 eval $xrun
5409 elif com="$sed -n -e 's/^__*//' -e 's/^\([a-zA-Z_0-9$]*\).*xtern.*/\1/p'";\
5410         eval $xscan;\
5411         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5412                 eval $xrun
5413 elif com="$sed -n -e '/|UNDEF/d' -e '/FUNC..GL/s/^.*|__*//p'";\
5414         eval $xscan;\
5415         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5416                 eval $xrun
5417 elif com="$sed -n -e 's/^.* D __*//p' -e 's/^.* D //p'";\
5418         eval $xscan;\
5419         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5420                 eval $xrun
5421 elif com="$sed -n -e 's/^_//' -e 's/^\([a-zA-Z_0-9]*\).*xtern.*text.*/\1/p'";\
5422         eval $xscan;\
5423         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5424                 eval $xrun
5425 elif com="$sed -n -e 's/^.*|FUNC |GLOB .*|//p'";\
5426         eval $xscan;\
5427         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5428                 eval $xrun
5429 elif com="$grep '|' | $sed -n -e '/|COMMON/d' -e '/|DATA/d' \
5430                                 -e '/ file/d' -e 's/^\([^       ]*\).*/\1/p'";\
5431         eval $xscan;\
5432         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5433                 eval $xrun
5434 elif com="$sed -n -e 's/^.*|FUNC |GLOB .*|//p' -e 's/^.*|FUNC |WEAK .*|//p'";\
5435         eval $xscan;\
5436         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5437                 eval $xrun
5438 elif com="$sed -n -e 's/^__//' -e '/|Undef/d' -e '/|Proc/s/ .*//p'";\
5439         eval $xscan;\
5440         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5441                 eval $xrun
5442 elif com="$sed -n -e 's/^.*|Proc .*|Text *| *//p'";\
5443         eval $xscan;\
5444         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5445                 eval $xrun
5446 elif com="$sed -n -e '/Def. Text/s/.* \([^ ]*\)\$/\1/p'";\
5447         eval $xscan;\
5448         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5449                 eval $xrun
5450 elif com="$sed -n -e 's/^[-0-9a-f ]*_\(.*\)=.*/\1/p'";\
5451         eval $xscan;\
5452         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5453                 eval $xrun
5454 elif com="$sed -n -e 's/.*\.text n\ \ \ \.//p'";\
5455         eval $xscan;\
5456         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5457                 eval $xrun
5458 elif com="sed -n -e 's/^__.*//' -e 's/[       ]*D[    ]*[0-9]*.*//p'";\
5459         eval $xscan;\
5460         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5461                 eval $xrun
5462 else
5463         $nm -p $* 2>/dev/null >libc.tmp
5464         $grep fprintf libc.tmp > libc.ptf
5465         if com="$sed -n -e 's/^.* [ADTSIW]  *_[_.]*//p' -e 's/^.* [ADTSIW] //p'";\
5466                 eval $xscan; $contains '^fprintf$' libc.list >/dev/null 2>&1
5467         then
5468                 nm_opt='-p'
5469                 eval $xrun
5470         else
5471                 echo " "
5472                 echo "$nm didn't seem to work right. Trying $ar instead..." >&4
5473                 com=''
5474                 if $ar t $libc > libc.tmp && $contains '^fprintf$' libc.tmp >/dev/null 2>&1; then
5475                         for thisname in $libnames $libc; do
5476                                 $ar t $thisname >>libc.tmp
5477                         done
5478                         $sed -e "s/\\$_o\$//" < libc.tmp > libc.list
5479                         echo "Ok." >&4
5480                 elif test "X$osname" = "Xos2" && $ar tv $libc > libc.tmp; then
5481                         # Repeat libc to extract forwarders to DLL entries too
5482                         for thisname in $libnames $libc; do
5483                                 $ar tv $thisname >>libc.tmp
5484                                 # Revision 50 of EMX has bug in $ar.
5485                                 # it will not extract forwarders to DLL entries
5486                                 # Use emximp which will extract exactly them.
5487                                 emximp -o tmp.imp $thisname \
5488                                     2>/dev/null && \
5489                                     $sed -e 's/^\([_a-zA-Z0-9]*\) .*$/\1/p' \
5490                                     < tmp.imp >>libc.tmp
5491                                 $rm tmp.imp
5492                         done
5493                         $sed -e "s/\\$_o\$//" -e 's/^ \+//' < libc.tmp > libc.list
5494                         echo "Ok." >&4
5495                 else
5496                         echo "$ar didn't seem to work right." >&4
5497                         echo "Maybe this is a Cray...trying bld instead..." >&4
5498                         if bld t $libc | $sed -e 's/.*\///' -e "s/\\$_o:.*\$//" > libc.list
5499                         then
5500                                 for thisname in $libnames; do
5501                                         bld t $libnames | \
5502                                         $sed -e 's/.*\///' -e "s/\\$_o:.*\$//" >>libc.list
5503                                         $ar t $thisname >>libc.tmp
5504                                 done
5505                                 echo "Ok." >&4
5506                         else
5507                                 echo "That didn't work either.  Giving up." >&4
5508                                 exit 1
5509                         fi
5510                 fi
5511         fi
5512 fi
5513 nm_extract="$com"
5514 if $test -f /lib/syscalls.exp; then
5515         echo " "
5516         echo "Also extracting names from /lib/syscalls.exp for good ole AIX..." >&4
5517         $sed -n 's/^\([^        ]*\)[   ]*syscall[0-9]*$/\1/p' /lib/syscalls.exp >>libc.list
5518 fi
5519 ;;
5520 esac
5521 $rm -f libnames libpath
5522
5523 : is a C symbol defined?
5524 csym='tlook=$1;
5525 case "$3" in
5526 -v) tf=libc.tmp; tc=""; tdc="";;
5527 -a) tf=libc.tmp; tc="[0]"; tdc="[]";;
5528 *) tlook="^$1\$"; tf=libc.list; tc="()"; tdc="()";;
5529 esac;
5530 tx=yes;
5531 case "$reuseval-$4" in
5532 true-) ;;
5533 true-*) tx=no; eval "tval=\$$4"; case "$tval" in "") tx=yes;; esac;;
5534 esac;
5535 case "$tx" in
5536 yes)
5537         case "$runnm" in
5538         true)
5539                 if $contains $tlook $tf >/dev/null 2>&1;
5540                 then tval=true;
5541                 else tval=false;
5542                 fi;;
5543         *)
5544                 echo "int main() { extern short $1$tdc; printf(\"%hd\", $1$tc); }" > t.c;
5545                 if $cc -o t $optimize $ccflags $ldflags t.c $libs >/dev/null 2>&1;
5546                 then tval=true;
5547                 else tval=false;
5548                 fi;
5549                 $rm -f t t.c;;
5550         esac;;
5551 *)
5552         case "$tval" in
5553         $define) tval=true;;
5554         *) tval=false;;
5555         esac;;
5556 esac;
5557 eval "$2=$tval"'
5558
5559 : define an is-in-libc? function
5560 inlibc='echo " "; td=$define; tu=$undef;
5561 sym=$1; var=$2; eval "was=\$$2";
5562 tx=yes;
5563 case "$reuseval$was" in
5564 true) ;;
5565 true*) tx=no;;
5566 esac;
5567 case "$tx" in
5568 yes)
5569         set $sym tres -f;
5570         eval $csym;
5571         case "$tres" in
5572         true)
5573                 echo "$sym() found." >&4;
5574                 case "$was" in $undef) . ./whoa; esac; eval "$var=\$td";;
5575         *)
5576                 echo "$sym() NOT found." >&4;
5577                 case "$was" in $define) . ./whoa; esac; eval "$var=\$tu";;
5578         esac;;
5579 *)
5580         case "$was" in
5581         $define) echo "$sym() found." >&4;;
5582         *) echo "$sym() NOT found." >&4;;
5583         esac;;
5584 esac'
5585
5586 : see if sqrtl exists
5587 set sqrtl d_sqrtl
5588 eval $inlibc
5589
5590 case "$ccflags" in
5591 *-DUSE_LONG_DOUBLE*|*-DUSE_MORE_BITS*) uselongdouble="$define" ;;
5592 esac
5593
5594 case "$uselongdouble" in
5595 $define|true|[yY]*)     dflt='y';;
5596 *) dflt='n';;
5597 esac
5598 cat <<EOM
5599
5600 Perl can be built to take advantage of long doubles which
5601 (if available) may give more accuracy and range for floating point numbers.
5602
5603 If this doesn't make any sense to you, just accept the default '$dflt'.
5604 EOM
5605 rp='Try to use long doubles if available?'
5606 . ./myread
5607 case "$ans" in
5608 y|Y)    val="$define"   ;;
5609 *)      val="$undef"    ;;
5610 esac
5611 set uselongdouble
5612 eval $setvar
5613
5614 case "$uselongdouble" in
5615 true|[yY]*) uselongdouble="$define" ;;
5616 esac
5617
5618 case "$uselongdouble" in
5619 $define)
5620 : Look for a hint-file generated 'call-back-unit'.  If the
5621 : user has specified that long doubles should be used,
5622 : we may need to set or change some other defaults.
5623         if $test -f uselongdouble.cbu; then
5624                 echo "Your platform has some specific hints for long doubles, using them..."
5625                 . ./uselongdouble.cbu
5626         else
5627                 $cat <<EOM
5628 (Your platform doesn't have any specific hints for long doubles.)
5629 EOM
5630         fi
5631         ;;
5632 esac
5633
5634 case "$uselongdouble:$d_sqrtl" in
5635 $define:$undef)
5636                 $cat <<EOM >&4
5637
5638 *** You requested the use of long doubles but you do not seem to have
5639 *** the mathematic functions for long doubles.  I'm disabling the use
5640 *** of long doubles.
5641
5642 EOM
5643         uselongdouble=$undef
5644         ;;
5645 esac
5646
5647 : check for length of double
5648 echo " "
5649 case "$doublesize" in
5650 '')
5651         echo "Checking to see how big your double precision numbers are..." >&4
5652         $cat >try.c <<'EOCP'
5653 #include <stdio.h>
5654 int main()
5655 {
5656     printf("%d\n", (int)sizeof(double));
5657     exit(0);
5658 }
5659 EOCP
5660         set try
5661         if eval $compile_ok; then
5662                 doublesize=`./try`
5663                 echo "Your double is $doublesize bytes long."
5664         else
5665                 dflt='8'
5666                 echo "(I can't seem to compile the test program.  Guessing...)"
5667                 rp="What is the size of a double precision number (in bytes)?"
5668                 . ./myread
5669                 doublesize="$ans"
5670         fi
5671         ;;
5672 esac
5673 $rm -f try.c try
5674
5675 : check for long doubles
5676 echo " "
5677 echo "Checking to see if you have long double..." >&4
5678 echo 'int main() { long double x = 7.0; }' > try.c
5679 set try
5680 if eval $compile; then
5681         val="$define"
5682         echo "You have long double."
5683 else
5684         val="$undef"
5685         echo "You do not have long double."
5686 fi
5687 $rm try.*
5688 set d_longdbl
5689 eval $setvar
5690
5691 : check for length of long double
5692 case "${d_longdbl}${longdblsize}" in
5693 $define)
5694         echo " "
5695         echo "Checking to see how big your long doubles are..." >&4
5696         $cat >try.c <<'EOCP'
5697 #include <stdio.h>
5698 int main()
5699 {
5700         printf("%d\n", sizeof(long double));
5701 }
5702 EOCP
5703         set try
5704         set try
5705         if eval $compile; then
5706                 longdblsize=`./try$exe_ext`
5707                 echo "Your long doubles are $longdblsize bytes long."
5708         else
5709                 dflt='8'
5710                 echo " "
5711                 echo "(I can't seem to compile the test program.  Guessing...)" >&4
5712                 rp="What is the size of a long double (in bytes)?"
5713                 . ./myread
5714                 longdblsize="$ans"
5715         fi
5716         if $test "X$doublesize" = "X$longdblsize"; then
5717                 echo "(That isn't any different from an ordinary double.)"
5718         fi      
5719         ;;
5720 esac
5721 $rm -f try.* try
5722
5723 case "$useperlio" in
5724 $define|true|[yY]*|'')  dflt='y';;
5725 *) dflt='n';;
5726 esac
5727 cat <<EOM
5728
5729 Previous version of $package used the standard IO mechanisms as
5730 defined in <stdio.h>.  Versions 5.003_02 and later of $package allow
5731 alternate IO mechanisms via the PerlIO abstraction layer, but the
5732 stdio mechanism is still available if needed.  The abstraction layer
5733 can use AT&T's sfio (if you already have sfio installed) or regular stdio.
5734 Using PerlIO with sfio may cause problems with some extension modules.
5735
5736 If this doesn't make any sense to you, just accept the default '$dflt'.
5737 EOM
5738 rp='Use the PerlIO abstraction layer?'
5739 . ./myread
5740 case "$ans" in
5741 y|Y) 
5742         val="$define"
5743         ;;
5744 *)      
5745         echo "Ok, doing things the stdio way."
5746         val="$undef"
5747         ;;
5748 esac
5749 set useperlio
5750 eval $setvar 
5751
5752 case "$usesocks" in
5753 $define|true|[yY]*)
5754         case "$useperlio" in
5755         $define|true|[yY]*) ;;
5756         *)      cat >&4 <<EOM
5757
5758 You are using the SOCKS proxy protocol library which means that you
5759 should also use the PerlIO layer.  You may be headed for trouble.
5760
5761 EOM
5762                 ;;
5763         esac
5764         ;;
5765 esac
5766
5767         
5768 : determine the architecture name
5769 echo " "
5770 if xxx=`./loc arch blurfl $pth`; $test -f "$xxx"; then
5771         tarch=`arch`"-$osname"
5772 elif xxx=`./loc uname blurfl $pth`; $test -f "$xxx" ; then
5773         if uname -m > tmparch 2>&1 ; then
5774                 tarch=`$sed -e 's/ *$//' -e 's/ /_/g' \
5775                         -e 's/$/'"-$osname/" tmparch`
5776         else
5777                 tarch="$osname"
5778         fi
5779         $rm -f tmparch
5780 else
5781         tarch="$osname"
5782 fi
5783 case "$myarchname" in
5784 ''|"$tarch") ;;
5785 *)
5786         echo "(Your architecture name used to be $myarchname.)"
5787         archname=''
5788         ;;
5789 esac
5790 myarchname="$tarch"
5791 case "$archname" in
5792 '') dflt="$tarch";;
5793 *) dflt="$archname";;
5794 esac
5795 rp='What is your architecture name'
5796 . ./myread
5797 archname="$ans"
5798 case "$usethreads" in
5799 $define)
5800         echo "Threads selected." >&4
5801         case "$archname" in
5802         *-thread*) echo "...and architecture name already has -thread." >&4
5803                 ;;
5804         *)      archname="$archname-thread"
5805                 echo "...setting architecture name to $archname." >&4
5806                 ;;
5807         esac
5808         ;;
5809 esac
5810 case "$usemultiplicity" in
5811 $define)
5812         echo "Multiplicity selected." >&4
5813         case "$archname" in
5814         *-multi*) echo "...and architecture name already has -multi." >&4
5815                 ;;
5816         *)      archname="$archname-multi"
5817                 echo "...setting architecture name to $archname." >&4
5818                 ;;
5819         esac
5820         ;;
5821 esac
5822 case "$use64bitint$use64bitall" in
5823 *"$define"*)
5824         case "$archname64" in
5825         '')
5826                 echo "This architecture is naturally 64-bit, not changing architecture name." >&4
5827                 ;;
5828         *)
5829                 case "$use64bitint" in
5830                 "$define") echo "64 bit integers selected." >&4 ;;
5831                 esac
5832                 case "$use64bitall" in
5833                 "$define") echo "Maximal 64 bitness selected." >&4 ;;
5834                 esac
5835                 case "$archname" in
5836                 *-$archname64*) echo "...and architecture name already has $archname64." >&4
5837                         ;;
5838                 *)      archname="$archname-$archname64"
5839                         echo "...setting architecture name to $archname." >&4
5840                         ;;
5841                 esac
5842                 ;;
5843         esac
5844 esac
5845 case "$uselongdouble" in
5846 $define)
5847         echo "Long doubles selected." >&4
5848         case "$longdblsize" in
5849         $doublesize)
5850                 "...but long doubles are equal to doubles, not changing architecture name." >&4
5851                 ;;
5852         *)
5853                 case "$archname" in
5854                 *-ld*) echo "...and architecture name already has -ld." >&4
5855                         ;;
5856                 *)      archname="$archname-ld"
5857                         echo "...setting architecture name to $archname." >&4
5858                         ;;
5859                 esac
5860                 ;;
5861         esac
5862         ;;
5863 esac
5864 case "$useperlio" in
5865 $define)
5866         echo "Perlio selected." >&4
5867         ;;
5868 *)
5869         echo "Perlio not selected, using stdio." >&4
5870         case "$archname" in
5871         *-stdio*) echo "...and architecture name already has -stdio." >&4
5872                 ;;
5873         *)      archname="$archname-stdio"
5874                 echo "...setting architecture name to $archname." >&4
5875                 ;;
5876         esac
5877         ;;
5878 esac
5879
5880 : determine root of directory hierarchy where package will be installed.
5881 case "$prefix" in
5882 '')
5883         dflt=`./loc . /usr/local /usr/local /local /opt /usr`
5884         ;;
5885 *)
5886         dflt="$prefix"
5887         ;;
5888 esac
5889 $cat <<EOM
5890
5891 By default, $package will be installed in $dflt/bin, manual pages
5892 under $dflt/man, etc..., i.e. with $dflt as prefix for all
5893 installation directories. Typically this is something like /usr/local.
5894 If you wish to have binaries under /usr/bin but other parts of the
5895 installation under /usr/local, that's ok: you will be prompted
5896 separately for each of the installation directories, the prefix being
5897 only used to set the defaults.
5898
5899 EOM
5900 fn=d~
5901 rp='Installation prefix to use?'
5902 . ./getfile
5903 oldprefix=''
5904 case "$prefix" in
5905 '') ;;
5906 *)
5907         case "$ans" in
5908         "$prefix") ;;
5909         *) oldprefix="$prefix";;
5910         esac
5911         ;;
5912 esac
5913 prefix="$ans"
5914 prefixexp="$ansexp"
5915
5916 : is AFS running?
5917 echo " "
5918 case "$afs" in
5919 $define|true)   afs=true ;;
5920 $undef|false)   afs=false ;;
5921 *)      if test -d /afs; then
5922                 afs=true
5923         else
5924                 afs=false
5925         fi
5926         ;;
5927 esac
5928 if $afs; then
5929         echo "AFS may be running... I'll be extra cautious then..." >&4
5930 else
5931         echo "AFS does not seem to be running..." >&4
5932 fi
5933
5934 : determine installation prefix for where package is to be installed.
5935 if $afs; then 
5936 $cat <<EOM
5937
5938 Since you are running AFS, I need to distinguish the directory in which
5939 files will reside from the directory in which they are installed (and from
5940 which they are presumably copied to the former directory by occult means).
5941
5942 EOM
5943         case "$installprefix" in
5944         '') dflt=`echo $prefix | sed 's#^/afs/#/afs/.#'`;;
5945         *) dflt="$installprefix";;
5946         esac
5947 else
5948 $cat <<EOM
5949
5950 In some special cases, particularly when building $package for distribution,
5951 it is convenient to distinguish between the directory in which files should 
5952 be installed from the directory ($prefix) in which they 
5953 will eventually reside.  For most users, these two directories are the same.
5954
5955 EOM
5956         case "$installprefix" in
5957         '') dflt=$prefix ;;
5958         *) dflt=$installprefix;;
5959         esac
5960 fi
5961 fn=d~
5962 rp='What installation prefix should I use for installing files?'
5963 . ./getfile
5964 installprefix="$ans"
5965 installprefixexp="$ansexp"
5966
5967 : set the prefixit variable, to compute a suitable default value
5968 prefixit='case "$3" in
5969 ""|none)
5970         case "$oldprefix" in
5971         "") eval "$1=\"\$$2\"";;
5972         *)
5973                 case "$3" in
5974                 "") eval "$1=";;
5975                 none)
5976                         eval "tp=\"\$$2\"";
5977                         case "$tp" in
5978                         ""|" ") eval "$1=\"\$$2\"";;
5979                         *) eval "$1=";;
5980                         esac;;
5981                 esac;;
5982         esac;;
5983 *)
5984         eval "tp=\"$oldprefix-\$$2-\""; eval "tp=\"$tp\"";
5985         case "$tp" in
5986         --|/*--|\~*--) eval "$1=\"$prefix/$3\"";;
5987         /*-$oldprefix/*|\~*-$oldprefix/*)
5988                 eval "$1=\`echo \$$2 | sed \"s,^$oldprefix,$prefix,\"\`";;
5989         *) eval "$1=\"\$$2\"";;
5990         esac;;
5991 esac'
5992
5993
5994 : get the patchlevel
5995 echo " "
5996 echo "Getting the current patchlevel..." >&4
5997 if $test -r $rsrc/patchlevel.h;then
5998         revision=`awk '/define[         ]+PERL_REVISION/ {print $3}' $rsrc/patchlevel.h`
5999         patchlevel=`awk '/define[       ]+PERL_VERSION/ {print $3}' $rsrc/patchlevel.h`
6000         subversion=`awk '/define[       ]+PERL_SUBVERSION/ {print $3}' $rsrc/patchlevel.h`
6001         api_revision=`awk '/define[     ]+PERL_API_REVISION/ {print $3}' $rsrc/patchlevel.h`
6002         api_version=`awk '/define[      ]+PERL_API_VERSION/ {print $3}' $rsrc/patchlevel.h`
6003         api_subversion=`awk '/define[   ]+PERL_API_SUBVERSION/ {print $3}' $rsrc/patchlevel.h`
6004 else
6005         revision=0
6006         patchlevel=0
6007         subversion=0
6008         api_revision=0
6009         api_version=0
6010         api_subversion=0
6011 fi
6012 $echo "(You have $package version $patchlevel subversion $subversion.)"
6013 case "$osname" in
6014 dos|vms)
6015         : XXX Should be a Configure test for double-dots in filenames.
6016         version=`echo $revision $patchlevel $subversion | \
6017                  $awk '{ printf "%d_%d_%d\n", $1, $2, $3 }'`
6018         api_versionstring=`echo $api_revision $api_version $api_subversion | \
6019                  $awk '{ printf "%d_%d_%d\n", $1, $2, $3 }'`
6020         ;;
6021 *)
6022         version=`echo $revision $patchlevel $subversion | \
6023                  $awk '{ printf "%d.%d.%d\n", $1, $2, $3 }'`
6024         api_versionstring=`echo $api_revision $api_version $api_subversion | \
6025                  $awk '{ printf "%d.%d.%d\n", $1, $2, $3 }'`
6026         ;;
6027 esac
6028 : Special case the 5.005_xx maintenance series, which used 5.005
6029 : without any subversion label as a subdirectory in $sitelib
6030 if test "${api_revision}${api_version}${api_subversion}" = "550"; then
6031         api_versionstring='5.005'
6032 fi
6033
6034 : determine installation style
6035 : For now, try to deduce it from prefix unless it is already set.
6036 : Reproduce behavior of 5.005 and earlier, maybe drop that in 5.7.
6037 case "$installstyle" in
6038 '')     case "$prefix" in
6039                 *perl*) dflt='lib';;
6040                 *) dflt='lib/perl5' ;;
6041         esac
6042         ;;
6043 *)      dflt="$installstyle" ;;
6044 esac
6045 : Probably not worth prompting for this since we prompt for all
6046 : the directories individually, and the prompt would be too long and
6047 : confusing anyway.
6048 installstyle=$dflt
6049
6050 : determine where private library files go
6051 : Usual default is /usr/local/lib/perl5/$version.
6052 : Also allow things like /opt/perl/lib/$version, since 
6053 : /opt/perl/lib/perl5... would be redundant.
6054 : The default "style" setting is made in installstyle.U
6055 case "$installstyle" in
6056 *lib/perl5*) set dflt privlib lib/$package/$version ;;
6057 *)       set dflt privlib lib/$version ;;
6058 esac
6059 eval $prefixit
6060 $cat <<EOM
6061
6062 There are some auxiliary files for $package that need to be put into a
6063 private library directory that is accessible by everyone.
6064
6065 EOM
6066 fn=d~+
6067 rp='Pathname where the private library files will reside?'
6068 . ./getfile
6069 privlib="$ans"
6070 privlibexp="$ansexp"
6071 : Change installation prefix, if necessary.
6072 if $test X"$prefix" != X"$installprefix"; then
6073         installprivlib=`echo $privlibexp | sed "s#^$prefix#$installprefix#"`
6074 else
6075         installprivlib="$privlibexp"
6076 fi
6077
6078 : set the prefixup variable, to restore leading tilda escape
6079 prefixup='case "$prefixexp" in
6080 "$prefix") ;;
6081 *) eval "$1=\`echo \$$1 | sed \"s,^$prefixexp,$prefix,\"\`";;
6082 esac'
6083
6084 : determine where public architecture dependent libraries go
6085 set archlib archlib
6086 eval $prefixit
6087 : privlib default is /usr/local/lib/$package/$version
6088 : archlib default is /usr/local/lib/$package/$version/$archname
6089 : privlib may have an optional trailing /share.
6090 tdflt=`echo $privlib | $sed 's,/share$,,'`
6091 tdflt=$tdflt/$archname
6092 case "$archlib" in
6093 '')     dflt=$tdflt
6094         ;;
6095 *)      dflt="$archlib"
6096     ;;
6097 esac
6098 $cat <<EOM
6099
6100 $spackage contains architecture-dependent library files.  If you are
6101 sharing libraries in a heterogeneous environment, you might store
6102 these files in a separate location.  Otherwise, you can just include
6103 them with the rest of the public library files.
6104
6105 EOM
6106 fn=d+~
6107 rp='Where do you want to put the public architecture-dependent libraries?'
6108 . ./getfile
6109 archlib="$ans"
6110 archlibexp="$ansexp"
6111 if $test X"$archlib" = X"$privlib"; then
6112         d_archlib="$undef"
6113 else
6114         d_archlib="$define"
6115 fi
6116 : Change installation prefix, if necessary.
6117 if $test X"$prefix" != X"$installprefix"; then
6118         installarchlib=`echo $archlibexp | sed "s#^$prefix#$installprefix#"`
6119 else
6120         installarchlib="$archlibexp"
6121 fi
6122
6123
6124 : Binary compatibility with 5.005 is not possible for builds
6125 : with advanced features
6126 case "$usethreads$usemultiplicity" in
6127 *define*)
6128         bincompat5005="$undef"
6129         d_bincompat5005="$undef"
6130         ;;
6131 *)      $cat <<EOM
6132
6133 This version of Perl can be compiled for binary compatibility with 5.005.
6134 If you decide to do so, you will be able to continue using most of the
6135 extensions that were compiled for Perl 5.005.
6136
6137 EOM
6138         case "$bincompat5005$d_bincompat5005" in
6139         *"$undef"*) dflt=n ;;
6140         *) dflt=y ;;
6141         esac
6142         rp='Binary compatibility with Perl 5.005?'
6143         . ./myread
6144         case "$ans" in
6145         y*) val="$define" ;;
6146         *)  val="$undef" ;;
6147         esac
6148         set d_bincompat5005
6149         eval $setvar
6150         case "$d_bincompat5005" in
6151         "$define")
6152                 bincompat5005="$define"
6153                 ;;
6154         *)      bincompat5005="$undef"
6155                 d_bincompat5005="$undef"
6156                 ;;
6157         esac
6158         ;;
6159 esac
6160
6161
6162 : see if setuid scripts can be secure
6163 $cat <<EOM
6164
6165 Some kernels have a bug that prevents setuid #! scripts from being
6166 secure.  Some sites have disabled setuid #! scripts because of this.
6167
6168 First let's decide if your kernel supports secure setuid #! scripts.
6169 (If setuid #! scripts would be secure but have been disabled anyway,
6170 don't say that they are secure if asked.)
6171
6172 EOM
6173
6174 val="$undef"
6175 if $test -d /dev/fd; then
6176         echo "#!$ls" >reflect
6177         chmod +x,u+s reflect
6178         ./reflect >flect 2>&1
6179         if $contains "/dev/fd" flect >/dev/null; then
6180                 echo "Congratulations, your kernel has secure setuid scripts!" >&4
6181                 val="$define"
6182         else
6183                 $cat <<EOM
6184 If you are not sure if they are secure, I can check but I'll need a
6185 username and password different from the one you are using right now.
6186 If you don't have such a username or don't want me to test, simply
6187 enter 'none'.
6188
6189 EOM
6190                 rp='Other username to test security of setuid scripts with?'
6191                 dflt='none'
6192                 . ./myread
6193                 case "$ans" in
6194                 n|none)
6195                         case "$d_suidsafe" in
6196                         '')     echo "I'll assume setuid scripts are *not* secure." >&4
6197                                 dflt=n;;
6198                         "$undef")
6199                                 echo "Well, the $hint value is *not* secure." >&4
6200                                 dflt=n;;
6201                         *)      echo "Well, the $hint value *is* secure." >&4
6202                                 dflt=y;;
6203                         esac
6204                         ;;
6205                 *)
6206                         $rm -f reflect flect
6207                         echo "#!$ls" >reflect
6208                         chmod +x,u+s reflect
6209                         echo >flect
6210                         chmod a+w flect
6211                         echo '"su" will (probably) prompt you for '"$ans's password."
6212                         su $ans -c './reflect >flect'
6213                         if $contains "/dev/fd" flect >/dev/null; then
6214                                 echo "Okay, it looks like setuid scripts are secure." >&4
6215                                 dflt=y
6216                         else
6217                                 echo "I don't think setuid scripts are secure." >&4
6218                                 dflt=n
6219                         fi
6220                         ;;
6221                 esac
6222                 rp='Does your kernel have *secure* setuid scripts?'
6223                 . ./myread
6224                 case "$ans" in
6225                 [yY]*)  val="$define";;
6226                 *)      val="$undef";;
6227                 esac
6228         fi
6229 else
6230         echo "I don't think setuid scripts are secure (no /dev/fd directory)." >&4
6231         echo "(That's for file descriptors, not floppy disks.)"
6232         val="$undef"
6233 fi
6234 set d_suidsafe
6235 eval $setvar
6236
6237 $rm -f reflect flect
6238
6239 : now see if they want to do setuid emulation
6240 echo " "
6241 val="$undef"
6242 case "$d_suidsafe" in
6243 "$define")
6244         val="$undef"
6245         echo "No need to emulate SUID scripts since they are secure here." >& 4
6246         ;;
6247 *)
6248         $cat <<EOM
6249 Some systems have disabled setuid scripts, especially systems where
6250 setuid scripts cannot be secure.  On systems where setuid scripts have
6251 been disabled, the setuid/setgid bits on scripts are currently
6252 useless.  It is possible for $package to detect those bits and emulate
6253 setuid/setgid in a secure fashion.  This emulation will only work if
6254 setuid scripts have been disabled in your kernel.
6255
6256 EOM
6257         case "$d_dosuid" in
6258         "$define") dflt=y ;;
6259         *) dflt=n ;;
6260         esac
6261         rp="Do you want to do setuid/setgid emulation?"
6262         . ./myread
6263         case "$ans" in
6264         [yY]*)  val="$define";;
6265         *)      val="$undef";;
6266         esac
6267         ;;
6268 esac
6269 set d_dosuid
6270 eval $setvar
6271
6272 : see if this is a malloc.h system
6273 set malloc.h i_malloc
6274 eval $inhdr
6275
6276 : see if stdlib is available
6277 set stdlib.h i_stdlib
6278 eval $inhdr
6279
6280 : determine which malloc to compile in
6281 echo " "
6282 case "$usemymalloc" in
6283 ''|[yY]*|true|$define)  dflt='y' ;;
6284 *)      dflt='n' ;;
6285 esac
6286 case "$ptrsize" in
6287 4) ;;
6288 *) dflt='n' ;;
6289 esac
6290 rp="Do you wish to attempt to use the malloc that comes with $package?"
6291 . ./myread
6292 usemymalloc="$ans"
6293 case "$ans" in
6294 y*|true)
6295         usemymalloc='y'
6296         mallocsrc='malloc.c'
6297         mallocobj="malloc$_o"
6298         d_mymalloc="$define"
6299         case "$libs" in
6300         *-lmalloc*)
6301                 : Remove malloc from list of libraries to use
6302                 echo "Removing unneeded -lmalloc from library list" >&4
6303                 set `echo X $libs | $sed -e 's/-lmalloc / /' -e 's/-lmalloc$//'`
6304                 shift
6305                 libs="$*"
6306                 echo "libs = $libs" >&4
6307                 ;;
6308         esac
6309         ;;
6310 *)
6311         usemymalloc='n'
6312         mallocsrc=''
6313         mallocobj=''
6314         d_mymalloc="$undef"
6315         ;;
6316 esac
6317
6318 : compute the return types of malloc and free
6319 echo " "
6320 $cat >malloc.c <<END
6321 #$i_malloc I_MALLOC
6322 #$i_stdlib I_STDLIB
6323 #include <stdio.h>
6324 #include <sys/types.h>
6325 #ifdef I_MALLOC
6326 #include <malloc.h>
6327 #endif
6328 #ifdef I_STDLIB
6329 #include <stdlib.h>
6330 #endif
6331 #ifdef TRY_MALLOC
6332 void *malloc();
6333 #endif
6334 #ifdef TRY_FREE
6335 void free();
6336 #endif
6337 END
6338 case "$malloctype" in
6339 '')
6340         if $cc $ccflags -c -DTRY_MALLOC malloc.c >/dev/null 2>&1; then
6341                 malloctype='void *'
6342         else
6343                 malloctype='char *'
6344         fi
6345         ;;
6346 esac
6347 echo "Your system wants malloc to return '$malloctype', it would seem." >&4
6348
6349 case "$freetype" in
6350 '')
6351         if $cc $ccflags -c -DTRY_FREE malloc.c >/dev/null 2>&1; then
6352                 freetype='void'
6353         else
6354                 freetype='int'
6355         fi
6356         ;;
6357 esac
6358 echo "Your system uses $freetype free(), it would seem." >&4
6359 $rm -f malloc.[co]
6360 $cat <<EOM
6361
6362 After $package is installed, you may wish to install various
6363 add-on modules and utilities.  Typically, these add-ons will
6364 be installed under $prefix with the rest
6365 of this package.  However, you may wish to install such add-ons
6366 elsewhere under a different prefix.
6367
6368 If you do not wish to put everything under a single prefix, that's
6369 ok.  You will be prompted for the individual locations; this siteprefix
6370 is only used to suggest the defaults.
6371
6372 The default should be fine for most people.
6373
6374 EOM
6375 fn=d~+
6376 rp='Installation prefix to use for add-on modules and utilities?'
6377 : XXX Here might be another good place for an installstyle setting.
6378 case "$siteprefix" in
6379 '') dflt=$prefix ;;
6380 *)  dflt=$siteprefix ;;
6381 esac
6382 . ./getfile
6383 : XXX Prefixit unit does not yet support siteprefix and vendorprefix
6384 oldsiteprefix=''
6385 case "$siteprefix" in
6386 '') ;;
6387 *)      case "$ans" in
6388         "$prefix") ;;
6389         *) oldsiteprefix="$prefix";;
6390         esac
6391         ;;
6392 esac
6393 siteprefix="$ans"
6394 siteprefixexp="$ansexp"
6395
6396 : determine where site specific libraries go.
6397 : Usual default is /usr/local/lib/perl5/site_perl/$version
6398 : The default "style" setting is made in installstyle.U
6399 : XXX No longer works with Prefixit stuff.
6400 prog=`echo $package | $sed 's/-*[0-9.]*$//'`
6401 case "$sitelib" in
6402 '') case "$installstyle" in
6403         *lib/perl5*) dflt=$siteprefix/lib/$package/site_$prog/$version ;;
6404         *)       dflt=$siteprefix/lib/site_$prog/$version ;;
6405         esac
6406         ;;
6407 *)      dflt="$sitelib"
6408         ;;
6409 esac
6410 $cat <<EOM
6411
6412 The installation process will create a directory for
6413 site-specific extensions and modules.  Most users find it convenient
6414 to place all site-specific files in this directory rather than in the
6415 main distribution directory.
6416
6417 EOM
6418 fn=d~+
6419 rp='Pathname for the site-specific library files?'
6420 . ./getfile
6421 sitelib="$ans"
6422 sitelibexp="$ansexp"
6423 sitelib_stem=`echo "$sitelibexp" | sed "s,/$version$,,"`
6424 : Change installation prefix, if necessary.
6425 if $test X"$prefix" != X"$installprefix"; then
6426         installsitelib=`echo $sitelibexp | $sed "s#^$prefix#$installprefix#"`
6427 else
6428         installsitelib="$sitelibexp"
6429 fi
6430
6431 : determine where site specific architecture-dependent libraries go.
6432 : sitelib  default is /usr/local/lib/perl5/site_perl/$version
6433 : sitearch default is /usr/local/lib/perl5/site_perl/$version/$archname
6434 : sitelib may have an optional trailing /share.
6435 case "$sitearch" in
6436 '')     dflt=`echo $sitelib | $sed 's,/share$,,'`
6437         dflt="$dflt/$archname"
6438         ;;
6439 *)      dflt="$sitearch"
6440         ;;
6441 esac
6442 set sitearch sitearch none
6443 eval $prefixit
6444 $cat <<EOM
6445
6446 The installation process will also create a directory for
6447 architecture-dependent site-specific extensions and modules.
6448
6449 EOM
6450 fn=d~+
6451 rp='Pathname for the site-specific architecture-dependent library files?'
6452 . ./getfile
6453 sitearch="$ans"
6454 sitearchexp="$ansexp"
6455 : Change installation prefix, if necessary.
6456 if $test X"$prefix" != X"$installprefix"; then
6457         installsitearch=`echo $sitearchexp | sed "s#^$prefix#$installprefix#"`
6458 else
6459         installsitearch="$sitearchexp"
6460 fi
6461
6462 $cat <<EOM
6463
6464 The installation process will also create a directory for
6465 vendor-supplied add-ons.  Vendors who supply perl with their system
6466 may find it convenient to place all vendor-supplied files in this
6467 directory rather than in the main distribution directory.  This will
6468 ease upgrades between binary-compatible maintenance versions of perl.
6469
6470 Of course you may also use these directories in whatever way you see
6471 fit.  For example, you might use them to access modules shared over a
6472 company-wide network.
6473
6474 The default answer should be fine for most people.
6475 This causes further questions about vendor add-ons to be skipped
6476 and no vendor-specific directories will be configured for perl.
6477
6478 EOM
6479 rp='Do you want to configure vendor-specific add-on directories?'
6480 case "$usevendorprefix" in
6481 define|true|[yY]*) dflt=y ;;
6482 *)      : User may have set vendorprefix directly on Configure command line.
6483         case "$vendorprefix" in
6484         ''|' ') dflt=n ;;
6485         *)      dflt=y ;;
6486         esac
6487         ;;
6488 esac
6489 . ./myread
6490 case "$ans" in
6491 [yY]*)  fn=d~+
6492         rp='Installation prefix to use for vendor-supplied add-ons?'
6493         case "$vendorprefix" in
6494         '') dflt='' ;;
6495         *)  dflt=$vendorprefix ;;
6496         esac
6497         . ./getfile
6498         : XXX Prefixit unit does not yet support siteprefix and vendorprefix
6499         oldvendorprefix=''
6500         case "$vendorprefix" in
6501         '') ;;
6502         *)      case "$ans" in
6503                 "$prefix") ;;
6504                 *) oldvendorprefix="$prefix";;
6505                 esac
6506                 ;;
6507         esac
6508         usevendorprefix="$define"
6509         vendorprefix="$ans"
6510         vendorprefixexp="$ansexp"
6511         ;;
6512 *)      usevendorprefix="$undef"
6513         vendorprefix=''
6514         vendorprefixexp=''
6515         ;;
6516 esac
6517
6518 case "$vendorprefix" in
6519 '')     d_vendorlib="$undef"
6520         vendorlib=''
6521         vendorlibexp=''
6522         ;;
6523 *)      d_vendorlib="$define"
6524         : determine where vendor-supplied modules go.
6525         : Usual default is /usr/local/lib/perl5/vendor_perl/$version
6526         case "$vendorlib" in
6527         '')
6528                 prog=`echo $package | $sed 's/-*[0-9.]*$//'`
6529                 case "$installstyle" in
6530                 *lib/perl5*) dflt=$vendorprefix/lib/$package/vendor_$prog/$version ;;
6531                 *)           dflt=$vendorprefix/lib/vendor_$prog/$version ;;
6532                 esac
6533                 ;;
6534         *)      dflt="$vendorlib"
6535                 ;;
6536         esac
6537         fn=d~+
6538         rp='Pathname for the vendor-supplied library files?'
6539         . ./getfile
6540         vendorlib="$ans"
6541         vendorlibexp="$ansexp"
6542         ;;
6543 esac
6544 vendorlib_stem=`echo "$vendorlibexp" | sed "s,/$version$,,"`
6545 : Change installation prefix, if necessary.
6546 if $test X"$prefix" != X"$installprefix"; then
6547         installvendorlib=`echo $vendorlibexp | $sed "s#^$prefix#$installprefix#"`
6548 else
6549         installvendorlib="$vendorlibexp"
6550 fi
6551
6552 case "$vendorprefix" in
6553 '')     d_vendorarch="$undef"
6554         vendorarch=''
6555         vendorarchexp=''
6556         ;;
6557 *)      d_vendorarch="$define"
6558         : determine where vendor-supplied architecture-dependent libraries go.
6559         : vendorlib  default is /usr/local/lib/perl5/vendor_perl/$version
6560         : vendorarch default is /usr/local/lib/perl5/vendor_perl/$version/$archname
6561         : vendorlib may have an optional trailing /share.
6562         case "$vendorarch" in
6563         '')     dflt=`echo $vendorlib | $sed 's,/share$,,'`
6564                 dflt="$dflt/$archname"
6565                 ;;
6566         *)      dflt="$vendorarch" ;;
6567         esac
6568         fn=d~+
6569         rp='Pathname for vendor-supplied architecture-dependent files?'
6570         . ./getfile
6571         vendorarch="$ans"
6572         vendorarchexp="$ansexp"
6573         ;;
6574 esac
6575 : Change installation prefix, if necessary.
6576 if $test X"$prefix" != X"$installprefix"; then
6577         installvendorarch=`echo $vendorarchexp | sed "s#^$prefix#$installprefix#"`
6578 else
6579         installvendorarch="$vendorarchexp"
6580 fi
6581
6582 : Final catch-all directories to search
6583 $cat <<EOM
6584
6585 Lastly, you can have perl look in other directories for extensions and
6586 modules in addition to those already specified.
6587 These directories will be searched after 
6588         $sitearch 
6589         $sitelib 
6590 EOM
6591 test X"$vendorlib" != "X" && echo '     ' $vendorlib
6592 test X"$vendorarch" != "X" && echo '    ' $vendorarch
6593 echo ' '
6594 case "$otherlibdirs" in
6595 ''|' ') dflt='none' ;;
6596 *)      dflt="$otherlibdirs" ;;
6597 esac
6598 $cat <<EOM
6599 Enter a colon-separated set of extra paths to include in perl's @INC
6600 search path, or enter 'none' for no extra paths.
6601
6602 EOM
6603
6604 rp='Colon-separated list of additional directories for perl to search?'
6605 . ./myread
6606 case "$ans" in
6607 ' '|''|none)    otherlibdirs=' ' ;;     
6608 *)      otherlibdirs="$ans" ;;
6609 esac
6610 case "$otherlibdirs" in
6611 ' ') val=$undef ;;
6612 *)      val=$define ;;
6613 esac
6614 set d_perl_otherlibdirs
6615 eval $setvar
6616
6617 : Cruising for prototypes
6618 echo " "
6619 echo "Checking out function prototypes..." >&4
6620 $cat >prototype.c <<'EOCP'
6621 int main(int argc, char *argv[]) {
6622         exit(0);}
6623 EOCP
6624 if $cc $ccflags -c prototype.c >prototype.out 2>&1 ; then
6625         echo "Your C compiler appears to support function prototypes."
6626         val="$define"
6627 else
6628         echo "Your C compiler doesn't seem to understand function prototypes."
6629         val="$undef"
6630 fi
6631 set prototype
6632 eval $setvar
6633 $rm -f prototype*
6634
6635 case "$prototype" in
6636 "$define") ;;
6637 *)      ansi2knr='ansi2knr'
6638         echo " "
6639         cat <<EOM >&4
6640
6641 $me:  FATAL ERROR:
6642 This version of $package can only be compiled by a compiler that 
6643 understands function prototypes.  Unfortunately, your C compiler 
6644         $cc $ccflags
6645 doesn't seem to understand them.  Sorry about that.
6646
6647 If GNU cc is available for your system, perhaps you could try that instead.  
6648
6649 Eventually, we hope to support building Perl with pre-ANSI compilers.
6650 If you would like to help in that effort, please contact <perlbug@perl.org>.
6651
6652 Aborting Configure now.
6653 EOM
6654         exit 2
6655         ;;
6656 esac
6657
6658 : determine where public executables go
6659 echo " "
6660 set dflt bin bin
6661 eval $prefixit
6662 fn=d~
6663 rp='Pathname where the public executables will reside?'
6664 . ./getfile
6665 if $test "X$ansexp" != "X$binexp"; then
6666         installbin=''
6667 fi
6668 bin="$ans"
6669 binexp="$ansexp"
6670 : Change installation prefix, if necessary.
6671 : XXX Bug? -- ignores Configure -Dinstallprefix setting.
6672 if $test X"$prefix" != X"$installprefix"; then
6673         installbin=`echo $binexp | sed "s#^$prefix#$installprefix#"`
6674 else
6675         installbin="$binexp"
6676 fi
6677
6678 : Find perl5.005 or later.
6679 echo "Looking for a previously installed perl5.005 or later... "
6680 case "$perl5" in
6681 '')     for tdir in `echo "$binexp:$PATH" | $sed "s/$path_sep/ /g"`; do
6682                 : Check if this perl is recent and can load a simple module
6683                 if $test -x $tdir/perl && $tdir/perl -Mless -e 'use 5.005;' >/dev/null 2>&1; then
6684                         perl5=$tdir/perl
6685                         break;
6686                 elif $test -x $tdir/perl5 && $tdir/perl5 -Mless -e 'use 5.005;' >/dev/null 2>&1; then
6687                         perl5=$tdir/perl
6688                         break;
6689                 fi
6690         done
6691         ;;
6692 *)      perl5="$perl5"
6693         ;;
6694 esac
6695 case "$perl5" in
6696 '')     echo "None found.  That's ok.";;
6697 *)      echo "Using $perl5." ;;
6698 esac
6699
6700 : Determine list of previous versions to include in @INC
6701 $cat > getverlist <<EOPL
6702 #!$perl5 -w
6703 use File::Basename;
6704 \$api_versionstring = "$api_versionstring";
6705 \$version = "$version";
6706 \$stem = "$sitelib_stem";
6707 \$archname = "$archname";
6708 EOPL
6709         $cat >> getverlist <<'EOPL'
6710 # Can't have leading @ because metaconfig interprets it as a command!
6711 ;@inc_version_list=();
6712 # XXX Redo to do opendir/readdir? 
6713 if (-d $stem) {
6714     chdir($stem);
6715     ;@candidates = glob("5.*");
6716 }
6717 else {
6718     ;@candidates = ();
6719 }
6720
6721 # XXX ToDo:  These comparisons must be reworked when two-digit
6722 # subversions come along, so that 5.7.10 compares as greater than
6723 # 5.7.3!  By that time, hope that 5.6.x is sufficiently
6724 # widespread that we can use the built-in version vectors rather
6725 # than reinventing them here.  For 5.6.0, however, we must
6726 # assume this script will likely be run by 5.005_0x.  --AD 1/2000.
6727 foreach $d (@candidates) {
6728     if ($d lt $version) {
6729         if ($d ge $api_versionstring) {
6730             unshift(@inc_version_list, grep { -d } "$d/$archname", $d);
6731         }
6732         elsif ($d ge "5.005") {
6733             unshift(@inc_version_list, grep { -d } $d);
6734         }
6735     }
6736     else {
6737         # Skip newer version.  I.e. don't look in
6738         # 5.7.0 if we're installing 5.6.1.
6739     }
6740 }
6741
6742 if (@inc_version_list) {
6743     print join(' ', @inc_version_list);
6744 }
6745 else {
6746     # Blank space to preserve value for next Configure run.
6747     print " ";
6748 }
6749 EOPL
6750 chmod +x getverlist
6751 case "$inc_version_list" in
6752 '')     if test -x "$perl5"; then
6753                 dflt=`$perl5 getverlist`
6754         else
6755                 dflt='none'
6756         fi
6757         ;;
6758 $undef) dflt='none' ;;
6759 *)  dflt="$inc_version_list" ;;
6760 esac
6761 case "$dflt" in
6762 ''|' ') dflt=none ;;
6763 esac
6764 case "$dflt" in
6765 5.005) case "$bincompat5005" in
6766        $define|true|[yY]*) ;;
6767        *) dflt=none ;;
6768        esac
6769        ;;
6770 esac
6771 $cat <<'EOM'
6772
6773 In order to ease the process of upgrading, this version of perl 
6774 can be configured to use modules built and installed with earlier 
6775 versions of perl that were installed under $prefix.  Specify here
6776 the list of earlier versions that this version of perl should check.
6777 If Configure detected no earlier versions of perl installed under
6778 $prefix, then the list will be empty.  Answer 'none' to tell perl
6779 to not search earlier versions.
6780
6781 The default should almost always be sensible, so if you're not sure,
6782 just accept the default.
6783 EOM
6784
6785 rp='List of earlier versions to include in @INC?'
6786 . ./myread
6787 case "$ans" in
6788 [Nn]one|''|' ') inc_version_list=' ' ;;
6789 *) inc_version_list="$ans" ;;
6790 esac
6791 case "$inc_version_list" in
6792 ''|' ') 
6793         inc_version_list_init='0';;
6794 *)      inc_version_list_init=`echo $inc_version_list |
6795                 $sed -e 's/^/"/' -e 's/ /","/g' -e 's/$/",0/'`
6796         ;;
6797 esac
6798 $rm -f getverlist
6799
6800 : determine whether to install perl also as /usr/bin/perl
6801
6802 echo " "
6803 if $test -d /usr/bin -a "X$installbin" != X/usr/bin; then
6804         $cat <<EOM
6805 Many scripts expect perl to be installed as /usr/bin/perl.
6806 I can install the perl you are about to compile also as /usr/bin/perl
6807 (in addition to $installbin/perl).
6808 EOM
6809         case "$installusrbinperl" in
6810         "$undef"|[nN]*) dflt='n';;
6811         *)              dflt='y';;
6812         esac
6813         rp="Do you want to install perl as /usr/bin/perl?"
6814         . ./myread
6815         case "$ans" in
6816         [yY]*)  val="$define";;
6817         *)      val="$undef" ;;
6818         esac
6819 else
6820         val="$undef"
6821 fi
6822 set installusrbinperl
6823 eval $setvar
6824
6825 : see if dld is available
6826 set dld.h i_dld
6827 eval $inhdr
6828
6829 : see if dlopen exists
6830 xxx_runnm="$runnm"
6831 runnm=false
6832 set dlopen d_dlopen
6833 eval $inlibc
6834 runnm="$xxx_runnm"
6835
6836 : determine which dynamic loading, if any, to compile in
6837 echo " "
6838 dldir="ext/DynaLoader"
6839 case "$usedl" in
6840 $define|y|true)
6841         dflt='y'
6842         usedl="$define"
6843         ;;
6844 $undef|n|false)
6845         dflt='n'
6846         usedl="$undef"
6847         ;;
6848 *) 
6849         dflt='n'
6850         case "$d_dlopen" in
6851             $define) dflt='y' ;;
6852         esac
6853         case "$i_dld" in
6854             $define) dflt='y' ;;
6855         esac
6856         : Does a dl_xxx.xs file exist for this operating system
6857         $test -f $rsrc/$dldir/dl_${osname}.xs && dflt='y'
6858         ;;
6859 esac
6860 rp="Do you wish to use dynamic loading?"
6861 . ./myread
6862 usedl="$ans"
6863 case "$ans" in
6864 y*) usedl="$define"
6865         case "$dlsrc" in
6866         '')
6867                 if $test -f $rsrc/$dldir/dl_${osname}.xs ; then
6868                         dflt="$dldir/dl_${osname}.xs"
6869                 elif $test "$d_dlopen" = "$define" ; then
6870                         dflt="$dldir/dl_dlopen.xs"
6871                 elif $test "$i_dld" = "$define" ; then
6872                         dflt="$dldir/dl_dld.xs"
6873                 else
6874                         dflt=''
6875                 fi
6876                 ;;
6877         *)      dflt="$dldir/$dlsrc"
6878                 ;;
6879         esac
6880     echo "The following dynamic loading files are available:"
6881         : Can not go over to $dldir because getfile has path hard-coded in.
6882         tdir=`pwd`; cd $rsrc; $ls -C $dldir/dl*.xs; cd $tdir
6883         rp="Source file to use for dynamic loading"
6884         fn="fne"
6885         gfpth="$src"
6886         . ./getfile
6887         usedl="$define"
6888         : emulate basename
6889         dlsrc=`echo $ans | $sed -e 's%.*/\([^/]*\)$%\1%'`
6890
6891         $cat << EOM
6892
6893 Some systems may require passing special flags to $cc -c to
6894 compile modules that will be used to create a shared library.
6895 To use no flags, say "none".
6896
6897 EOM
6898     case "$cccdlflags" in
6899     '') case "$gccversion" in
6900                 '') case "$osname" in
6901                         hpux)   dflt='+z' ;;
6902                         next)   dflt='none' ;;
6903                         irix*)  dflt='-KPIC' ;;
6904                         svr4*|esix*|solaris|nonstopux) dflt='-KPIC' ;;
6905                         sunos)  dflt='-pic' ;;
6906                         *)      dflt='none' ;;
6907                     esac
6908                         ;;
6909                 *)  case "$osname" in
6910                         svr4*|esix*|solaris|nonstopux) dflt='-fPIC' ;;
6911                         *)      dflt='-fpic' ;;
6912                     esac ;;
6913             esac ;;
6914         ' ') dflt='none' ;;
6915     *)  dflt="$cccdlflags" ;;
6916     esac
6917     rp="Any special flags to pass to $cc -c to compile shared library modules?"
6918     . ./myread
6919     case "$ans" in
6920     none) cccdlflags=' ' ;;
6921     *) cccdlflags="$ans" ;;
6922     esac
6923
6924     cat << EOM
6925
6926 Some systems use ld to create libraries that can be dynamically loaded,
6927 while other systems (such as those using ELF) use $cc.
6928
6929 EOM
6930         case "$ld" in
6931         '')     $cat >try.c <<'EOM'
6932 /* Test for whether ELF binaries are produced */
6933 #include <fcntl.h>
6934 #include <stdlib.h>
6935 int main() {
6936         char b[4];
6937         int i = open("a.out",O_RDONLY);
6938         if(i == -1) 
6939                 exit(1); /* fail */
6940         if(read(i,b,4)==4 && b[0]==127 && b[1]=='E' && b[2]=='L' && b[3]=='F')
6941                 exit(0); /* succeed (yes, it's ELF) */
6942         else
6943                 exit(1); /* fail */
6944 }
6945 EOM
6946                 if $cc $ccflags try.c >/dev/null 2>&1 && ./a.out; then
6947                         cat <<EOM
6948 You appear to have ELF support.  I'll use $cc to build dynamic libraries.
6949 EOM
6950                         dflt="$cc"
6951                 else
6952                         echo "I'll use ld to build dynamic libraries."
6953                         dflt='ld'
6954                 fi
6955                 rm -f try.c a.out
6956                 ;;
6957         *)      dflt="$ld"
6958                 ;;
6959         esac
6960
6961     rp="What command should be used to create dynamic libraries?"
6962     . ./myread
6963         ld="$ans"
6964
6965     cat << EOM
6966
6967 Some systems may require passing special flags to $ld to create a
6968 library that can be dynamically loaded.  If your ld flags include
6969 -L/other/path options to locate libraries outside your loader's normal
6970 search path, you may need to specify those -L options here as well.  To
6971 use no flags, say "none".
6972
6973 EOM
6974     case "$lddlflags" in
6975     '') case "$osname" in
6976                         beos) dflt='-nostart' ;;
6977                         hpux) dflt='-b';
6978                               case "$gccversion" in
6979                               '') dflt="$dflt +vnocompatwarnings" ;;
6980                               esac
6981                               ;;        
6982                         linux|irix*)    dflt='-shared' ;;
6983                         next)  dflt='none' ;;
6984                         solaris) dflt='-G' ;;
6985                         sunos) dflt='-assert nodefinitions' ;;
6986                         svr4*|esix*|nonstopux) dflt="-G $ldflags" ;;
6987                 *)     dflt='none' ;;
6988                         esac
6989                         ;;
6990     *) dflt="$lddlflags" ;;
6991     esac
6992
6993         : Try to guess additional flags to pick up local libraries.
6994         : Be careful not to append to a plain 'none'
6995         case "$dflt" in
6996         none) dflt='' ;;
6997         esac
6998         for thisflag in $ldflags; do
6999                 case "$thisflag" in
7000                 -L*|-R*)
7001                         case " $dflt " in
7002                         *" $thisflag "*) ;;
7003                         *) dflt="$dflt $thisflag" ;;
7004                         esac
7005                         ;;
7006                 esac
7007         done
7008
7009         case "$dflt" in
7010         ''|' ') dflt='none' ;;
7011         esac
7012
7013     rp="Any special flags to pass to $ld to create a dynamically loaded library?"
7014     . ./myread
7015     case "$ans" in
7016     none) lddlflags=' ' ;;
7017     *) lddlflags="$ans" ;;
7018     esac
7019
7020         cat <<EOM
7021
7022 Some systems may require passing special flags to $cc to indicate that
7023 the resulting executable will use dynamic linking.  To use no flags,
7024 say "none".
7025
7026 EOM
7027     case "$ccdlflags" in
7028     '') case "$osname" in
7029                 hpux)   dflt='-Wl,-E' ;;
7030                 linux)  dflt='-rdynamic' ;;
7031                 next)   dflt='none' ;;
7032                 sunos)  dflt='none' ;;
7033                 *)      dflt='none' ;;
7034             esac ;;
7035     ' ')  dflt='none' ;;
7036     *)  dflt="$ccdlflags" ;;
7037     esac
7038     rp="Any special flags to pass to $cc to use dynamic linking?"
7039     . ./myread
7040     case "$ans" in
7041     none) ccdlflags=' ' ;;
7042     *) ccdlflags="$ans" ;;
7043     esac
7044     ;;
7045 *)  usedl="$undef"
7046         ld='ld'
7047     dlsrc='dl_none.xs'
7048     lddlflags=''
7049     ccdlflags=''
7050     ;;
7051 esac
7052
7053 also=''
7054 case "$usedl" in
7055 $undef)
7056         # No dynamic loading being used, so don't bother even to prompt.
7057         useshrplib='false'
7058         ;;
7059 *)      case "$useshrplib" in
7060         '')     case "$osname" in
7061                 svr4*|nonstopux|dgux|dynixptx|esix|powerux|beos|cygwin*)
7062                         dflt=y
7063                         also='Building a shared libperl is required for dynamic loading to work on your system.'
7064                         ;;
7065                 next*)
7066                         case "$osvers" in
7067                         4*)     dflt=y
7068                                 also='Building a shared libperl is needed for MAB support.'
7069                                 ;;
7070                         *)      dflt=n
7071                                 ;;
7072                         esac
7073                         ;;
7074                 *)      dflt=n
7075                         ;;
7076                 esac
7077                 ;;
7078         $define|true|[Yy]*)
7079                 dflt=y
7080                 ;;
7081         *)      dflt=n
7082                 ;;
7083         esac
7084         $cat << EOM
7085
7086 The perl executable is normally obtained by linking perlmain.c with
7087 libperl${_a}, any static extensions (usually just DynaLoader), and
7088 any other libraries needed on this system (such as -lm, etc.).  Since
7089 your system supports dynamic loading, it is probably possible to build
7090 a shared libperl.$so.  If you will have more than one executable linked
7091 to libperl.$so, this will significantly reduce the size of each
7092 executable, but it may have a noticeable affect on performance.  The
7093 default is probably sensible for your system.
7094 $also
7095
7096 EOM
7097         rp="Build a shared libperl.$so (y/n)"
7098         . ./myread
7099         case "$ans" in
7100         true|$define|[Yy]*)
7101                 useshrplib='true'  ;;
7102         *)      useshrplib='false' ;;
7103         esac
7104         ;;
7105 esac
7106
7107 case "$useshrplib" in
7108 true)
7109         case "$libperl" in
7110         '')
7111                 # Figure out a good name for libperl.so.  Since it gets stored in
7112                 # a version-specific architecture-dependent library, the version
7113                 # number isn't really that important, except for making cc/ld happy.
7114                 #
7115                 # A name such as libperl.so.3.1
7116                 majmin="libperl.$so.$patchlevel.$subversion"
7117                 # A name such as libperl.so.301
7118                 majonly=`echo $patchlevel $subversion |
7119                         $awk '{printf "%d%02d", $1, $2}'`
7120                 majonly=libperl.$so.$majonly
7121                 # I'd prefer to keep the os-specific stuff here to a minimum, and
7122                 # rely on figuring it out from the naming of libc.
7123                 case "${osname}${osvers}" in
7124                 next4*)
7125                         dflt=libperl.5.$so
7126                         # XXX How handle the --version stuff for MAB?
7127                         ;;
7128                 linux*)  # ld won't link with a bare -lperl otherwise.
7129                         dflt=libperl.$so
7130                         ;;
7131                 cygwin*) # include version
7132                         dflt=`echo libperl$version | sed -e 's/\./_/g'`$lib_ext
7133                         ;;
7134                 *)      # Try to guess based on whether libc has major.minor.
7135                         case "$libc" in
7136                         *libc.$so.[0-9]*.[0-9]*) dflt=$majmin ;;
7137                         *libc.$so.[0-9]*) dflt=$majonly ;;
7138                         *)      dflt=libperl.$so ;;
7139                         esac
7140                         ;;
7141                 esac
7142                 ;;
7143         *)      dflt=$libperl
7144                 ;;
7145         esac
7146         cat << EOM
7147
7148 I need to select a good name for the shared libperl.  If your system uses
7149 library names with major and minor numbers, then you might want something
7150 like $majmin.  Alternatively, if your system uses a single version
7151 number for shared libraries, then you might want to use $majonly.
7152 Or, your system might be quite happy with a simple libperl.$so.
7153
7154 Since the shared libperl will get installed into a version-specific
7155 architecture-dependent directory, the version number of the shared perl
7156 library probably isn't important, so the default should be o.k.
7157
7158 EOM
7159         rp='What name do you want to give to the shared libperl?'
7160         . ./myread
7161         libperl=$ans
7162         echo "Ok, I'll use $libperl"
7163         ;;
7164 *)
7165         libperl="libperl${_a}"
7166         ;;
7167 esac
7168
7169 # Detect old use of shrpdir via undocumented Configure -Dshrpdir
7170 case "$shrpdir" in
7171 '') ;;
7172 *)      $cat >&4 <<EOM
7173 WARNING:  Use of the shrpdir variable for the installation location of
7174 the shared $libperl is not supported.  It was never documented and
7175 will not work in this version.  Let me (perlbug@perl.org)
7176 know of any problems this may cause.
7177
7178 EOM
7179         case "$shrpdir" in
7180         "$archlibexp/CORE")
7181                 $cat >&4 <<EOM
7182 But your current setting of $shrpdir is
7183 the default anyway, so it's harmless.
7184 EOM
7185                 ;;
7186         *)
7187                 $cat >&4 <<EOM
7188 Further, your current attempted setting of $shrpdir
7189 conflicts with the value of $archlibexp/CORE
7190 that installperl will use.
7191 EOM
7192                 ;;
7193         esac
7194         ;;
7195 esac
7196
7197 # How will the perl executable find the installed shared $libperl?
7198 # Add $xxx to ccdlflags.
7199 # If we can't figure out a command-line option, use $shrpenv to
7200 # set env LD_RUN_PATH.  The main perl makefile uses this.
7201 shrpdir=$archlibexp/CORE
7202 xxx=''
7203 tmp_shrpenv=''
7204 if "$useshrplib"; then
7205     case "$osname" in 
7206         aix)
7207                 # We'll set it in Makefile.SH...
7208                 ;;
7209         solaris|netbsd)
7210                 xxx="-R $shrpdir"
7211                 ;;
7212         freebsd)
7213                 xxx="-Wl,-R$shrpdir"
7214                 ;;
7215         linux|irix*|dec_osf)
7216                 xxx="-Wl,-rpath,$shrpdir"
7217                 ;;
7218         next)
7219                 # next doesn't like the default...
7220                 ;;
7221         beos)
7222                 # beos doesn't like the default, either.
7223                 ;;
7224         hpux*)
7225                 # hpux doesn't like the default, either.
7226                 tmp_shrpenv="env LDOPTS=\"+s +b${shrpdir}\""
7227                 ;;
7228         *)
7229                 tmp_shrpenv="env LD_RUN_PATH=$shrpdir"
7230                 ;;
7231         esac
7232         case "$xxx" in
7233         '') ;;
7234         *)      
7235                 # Only add $xxx if it isn't already in ccdlflags.
7236                 case " $ccdlflags " in
7237                 *" $xxx "*)     ;;
7238                 *)      ccdlflags="$ccdlflags $xxx"
7239                         cat <<EOM >&4
7240
7241 Adding $xxx to the flags
7242 passed to $ld so that the perl executable will find the 
7243 installed shared $libperl.
7244
7245 EOM
7246                         ;;
7247                 esac
7248                 ;;
7249         esac
7250 fi
7251 # Fix ccdlflags in AIX for building external extensions.
7252 # (For building Perl itself bare -bE:perl.exp is needed,
7253 #  Makefile.SH takes care of this.)
7254 case "$osname" in
7255 aix) ccdlflags="$ccdlflags -bE:$installarchlib/CORE/perl.exp" ;;
7256 esac
7257 # Respect a hint or command-line value.
7258 case "$shrpenv" in
7259 '') shrpenv="$tmp_shrpenv" ;;
7260 esac
7261 case "$ldlibpthname" in
7262 '')     ldlibpthname=LD_LIBRARY_PATH ;;
7263 none)   ldlibpthname='' ;;
7264 esac
7265
7266 : determine where manual pages are on this system
7267 echo " "
7268 case "$sysman" in
7269 '') 
7270         syspath='/usr/man/man1 /usr/man/mann /usr/man/manl /usr/man/local/man1'
7271         syspath="$syspath /usr/man/u_man/man1 /usr/share/man/man1"
7272         syspath="$syspath /usr/catman/u_man/man1 /usr/man/l_man/man1"
7273         syspath="$syspath /usr/local/man/u_man/man1 /usr/local/man/l_man/man1"
7274         syspath="$syspath /usr/man/man.L /local/man/man1 /usr/local/man/man1"
7275         sysman=`./loc . /usr/man/man1 $syspath`
7276         ;;
7277 esac
7278 if $test -d "$sysman"; then
7279         echo "System manual is in $sysman." >&4
7280 else
7281         echo "Could not find manual pages in source form." >&4
7282 fi
7283
7284 : determine where manual pages go
7285 set man1dir man1dir none
7286 eval $prefixit
7287 $cat <<EOM
7288
7289 $spackage has manual pages available in source form.
7290 EOM
7291 case "$nroff" in
7292 nroff)
7293         echo "However, you don't have nroff, so they're probably useless to you."
7294         case "$man1dir" in
7295         '') man1dir="none";;
7296         esac;;
7297 esac
7298 echo "If you don't want the manual sources installed, answer 'none'."
7299 case "$man1dir" in
7300 ' ') dflt=none
7301         ;;
7302 '')
7303         lookpath="$prefixexp/man/man1 $prefixexp/man/l_man/man1"
7304         lookpath="$lookpath $prefixexp/man/p_man/man1"
7305         lookpath="$lookpath $prefixexp/man/u_man/man1"
7306         lookpath="$lookpath $prefixexp/man/man.1"
7307         case "$sysman" in
7308         */?_man*)       dflt=`./loc . $prefixexp/l_man/man1 $lookpath` ;;
7309         *)      dflt=`./loc . $prefixexp/man/man1 $lookpath` ;;
7310         esac
7311         set dflt
7312         eval $prefixup
7313         ;;
7314 *)  dflt="$man1dir"
7315         ;;
7316 esac
7317 echo " "
7318 fn=dn+~
7319 rp="Where do the main $spackage manual pages (source) go?"
7320 . ./getfile
7321 if $test "X$man1direxp" != "X$ansexp"; then
7322         installman1dir=''
7323 fi
7324 man1dir="$ans"
7325 man1direxp="$ansexp"
7326 case "$man1dir" in
7327 '')     man1dir=' '
7328         installman1dir='';;
7329 esac
7330
7331 : Change installation prefix, if necessary.
7332 if $test X"$prefix" != X"$installprefix"; then
7333         installman1dir=`echo $man1direxp | $sed "s#^$prefix#$installprefix#"`
7334 else
7335         installman1dir="$man1direxp"
7336 fi
7337
7338 : What suffix to use on installed man pages
7339
7340 case "$man1dir" in
7341 ' ')
7342         man1ext='0'
7343         ;;
7344 *)
7345         rp="What suffix should be used for the main $spackage man pages?"
7346         case "$man1ext" in
7347         '')     case "$man1dir" in
7348                 *1)  dflt=1 ;;
7349                 *1p) dflt=1p ;;
7350                 *1pm) dflt=1pm ;;
7351                 *l) dflt=l;;
7352                 *n) dflt=n;;
7353                 *o) dflt=o;;
7354                 *p) dflt=p;;
7355                 *C) dflt=C;;
7356                 *L) dflt=L;;
7357                 *L1) dflt=L1;;
7358                 *) dflt=1;;
7359                 esac
7360                 ;;
7361         *)      dflt="$man1ext";;
7362         esac
7363         . ./myread
7364         man1ext="$ans"
7365         ;;
7366 esac
7367
7368 : see if we can have long filenames
7369 echo " "
7370 first=123456789abcdef
7371 $rm -f $first
7372 if (echo hi >$first) 2>/dev/null; then
7373         if $test -f 123456789abcde; then
7374                 echo 'You cannot have filenames longer than 14 characters.  Sigh.' >&4
7375                 val="$undef"
7376         else
7377                 echo 'You can have filenames longer than 14 characters.'>&4
7378                 val="$define"
7379         fi
7380 else
7381         $cat <<'EOM'
7382 You can't have filenames longer than 14 chars.
7383 You can't even think about them!
7384 EOM
7385         val="$undef"
7386 fi 
7387 set d_flexfnam
7388 eval $setvar
7389 $rm -rf 123456789abcde*
7390
7391 : determine where library module manual pages go
7392 set man3dir man3dir none
7393 eval $prefixit
7394 $cat <<EOM
7395
7396 $spackage has manual pages for many of the library modules.
7397 EOM
7398
7399 case "$nroff" in
7400 nroff)
7401         $cat <<'EOM'
7402 However, you don't have nroff, so they're probably useless to you.
7403 EOM
7404         case "$man3dir" in
7405         '') man3dir="none";;
7406         esac;;
7407 esac
7408
7409 case "$d_flexfnam" in
7410 undef)
7411         $cat <<'EOM'
7412 However, your system can't handle the long file names like File::Basename.3. 
7413 EOM
7414         case "$man3dir" in
7415         '') man3dir="none";;
7416         esac;;
7417 esac
7418
7419 echo "If you don't want the manual sources installed, answer 'none'."
7420 prog=`echo $package | $sed 's/-*[0-9.]*$//'`
7421 case "$man3dir" in
7422 '')     dflt=`echo "$man1dir" | $sed -e 's/man1/man3/g' -e 's/man\.1/man\.3/g'`
7423         if $test -d "$privlib/man/man3"; then
7424                 cat <<EOM >&4
7425
7426 WARNING:  Previous versions of perl installed man3 pages into
7427 $privlib/man/man3.  This version will suggest a 
7428 new default of $dflt.  
7429 EOM
7430                 tdflt=$dflt
7431                 dflt='n'
7432                 rp='Do you wish to preserve the old behavior?(y/n)'
7433                 . ./myread
7434                 case "$ans" in
7435                 y*) dflt="$privlib/man/man3" ;;
7436                 *)  dflt=$tdflt ;;
7437                 esac
7438     fi
7439         ;;
7440 *)      dflt="$man3dir" ;;
7441 esac
7442 case "$dflt" in
7443 ' ') dflt=none ;;
7444 esac
7445 echo " "
7446 fn=dn+~
7447 rp="Where do the $package library man pages (source) go?"
7448 . ./getfile
7449 man3dir="$ans"
7450 man3direxp="$ansexp"
7451 case "$man3dir" in
7452 '')     man3dir=' '
7453         installman3dir='';;
7454 esac
7455
7456 : Change installation prefix, if necessary.
7457 if $test X"$prefix" != X"$installprefix"; then
7458         installman3dir=`echo $man3direxp | $sed "s#^$prefix#$installprefix#"`
7459 else
7460         installman3dir="$man3direxp"
7461 fi
7462
7463 : What suffix to use on installed man pages
7464 case "$man3dir" in
7465 ' ')
7466         man3ext='0'
7467         ;;
7468 *)
7469         rp="What suffix should be used for the $package library man pages?"
7470         case "$man3ext" in
7471         '')     case "$man3dir" in
7472                 *3)  dflt=3 ;;
7473                 *3p) dflt=3p ;;
7474                 *3pm) dflt=3pm ;;
7475                 *l) dflt=l;;
7476                 *n) dflt=n;;
7477                 *o) dflt=o;;
7478                 *p) dflt=p;;
7479                 *C) dflt=C;;
7480                 *L) dflt=L;;
7481                 *L3) dflt=L3;;
7482                 *) dflt=3;;
7483                 esac
7484                 ;;
7485         *)      dflt="$man3ext";;
7486         esac
7487         . ./myread
7488         man3ext="$ans"
7489         ;;
7490 esac
7491
7492 : see if we have to deal with yellow pages, now NIS.
7493 if $test -d /usr/etc/yp || $test -d /etc/yp; then
7494         if $test -f /usr/etc/nibindd; then
7495                 echo " "
7496                 echo "I'm fairly confident you're on a NeXT."
7497                 echo " "
7498                 rp='Do you get the hosts file via NetInfo?'
7499                 dflt=y
7500                 case "$hostcat" in
7501                 nidump*) ;;
7502                 '') ;;
7503                 *) dflt=n;;
7504                 esac
7505                 . ./myread
7506                 case "$ans" in
7507                 y*) hostcat='nidump hosts .';;
7508                 *)      case "$hostcat" in
7509                         nidump*) hostcat='';;
7510                         esac
7511                         ;;
7512                 esac
7513         fi
7514         case "$hostcat" in
7515         nidump*) ;;
7516         *)
7517                 case "$hostcat" in
7518                 *ypcat*) dflt=y;;
7519                 '') if $contains '^\+' /etc/passwd >/dev/null 2>&1; then
7520                                 dflt=y
7521                         else
7522                                 dflt=n
7523                         fi;;
7524                 *) dflt=n;;
7525                 esac
7526                 echo " "
7527                 rp='Are you getting the hosts file via yellow pages?'
7528                 . ./myread
7529                 case "$ans" in
7530                 y*) hostcat='ypcat hosts';;
7531                 *) hostcat='cat /etc/hosts';;
7532                 esac
7533                 ;;
7534         esac
7535 fi
7536 case "$hostcat" in
7537 '') test -f /etc/hosts && hostcat='cat /etc/hosts';;
7538 esac
7539 case "$groupcat" in
7540 '') test -f /etc/group && groupcat='cat /etc/group';;
7541 esac
7542 case "$passcat" in
7543 '') test -f /etc/passwd && passcat='cat /etc/passwd';;
7544 esac
7545
7546 : now get the host name
7547 echo " "
7548 echo "Figuring out host name..." >&4
7549 case "$myhostname" in
7550 '') cont=true
7551         echo 'Maybe "hostname" will work...'
7552         if tans=`sh -c hostname 2>&1` ; then
7553                 myhostname=$tans
7554                 phostname=hostname
7555                 cont=''
7556         fi
7557         ;;
7558 *) cont='';;
7559 esac
7560 if $test "$cont"; then
7561         if ./xenix; then
7562                 echo 'Oh, dear.  Maybe "/etc/systemid" is the key...'
7563                 if tans=`cat /etc/systemid 2>&1` ; then
7564                         myhostname=$tans
7565                         phostname='cat /etc/systemid'
7566                         echo "Whadyaknow.  Xenix always was a bit strange..."
7567                         cont=''
7568                 fi
7569         elif $test -r /etc/systemid; then
7570                 echo "(What is a non-Xenix system doing with /etc/systemid?)"
7571         fi
7572 fi
7573 if $test "$cont"; then
7574         echo 'No, maybe "uuname -l" will work...'
7575         if tans=`sh -c 'uuname -l' 2>&1` ; then
7576                 myhostname=$tans
7577                 phostname='uuname -l'
7578         else
7579                 echo 'Strange.  Maybe "uname -n" will work...'
7580                 if tans=`sh -c 'uname -n' 2>&1` ; then
7581                         myhostname=$tans
7582                         phostname='uname -n'
7583                 else
7584                         echo 'Oh well, maybe I can mine it out of whoami.h...'
7585                         if tans=`sh -c $contains' sysname $usrinc/whoami.h' 2>&1` ; then
7586                                 myhostname=`echo "$tans" | $sed 's/^.*"\(.*\)"/\1/'`
7587                                 phostname="sed -n -e '"'/sysname/s/^.*\"\\(.*\\)\"/\1/{'"' -e p -e q -e '}' <$usrinc/whoami.h"
7588                         else
7589                                 case "$myhostname" in
7590                                 '') echo "Does this machine have an identity crisis or something?"
7591                                         phostname='';;
7592                                 *)
7593                                         echo "Well, you said $myhostname before..."
7594                                         phostname='echo $myhostname';;
7595                                 esac
7596                         fi
7597                 fi
7598         fi
7599 fi
7600 : you do not want to know about this
7601 set $myhostname
7602 myhostname=$1
7603
7604 : verify guess
7605 if $test "$myhostname" ; then
7606         dflt=y
7607         rp='Your host name appears to be "'$myhostname'".'" Right?"
7608         . ./myread
7609         case "$ans" in
7610         y*) ;;
7611         *) myhostname='';;
7612         esac
7613 fi
7614
7615 : bad guess or no guess
7616 while $test "X$myhostname" = X ; do
7617         dflt=''
7618         rp="Please type the (one word) name of your host:"
7619         . ./myread
7620         myhostname="$ans"
7621 done
7622
7623 : translate upper to lower if necessary
7624 case "$myhostname" in
7625 *[A-Z]*)
7626         echo "(Normalizing case in your host name)"
7627         myhostname=`echo $myhostname | ./tr '[A-Z]' '[a-z]'`
7628         ;;
7629 esac
7630
7631 case "$myhostname" in
7632 *.*)
7633         dflt=`expr "X$myhostname" : "X[^.]*\(\..*\)"`
7634         myhostname=`expr "X$myhostname" : "X\([^.]*\)\."`
7635         echo "(Trimming domain name from host name--host name is now $myhostname)"
7636         ;;
7637 *) case "$mydomain" in
7638         '')
7639                 {
7640                         test "X$hostcat" = "Xypcat hosts" &&
7641                         ypmatch "$myhostname" hosts 2>/dev/null |\
7642                                 $sed -e 's/[     ]*#.*//; s/$/ /' > hosts && \
7643                         $test -s hosts
7644                 } || {
7645                         test "X$hostcat" != "X" &&
7646                         $hostcat | $sed -n -e "s/[       ]*#.*//; s/\$/ /
7647                                         /[       ]$myhostname[  . ]/p" > hosts
7648                 }
7649                 tmp_re="[       . ]"
7650                 if $test -f hosts; then
7651                         $test x`$awk "/[0-9].*[  ]$myhostname$tmp_re/ { sum++ }
7652                              END { print sum }" hosts` = x1 || tmp_re="[         ]"
7653                         dflt=.`$awk "/[0-9].*[   ]$myhostname$tmp_re/ {for(i=2; i<=NF;i++) print \\\$i}" \
7654                                 hosts | $sort | $uniq | \
7655                                 $sed -n -e "s/$myhostname\.\([-a-zA-Z0-9_.]\)/\1/p"`
7656                         case `$echo X$dflt` in
7657                         X*\ *)  echo "(Several hosts in the database matched hostname)"
7658                                 dflt=.
7659                                 ;;
7660                         X.) echo "(You do not have fully-qualified names in the hosts database)"
7661                                 ;;
7662                         esac
7663                 else
7664                         echo "(I cannot locate a hosts database anywhere)"
7665                         dflt=.
7666                 fi
7667                 case "$dflt" in
7668                 .)
7669                         tans=`./loc resolv.conf X /etc /usr/etc`
7670                         if $test -f "$tans"; then
7671                                 echo "(Attempting domain name extraction from $tans)"
7672                                 dflt=.`$sed -n -e 's/   / /g' \
7673                                   -e 's/^search  *\([^ ]*\).*/\1/p' $tans \
7674                                   | ./tr '[A-Z]' '[a-z]' 2>/dev/null`
7675                                 case "$dflt" in
7676                                 .) dflt=.`$sed -n -e 's/        / /g' \
7677                                      -e 's/^domain  *\([^ ]*\).*/\1/p' $tans \
7678                                      | ./tr '[A-Z]' '[a-z]' 2>/dev/null`
7679                                         ;;
7680                                 esac
7681                         fi
7682                         ;;
7683                 esac
7684                 case "$dflt" in
7685                 .) echo "(No help from resolv.conf either -- attempting clever guess)"
7686                         dflt=.`sh -c domainname 2>/dev/null`
7687                         case "$dflt" in
7688                         '') dflt='.';;
7689                         .nis.*|.yp.*|.main.*) dflt=`echo $dflt | $sed -e 's/^\.[^.]*//'`;;
7690                         esac
7691                         ;;
7692                 esac
7693                 case "$dflt$osname" in
7694                 .os390) echo "(Attempting domain name extraction from //'SYS1.TCPPARMS(TCPDATA)')"
7695                         dflt=.`awk '/^DOMAINORIGIN/ {print $2}' "//'SYS1.TCPPARMS(TCPDATA)'" 2>/dev/null`
7696                         ;;
7697                 esac
7698                 case "$dflt" in
7699                 .) echo "(Lost all hope -- silly guess then)"
7700                         dflt='.uucp'
7701                         ;;
7702                 esac
7703                 $rm -f hosts
7704                 ;;
7705         *) dflt="$mydomain";;
7706         esac;;
7707 esac
7708 echo " "
7709 rp="What is your domain name?"
7710 . ./myread
7711 tans="$ans"
7712 case "$ans" in
7713 '') ;;
7714 .*) ;;
7715 *) tans=".$tans";;
7716 esac
7717 mydomain="$tans"
7718
7719 : translate upper to lower if necessary
7720 case "$mydomain" in
7721 *[A-Z]*)
7722         echo "(Normalizing case in your domain name)"
7723         mydomain=`echo $mydomain | ./tr '[A-Z]' '[a-z]'`
7724         ;;
7725 esac
7726
7727 : a little sanity check here
7728 case "$phostname" in
7729 '') ;;
7730 *)
7731         case `$phostname | ./tr '[A-Z]' '[a-z]'` in
7732         $myhostname$mydomain|$myhostname) ;;
7733         *)
7734                 case "$phostname" in
7735                 sed*)
7736                         echo "(That doesn't agree with your whoami.h file, by the way.)"
7737                         ;;
7738                 *)
7739                         echo "(That doesn't agree with your $phostname command, by the way.)"
7740                         ;;
7741                 esac
7742         ;;
7743         esac
7744         ;;
7745 esac
7746
7747 $cat <<EOM
7748
7749 I need to get your e-mail address in Internet format if possible, i.e.
7750 something like user@host.domain. Please answer accurately since I have
7751 no easy means to double check it. The default value provided below
7752 is most probably close to reality but may not be valid from outside
7753 your organization...
7754
7755 EOM
7756 cont=x
7757 while test "$cont"; do
7758         case "$cf_email" in
7759         '') dflt="$cf_by@$myhostname$mydomain";;
7760         *) dflt="$cf_email";;
7761         esac
7762         rp='What is your e-mail address?'
7763         . ./myread
7764         cf_email="$ans"
7765         case "$cf_email" in
7766         *@*.*) cont='' ;;
7767         *)
7768                 rp='Address does not look like an Internet one.  Use it anyway?'
7769                 case "$fastread" in
7770                 yes) dflt=y ;;
7771                 *) dflt=n ;;
7772                 esac
7773                 . ./myread
7774                 case "$ans" in
7775                 y*) cont='' ;;
7776                 *) echo " " ;;
7777                 esac
7778                 ;;
7779         esac
7780 done
7781
7782 $cat <<EOM
7783
7784 If you or somebody else will be maintaining perl at your site, please
7785 fill in the correct e-mail address here so that they may be contacted
7786 if necessary. Currently, the "perlbug" program included with perl
7787 will send mail to this address in addition to perlbug@perl.org. You may
7788 enter "none" for no administrator.
7789
7790 EOM
7791 case "$perladmin" in
7792 '') dflt="$cf_email";;
7793 *) dflt="$perladmin";;
7794 esac
7795 rp='Perl administrator e-mail address'
7796 . ./myread
7797 perladmin="$ans"
7798
7799 : determine whether to only install version-specific parts.
7800 echo " "
7801 $cat <<EOM
7802 Do you want to install only the version-specific parts of the perl
7803 distribution?  Usually you do *not* want to do this.
7804 EOM
7805 case "$versiononly" in
7806 "$define"|[Yy]*|true) dflt='y' ;;
7807 *) dflt='n';
7808 esac
7809 rp="Do you want to install only the version-specific parts of perl?"
7810 . ./myread
7811 case "$ans" in
7812 [yY]*)  val="$define";;
7813 *)      val="$undef" ;;
7814 esac
7815 set versiononly
7816 eval $setvar
7817
7818 : figure out how to guarantee perl startup
7819 case "$startperl" in
7820 '')
7821         case "$sharpbang" in
7822         *!)
7823                 $cat <<EOH
7824
7825 I can use the #! construct to start perl on your system. This will
7826 make startup of perl scripts faster, but may cause problems if you
7827 want to share those scripts and perl is not in a standard place
7828 ($binexp/perl) on all your platforms. The alternative is to force
7829 a shell by starting the script with a single ':' character.
7830
7831 EOH
7832                 case "$versiononly" in
7833                 "$define")      dflt="$binexp/perl$version";;  
7834                 *)              dflt="$binexp/perl";;
7835                 esac
7836                 rp='What shall I put after the #! to start up perl ("none" to not use #!)?'
7837                 . ./myread
7838                 case "$ans" in
7839                 none)   startperl=": # use perl";;
7840                 *)      startperl="#!$ans"
7841                         if $test 30 -lt `echo "$ans" | wc -c`; then
7842                                 $cat >&4 <<EOM
7843
7844 WARNING:  Some systems limit the #! command to 32 characters.
7845 If you experience difficulty running Perl scripts with #!, try
7846 installing Perl in a directory with a shorter pathname.
7847
7848 EOM
7849                         fi ;;
7850                 esac
7851                 ;;
7852         *) startperl=": # use perl"
7853                 ;;
7854         esac
7855         ;;
7856 esac
7857 echo "I'll use $startperl to start perl scripts."
7858
7859 : figure best path for perl in scripts
7860 case "$perlpath" in
7861 '')
7862         perlpath="$binexp/perl"
7863         case "$startperl" in
7864         *!*) ;;
7865         *)
7866                 $cat <<EOH
7867
7868 I will use the "eval 'exec'" idiom to start Perl on your system.
7869 I can use the full path of your Perl binary for this purpose, but
7870 doing so may cause problems if you want to share those scripts and
7871 Perl is not always in a standard place ($binexp/perl).
7872
7873 EOH
7874                 dflt="$binexp/perl"
7875                 rp="What path shall I use in \"eval 'exec'\"?"
7876                 . ./myread
7877                 perlpath="$ans"
7878                 ;;
7879         esac
7880         ;;
7881 esac
7882 case "$startperl" in
7883 *!*)    ;;
7884 *)      echo "I'll use $perlpath in \"eval 'exec'\"" ;;
7885 esac
7886
7887 : determine where public executable scripts go
7888 set scriptdir scriptdir
7889 eval $prefixit
7890 case "$scriptdir" in
7891 '')
7892         dflt="$bin"
7893         : guess some guesses
7894         $test -d /usr/share/scripts && dflt=/usr/share/scripts
7895         $test -d /usr/share/bin     && dflt=/usr/share/bin
7896         $test -d /usr/local/script  && dflt=/usr/local/script
7897         $test -d /usr/local/scripts && dflt=/usr/local/scripts
7898         $test -d $prefixexp/script  && dflt=$prefixexp/script
7899         set dflt
7900         eval $prefixup
7901         ;;
7902 *)  dflt="$scriptdir"
7903         ;;
7904 esac
7905 $cat <<EOM
7906  
7907 Some installations have a separate directory just for executable scripts so
7908 that they can mount it across multiple architectures but keep the scripts in
7909 one spot.  You might, for example, have a subdirectory of /usr/share for this.
7910 Or you might just lump your scripts in with all your other executables.
7911  
7912 EOM
7913 fn=d~
7914 rp='Where do you keep publicly executable scripts?'
7915 . ./getfile
7916 if $test "X$ansexp" != "X$scriptdirexp"; then
7917         installscript=''
7918 fi
7919 scriptdir="$ans"
7920 scriptdirexp="$ansexp"
7921 : Change installation prefix, if necessary.
7922 if $test X"$prefix" != X"$installprefix"; then
7923         installscript=`echo $scriptdirexp | sed "s#^$prefix#$installprefix#"`
7924 else
7925         installscript="$scriptdirexp"
7926 fi
7927
7928 : determine where add-on public executables go
7929 case "$sitebin" in
7930 '')     dflt=$siteprefix/bin ;;
7931 *)      dflt=$sitebin ;;
7932 esac
7933 fn=d~
7934 rp='Pathname where the add-on public executables should be installed?'
7935 . ./getfile
7936 sitebin="$ans"
7937 sitebinexp="$ansexp"
7938 : Change installation prefix, if necessary.
7939 if $test X"$prefix" != X"$installprefix"; then
7940         installsitebin=`echo $sitebinexp | sed "s#^$prefix#$installprefix#"`
7941 else
7942         installsitebin="$sitebinexp"
7943 fi
7944
7945 case "$vendorprefix" in
7946 '')     d_vendorbin="$undef"
7947         vendorbin=''
7948         vendorbinexp=''
7949         ;;
7950 *)      d_vendorbin="$define"
7951         : determine where vendor-supplied executables go.
7952         case "$vendorbin" in
7953         '') dflt=$vendorprefix/bin ;;
7954         *)      dflt="$vendorbin" ;;
7955         esac
7956         fn=d~+
7957         rp='Pathname for the vendor-supplied executables directory?'
7958         . ./getfile
7959         vendorbin="$ans"
7960         vendorbinexp="$ansexp"
7961         ;;
7962 esac
7963 : Change installation prefix, if necessary.
7964 if $test X"$prefix" != X"$installprefix"; then
7965         installvendorbin=`echo $vendorbinexp | $sed "s#^$prefix#$installprefix#"`
7966 else
7967         installvendorbin="$vendorbinexp"
7968 fi
7969
7970 : see if qgcvt exists
7971 set qgcvt d_qgcvt
7972 eval $inlibc
7973
7974 echo " "
7975
7976 if $test X"$d_longdbl" = X"$define"; then
7977
7978 echo "Checking how to print long doubles..." >&4
7979
7980 if $test X"$sPRIfldbl" = X -a X"$doublesize" = X"$longdblsize"; then
7981         $cat >try.c <<'EOCP'
7982 #include <sys/types.h>
7983 #include <stdio.h>
7984 int main() {
7985   double d = 123.456;
7986   printf("%.3f\n", d);
7987 }
7988 EOCP
7989         set try
7990         if eval $compile; then
7991                 yyy=`./try$exe_ext`
7992                 case "$yyy" in
7993                 123.456)
7994                         sPRIfldbl='"f"'; sPRIgldbl='"g"'; sPRIeldbl='"e"';
7995                         sPRIFUldbl='"F"'; sPRIGUldbl='"G"'; sPRIEUldbl='"E"';
7996                         echo "We will use %f."
7997                         ;;
7998                 esac
7999         fi
8000 fi
8001
8002 if $test X"$sPRIfldbl" = X; then
8003         $cat >try.c <<'EOCP'
8004 #include <sys/types.h>
8005 #include <stdio.h>
8006 int main() {
8007   long double d = 123.456;
8008   printf("%.3llf\n", d);
8009 }
8010 EOCP
8011         set try
8012         if eval $compile; then
8013                 yyy=`./try$exe_ext`
8014                 case "$yyy" in
8015                 123.456)
8016                         sPRIfldbl='"llf"'; sPRIgldbl='"llg"'; sPRIeldbl='"lle"';
8017                         sPRIFUldbl='"llF"'; sPRIGUldbl='"llG"'; sPRIEUldbl='"llE"';
8018                         echo "We will use %llf."
8019                         ;;
8020                 esac
8021         fi
8022 fi
8023
8024 if $test X"$sPRIfldbl" = X; then
8025         $cat >try.c <<'EOCP'
8026 #include <sys/types.h>
8027 #include <stdio.h>
8028 int main() {
8029   long double d = 123.456;
8030   printf("%.3Lf\n", d);
8031 }
8032 EOCP
8033         set try
8034         if eval $compile; then
8035                 yyy=`./try$exe_ext`
8036                 case "$yyy" in
8037                 123.456)
8038                         sPRIfldbl='"Lf"'; sPRIgldbl='"Lg"'; sPRIeldbl='"Le"';
8039                         sPRIFUldbl='"LF"'; sPRIGUldbl='"LG"'; sPRIEUldbl='"LE"';
8040                         echo "We will use %Lf."
8041                         ;;
8042                 esac
8043         fi
8044 fi
8045
8046 if $test X"$sPRIfldbl" = X; then
8047         $cat >try.c <<'EOCP'
8048 #include <sys/types.h>
8049 #include <stdio.h>
8050 int main() {
8051   long double d = 123.456;
8052   printf("%.3lf\n", d);
8053 }
8054 EOCP
8055         set try
8056         if eval $compile; then
8057                 yyy=`./try$exe_ext`
8058                 case "$yyy" in
8059                 123.456)
8060                         sPRIfldbl='"lf"'; sPRIgldbl='"lg"'; sPRIeldbl='"le"';
8061                         sPRIFUldbl='"lF"'; sPRIGUldbl='"lG"'; sPRIEUldbl='"lE"';
8062                         echo "We will use %lf."
8063                         ;;
8064                 esac
8065         fi
8066 fi
8067
8068 if $test X"$sPRIfldbl" = X; then
8069         echo "Cannot figure out how to print long doubles." >&4
8070 else
8071         sSCNfldbl=$sPRIfldbl    # expect consistency
8072 fi
8073
8074 $rm -f try try.*
8075
8076 fi # d_longdbl
8077
8078 case "$sPRIfldbl" in
8079 '')     d_PRIfldbl="$undef"; d_PRIgldbl="$undef"; d_PRIeldbl="$undef"; 
8080         d_PRIFUldbl="$undef"; d_PRIGUldbl="$undef"; d_PRIEUldbl="$undef"; 
8081         d_SCNfldbl="$undef";
8082         ;;
8083 *)      d_PRIfldbl="$define"; d_PRIgldbl="$define"; d_PRIeldbl="$define"; 
8084         d_PRIFUldbl="$define"; d_PRIGUldbl="$define"; d_PRIEUldbl="$define"; 
8085         d_SCNfldbl="$define";
8086         ;;
8087 esac
8088
8089 : Check how to convert floats to strings.
8090 echo " "
8091 echo "Checking for an efficient way to convert floats to strings."
8092 echo " " > try.c
8093 case "$uselongdouble" in
8094 "$define") echo "#define USE_LONG_DOUBLE" >>try.c ;;
8095 esac
8096 case "$d_longdbl" in
8097 "$define") echo "#define HAS_LONG_DOUBLE" >>try.c ;;
8098 esac
8099 case "$d_PRIgldbl" in
8100 "$define") echo "#define HAS_PRIgldbl"    >>try.c ;;
8101 esac
8102 $cat >>try.c <<EOP
8103 #ifdef TRY_gconvert
8104 #define Gconvert(x,n,t,b) gconvert((x),(n),(t),(b))
8105 char *myname = "gconvert";
8106 #endif
8107 #ifdef TRY_gcvt
8108 #define Gconvert(x,n,t,b) gcvt((x),(n),(b))
8109 char *myname = "gcvt";
8110 #endif
8111 #ifdef TRY_qgcvt
8112 #define Gconvert(x,n,t,b) qgcvt((x),(n),(b))
8113 char *myname = "qgcvt";
8114 #define DOUBLETYPE long double
8115 #endif
8116 #ifdef TRY_sprintf
8117 #if defined(USE_LONG_DOUBLE) && defined(HAS_LONG_DOUBLE) && defined(HAS_PRIgldbl)
8118 #define Gconvert(x,n,t,b) sprintf((b),"%.*"$sPRIgldbl,(n),(x))
8119 #else
8120 #define Gconvert(x,n,t,b) sprintf((b),"%.*g",(n),(x))
8121 #endif
8122 char *myname = "sprintf";
8123 #endif
8124
8125 #ifndef DOUBLETYPE
8126 #if defined(USE_LONG_DOUBLE) && defined(HAS_LONG_DOUBLE)
8127 #define DOUBLETYPE long double
8128 #else
8129 #define DOUBLETYPE double
8130 #endif
8131 #endif
8132
8133 #include <stdio.h>
8134
8135 #define I_STDLIB $i_stdlib
8136 #ifdef I_STDLIB
8137 #include <stdlib.h>
8138 #endif
8139
8140 int
8141 checkit(expect, got)
8142 char *expect;
8143 char *got;
8144 {
8145     if (strcmp(expect, got)) {
8146                 printf("%s oddity:  Expected %s, got %s\n",
8147                         myname, expect, got);
8148                 exit(1);
8149         }
8150 }
8151
8152 int main()
8153
8154         char buf[64]; 
8155         buf[63] = '\0';
8156
8157         /* This must be 1st test on (which?) platform */
8158         /* Alan Burlison <AlanBurlsin@unn.unisys.com> */
8159         Gconvert((DOUBLETYPE)0.1, 8, 0, buf);
8160         checkit("0.1", buf);
8161
8162         Gconvert((DOUBLETYPE)1.0, 8, 0, buf); 
8163         checkit("1", buf);
8164
8165         Gconvert((DOUBLETYPE)1.1, 8, 0, buf); 
8166         checkit("1.1", buf);
8167
8168         Gconvert((DOUBLETYPE)1.01, 8, 0, buf); 
8169         checkit("1.01", buf);
8170
8171         Gconvert((DOUBLETYPE)1.001, 8, 0, buf); 
8172         checkit("1.001", buf);
8173
8174         Gconvert((DOUBLETYPE)1.0001, 8, 0, buf); 
8175         checkit("1.0001", buf);
8176
8177         Gconvert((DOUBLETYPE)1.00001, 8, 0, buf); 
8178         checkit("1.00001", buf);
8179
8180         Gconvert((DOUBLETYPE)1.000001, 8, 0, buf); 
8181         checkit("1.000001", buf);
8182
8183         Gconvert((DOUBLETYPE)0.0, 8, 0, buf); 
8184         checkit("0", buf);
8185
8186         Gconvert((DOUBLETYPE)-1.0, 8, 0, buf); 
8187         checkit("-1", buf);
8188
8189         /* Some Linux gcvt's give 1.e+5 here. */
8190         Gconvert((DOUBLETYPE)100000.0, 8, 0, buf); 
8191         checkit("100000", buf);
8192         
8193         /* Some Linux gcvt's give -1.e+5 here. */
8194         Gconvert((DOUBLETYPE)-100000.0, 8, 0, buf); 
8195         checkit("-100000", buf);
8196
8197         Gconvert((DOUBLETYPE)123.456, 8, 0, buf); 
8198         checkit("123.456", buf);
8199
8200         exit(0);
8201 }
8202 EOP
8203 case "$d_Gconvert" in
8204 gconvert*) xxx_list='gconvert gcvt sprintf' ;;
8205 gcvt*) xxx_list='gcvt gconvert sprintf' ;;
8206 sprintf*) xxx_list='sprintf gconvert gcvt' ;;
8207 *) xxx_list='gconvert gcvt sprintf' ;;
8208 esac
8209
8210 case "$d_longdbl$uselongdouble$d_PRIgldbl" in
8211 "$define$define$define")
8212     # for long doubles prefer first qgcvt, then sprintf
8213     xxx_list="`echo $xxx_list|sed s/sprintf//`" 
8214     xxx_list="sprintf $xxx_list"
8215     case "$d_qgcvt" in
8216     "$define") xxx_list="qgcvt $xxx_list" ;;
8217     esac
8218     ;;
8219 esac
8220
8221 for xxx_convert in $xxx_list; do
8222         echo "Trying $xxx_convert..."
8223         $rm -f try try$_o
8224         set try -DTRY_$xxx_convert
8225         if eval $compile; then
8226                 echo "$xxx_convert() found." >&4
8227                 if ./try; then
8228                         echo "I'll use $xxx_convert to convert floats into a string." >&4
8229                         break;
8230                 else
8231                         echo "...But $xxx_convert didn't work as I expected."
8232                 fi
8233         else
8234                 echo "$xxx_convert NOT found." >&4
8235         fi
8236 done
8237         
8238 case "$xxx_convert" in
8239 gconvert) d_Gconvert='gconvert((x),(n),(t),(b))' ;;
8240 gcvt) d_Gconvert='gcvt((x),(n),(b))' ;;
8241 qgcvt) d_Gconvert='qgcvt((x),(n),(b))' ;;
8242 *) case "$uselongdouble$d_longdbl$d_PRIgldbl" in
8243    "$define$define$define")
8244       d_Gconvert="sprintf((b),\"%.*\"$sPRIgldbl,(n),(x))" ;;
8245    *) d_Gconvert='sprintf((b),"%.*g",(n),(x))' ;;
8246    esac
8247    ;;  
8248 esac
8249
8250 : see if _fwalk exists
8251 set fwalk d__fwalk
8252 eval $inlibc
8253
8254 : Initialize h_fcntl
8255 h_fcntl=false
8256
8257 : Initialize h_sysfile
8258 h_sysfile=false
8259
8260 : access call always available on UNIX
8261 set access d_access
8262 eval $inlibc
8263
8264 : locate the flags for 'access()'
8265 case "$d_access" in
8266 "$define")
8267         echo " "
8268         $cat >access.c <<'EOCP'
8269 #include <sys/types.h>
8270 #ifdef I_FCNTL
8271 #include <fcntl.h>
8272 #endif
8273 #ifdef I_SYS_FILE
8274 #include <sys/file.h>
8275 #endif
8276 #ifdef I_UNISTD
8277 #include <unistd.h>
8278 #endif
8279 int main() {
8280         exit(R_OK);
8281 }
8282 EOCP
8283         : check sys/file.h first, no particular reason here
8284         if $test `./findhdr sys/file.h` && \
8285                 $cc -o access $cppflags -DI_SYS_FILE access.c >/dev/null 2>&1 ; then
8286                 h_sysfile=true;
8287                 echo "<sys/file.h> defines the *_OK access constants." >&4
8288         elif $test `./findhdr fcntl.h` && \
8289                 $cc -o access $cppflags -DI_FCNTL access.c >/dev/null 2>&1 ; then
8290                 h_fcntl=true;
8291                 echo "<fcntl.h> defines the *_OK access constants." >&4
8292         elif $test `./findhdr unistd.h` && \
8293                 $cc -o access $cppflags -DI_UNISTD access.c >/dev/null 2>&1 ; then
8294                 echo "<unistd.h> defines the *_OK access constants." >&4
8295         else
8296                 echo "I can't find the four *_OK access constants--I'll use mine." >&4
8297         fi
8298         ;;
8299 esac
8300 $rm -f access*
8301
8302 : see if accessx exists
8303 set accessx d_accessx
8304 eval $inlibc
8305
8306 : see if alarm exists
8307 set alarm d_alarm
8308 eval $inlibc
8309
8310 : see if atolf exists
8311 set atolf d_atolf
8312 eval $inlibc
8313
8314 : see if atoll exists
8315 set atoll d_atoll
8316 eval $inlibc
8317
8318 : Look for GNU-cc style attribute checking
8319 echo " "
8320 echo "Checking whether your compiler can handle __attribute__ ..." >&4
8321 $cat >attrib.c <<'EOCP'
8322 #include <stdio.h>
8323 void croak (char* pat,...) __attribute__((format(printf,1,2),noreturn));
8324 EOCP
8325 if $cc $ccflags -c attrib.c >attrib.out 2>&1 ; then
8326         if $contains 'warning' attrib.out >/dev/null 2>&1; then
8327                 echo "Your C compiler doesn't fully support __attribute__."
8328                 val="$undef"
8329         else
8330                 echo "Your C compiler supports __attribute__."
8331                 val="$define"
8332         fi
8333 else
8334         echo "Your C compiler doesn't seem to understand __attribute__ at all."
8335         val="$undef"
8336 fi
8337 set d_attribut
8338 eval $setvar
8339 $rm -f attrib*
8340
8341 : see if bcmp exists
8342 set bcmp d_bcmp
8343 eval $inlibc
8344
8345 : see if bcopy exists
8346 set bcopy d_bcopy
8347 eval $inlibc
8348
8349 : see if this is a unistd.h system
8350 set unistd.h i_unistd
8351 eval $inhdr
8352
8353 : see if getpgrp exists
8354 set getpgrp d_getpgrp
8355 eval $inlibc
8356
8357 case "$d_getpgrp" in
8358 "$define")
8359         echo " "
8360         echo "Checking to see which flavor of getpgrp is in use..."
8361         $cat >set.c <<EOP
8362 #$i_unistd I_UNISTD
8363 #include <sys/types.h>
8364 #ifdef I_UNISTD
8365 #  include <unistd.h>
8366 #endif
8367 int main()
8368 {
8369         if (getuid() == 0) {
8370                 printf("(I see you are running Configure as super-user...)\n");
8371                 setuid(1);
8372         }
8373 #ifdef TRY_BSD_PGRP
8374         if (getpgrp(1) == 0)
8375                 exit(0);
8376 #else
8377         if (getpgrp() > 0)
8378                 exit(0);
8379 #endif
8380         exit(1);
8381 }
8382 EOP
8383         if $cc -o set -DTRY_BSD_PGRP $ccflags $ldflags set.c $libs >/dev/null 2>&1 && ./set; then
8384                 echo "You have to use getpgrp(pid) instead of getpgrp()." >&4
8385                 val="$define"
8386         elif $cc -o set $ccflags $ldflags set.c $libs >/dev/null 2>&1 && ./set; then
8387                 echo "You have to use getpgrp() instead of getpgrp(pid)." >&4
8388                 val="$undef"
8389         else
8390                 echo "I can't seem to compile and run the test program."
8391                 if ./usg; then
8392                         xxx="a USG one, i.e. you use getpgrp()."
8393                 else
8394                         # SVR4 systems can appear rather BSD-ish.
8395                         case "$i_unistd" in
8396                         $undef)
8397                                 xxx="a BSD one, i.e. you use getpgrp(pid)."
8398                                 val="$define"
8399                                 ;;
8400                         $define)
8401                                 xxx="probably a USG one, i.e. you use getpgrp()."
8402                                 val="$undef"
8403                                 ;;
8404                         esac
8405                 fi
8406                 echo "Assuming your getpgrp is $xxx" >&4
8407         fi
8408         ;;
8409 *) val="$undef";;
8410 esac
8411 set d_bsdgetpgrp
8412 eval $setvar
8413 $rm -f set set.c
8414
8415 : see if setpgrp exists
8416 set setpgrp d_setpgrp
8417 eval $inlibc
8418
8419 case "$d_setpgrp" in
8420 "$define")
8421         echo " "
8422         echo "Checking to see which flavor of setpgrp is in use..."
8423         $cat >set.c <<EOP
8424 #$i_unistd I_UNISTD
8425 #include <sys/types.h>
8426 #ifdef I_UNISTD
8427 #  include <unistd.h>
8428 #endif
8429 int main()
8430 {
8431         if (getuid() == 0) {
8432                 printf("(I see you are running Configure as super-user...)\n");
8433                 setuid(1);
8434         }
8435 #ifdef TRY_BSD_PGRP
8436         if (-1 == setpgrp(1, 1))
8437                 exit(0);
8438 #else
8439         if (setpgrp() != -1)
8440                 exit(0);
8441 #endif
8442         exit(1);
8443 }
8444 EOP
8445         if $cc -o set -DTRY_BSD_PGRP $ccflags $ldflags set.c $libs >/dev/null 2>&1 && ./set; then
8446                 echo 'You have to use setpgrp(pid,pgrp) instead of setpgrp().' >&4
8447                 val="$define"
8448         elif $cc -o set $ccflags $ldflags set.c $libs >/dev/null 2>&1 && ./set; then
8449                 echo 'You have to use setpgrp() instead of setpgrp(pid,pgrp).' >&4
8450                 val="$undef"
8451         else
8452                 echo "(I can't seem to compile and run the test program.)"
8453                 if ./usg; then
8454                         xxx="a USG one, i.e. you use setpgrp()."
8455                 else
8456                         # SVR4 systems can appear rather BSD-ish.
8457                         case "$i_unistd" in
8458                         $undef)
8459                                 xxx="a BSD one, i.e. you use setpgrp(pid,pgrp)."
8460                                 val="$define"
8461                                 ;;
8462                         $define)
8463                                 xxx="probably a USG one, i.e. you use setpgrp()."
8464                                 val="$undef"
8465                                 ;;
8466                         esac
8467                 fi
8468                 echo "Assuming your setpgrp is $xxx" >&4
8469         fi
8470         ;;
8471 *) val="$undef";;
8472 esac
8473 set d_bsdsetpgrp
8474 eval $setvar
8475 $rm -f set set.c
8476 : see if bzero exists
8477 set bzero d_bzero
8478 eval $inlibc
8479
8480 : see if signal is declared as pointer to function returning int or void
8481 echo " "
8482 xxx=`./findhdr signal.h`
8483 $test "$xxx" && $cppstdin $cppminus $cppflags < $xxx >$$.tmp 2>/dev/null
8484 if $contains 'int.*\*[  ]*signal' $$.tmp >/dev/null 2>&1 ; then
8485         echo "You have int (*signal())() instead of void." >&4
8486         val="$undef"
8487 elif $contains 'void.*\*[       ]*signal' $$.tmp >/dev/null 2>&1 ; then
8488         echo "You have void (*signal())()." >&4
8489         val="$define"
8490 elif $contains 'extern[         ]*[(\*]*signal' $$.tmp >/dev/null 2>&1 ; then
8491         echo "You have int (*signal())() instead of void." >&4
8492         val="$undef"
8493 elif $contains 'void.*\*.*sig' $$.tmp >/dev/null 2>&1 ; then
8494         echo "You have void (*signal())()." >&4
8495         val="$define"
8496 else
8497         case "$d_voidsig" in
8498         '')
8499         echo "I can't determine whether signal handler returns void or int..." >&4
8500                 dflt=void
8501                 rp="What type does your signal handler return?"
8502                 . ./myread
8503                 case "$ans" in
8504                 v*) val="$define";;
8505                 *) val="$undef";;
8506                 esac;;
8507         "$define")
8508                 echo "As you already told me, signal handler returns void." >&4
8509                 val="$define"
8510                 ;;
8511         *)      echo "As you already told me, signal handler returns int." >&4
8512                 val="$undef"
8513                 ;;
8514         esac
8515 fi
8516 set d_voidsig
8517 eval $setvar
8518 case "$d_voidsig" in
8519 "$define") signal_t="void";;
8520 *) signal_t="int";;
8521 esac
8522 $rm -f $$.tmp
8523
8524 : check for ability to cast large floats to 32-bit ints.
8525 echo " "
8526 echo 'Checking whether your C compiler can cast large floats to int32.' >&4
8527 if $test "$intsize" -ge 4; then
8528         xxx=int
8529 else
8530         xxx=long
8531 fi
8532 $cat >try.c <<EOCP
8533 #include <stdio.h>
8534 #include <sys/types.h>
8535 #include <signal.h>
8536 $signal_t blech(s) int s; { exit(3); }
8537 int main()
8538 {
8539         $xxx i32;
8540         double f, g;
8541         int result = 0;
8542         char str[16];
8543         signal(SIGFPE, blech);
8544
8545         /* Don't let compiler optimize the test away.  Store the number 
8546            in a writable string for gcc to pass to sscanf under HP/UX.
8547         */
8548         sprintf(str, "2147483647");
8549         sscanf(str, "%lf", &f); /* f = (double) 0x7fffffff; */
8550         g = 10 * f;
8551         i32  = ($xxx) g;
8552
8553         /* x86 processors will probably give 0x8000 0000, which is a
8554        sign change.  We don't want that.  We want to mimic SPARC
8555            behavior here, which is to preserve the sign and give
8556            back 0x7fff ffff.
8557         */
8558         if (i32 != ($xxx) f)
8559                 result |= 1;
8560         exit(result);
8561 }
8562 EOCP
8563 set try
8564 if eval $compile_ok; then
8565         ./try
8566         yyy=$?
8567 else
8568         echo "(I can't seem to compile the test program--assuming it can't)"
8569         yyy=1
8570 fi
8571 case "$yyy" in
8572 0)      val="$define"
8573         echo "Yup, it can."
8574         ;;
8575 *)      val="$undef"
8576         echo "Nope, it can't."
8577         ;;
8578 esac
8579 set d_casti32
8580 eval $setvar
8581 $rm -f try try.*
8582
8583 : check for ability to cast negative floats to unsigned
8584 echo " "
8585 echo 'Checking whether your C compiler can cast negative float to unsigned.' >&4
8586 $cat >try.c <<EOCP
8587 #include <stdio.h>
8588 #include <sys/types.h>
8589 #include <signal.h>
8590 $signal_t blech(s) int s; { exit(7); }
8591 $signal_t blech_in_list(s) int s; { exit(4); }
8592 unsigned long dummy_long(p) unsigned long p; { return p; }
8593 unsigned int dummy_int(p) unsigned int p; { return p; }
8594 unsigned short dummy_short(p) unsigned short p; { return p; }
8595 int main()
8596 {
8597         double f;
8598         unsigned long along;
8599         unsigned int aint;
8600         unsigned short ashort;
8601         int result = 0;
8602         char str[16];
8603         
8604         /* Frustrate gcc-2.7.2's optimizer which failed this test with
8605            a direct f = -123. assignment.  gcc-2.8.0 reportedly
8606            optimized the whole file away
8607         */
8608         /* Store the number in a writable string for gcc to pass to 
8609            sscanf under HP/UX.
8610         */
8611         sprintf(str, "-123");
8612         sscanf(str, "%lf", &f);  /* f = -123.; */
8613
8614         signal(SIGFPE, blech);
8615         along = (unsigned long)f;
8616         aint = (unsigned int)f;
8617         ashort = (unsigned short)f;
8618         if (along != (unsigned long)-123)
8619                 result |= 1;
8620         if (aint != (unsigned int)-123)
8621                 result |= 1;
8622         if (ashort != (unsigned short)-123)
8623                 result |= 1;
8624         sprintf(str, "1073741824.");
8625         sscanf(str, "%lf", &f); /* f = (double)0x40000000; */
8626         f = f + f;
8627         along = 0;
8628         along = (unsigned long)f;
8629         if (along != 0x80000000)
8630                 result |= 2;
8631         f -= 1.;
8632         along = 0;
8633         along = (unsigned long)f;
8634         if (along != 0x7fffffff)
8635                 result |= 1;
8636         f += 2.;
8637         along = 0;
8638         along = (unsigned long)f;
8639         if (along != 0x80000001)
8640                 result |= 2;
8641         if (result)
8642                 exit(result);
8643         signal(SIGFPE, blech_in_list);
8644         sprintf(str, "123.");
8645         sscanf(str, "%lf", &f);  /* f = 123.; */
8646         along = dummy_long((unsigned long)f);
8647         aint = dummy_int((unsigned int)f);
8648         ashort = dummy_short((unsigned short)f);
8649         if (along != (unsigned long)123)
8650                 result |= 4;
8651         if (aint != (unsigned int)123)
8652                 result |= 4;
8653         if (ashort != (unsigned short)123)
8654                 result |= 4;
8655         exit(result);
8656
8657 }
8658 EOCP
8659 set try
8660 if eval $compile_ok; then
8661         ./try
8662         castflags=$?
8663 else
8664         echo "(I can't seem to compile the test program--assuming it can't)"
8665         castflags=7
8666 fi
8667 case "$castflags" in
8668 0)      val="$define"
8669         echo "Yup, it can."
8670         ;;
8671 *)      val="$undef"
8672         echo "Nope, it can't."
8673         ;;
8674 esac
8675 set d_castneg
8676 eval $setvar
8677 $rm -f try.*
8678
8679 : see if vprintf exists
8680 echo " "
8681 if set vprintf val -f d_vprintf; eval $csym; $val; then
8682         echo 'vprintf() found.' >&4
8683         val="$define"
8684         $cat >vprintf.c <<'EOF'
8685 #include <varargs.h>
8686
8687 int main() { xxx("foo"); }
8688
8689 xxx(va_alist)
8690 va_dcl
8691 {
8692         va_list args;
8693         char buf[10];
8694
8695         va_start(args);
8696         exit((unsigned long)vsprintf(buf,"%s",args) > 10L);
8697 }
8698 EOF
8699         set vprintf
8700         if eval $compile && ./vprintf; then
8701                 echo "Your vsprintf() returns (int)." >&4
8702                 val2="$undef"
8703         else
8704                 echo "Your vsprintf() returns (char*)." >&4
8705                 val2="$define"
8706         fi
8707 else
8708         echo 'vprintf() NOT found.' >&4
8709                 val="$undef"
8710                 val2="$undef"
8711 fi
8712 set d_vprintf
8713 eval $setvar
8714 val=$val2
8715 set d_charvspr
8716 eval $setvar
8717
8718 : see if chown exists
8719 set chown d_chown
8720 eval $inlibc
8721
8722 : see if chroot exists
8723 set chroot d_chroot
8724 eval $inlibc
8725
8726 : see if chsize exists
8727 set chsize d_chsize
8728 eval $inlibc
8729
8730 hasstruct='varname=$1; struct=$2; shift; shift;
8731 while $test $# -ge 2; do
8732         case "$1" in
8733         $define) echo "#include <$2>";;
8734         esac ;
8735     shift 2;
8736 done > try.c;
8737 echo "int main () { struct $struct foo; }" >> try.c;
8738 set try;
8739 if eval $compile; then
8740         val="$define";
8741 else
8742         val="$undef";
8743 fi;
8744 set $varname;
8745 eval $setvar;
8746 $rm -f try.c try.o'
8747
8748 : see if sys/types.h has to be included
8749 set sys/types.h i_systypes
8750 eval $inhdr
8751
8752 hasfield='varname=$1; struct=$2; field=$3; shift; shift; shift;
8753 while $test $# -ge 2; do
8754         case "$1" in
8755         $define) echo "#include <$2>";;
8756         esac ;
8757     shift 2;
8758 done > try.c;
8759 echo "int main () { struct $struct foo; char* bar; bar = (char*)foo.$field; }" >> try.c;
8760 set try;
8761 if eval $compile; then
8762         val="$define";
8763 else
8764         val="$undef";
8765 fi;
8766 set $varname;
8767 eval $setvar;
8768 $rm -f try.c try.o'
8769
8770 socketlib=''
8771 sockethdr=''
8772 : see whether socket exists
8773 echo " "
8774 $echo $n "Hmm... $c" >&4
8775 if set socket val -f d_socket; eval $csym; $val; then
8776         echo "Looks like you have Berkeley networking support." >&4
8777         d_socket="$define"
8778         if set setsockopt val -f; eval $csym; $val; then
8779                 d_oldsock="$undef"
8780         else
8781                 echo "...but it uses the old BSD 4.1c interface, rather than 4.2." >&4
8782                 d_oldsock="$define"
8783         fi
8784 else
8785         if $contains socklib libc.list >/dev/null 2>&1; then
8786                 echo "Looks like you have Berkeley networking support." >&4
8787                 d_socket="$define"
8788                 : we will have to assume that it supports the 4.2 BSD interface
8789                 d_oldsock="$undef"
8790         else
8791                 echo "You don't have Berkeley networking in libc$_a..." >&4
8792                 if test "X$d_socket" = "X$define"; then
8793                    echo "...but you seem to believe that you have sockets." >&4
8794                 else
8795                         for net in net socket
8796                         do
8797                                 if test -f /usr/lib/lib$net$_a; then
8798                                         ( ($nm $nm_opt /usr/lib/lib$net$_a | eval $nm_extract) ||  \
8799                                         $ar t /usr/lib/lib$net$_a) 2>/dev/null >> libc.list
8800                                         if $contains socket libc.list >/dev/null 2>&1; then
8801                                                 d_socket="$define"
8802                                                 socketlib="-l$net"
8803                                                 case "$net" in
8804                                                 net)
8805                                                         echo "...but the Wollongong group seems to have hacked it in." >&4
8806                                                         sockethdr="-I/usr/netinclude"
8807                                                         ;;
8808                                                 esac
8809                                                 echo "Found Berkeley sockets interface in lib$net." >& 4 
8810                                                 if $contains setsockopt libc.list >/dev/null 2>&1; then
8811                                                         d_oldsock="$undef"
8812                                                 else
8813                                                         echo "...using the old BSD 4.1c interface, rather than 4.2." >&4
8814                                                         d_oldsock="$define"
8815                                                 fi
8816                                                 break
8817                                         fi
8818                                 fi
8819                         done
8820                         if test "X$d_socket" != "X$define"; then
8821                            echo "or anywhere else I see." >&4
8822                            d_socket="$undef"
8823                            d_oldsock="$undef"
8824                         fi
8825                 fi
8826         fi
8827 fi
8828
8829 : see if socketpair exists
8830 set socketpair d_sockpair
8831 eval $inlibc
8832
8833
8834 echo " "
8835 echo "Checking the availability of certain socket constants..." >& 4
8836 for ENUM in MSG_CTRUNC MSG_DONTROUTE MSG_OOB MSG_PEEK MSG_PROXY SCM_RIGHTS; do
8837         enum=`$echo $ENUM|./tr '[A-Z]' '[a-z]'`
8838         $cat >try.c <<EOF
8839 #include <sys/types.h>
8840 #include <sys/socket.h>
8841 int main() {
8842     int i = $ENUM;
8843 }
8844 EOF
8845         val="$undef"
8846         set try; if eval $compile; then
8847                 val="$define"
8848         fi
8849         set d_${enum}; eval $setvar
8850         $rm -f try.c try
8851 done
8852
8853 : see if this is a sys/uio.h system
8854 set sys/uio.h i_sysuio
8855 eval $inhdr
8856
8857
8858 echo " "
8859 echo "Checking to see if your system supports struct cmsghdr..." >&4
8860 set d_cmsghdr_s cmsghdr $i_systypes sys/types.h $d_socket sys/socket.h $i_sysuio sys/uio.h
8861 eval $hasstruct
8862 case "$d_cmsghdr_s" in
8863 "$define")      echo "Yes, it does."   ;;
8864 *)              echo "No, it doesn't." ;;
8865 esac
8866
8867
8868 : check for const keyword
8869 echo " "
8870 echo 'Checking to see if your C compiler knows about "const"...' >&4
8871 $cat >const.c <<'EOCP'
8872 typedef struct spug { int drokk; } spug;
8873 int main()
8874 {
8875         const char *foo;
8876         const spug y;
8877 }
8878 EOCP
8879 if $cc -c $ccflags const.c >/dev/null 2>&1 ; then
8880         val="$define"
8881         echo "Yup, it does."
8882 else
8883         val="$undef"
8884         echo "Nope, it doesn't."
8885 fi
8886 set d_const
8887 eval $setvar
8888
8889 : see if crypt exists
8890 echo " "
8891 if set crypt val -f d_crypt; eval $csym; $val; then
8892         echo 'crypt() found.' >&4
8893         val="$define"
8894         cryptlib=''
8895 else
8896         cryptlib=`./loc Slibcrypt$_a "" $xlibpth`
8897         if $test -z "$cryptlib"; then
8898                 cryptlib=`./loc Mlibcrypt$_a "" $xlibpth`
8899         else
8900                 cryptlib=-lcrypt
8901         fi
8902         if $test -z "$cryptlib"; then
8903                 cryptlib=`./loc Llibcrypt$_a "" $xlibpth`
8904         else
8905                 cryptlib=-lcrypt
8906         fi
8907         if $test -z "$cryptlib"; then
8908                 cryptlib=`./loc libcrypt$_a "" $libpth`
8909         else
8910                 cryptlib=-lcrypt
8911         fi
8912         if $test -z "$cryptlib"; then
8913                 echo 'crypt() NOT found.' >&4
8914                 val="$undef"
8915         else
8916                 val="$define"
8917         fi
8918 fi
8919 set d_crypt
8920 eval $setvar
8921
8922 : get csh whereabouts
8923 case "$csh" in
8924 'csh') val="$undef" ;;
8925 *) val="$define" ;;
8926 esac
8927 set d_csh
8928 eval $setvar
8929 : Respect a hint or command line value for full_csh.
8930 case "$full_csh" in
8931 '') full_csh=$csh ;;
8932 esac
8933
8934 : see if cuserid exists
8935 set cuserid d_cuserid
8936 eval $inlibc
8937
8938 : see if this is a limits.h system
8939 set limits.h i_limits
8940 eval $inhdr
8941
8942 : see if this is a float.h system
8943 set float.h i_float
8944 eval $inhdr
8945
8946 : See if number of significant digits in a double precision number is known
8947 echo " "
8948 $cat >dbl_dig.c <<EOM
8949 #$i_limits I_LIMITS
8950 #$i_float I_FLOAT
8951 #ifdef I_LIMITS
8952 #include <limits.h>
8953 #endif
8954 #ifdef I_FLOAT
8955 #include <float.h>
8956 #endif
8957 #ifdef DBL_DIG
8958 printf("Contains DBL_DIG");
8959 #endif
8960 EOM
8961 $cppstdin $cppflags $cppminus < dbl_dig.c >dbl_dig.E 2>/dev/null
8962 if $contains 'DBL_DIG' dbl_dig.E >/dev/null 2>&1; then
8963         echo "DBL_DIG found." >&4
8964         val="$define"
8965 else
8966         echo "DBL_DIG NOT found." >&4
8967         val="$undef"
8968 fi
8969 $rm -f dbl_dig.?
8970 set d_dbl_dig
8971 eval $setvar
8972
8973 : see if difftime exists
8974 set difftime d_difftime
8975 eval $inlibc
8976
8977 : see if this is a dirent system
8978 echo " "
8979 if xinc=`./findhdr dirent.h`; $test "$xinc"; then
8980         val="$define"
8981         echo "<dirent.h> found." >&4
8982 else
8983         val="$undef"
8984         if xinc=`./findhdr sys/dir.h`; $test "$xinc"; then
8985                 echo "<sys/dir.h> found." >&4
8986                 echo " "
8987         else
8988                 xinc=`./findhdr sys/ndir.h`
8989         fi
8990         echo "<dirent.h> NOT found." >&4
8991 fi
8992 set i_dirent
8993 eval $setvar
8994
8995 : Look for type of directory structure.
8996 echo " "
8997 $cppstdin $cppflags $cppminus < "$xinc" > try.c
8998
8999 case "$direntrytype" in
9000 ''|' ')
9001         case "$i_dirent" in
9002         $define) guess1='struct dirent' ;;
9003         *) guess1='struct direct'  ;;
9004         esac
9005         ;;
9006 *)      guess1="$direntrytype"
9007         ;;
9008 esac
9009
9010 case "$guess1" in
9011 'struct dirent') guess2='struct direct' ;;
9012 *) guess2='struct dirent' ;;
9013 esac
9014                 
9015 if $contains "$guess1" try.c >/dev/null 2>&1; then
9016         direntrytype="$guess1"
9017         echo "Your directory entries are $direntrytype." >&4
9018 elif $contains "$guess2" try.c >/dev/null 2>&1; then
9019         direntrytype="$guess2"
9020         echo "Your directory entries seem to be $direntrytype." >&4
9021 else
9022         echo "I don't recognize your system's directory entries." >&4
9023         rp="What type is used for directory entries on this system?"
9024         dflt="$guess1"
9025         . ./myread
9026         direntrytype="$ans"
9027 fi
9028 $rm -f try.c
9029
9030
9031 : see if the directory entry stores field length
9032 echo " "
9033 $cppstdin $cppflags $cppminus < "$xinc" > try.c
9034 if $contains 'd_namlen' try.c >/dev/null 2>&1; then
9035         echo "Good, your directory entry keeps length information in d_namlen." >&4
9036         val="$define"
9037 else
9038         echo "Your directory entry does not know about the d_namlen field." >&4
9039         val="$undef"
9040 fi
9041 set d_dirnamlen
9042 eval $setvar
9043 $rm -f try.c
9044
9045 : see if dlerror exists
9046 xxx_runnm="$runnm"
9047 runnm=false
9048 set dlerror d_dlerror
9049 eval $inlibc
9050 runnm="$xxx_runnm"
9051
9052 : see if dlfcn is available
9053 set dlfcn.h i_dlfcn
9054 eval $inhdr
9055
9056 case "$usedl" in
9057 $define|y|true)
9058         $cat << EOM
9059
9060 On a few systems, the dynamically loaded modules that perl generates and uses
9061 will need a different extension than shared libs. The default will probably
9062 be appropriate.
9063
9064 EOM
9065         case "$dlext" in
9066         '')     dflt="$so" ;;
9067         *)      dflt="$dlext" ;;
9068         esac
9069         rp='What is the extension of dynamically loaded modules'
9070         . ./myread
9071         dlext="$ans"
9072         ;;
9073 *)
9074         dlext="none"
9075         ;;
9076 esac
9077
9078 : Check if dlsym need a leading underscore
9079 echo " "
9080 val="$undef"
9081
9082 case "$dlsrc" in
9083 dl_dlopen.xs)
9084         echo "Checking whether your dlsym() needs a leading underscore ..." >&4
9085         $cat >dyna.c <<'EOM'
9086 fred () { }
9087 EOM
9088
9089 $cat >fred.c<<EOM
9090
9091 #include <stdio.h>
9092 #$i_dlfcn I_DLFCN
9093 #ifdef I_DLFCN
9094 #include <dlfcn.h>      /* the dynamic linker include file for Sunos/Solaris */
9095 #else
9096 #include <sys/types.h>
9097 #include <nlist.h>
9098 #include <link.h>
9099 #endif
9100
9101 extern int fred() ;
9102
9103 int main()
9104 {
9105     void * handle ;
9106     void * symbol ;
9107 #ifndef RTLD_LAZY
9108     int mode = 1 ;
9109 #else
9110     int mode = RTLD_LAZY ;
9111 #endif
9112     handle = dlopen("./dyna.$dlext", mode) ;
9113     if (handle == NULL) {
9114         printf ("1\n") ;
9115         fflush (stdout) ;
9116         exit(0);
9117     }
9118     symbol = dlsym(handle, "fred") ;
9119     if (symbol == NULL) {
9120         /* try putting a leading underscore */
9121         symbol = dlsym(handle, "_fred") ;
9122         if (symbol == NULL) {
9123             printf ("2\n") ;
9124             fflush (stdout) ;
9125             exit(0);
9126         }
9127         printf ("3\n") ;
9128     }
9129     else
9130         printf ("4\n") ;
9131     fflush (stdout) ;
9132     exit(0);
9133 }
9134 EOM
9135         : Call the object file tmp-dyna.o in case dlext=o.
9136         if $cc $ccflags $cccdlflags -c dyna.c > /dev/null 2>&1 && 
9137                 mv dyna${_o} tmp-dyna${_o} > /dev/null 2>&1 && 
9138                 $ld -o dyna.$dlext $lddlflags tmp-dyna${_o} > /dev/null 2>&1 && 
9139                 $cc -o fred $ccflags $ldflags $cccdlflags $ccdlflags fred.c $libs > /dev/null 2>&1; then
9140                 xxx=`./fred`
9141                 case $xxx in
9142                 1)      echo "Test program failed using dlopen." >&4
9143                         echo "Perhaps you should not use dynamic loading." >&4;;
9144                 2)      echo "Test program failed using dlsym." >&4
9145                         echo "Perhaps you should not use dynamic loading." >&4;;
9146                 3)      echo "dlsym needs a leading underscore" >&4
9147                         val="$define" ;;
9148                 4)      echo "dlsym doesn't need a leading underscore." >&4;;
9149                 esac
9150         else
9151                 echo "I can't compile and run the test program." >&4
9152                 echo "I'm guessing that dlsym doesn't need a leading underscore." >&4
9153         fi
9154         ;;
9155 esac
9156                 
9157 $rm -f fred fred.? dyna.$dlext dyna.? tmp-dyna.?
9158
9159 set d_dlsymun
9160 eval $setvar
9161
9162 hasproto='varname=$1; func=$2; shift; shift;
9163 while $test $# -ge 2; do
9164         case "$1" in
9165         $define) echo "#include <$2>";;
9166         esac ;
9167     shift 2;
9168 done > try.c;
9169 $cppstdin $cppflags $cppminus < try.c > tryout.c 2>/dev/null;
9170 if $contains "$func.*(" tryout.c >/dev/null 2>&1; then
9171         echo "$func() prototype found.";
9172         val="$define";
9173 else
9174         echo "$func() prototype NOT found.";
9175         val="$undef";
9176 fi;
9177 set $varname;
9178 eval $setvar;
9179 $rm -f try.c tryout.c'
9180
9181 : see if prototype for drand48 is available
9182 echo " "
9183 set d_drand48proto drand48 $i_stdlib stdlib.h $i_unistd unistd.h
9184 eval $hasproto
9185
9186 : see if dup2 exists
9187 set dup2 d_dup2
9188 eval $inlibc
9189
9190 : see if eaccess exists
9191 set eaccess d_eaccess
9192 eval $inlibc
9193
9194 : see if endgrent exists
9195 set endgrent d_endgrent
9196 eval $inlibc
9197
9198 : see if endhostent exists
9199 set endhostent d_endhent
9200 eval $inlibc
9201
9202 : see if endnetent exists
9203 set endnetent d_endnent
9204 eval $inlibc
9205
9206 : see if endprotoent exists
9207 set endprotoent d_endpent
9208 eval $inlibc
9209
9210 : see if endpwent exists
9211 set endpwent d_endpwent
9212 eval $inlibc
9213
9214 : see if endservent exists
9215 set endservent d_endsent
9216 eval $inlibc
9217
9218 : Locate the flags for 'open()'
9219 echo " "
9220 $cat >open3.c <<'EOCP'
9221 #include <sys/types.h>
9222 #ifdef I_FCNTL
9223 #include <fcntl.h>
9224 #endif
9225 #ifdef I_SYS_FILE
9226 #include <sys/file.h>
9227 #endif
9228 int main() {
9229         if(O_RDONLY);
9230 #ifdef O_TRUNC
9231         exit(0);
9232 #else
9233         exit(1);
9234 #endif
9235 }
9236 EOCP
9237 : check sys/file.h first to get FREAD on Sun
9238 if $test `./findhdr sys/file.h` && \
9239                 set open3 -DI_SYS_FILE && eval $compile; then
9240         h_sysfile=true;
9241         echo "<sys/file.h> defines the O_* constants..." >&4
9242         if ./open3; then
9243                 echo "and you have the 3 argument form of open()." >&4
9244                 val="$define"
9245         else
9246                 echo "but not the 3 argument form of open().  Oh, well." >&4
9247                 val="$undef"
9248         fi
9249 elif $test `./findhdr fcntl.h` && \
9250                 set open3 -DI_FCNTL && eval $compile; then
9251         h_fcntl=true;
9252         echo "<fcntl.h> defines the O_* constants..." >&4
9253         if ./open3; then
9254                 echo "and you have the 3 argument form of open()." >&4
9255                 val="$define"
9256         else
9257                 echo "but not the 3 argument form of open().  Oh, well." >&4
9258                 val="$undef"
9259         fi
9260 else
9261         val="$undef"
9262         echo "I can't find the O_* constant definitions!  You got problems." >&4
9263 fi
9264 set d_open3
9265 eval $setvar
9266 $rm -f open3*
9267
9268 : see which of string.h or strings.h is needed
9269 echo " "
9270 strings=`./findhdr string.h`
9271 if $test "$strings" && $test -r "$strings"; then
9272         echo "Using <string.h> instead of <strings.h>." >&4
9273         val="$define"
9274 else
9275         val="$undef"
9276         strings=`./findhdr strings.h`
9277         if $test "$strings" && $test -r "$strings"; then
9278                 echo "Using <strings.h> instead of <string.h>." >&4
9279         else
9280                 echo "No string header found -- You'll surely have problems." >&4
9281         fi
9282 fi
9283 set i_string
9284 eval $setvar
9285 case "$i_string" in
9286 "$undef") strings=`./findhdr strings.h`;;
9287 *)        strings=`./findhdr string.h`;;
9288 esac
9289
9290 : check for non-blocking I/O stuff
9291 case "$h_sysfile" in
9292 true) echo "#include <sys/file.h>" > head.c;;
9293 *)
9294        case "$h_fcntl" in
9295        true) echo "#include <fcntl.h>" > head.c;;
9296        *) echo "#include <sys/fcntl.h>" > head.c;;
9297        esac
9298        ;;
9299 esac
9300 echo " "
9301 echo "Figuring out the flag used by open() for non-blocking I/O..." >&4
9302 case "$o_nonblock" in
9303 '')
9304         $cat head.c > try.c
9305         $cat >>try.c <<'EOCP'
9306 #include <stdio.h>
9307 int main() {
9308 #ifdef O_NONBLOCK
9309         printf("O_NONBLOCK\n");
9310         exit(0);
9311 #endif
9312 #ifdef O_NDELAY
9313         printf("O_NDELAY\n");
9314         exit(0);
9315 #endif
9316 #ifdef FNDELAY
9317         printf("FNDELAY\n");
9318         exit(0);
9319 #endif
9320         exit(0);
9321 }
9322 EOCP
9323         set try
9324         if eval $compile_ok; then
9325                 o_nonblock=`./try`
9326                 case "$o_nonblock" in
9327                 '') echo "I can't figure it out, assuming O_NONBLOCK will do.";;
9328                 *) echo "Seems like we can use $o_nonblock.";;
9329                 esac
9330         else
9331                 echo "(I can't compile the test program; pray O_NONBLOCK is right!)"
9332         fi
9333         ;;
9334 *) echo "Using $hint value $o_nonblock.";;
9335 esac
9336 $rm -f try try.* .out core
9337
9338 echo " "
9339 echo "Let's see what value errno gets from read() on a $o_nonblock file..." >&4
9340 case "$eagain" in
9341 '')
9342         $cat head.c > try.c
9343         $cat >>try.c <<EOCP
9344 #include <errno.h>
9345 #include <sys/types.h>
9346 #include <signal.h>
9347 #include <stdio.h> 
9348 #define MY_O_NONBLOCK $o_nonblock
9349 #ifndef errno  /* XXX need better Configure test */
9350 extern int errno;
9351 #endif
9352 #$i_unistd I_UNISTD
9353 #ifdef I_UNISTD
9354 #include <unistd.h>
9355 #endif
9356 #$i_string I_STRING
9357 #ifdef I_STRING
9358 #include <string.h>
9359 #else
9360 #include <strings.h>
9361 #endif
9362 $signal_t blech(x) int x; { exit(3); }
9363 EOCP
9364         $cat >> try.c <<'EOCP'
9365 int main()
9366 {
9367         int pd[2];
9368         int pu[2];
9369         char buf[1];
9370         char string[100];
9371
9372         pipe(pd);       /* Down: child -> parent */
9373         pipe(pu);       /* Up: parent -> child */
9374         if (0 != fork()) {
9375                 int ret;
9376                 close(pd[1]);   /* Parent reads from pd[0] */
9377                 close(pu[0]);   /* Parent writes (blocking) to pu[1] */
9378 #ifdef F_SETFL
9379                 if (-1 == fcntl(pd[0], F_SETFL, MY_O_NONBLOCK))
9380                         exit(1);
9381 #else
9382                 exit(4);
9383 #endif
9384                 signal(SIGALRM, blech);
9385                 alarm(5);
9386                 if ((ret = read(pd[0], buf, 1)) > 0)    /* Nothing to read! */
9387                         exit(2);
9388                 sprintf(string, "%d\n", ret);
9389                 write(2, string, strlen(string));
9390                 alarm(0);
9391 #ifdef EAGAIN
9392                 if (errno == EAGAIN) {
9393                         printf("EAGAIN\n");
9394                         goto ok;
9395                 }
9396 #endif
9397 #ifdef EWOULDBLOCK
9398                 if (errno == EWOULDBLOCK)
9399                         printf("EWOULDBLOCK\n");
9400 #endif
9401         ok:
9402                 write(pu[1], buf, 1);   /* Unblocks child, tell it to close our pipe */
9403                 sleep(2);                               /* Give it time to close our pipe */
9404                 alarm(5);
9405                 ret = read(pd[0], buf, 1);      /* Should read EOF */
9406                 alarm(0);
9407                 sprintf(string, "%d\n", ret);
9408                 write(3, string, strlen(string));
9409                 exit(0);
9410         }
9411
9412         close(pd[0]);                   /* We write to pd[1] */
9413         close(pu[1]);                   /* We read from pu[0] */
9414         read(pu[0], buf, 1);    /* Wait for parent to signal us we may continue */
9415         close(pd[1]);                   /* Pipe pd is now fully closed! */
9416         exit(0);                                /* Bye bye, thank you for playing! */
9417 }
9418 EOCP
9419         set try
9420         if eval $compile_ok; then
9421                 echo "$startsh" >mtry
9422                 echo "./try >try.out 2>try.ret 3>try.err || exit 4" >>mtry
9423                 chmod +x mtry
9424                 ./mtry >/dev/null 2>&1
9425                 case $? in
9426                 0) eagain=`$cat try.out`;;
9427                 1) echo "Could not perform non-blocking setting!";;
9428                 2) echo "I did a successful read() for something that was not there!";;
9429                 3) echo "Hmm... non-blocking I/O does not seem to be working!";;
9430                 4) echo "Could not find F_SETFL!";;
9431                 *) echo "Something terribly wrong happened during testing.";;
9432                 esac
9433                 rd_nodata=`$cat try.ret`
9434                 echo "A read() system call with no data present returns $rd_nodata."
9435                 case "$rd_nodata" in
9436                 0|-1) ;;
9437                 *)
9438                         echo "(That's peculiar, fixing that to be -1.)"
9439                         rd_nodata=-1
9440                         ;;
9441                 esac
9442                 case "$eagain" in
9443                 '')
9444                         echo "Forcing errno EAGAIN on read() with no data available."
9445                         eagain=EAGAIN
9446                         ;;
9447                 *)
9448                         echo "Your read() sets errno to $eagain when no data is available."
9449                         ;;
9450                 esac
9451                 status=`$cat try.err`
9452                 case "$status" in
9453                 0) echo "And it correctly returns 0 to signal EOF.";;
9454                 -1) echo "But it also returns -1 to signal EOF, so be careful!";;
9455                 *) echo "However, your read() returns '$status' on EOF??";;
9456                 esac
9457                 val="$define"
9458                 if test "$status" = "$rd_nodata"; then
9459                         echo "WARNING: you can't distinguish between EOF and no data!"
9460                         val="$undef"
9461                 fi
9462         else
9463                 echo "I can't compile the test program--assuming errno EAGAIN will do."
9464                 eagain=EAGAIN
9465         fi
9466         set d_eofnblk
9467         eval $setvar
9468         ;;
9469 *)
9470         echo "Using $hint value $eagain."
9471         echo "Your read() returns $rd_nodata when no data is present."
9472         case "$d_eofnblk" in
9473         "$define") echo "And you can see EOF because read() returns 0.";;
9474         "$undef") echo "But you can't see EOF status from read() returned value.";;
9475         *)
9476                 echo "(Assuming you can't see EOF status from read anyway.)"
9477                 d_eofnblk=$undef
9478                 ;;
9479         esac
9480         ;;
9481 esac
9482 $rm -f try try.* .out core head.c mtry
9483
9484 : see if fchmod exists
9485 set fchmod d_fchmod
9486 eval $inlibc
9487
9488 : see if fchown exists
9489 set fchown d_fchown
9490 eval $inlibc
9491
9492 : see if this is an fcntl system
9493 set fcntl d_fcntl
9494 eval $inlibc
9495
9496 echo " "
9497 : See if fcntl-based locking works.
9498 $cat >try.c <<'EOCP'
9499 #include <stdlib.h>
9500 #include <unistd.h>
9501 #include <fcntl.h>
9502 int main() {
9503 #if defined(F_SETLK) && defined(F_SETLKW)
9504      struct flock flock;
9505      int retval, fd;
9506      fd = open("try.c", O_RDONLY);
9507      flock.l_type = F_RDLCK;
9508      flock.l_whence = SEEK_SET;
9509      flock.l_start = flock.l_len = 0;
9510      retval = fcntl(fd, F_SETLK, &flock);
9511      close(fd);
9512      (retval < 0 ? exit(2) : exit(0));
9513 #else
9514      exit(2);
9515 #endif
9516 }
9517 EOCP
9518 echo "Checking if fcntl-based file locking works... "
9519 case "$d_fcntl" in
9520 "$define")
9521         set try
9522         if eval $compile_ok; then
9523                 if ./try; then
9524                         echo "Yes, it seems to work."
9525                         val="$define"
9526                 else
9527                         echo "Nope, it didn't work."
9528                         val="$undef"
9529                 fi
9530         else
9531                 echo "I'm unable to compile the test program, so I'll assume not."
9532                 val="$undef"
9533         fi
9534         ;;
9535 *) val="$undef";
9536         echo "Nope, since you don't even have fcntl()."
9537         ;;
9538 esac
9539 set d_fcntl_can_lock
9540 eval $setvar
9541 $rm -f try*
9542
9543
9544 : see if sys/select.h has to be included
9545 set sys/select.h i_sysselct
9546 eval $inhdr
9547
9548 : see if we should include time.h, sys/time.h, or both
9549 echo " "
9550 if test "X$timeincl" = X; then
9551         echo "Testing to see if we should include <time.h>, <sys/time.h> or both." >&4
9552         $echo $n "I'm now running the test program...$c"
9553         $cat >try.c <<'EOCP'
9554 #include <sys/types.h>
9555 #ifdef I_TIME
9556 #include <time.h>
9557 #endif
9558 #ifdef I_SYSTIME
9559 #ifdef SYSTIMEKERNEL
9560 #define KERNEL
9561 #endif
9562 #include <sys/time.h>
9563 #endif
9564 #ifdef I_SYSSELECT
9565 #include <sys/select.h>
9566 #endif
9567 int main()
9568 {
9569         struct tm foo;
9570 #ifdef S_TIMEVAL
9571         struct timeval bar;
9572 #endif
9573 #ifdef S_TIMEZONE
9574         struct timezone tzp;
9575 #endif
9576         if (foo.tm_sec == foo.tm_sec)
9577                 exit(0);
9578 #ifdef S_TIMEVAL
9579         if (bar.tv_sec == bar.tv_sec)
9580                 exit(0);
9581 #endif
9582         exit(1);
9583 }
9584 EOCP
9585         flags=''
9586         for s_timezone in '-DS_TIMEZONE' ''; do
9587         sysselect=''
9588         for s_timeval in '-DS_TIMEVAL' ''; do
9589         for i_systimek in '' '-DSYSTIMEKERNEL'; do
9590         for i_time in '' '-DI_TIME'; do
9591         for i_systime in '-DI_SYSTIME' ''; do
9592                 case "$flags" in
9593                 '') $echo $n ".$c"
9594                         set try $i_time $i_systime $i_systimek $sysselect $s_timeval $s_timezone
9595                         if eval $compile; then
9596                                 set X $i_time $i_systime $i_systimek $sysselect $s_timeval
9597                                 shift
9598                                 flags="$*"
9599                                 echo " "
9600                                 $echo $n "Succeeded with $flags$c"
9601                         fi
9602                         ;;
9603                 esac
9604         done
9605         done
9606         done
9607         done
9608         done
9609         timeincl=''
9610         echo " "
9611         case "$flags" in
9612         *SYSTIMEKERNEL*) i_systimek="$define"
9613                 timeincl=`./findhdr sys/time.h`
9614                 echo "We'll include <sys/time.h> with KERNEL defined." >&4;;
9615         *) i_systimek="$undef";;
9616         esac
9617         case "$flags" in
9618         *I_TIME*) i_time="$define"
9619                 timeincl=`./findhdr time.h`" $timeincl"
9620                 echo "We'll include <time.h>." >&4;;
9621         *) i_time="$undef";;
9622         esac
9623         case "$flags" in
9624         *I_SYSTIME*) i_systime="$define"
9625                 timeincl=`./findhdr sys/time.h`" $timeincl"
9626                 echo "We'll include <sys/time.h>." >&4;;
9627         *) i_systime="$undef";;
9628         esac
9629         $rm -f try.c try
9630 fi
9631
9632 : check for fd_set items
9633 $cat <<EOM
9634
9635 Checking to see how well your C compiler handles fd_set and friends ...
9636 EOM
9637 $cat >fd_set.c <<EOCP
9638 #$i_systime I_SYS_TIME
9639 #$i_sysselct I_SYS_SELECT
9640 #$d_socket HAS_SOCKET
9641 #include <sys/types.h>
9642 #ifdef HAS_SOCKET
9643 #include <sys/socket.h> /* Might include <sys/bsdtypes.h> */
9644 #endif
9645 #ifdef I_SYS_TIME
9646 #include <sys/time.h>
9647 #endif
9648 #ifdef I_SYS_SELECT
9649 #include <sys/select.h>
9650 #endif
9651 int main() {
9652         fd_set fds;
9653
9654 #ifdef TRYBITS
9655         if(fds.fds_bits);
9656 #endif
9657
9658 #if defined(FD_SET) && defined(FD_CLR) && defined(FD_ISSET) && defined(FD_ZERO)
9659         exit(0);
9660 #else
9661         exit(1);
9662 #endif
9663 }
9664 EOCP
9665 set fd_set -DTRYBITS
9666 if eval $compile; then
9667         d_fds_bits="$define"
9668         d_fd_set="$define"
9669         echo "Well, your system knows about the normal fd_set typedef..." >&4
9670         if ./fd_set; then
9671                 echo "and you have the normal fd_set macros (just as I'd expect)." >&4
9672                 d_fd_macros="$define"
9673         else
9674                 $cat >&4 <<'EOM'
9675 but not the normal fd_set macros!  Gaaack!  I'll have to cover for you.
9676 EOM
9677                 d_fd_macros="$undef"
9678         fi
9679 else
9680         $cat <<'EOM'
9681 Hmm, your compiler has some difficulty with fd_set.  Checking further...
9682 EOM
9683         set fd_set
9684         if eval $compile; then
9685                 d_fds_bits="$undef"
9686                 d_fd_set="$define"
9687                 echo "Well, your system has some sort of fd_set available..." >&4
9688                 if ./fd_set; then
9689                         echo "and you have the normal fd_set macros." >&4
9690                         d_fd_macros="$define"
9691                 else
9692                         $cat <<'EOM'
9693 but not the normal fd_set macros!  Gross!  More work for me...
9694 EOM
9695                         d_fd_macros="$undef"
9696                 fi
9697         else
9698         echo "Well, you got zip.  That's OK, I can roll my own fd_set stuff." >&4
9699                 d_fd_set="$undef"
9700                 d_fds_bits="$undef"
9701                 d_fd_macros="$undef"
9702         fi
9703 fi
9704 $rm -f fd_set*
9705
9706 : see if fgetpos exists
9707 set fgetpos d_fgetpos
9708 eval $inlibc
9709
9710 : see if flock exists
9711 set flock d_flock
9712 eval $inlibc
9713
9714 : see if fork exists
9715 set fork d_fork
9716 eval $inlibc
9717
9718 : see if pathconf exists
9719 set pathconf d_pathconf
9720 eval $inlibc
9721
9722 : see if fpathconf exists
9723 set fpathconf d_fpathconf
9724 eval $inlibc
9725
9726
9727 : check for fpos64_t
9728 echo " "
9729 echo "Checking to see if you have fpos64_t..." >&4
9730 $cat >try.c <<EOCP
9731 #include <stdio.h>
9732 int main() { fpos64_t x = 7; }
9733 EOCP
9734 set try
9735 if eval $compile; then
9736         val="$define"
9737         echo "You have fpos64_t."
9738 else
9739         val="$undef"
9740         echo "You do not have fpos64_t."
9741         case "$fpossize" in
9742         8) echo "(Your fpos_t is 64 bits, so you could use that.)" ;;
9743         esac
9744 fi
9745 $rm -f try.* try
9746 set d_fpos64_t
9747 eval $setvar
9748
9749 : see if frexpl exists
9750 set frexpl d_frexpl
9751 eval $inlibc
9752
9753 : see if this is a sys/param system
9754 set sys/param.h i_sysparam
9755 eval $inhdr
9756
9757 : see if this is a sys/mount.h system
9758 set sys/mount.h i_sysmount
9759 eval $inhdr
9760
9761
9762 echo " "
9763 echo "Checking to see if your system supports struct fs_data..." >&4
9764 set d_fs_data_s fs_data $i_systypes sys/types.h $i_sysparam sys/param.h $i_sysmount sys/mount.h
9765 eval $hasstruct
9766 case "$d_fs_data_s" in
9767 "$define")      echo "Yes, it does."   ;;
9768 *)              echo "No, it doesn't." ;;
9769 esac
9770
9771 : see if fseeko exists
9772 set fseeko d_fseeko
9773 eval $inlibc
9774 case "$longsize" in
9775 8) echo "(Your long is 64 bits, so you could use fseek.)" ;;
9776 esac
9777
9778 : see if fsetpos exists
9779 set fsetpos d_fsetpos
9780 eval $inlibc
9781
9782
9783 : see if fstatfs exists
9784 set fstatfs d_fstatfs
9785 eval $inlibc
9786
9787
9788 : see if statvfs exists
9789 set statvfs d_statvfs
9790 eval $inlibc
9791
9792 : see if fstatvfs exists
9793 set fstatvfs d_fstatvfs
9794 eval $inlibc
9795
9796
9797 : see if fsync exists
9798 set fsync d_fsync
9799 eval $inlibc
9800
9801 : see if ftello exists
9802 set ftello d_ftello
9803 eval $inlibc
9804 case "$longsize" in
9805 8) echo "(Your long is 64 bits, so you could use ftell.)" ;;
9806 esac
9807
9808 : see if getcwd exists
9809 set getcwd d_getcwd
9810 eval $inlibc
9811
9812 : see if getespwnam exists
9813 set getespwnam d_getespwnam
9814 eval $inlibc
9815
9816
9817 : see if getfsstat exists
9818 set getfsstat d_getfsstat
9819 eval $inlibc
9820
9821 : see if getgrent exists
9822 set getgrent d_getgrent
9823 eval $inlibc
9824
9825 : see if gethostbyaddr exists
9826 set gethostbyaddr d_gethbyaddr
9827 eval $inlibc
9828
9829 : see if gethostbyname exists
9830 set gethostbyname d_gethbyname
9831 eval $inlibc
9832
9833 : see if gethostent exists
9834 set gethostent d_gethent
9835 eval $inlibc
9836
9837 : see how we will look up host name
9838 echo " "
9839 call=''
9840 if set gethostname val -f d_gethname; eval $csym; $val; then
9841         echo 'gethostname() found.' >&4
9842         d_gethname="$define"
9843         call=gethostname
9844 fi
9845 if set uname val -f d_uname; eval $csym; $val; then
9846         if ./xenix; then
9847                 $cat <<'EOM'
9848 uname() was found, but you're running xenix, and older versions of xenix
9849 have a broken uname(). If you don't really know whether your xenix is old
9850 enough to have a broken system call, use the default answer.
9851
9852 EOM
9853                 dflt=y
9854                 case "$d_uname" in
9855                 "$define") dflt=n;;
9856                 esac
9857                 rp='Is your uname() broken?'
9858                 . ./myread
9859                 case "$ans" in
9860                 n*) d_uname="$define"; call=uname;;
9861                 esac
9862         else
9863                 echo 'uname() found.' >&4
9864                 d_uname="$define"
9865                 case "$call" in
9866                 '') call=uname ;;
9867                 esac
9868         fi
9869 fi
9870 case "$d_gethname" in
9871 '') d_gethname="$undef";;
9872 esac
9873 case "$d_uname" in
9874 '') d_uname="$undef";;
9875 esac
9876 case "$d_uname$d_gethname" in
9877 *define*)
9878         dflt=n
9879         cat <<EOM
9880  
9881 Every now and then someone has a $call() that lies about the hostname
9882 but can't be fixed for political or economic reasons.  If you wish, I can
9883 pretend $call() isn't there and maybe compute hostname at run-time
9884 thanks to the '$phostname' command.
9885
9886 EOM
9887         rp="Shall I ignore $call() from now on?"
9888         . ./myread
9889         case "$ans" in
9890         y*) d_uname="$undef" d_gethname="$undef"; $echo $n "Okay...$c";;
9891         esac;;
9892 esac
9893 case "$phostname" in
9894 '') aphostname='';;
9895 *) case "$aphostname" in
9896         /*) ;;
9897         *) set X $phostname
9898                 shift
9899                 file=$1
9900                 shift
9901                 file=`./loc $file $file $pth`
9902                 aphostname=`echo $file $*`
9903                 ;;
9904         esac
9905         ;;
9906 esac
9907 case "$d_uname$d_gethname" in
9908 *define*) ;;
9909 *)
9910         case "$phostname" in
9911         '')
9912                 echo "There will be no way for $package to get your hostname." >&4;;
9913         *)
9914         echo "I'll use 'popen("'"'$aphostname'", "r")'"' to get your hostname." >&4
9915                 ;;
9916         esac;;
9917 esac
9918 case "$d_phostname" in
9919 '') d_phostname="$undef";;
9920 esac
9921
9922 : see if this is a netdb.h system
9923 set netdb.h i_netdb
9924 eval $inhdr
9925
9926 : see if prototypes for various gethostxxx netdb.h functions are available
9927 echo " "
9928 set d_gethostprotos gethostent $i_netdb netdb.h
9929 eval $hasproto
9930
9931 : see if getitimer exists
9932 set getitimer d_getitimer
9933 eval $inlibc
9934
9935 : see if getlogin exists
9936 set getlogin d_getlogin
9937 eval $inlibc
9938
9939 : see if getmnt exists
9940 set getmnt d_getmnt
9941 eval $inlibc
9942
9943 : see if getmntent exists
9944 set getmntent d_getmntent
9945 eval $inlibc
9946
9947 : see if getnetbyaddr exists
9948 set getnetbyaddr d_getnbyaddr
9949 eval $inlibc
9950
9951 : see if getnetbyname exists
9952 set getnetbyname d_getnbyname
9953 eval $inlibc
9954
9955 : see if getnetent exists
9956 set getnetent d_getnent
9957 eval $inlibc
9958
9959 : see if prototypes for various getnetxxx netdb.h functions are available
9960 echo " "
9961 set d_getnetprotos getnetent $i_netdb netdb.h
9962 eval $hasproto
9963
9964 : see if getpagesize exists
9965 set getpagesize d_getpagsz
9966 eval $inlibc
9967
9968
9969 : see if getprotobyname exists
9970 set getprotobyname d_getpbyname
9971 eval $inlibc
9972
9973 : see if getprotobynumber exists
9974 set getprotobynumber d_getpbynumber
9975 eval $inlibc
9976
9977 : see if getprotoent exists
9978 set getprotoent d_getpent
9979 eval $inlibc
9980
9981 : see if getpgid exists
9982 set getpgid d_getpgid
9983 eval $inlibc
9984
9985 : see if getpgrp2 exists
9986 set getpgrp2 d_getpgrp2
9987 eval $inlibc
9988
9989 : see if getppid exists
9990 set getppid d_getppid
9991 eval $inlibc
9992
9993 : see if getpriority exists
9994 set getpriority d_getprior
9995 eval $inlibc
9996
9997 : see if prototypes for various getprotoxxx netdb.h functions are available
9998 echo " "
9999 set d_getprotoprotos getprotoent $i_netdb netdb.h
10000 eval $hasproto
10001
10002 : see if getprpwnam exists
10003 set getprpwnam d_getprpwnam
10004 eval $inlibc
10005
10006 : see if getpwent exists
10007 set getpwent d_getpwent
10008 eval $inlibc
10009
10010
10011 : see if getservbyname exists
10012 set getservbyname d_getsbyname
10013 eval $inlibc
10014
10015 : see if getservbyport exists
10016 set getservbyport d_getsbyport
10017 eval $inlibc
10018
10019 : see if getservent exists
10020 set getservent d_getsent
10021 eval $inlibc
10022
10023 : see if prototypes for various getservxxx netdb.h functions are available
10024 echo " "
10025 set d_getservprotos getservent $i_netdb netdb.h
10026 eval $hasproto
10027
10028 : see if getspnam exists
10029 set getspnam d_getspnam
10030 eval $inlibc
10031
10032 : see if gettimeofday or ftime exists
10033 set gettimeofday d_gettimeod
10034 eval $inlibc
10035 case "$d_gettimeod" in
10036 "$undef")
10037         set ftime d_ftime 
10038         eval $inlibc
10039         ;;
10040 *)
10041         val="$undef"; set d_ftime; eval $setvar
10042         ;;
10043 esac
10044 case "$d_gettimeod$d_ftime" in
10045 "$undef$undef")
10046         echo " "
10047         echo 'No ftime() nor gettimeofday() -- timing may be less accurate.' >&4
10048         ;;
10049 esac
10050
10051 : see if this is an grp system
10052 set grp.h i_grp
10053 eval $inhdr
10054
10055 case "$i_grp" in
10056 $define)
10057         xxx=`./findhdr grp.h`
10058         $cppstdin $cppflags $cppminus < $xxx >$$.h
10059
10060         if $contains 'gr_passwd' $$.h >/dev/null 2>&1; then
10061                 val="$define"
10062         else
10063                 val="$undef"
10064         fi
10065         set d_grpasswd
10066         eval $setvar
10067
10068         $rm -f $$.h
10069         ;;
10070 *)
10071         val="$undef";
10072         set d_grpasswd; eval $setvar
10073         ;;
10074 esac
10075
10076 : see if hasmntopt exists
10077 set hasmntopt d_hasmntopt
10078 eval $inlibc
10079
10080 : see if this is a netinet/in.h or sys/in.h system
10081 set netinet/in.h i_niin sys/in.h i_sysin
10082 eval $inhdr
10083
10084 : see if arpa/inet.h has to be included
10085 set arpa/inet.h i_arpainet
10086 eval $inhdr
10087
10088 : see if htonl --and friends-- exists
10089 val=''
10090 set htonl val
10091 eval $inlibc
10092
10093 : Maybe they are macros.
10094 case "$val" in
10095 $undef)
10096         $cat >htonl.c <<EOM
10097 #include <stdio.h>
10098 #include <sys/types.h>
10099 #$i_niin I_NETINET_IN
10100 #$i_sysin I_SYS_IN
10101 #$i_arpainet I_ARPA_INET
10102 #ifdef I_NETINET_IN
10103 #include <netinet/in.h>
10104 #endif
10105 #ifdef I_SYS_IN
10106 #include <sys/in.h>
10107 #endif
10108 #ifdef I_ARPA_INET
10109 #include <arpa/inet.h>
10110 #endif
10111 #ifdef htonl
10112 printf("Defined as a macro.");
10113 #endif
10114 EOM
10115         $cppstdin $cppflags $cppminus < htonl.c >htonl.E 2>/dev/null
10116         if $contains 'Defined as a macro' htonl.E >/dev/null 2>&1; then
10117                 val="$define"
10118                 echo "But it seems to be defined as a macro." >&4
10119         fi
10120         $rm -f htonl.?
10121         ;;
10122 esac
10123 set d_htonl
10124 eval $setvar
10125
10126 : see if iconv exists
10127 set iconv d_iconv
10128 eval $inlibc
10129
10130 : index or strchr
10131 echo " "
10132 if set index val -f; eval $csym; $val; then
10133         if set strchr val -f d_strchr; eval $csym; $val; then
10134                 if $contains strchr "$strings" >/dev/null 2>&1 ; then
10135                         val="$define"
10136                         vali="$undef"
10137                         echo "strchr() found." >&4
10138                 else
10139                         val="$undef"
10140                         vali="$define"
10141                         echo "index() found." >&4
10142                 fi
10143         else
10144                 val="$undef"
10145                 vali="$define"
10146                 echo "index() found." >&4
10147         fi
10148 else
10149         if set strchr val -f d_strchr; eval $csym; $val; then
10150                 val="$define"
10151                 vali="$undef"
10152                 echo "strchr() found." >&4
10153         else
10154                 echo "No index() or strchr() found!" >&4
10155                 val="$undef"
10156                 vali="$undef"
10157         fi
10158 fi
10159 set d_strchr; eval $setvar
10160 val="$vali"
10161 set d_index; eval $setvar
10162
10163 : check whether inet_aton exists
10164 set inet_aton d_inetaton
10165 eval $inlibc
10166
10167 : Look for isascii
10168 echo " "
10169 $cat >isascii.c <<'EOCP'
10170 #include <stdio.h>
10171 #include <ctype.h>
10172 int main() {
10173         int c = 'A';
10174         if (isascii(c))
10175                 exit(0);
10176         else
10177                 exit(1);
10178 }
10179 EOCP
10180 set isascii
10181 if eval $compile; then
10182         echo "isascii() found." >&4
10183         val="$define"
10184 else
10185         echo "isascii() NOT found." >&4
10186         val="$undef"
10187 fi
10188 set d_isascii
10189 eval $setvar
10190 $rm -f isascii*
10191
10192 : see if isnan exists
10193 set isnan d_isnan
10194 eval $inlibc
10195
10196 : see if isnanl exists
10197 set isnanl d_isnanl
10198 eval $inlibc
10199
10200 : see if killpg exists
10201 set killpg d_killpg
10202 eval $inlibc
10203
10204 : see if lchown exists
10205 echo " "
10206 $cat > try.c <<'EOCP'
10207 /* System header to define __stub macros and hopefully few prototypes,
10208     which can conflict with char lchown(); below.  */
10209 #include <assert.h>
10210 /* Override any gcc2 internal prototype to avoid an error.  */
10211 /* We use char because int might match the return type of a gcc2
10212    builtin and then its argument prototype would still apply.  */
10213 char lchown();
10214 int main() {
10215     /*  The GNU C library defines this for functions which it implements
10216         to always fail with ENOSYS.  Some functions are actually named
10217         something starting with __ and the normal name is an alias.  */
10218 #if defined (__stub_lchown) || defined (__stub___lchown)
10219 choke me
10220 #else
10221 lchown();
10222 #endif
10223 ; return 0; }
10224 EOCP
10225 set try
10226 if eval $compile; then
10227     $echo "lchown() found." >&4
10228     val="$define"
10229 else
10230     $echo "lchown() NOT found." >&4
10231     val="$undef"
10232 fi
10233 set d_lchown
10234 eval $setvar
10235
10236 : See if number of significant digits in a double precision number is known
10237 echo " "
10238 $cat >ldbl_dig.c <<EOM
10239 #$i_limits I_LIMITS
10240 #$i_float I_FLOAT
10241 #ifdef I_LIMITS
10242 #include <limits.h>
10243 #endif
10244 #ifdef I_FLOAT
10245 #include <float.h>
10246 #endif
10247 #ifdef LDBL_DIG
10248 printf("Contains LDBL_DIG");
10249 #endif
10250 EOM
10251 $cppstdin $cppflags $cppminus < ldbl_dig.c >ldbl_dig.E 2>/dev/null
10252 if $contains 'LDBL_DIG' ldbl_dig.E >/dev/null 2>&1; then
10253         echo "LDBL_DIG found." >&4
10254         val="$define"
10255 else
10256         echo "LDBL_DIG NOT found." >&4
10257         val="$undef"
10258 fi
10259 $rm -f ldbl_dig.?
10260 set d_ldbl_dig
10261 eval $setvar
10262
10263 : see if link exists
10264 set link d_link
10265 eval $inlibc
10266
10267 : see if localeconv exists
10268 set localeconv d_locconv
10269 eval $inlibc
10270
10271 : see if lockf exists
10272 set lockf d_lockf
10273 eval $inlibc
10274
10275 : see if prototype for lseek is available
10276 echo " "
10277 set d_lseekproto lseek $i_systypes sys/types.h $i_unistd unistd.h
10278 eval $hasproto
10279
10280 : see if lstat exists
10281 set lstat d_lstat
10282 eval $inlibc
10283
10284 : see if madvise exists
10285 set madvise d_madvise
10286 eval $inlibc
10287
10288 : see if mblen exists
10289 set mblen d_mblen
10290 eval $inlibc
10291
10292 : see if mbstowcs exists
10293 set mbstowcs d_mbstowcs
10294 eval $inlibc
10295
10296 : see if mbtowc exists
10297 set mbtowc d_mbtowc
10298 eval $inlibc
10299
10300 : see if memchr exists
10301 set memchr d_memchr
10302 eval $inlibc
10303
10304 : see if memcmp exists
10305 set memcmp d_memcmp
10306 eval $inlibc
10307
10308 : see if memcpy exists
10309 set memcpy d_memcpy
10310 eval $inlibc
10311
10312 : see if memmove exists
10313 set memmove d_memmove
10314 eval $inlibc
10315
10316 : see if memset exists
10317 set memset d_memset
10318 eval $inlibc
10319
10320 : see if mkdir exists
10321 set mkdir d_mkdir
10322 eval $inlibc
10323
10324 : see if mkdtemp exists
10325 set mkdtemp d_mkdtemp
10326 eval $inlibc
10327
10328 : see if mkfifo exists
10329 set mkfifo d_mkfifo
10330 eval $inlibc
10331
10332 : see if mkstemp exists
10333 set mkstemp d_mkstemp
10334 eval $inlibc
10335
10336 : see if mkstemps exists
10337 set mkstemps d_mkstemps
10338 eval $inlibc
10339
10340 : see if mktime exists
10341 set mktime d_mktime
10342 eval $inlibc
10343
10344 : see if this is a sys/mman.h system
10345 set sys/mman.h i_sysmman
10346 eval $inhdr
10347
10348 : see if mmap exists
10349 set mmap d_mmap
10350 eval $inlibc
10351 : see what shmat returns
10352 : default to something harmless
10353 mmaptype='void *'
10354 case "$i_sysmman$d_mmap" in
10355 "$define$define")
10356         $cat >mmap.c <<'END'
10357 #include <sys/mman.h>
10358 void *mmap();
10359 END
10360         if $cc $ccflags -c mmap.c >/dev/null 2>&1; then
10361                 mmaptype='void *'
10362         else
10363                 mmaptype='caddr_t'
10364         fi
10365         echo "and it returns ($mmaptype)." >&4
10366         ;;
10367 esac
10368
10369
10370
10371 : see if modfl exists
10372 set modfl d_modfl
10373 eval $inlibc
10374
10375 : see if mprotect exists
10376 set mprotect d_mprotect
10377 eval $inlibc
10378
10379 : see if msgctl exists
10380 set msgctl d_msgctl
10381 eval $inlibc
10382
10383 : see if msgget exists
10384 set msgget d_msgget
10385 eval $inlibc
10386
10387 : see if msgsnd exists
10388 set msgsnd d_msgsnd
10389 eval $inlibc
10390
10391 : see if msgrcv exists
10392 set msgrcv d_msgrcv
10393 eval $inlibc
10394
10395 : see how much of the 'msg*(2)' library is present.
10396 h_msg=true
10397 echo " "
10398 case "$d_msgctl$d_msgget$d_msgsnd$d_msgrcv" in
10399 *"$undef"*) h_msg=false;;
10400 esac
10401 case "$osname" in
10402 freebsd)
10403     case "`ipcs 2>&1`" in
10404     "SVID messages"*"not configured"*)
10405         echo "Your $osname does not have the msg*(2) configured." >&4
10406         h_msg=false
10407         val="$undef"
10408         set msgctl d_msgctl
10409         eval $setvar
10410         set msgget d_msgget
10411         eval $setvar
10412         set msgsnd d_msgsnd
10413         eval $setvar
10414         set msgrcv d_msgrcv
10415         eval $setvar
10416         ;;
10417     esac
10418     ;;
10419 esac
10420 : we could also check for sys/ipc.h ...
10421 if $h_msg && $test `./findhdr sys/msg.h`; then
10422         echo "You have the full msg*(2) library." >&4
10423         val="$define"
10424 else
10425         echo "You don't have the full msg*(2) library." >&4
10426         val="$undef"
10427 fi
10428 set d_msg
10429 eval $setvar
10430
10431
10432 echo " "
10433 echo "Checking to see if your system supports struct msghdr..." >&4
10434 set d_msghdr_s msghdr $i_systypes sys/types.h $d_socket sys/socket.h $i_sysuio sys/uio.h
10435 eval $hasstruct
10436 case "$d_msghdr_s" in
10437 "$define")      echo "Yes, it does."   ;;
10438 *)              echo "No, it doesn't." ;;
10439 esac
10440
10441
10442 : see if msync exists
10443 set msync d_msync
10444 eval $inlibc
10445
10446 : see if munmap exists
10447 set munmap d_munmap
10448 eval $inlibc
10449
10450 : see if nice exists
10451 set nice d_nice
10452 eval $inlibc
10453
10454 : check for length of character
10455 echo " "
10456 case "$charsize" in
10457 '')
10458         echo "Checking to see how big your characters are (hey, you never know)..." >&4
10459         $cat >try.c <<'EOCP'
10460 #include <stdio.h>
10461 int main()
10462 {
10463     printf("%d\n", (int)sizeof(char));
10464     exit(0);
10465 }
10466 EOCP
10467         set try
10468         if eval $compile_ok; then
10469                 dflt=`./try`
10470         else
10471                 dflt='1'
10472                 echo "(I can't seem to compile the test program.  Guessing...)"
10473         fi
10474         ;;
10475 *)
10476         dflt="$charsize"
10477         ;;
10478 esac
10479 rp="What is the size of a character (in bytes)?"
10480 . ./myread
10481 charsize="$ans"
10482 $rm -f try.c try
10483
10484 : check for volatile keyword
10485 echo " "
10486 echo 'Checking to see if your C compiler knows about "volatile"...' >&4
10487 $cat >try.c <<'EOCP'
10488 int main()
10489 {
10490         typedef struct _goo_struct goo_struct;
10491         goo_struct * volatile goo = ((goo_struct *)0);
10492         struct _goo_struct {
10493                 long long_int;
10494                 int reg_int;
10495                 char char_var;
10496         };
10497         typedef unsigned short foo_t;
10498         char *volatile foo;
10499         volatile int bar;
10500         volatile foo_t blech;
10501         foo = foo;
10502 }
10503 EOCP
10504 if $cc -c $ccflags try.c >/dev/null 2>&1 ; then
10505         val="$define"
10506         echo "Yup, it does."
10507 else
10508         val="$undef"
10509         echo "Nope, it doesn't."
10510 fi
10511 set d_volatile
10512 eval $setvar
10513 $rm -f try.*
10514
10515
10516 echo " "
10517 $echo "Choosing the C types to be used for Perl's internal types..." >&4
10518
10519 case "$use64bitint:$d_quad:$quadtype" in
10520 define:define:?*)
10521         ivtype="$quadtype"
10522         uvtype="$uquadtype"
10523         ivsize=8
10524         uvsize=8
10525         ;;
10526 *)      ivtype="long"
10527         uvtype="unsigned long"
10528         ivsize=$longsize
10529         uvsize=$longsize
10530         ;;
10531 esac
10532
10533 case "$uselongdouble:$d_longdbl" in
10534 define:define)
10535         nvtype="long double"
10536         nvsize=$longdblsize
10537         ;;
10538 *)      nvtype=double
10539         nvsize=$doublesize
10540         ;;
10541 esac
10542
10543 $echo "(IV will be "$ivtype", $ivsize bytes)"
10544 $echo "(UV will be "$uvtype", $uvsize bytes)"
10545 $echo "(NV will be "$nvtype", $nvsize bytes)"
10546
10547 $cat >try.c <<EOCP
10548 #$i_inttypes I_INTTYPES
10549 #ifdef I_INTTYPES
10550 #include <inttypes.h>
10551 #endif
10552 #include <stdio.h>
10553 int main() {
10554 #ifdef INT8
10555    int8_t i =  INT8_MAX;
10556   uint8_t u = UINT8_MAX;
10557   printf("int8_t\n");
10558 #endif
10559 #ifdef INT16
10560    int16_t i =  INT16_MAX;
10561   uint16_t i = UINT16_MAX;
10562   printf("int16_t\n");
10563 #endif
10564 #ifdef INT32
10565    int32_t i =  INT32_MAX;
10566   uint32_t u = UINT32_MAX;
10567   printf("int32_t\n");
10568 #endif
10569 }
10570 EOCP
10571
10572 case "$i8type" in
10573 '')     case "$charsize" in
10574         1)      i8type=char
10575                 u8type="unsigned char"
10576                 i8size=$charsize
10577                 u8size=$charsize
10578                 ;;
10579         esac
10580         ;;
10581 esac
10582 case "$i8type" in
10583 '')     set try -DINT8
10584         if eval $compile; then
10585                 case "`./try$exe_ext`" in
10586                 int8_t) i8type=int8_t
10587                         u8type=uint8_t
10588                         i8size=1
10589                         u8size=1
10590                         ;;
10591                 esac
10592         fi
10593         ;;
10594 esac
10595 case "$i8type" in
10596 '')     if $test $charsize -ge 1; then
10597                 i8type=char
10598                 u8type="unsigned char"
10599                 i8size=$charsize
10600                 u8size=$charsize
10601         fi
10602         ;;
10603 esac
10604
10605 case "$i16type" in
10606 '')     case "$shortsize" in
10607         2)      i16type=short
10608                 u16type="unsigned short"
10609                 i16size=$shortsize
10610                 u16size=$shortsize
10611                 ;;
10612         esac
10613         ;;
10614 esac
10615 case "$i16type" in
10616 '')     set try -DINT16
10617         if eval $compile; then
10618                 case "`./try$exe_ext`" in
10619                 int16_t)
10620                         i16type=int16_t
10621                         u16type=uint16_t
10622                         i16size=2
10623                         u16size=2
10624                         ;;
10625                 esac
10626         fi
10627         ;;
10628 esac
10629 case "$i16type" in
10630 '')     if $test $shortsize -ge 2; then
10631                 i16type=short
10632                 u16type="unsigned short"
10633                 i16size=$shortsize
10634                 u16size=$shortsize
10635         fi
10636         ;;
10637 esac
10638
10639 case "$i32type" in
10640 '')     case "$longsize" in
10641         4)      i32type=long
10642                 u32type="unsigned long"
10643                 i32size=$longsize
10644                 u32size=$longsize
10645                 ;;
10646         *)      case "$intsize" in
10647                 4)      i32type=int
10648                         u32type="unsigned int"
10649                         i32size=$intsize
10650                         u32size=$intsize
10651                         ;;
10652                 esac
10653                 ;;
10654         esac
10655         ;;
10656 esac
10657 case "$i32type" in
10658 '')     set try -DINT32
10659         if eval $compile; then
10660                 case "`./try$exe_ext`" in
10661                 int32_t)
10662                         i32type=int32_t
10663                         u32type=uint32_t
10664                         i32size=4
10665                         u32size=4
10666                         ;;
10667                 esac
10668         fi
10669         ;;
10670 esac
10671 case "$i32type" in
10672 '')     if $test $intsize -ge 4; then
10673                 i32type=int
10674                 u32type="unsigned int"
10675                 i32size=$intsize
10676                 u32size=$intsize
10677         fi
10678         ;;
10679 esac
10680
10681 case "$i64type" in
10682 '')     case "$d_quad:$quadtype" in
10683         define:?*)
10684                 i64type="$quadtype"
10685                 u64type="$uquadtype"
10686                 i64size=8
10687                 u64size=8
10688                 ;;
10689         esac
10690         ;;
10691 esac
10692
10693 $echo "Checking how many bits of your UVs your NVs can preserve..." >&4
10694 : volatile so that the compiler has to store it out to memory.
10695 if test X"$d_volatile" = X"$define"; then
10696         volatile=volatile
10697 fi
10698 $cat <<EOP >try.c
10699 #include <stdio.h>
10700 #include <sys/types.h>
10701 #include <signal.h>
10702 #ifdef SIGFPE
10703 $volatile int bletched = 0;
10704 $signal_t blech(s) int s; { bletched = 1; }
10705 #endif
10706 int main() {
10707     $uvtype u = 0;
10708     $nvtype d;
10709     int     n = 8 * $uvsize;
10710     int     i;
10711 #ifdef SIGFPE
10712     signal(SIGFPE, blech);
10713 #endif
10714
10715     for (i = 0; i < n; i++) {
10716       u = u << 1 | ($uvtype)1;
10717       d = ($nvtype)u;
10718       if (($uvtype)d != u)
10719         break;
10720       if (d <= 0)
10721         break;
10722       d = ($nvtype)(u - 1);
10723       if (($uvtype)d != (u - 1))
10724         break;
10725 #ifdef SIGFPE
10726       if (bletched) {
10727         break;
10728 #endif
10729       } 
10730     }
10731     printf("%d\n", ((i == n) ? -n : i));
10732     exit(0);
10733 }
10734 EOP
10735 set try
10736
10737 d_nv_preserves_uv="$undef"
10738 if eval $compile; then
10739         d_nv_preserves_uv_bits="`./try$exe_ext`"
10740 fi
10741 case "$d_nv_preserves_uv_bits" in
10742 \-[1-9]*)       
10743         d_nv_preserves_uv_bits=`expr 0 - $d_nv_preserves_uv_bits`
10744         $echo "Your NVs can preserve all $d_nv_preserves_uv_bits bits of your UVs."  2>&1
10745         d_nv_preserves_uv="$define"
10746         ;;
10747 [1-9]*) $echo "Your NVs can preserve only $d_nv_preserves_uv_bits bits of your UVs."  2>&1
10748         d_nv_preserves_uv="$undef" ;;
10749 *)      $echo "Can't figure out how many bits your NVs preserve." 2>&1
10750         d_nv_preserves_uv_bits="$undef" ;;
10751 esac
10752
10753 $rm -f try.* try
10754
10755
10756 : check for off64_t
10757 echo " "
10758 echo "Checking to see if you have off64_t..." >&4
10759 $cat >try.c <<EOCP
10760 #include <sys/types.h>
10761 #include <unistd.h>
10762 int main() { off64_t x = 7; }
10763 EOCP
10764 set try
10765 if eval $compile; then
10766         val="$define"
10767         echo "You have off64_t."
10768 else
10769         val="$undef"
10770         echo "You do not have off64_t."
10771         case "$lseeksize" in
10772         8) echo "(Your off_t is 64 bits, so you could use that.)" ;;
10773         esac
10774 fi
10775 $rm -f try.* try
10776 set d_off64_t
10777 eval $setvar
10778
10779 : see if POSIX threads are available
10780 set pthread.h i_pthread
10781 eval $inhdr
10782
10783
10784
10785
10786 : how to create joinable pthreads
10787 if test "X$usethreads" = "X$define" -a "X$i_pthread" = "X$define"; then
10788         echo " "
10789         echo "Checking what constant to use for creating joinable pthreads..." >&4 
10790         $cat >try.c <<'EOCP'
10791 #include <pthread.h>
10792 int main() {
10793     int detachstate = JOINABLE;
10794 }
10795 EOCP
10796         set try -DJOINABLE=PTHREAD_CREATE_JOINABLE
10797         if eval $compile; then
10798                 echo "You seem to use PTHREAD_CREATE_JOINABLE." >&4
10799                 val="$undef" # Yes, undef.
10800                 set d_old_pthread_create_joinable
10801                 eval $setvar
10802                 val=""
10803                 set old_pthread_create_joinable
10804                 eval $setvar
10805         else
10806                 set try -DJOINABLE=PTHREAD_CREATE_UNDETACHED
10807                 if eval $compile; then
10808                         echo "You seem to use PTHREAD_CREATE_UNDETACHED." >&4
10809                         val="$define"
10810                         set d_old_pthread_create_joinable
10811                         eval $setvar
10812                         val=PTHREAD_CREATE_UNDETACHED
10813                         set old_pthread_create_joinable
10814                         eval $setvar
10815                 else            
10816                         set try -DJOINABLE=__UNDETACHED
10817                         if eval $compile; then
10818                                 echo "You seem to use __UNDETACHED." >&4
10819                                 val="$define"
10820                                 set d_old_pthread_create_joinable
10821                                 eval $setvar
10822                                 val=__UNDETACHED
10823                                 set old_pthread_create_joinable
10824                                 eval $setvar
10825                         else
10826                                 echo "Egads, nothing obvious found.  Guessing that you use 0." >&4
10827                                 val="$define"
10828                                 set d_old_pthread_create_joinable
10829                                 eval $setvar
10830                                 val=0
10831                                 set old_pthread_create_joinable
10832                                 eval $setvar
10833                         fi
10834                 fi
10835         fi
10836         $rm -f try try.*
10837 else
10838     d_old_pthread_create_joinable="$undef"
10839     old_pthread_create_joinable=""
10840 fi
10841
10842 : see if pause exists
10843 set pause d_pause
10844 eval $inlibc
10845
10846 : see if pipe exists
10847 set pipe d_pipe
10848 eval $inlibc
10849
10850 : see if poll exists
10851 set poll d_poll
10852 eval $inlibc
10853
10854
10855 : see whether the various POSIXish _yields exist
10856 $cat >try.c <<EOP
10857 #include <pthread.h>
10858 #include <stdio.h>
10859 int main() {
10860 #ifdef SCHED_YIELD
10861         sched_yield();
10862 #else
10863 #ifdef PTHREAD_YIELD
10864         pthread_yield();
10865 #else
10866 #ifdef PTHREAD_YIELD_NULL
10867         pthread_yield(NULL);
10868 #endif
10869 #endif
10870 #endif
10871 }
10872 EOP
10873 : see if sched_yield exists
10874 set try -DSCHED_YIELD
10875 if eval $compile; then
10876     val="$define"
10877     sched_yield='sched_yield()'
10878 else
10879     val="$undef"
10880 fi
10881 case "$usethreads" in
10882 $define)
10883         case "$val" in
10884         $define) echo 'sched_yield() found.' >&4        ;;
10885         *)       echo 'sched_yield() NOT found.' >&4    ;;
10886         esac
10887 esac
10888 set d_sched_yield
10889 eval $setvar
10890
10891 : see if pthread_yield exists
10892 set try -DPTHREAD_YIELD
10893 if eval $compile; then
10894     val="$define"
10895     case "$sched_yield" in
10896     '') sched_yield='pthread_yield()' ;;
10897     esac
10898 else
10899     set try -DPTHREAD_YIELD_NULL
10900     if eval $compile; then
10901         val="$define"
10902         case "$sched_yield" in
10903         '') sched_yield='pthread_yield(NULL)' ;;
10904         esac
10905     else
10906         val="$undef"
10907     fi
10908 fi
10909 case "$usethreads" in
10910 $define)
10911         case "$val" in
10912         $define) echo 'pthread_yield() found.' >&4      ;;
10913         *)       echo 'pthread_yield() NOT found.' >&4  ;;
10914         esac
10915         ;;
10916 esac
10917 set d_pthread_yield
10918 eval $setvar
10919
10920 case "$sched_yield" in
10921 '') sched_yield=undef ;;
10922 esac
10923
10924 $rm -f try try.*
10925
10926 : see if this is a pwd.h system
10927 set pwd.h i_pwd
10928 eval $inhdr
10929
10930 case "$i_pwd" in
10931 $define)
10932         xxx=`./findhdr pwd.h`
10933         $cppstdin $cppflags $cppminus < $xxx >$$.h
10934
10935         if $contains 'pw_quota' $$.h >/dev/null 2>&1; then
10936                 val="$define"
10937         else
10938                 val="$undef"
10939         fi
10940         set d_pwquota
10941         eval $setvar
10942
10943         if $contains 'pw_age' $$.h >/dev/null 2>&1; then
10944                 val="$define"
10945         else
10946                 val="$undef"
10947         fi
10948         set d_pwage
10949         eval $setvar
10950
10951         if $contains 'pw_change' $$.h >/dev/null 2>&1; then
10952                 val="$define"
10953         else
10954                 val="$undef"
10955         fi
10956         set d_pwchange
10957         eval $setvar
10958
10959         if $contains 'pw_class' $$.h >/dev/null 2>&1; then
10960                 val="$define"
10961         else
10962                 val="$undef"
10963         fi
10964         set d_pwclass
10965         eval $setvar
10966
10967         if $contains 'pw_expire' $$.h >/dev/null 2>&1; then
10968                 val="$define"
10969         else
10970                 val="$undef"
10971         fi
10972         set d_pwexpire
10973         eval $setvar
10974
10975         if $contains 'pw_comment' $$.h >/dev/null 2>&1; then
10976                 val="$define"
10977         else
10978                 val="$undef"
10979         fi
10980         set d_pwcomment
10981         eval $setvar
10982
10983         if $contains 'pw_gecos' $$.h >/dev/null 2>&1; then
10984                 val="$define"
10985         else
10986                 val="$undef"
10987         fi
10988         set d_pwgecos
10989         eval $setvar
10990
10991         if $contains 'pw_passwd' $$.h >/dev/null 2>&1; then
10992                 val="$define"
10993         else
10994                 val="$undef"
10995         fi
10996         set d_pwpasswd
10997         eval $setvar
10998
10999         $rm -f $$.h
11000         ;;
11001 *)
11002         val="$undef"; 
11003         set d_pwquota; eval $setvar
11004         set d_pwage; eval $setvar
11005         set d_pwchange; eval $setvar
11006         set d_pwclass; eval $setvar
11007         set d_pwexpire; eval $setvar
11008         set d_pwcomment; eval $setvar
11009         set d_pwgecos; eval $setvar
11010         set d_pwpasswd; eval $setvar
11011         ;;
11012 esac
11013
11014 : see if readdir and friends exist
11015 set readdir d_readdir
11016 eval $inlibc
11017 set seekdir d_seekdir
11018 eval $inlibc
11019 set telldir d_telldir
11020 eval $inlibc
11021 set rewinddir d_rewinddir
11022 eval $inlibc
11023
11024 : see if readlink exists
11025 set readlink d_readlink
11026 eval $inlibc
11027
11028 : see if readv exists
11029 set readv d_readv
11030 eval $inlibc
11031
11032 : see if recvmsg exists
11033 set recvmsg d_recvmsg
11034 eval $inlibc
11035
11036 : see if rename exists
11037 set rename d_rename
11038 eval $inlibc
11039
11040 : see if rmdir exists
11041 set rmdir d_rmdir
11042 eval $inlibc
11043
11044 : see if memory.h is available.
11045 val=''
11046 set memory.h val
11047 eval $inhdr
11048
11049 : See if it conflicts with string.h
11050 case "$val" in
11051 $define)
11052         case "$strings" in
11053         '') ;;
11054         *)
11055                 $cppstdin $cppflags $cppminus < $strings > mem.h
11056                 if $contains 'memcpy' mem.h >/dev/null 2>&1; then
11057                         echo " "
11058                         echo "We won't be including <memory.h>."
11059                         val="$undef"
11060                 fi
11061                 $rm -f mem.h
11062                 ;;
11063         esac
11064 esac
11065 set i_memory
11066 eval $setvar
11067
11068 : can bcopy handle overlapping blocks?
11069 val="$undef"
11070 case "$d_bcopy" in
11071 "$define")
11072         echo " "
11073         echo "Checking to see if your bcopy() can do overlapping copies..." >&4
11074         $cat >try.c <<EOCP
11075 #$i_memory I_MEMORY
11076 #$i_stdlib I_STDLIB
11077 #$i_string I_STRING
11078 #$i_unistd I_UNISTD
11079 EOCP
11080         $cat >>try.c <<'EOCP'
11081 #include <stdio.h>
11082 #ifdef I_MEMORY
11083 #  include <memory.h>
11084 #endif
11085 #ifdef I_STDLIB
11086 #  include <stdlib.h>
11087 #endif
11088 #ifdef I_STRING
11089 #  include <string.h>
11090 #else
11091 #  include <strings.h>
11092 #endif
11093 #ifdef I_UNISTD
11094 #  include <unistd.h>  /* Needed for NetBSD */
11095 #endif
11096 int main()
11097 {
11098 char buf[128], abc[128];
11099 char *b;
11100 int len;
11101 int off;
11102 int align;
11103
11104 bcopy("abcdefghijklmnopqrstuvwxyz0123456789", abc, 36);
11105
11106 for (align = 7; align >= 0; align--) {
11107         for (len = 36; len; len--) {
11108                 b = buf+align;
11109                 bcopy(abc, b, len);
11110                 for (off = 1; off <= len; off++) {
11111                         bcopy(b, b+off, len);
11112                         bcopy(b+off, b, len);
11113                         if (bcmp(b, abc, len))
11114                                 exit(1);
11115                 }
11116         }
11117 }
11118 exit(0);
11119 }
11120 EOCP
11121         set try
11122         if eval $compile_ok; then
11123                 if ./try 2>/dev/null; then
11124                         echo "Yes, it can."
11125                         val="$define"
11126                 else
11127                         echo "It can't, sorry."
11128                         case "$d_memmove" in
11129                         "$define") echo "But that's Ok since you have memmove()." ;;
11130                         esac
11131                 fi
11132         else
11133                 echo "(I can't compile the test program, so we'll assume not...)"
11134                 case "$d_memmove" in
11135                 "$define") echo "But that's Ok since you have memmove()." ;;
11136                 esac
11137         fi
11138         ;;
11139 esac
11140 $rm -f try.* try core
11141 set d_safebcpy
11142 eval $setvar
11143
11144 : can memcpy handle overlapping blocks?
11145 val="$undef"
11146 case "$d_memcpy" in
11147 "$define")
11148         echo " "
11149         echo "Checking to see if your memcpy() can do overlapping copies..." >&4
11150         $cat >try.c <<EOCP
11151 #$i_memory I_MEMORY
11152 #$i_stdlib I_STDLIB
11153 #$i_string I_STRING
11154 #$i_unistd I_UNISTD
11155 EOCP
11156         $cat >>try.c <<'EOCP'
11157 #include <stdio.h>
11158 #ifdef I_MEMORY
11159 #  include <memory.h>
11160 #endif
11161 #ifdef I_STDLIB
11162 #  include <stdlib.h>
11163 #endif
11164 #ifdef I_STRING
11165 #  include <string.h>
11166 #else
11167 #  include <strings.h>
11168 #endif
11169 #ifdef I_UNISTD
11170 #  include <unistd.h>  /* Needed for NetBSD */
11171 #endif
11172 int main()
11173 {
11174 char buf[128], abc[128];
11175 char *b;
11176 int len;
11177 int off;
11178 int align;
11179
11180 /* Copy "abcde..." string to char abc[] so that gcc doesn't
11181    try to store the string in read-only memory. */
11182 memcpy(abc, "abcdefghijklmnopqrstuvwxyz0123456789", 36);
11183
11184 for (align = 7; align >= 0; align--) {
11185         for (len = 36; len; len--) {
11186                 b = buf+align;
11187                 memcpy(b, abc, len);
11188                 for (off = 1; off <= len; off++) {
11189                         memcpy(b+off, b, len);
11190                         memcpy(b, b+off, len);
11191                         if (memcmp(b, abc, len))
11192                                 exit(1);
11193                 }
11194         }
11195 }
11196 exit(0);
11197 }
11198 EOCP
11199         set try
11200         if eval $compile_ok; then
11201                 if ./try 2>/dev/null; then
11202                         echo "Yes, it can."
11203                         val="$define"
11204                 else
11205                         echo "It can't, sorry."
11206                         case "$d_memmove" in
11207                         "$define") echo "But that's Ok since you have memmove()." ;;
11208                         esac
11209                 fi
11210         else
11211                 echo "(I can't compile the test program, so we'll assume not...)"
11212                 case "$d_memmove" in
11213                 "$define") echo "But that's Ok since you have memmove()." ;;
11214                 esac
11215         fi
11216         ;;
11217 esac
11218 $rm -f try.* try core
11219 set d_safemcpy
11220 eval $setvar
11221
11222 : can memcmp be trusted to compare relative magnitude?
11223 val="$undef"
11224 case "$d_memcmp" in
11225 "$define")
11226         echo " "
11227         echo "Checking if your memcmp() can compare relative magnitude..." >&4
11228         $cat >try.c <<EOCP
11229 #$i_memory I_MEMORY
11230 #$i_stdlib I_STDLIB
11231 #$i_string I_STRING
11232 #$i_unistd I_UNISTD
11233 EOCP
11234         $cat >>try.c <<'EOCP'
11235 #include <stdio.h>
11236 #ifdef I_MEMORY
11237 #  include <memory.h>
11238 #endif
11239 #ifdef I_STDLIB
11240 #  include <stdlib.h>
11241 #endif
11242 #ifdef I_STRING
11243 #  include <string.h>
11244 #else
11245 #  include <strings.h>
11246 #endif
11247 #ifdef I_UNISTD
11248 #  include <unistd.h>  /* Needed for NetBSD */
11249 #endif
11250 int main()
11251 {
11252 char a = -1;
11253 char b = 0;
11254 if ((a < b) && memcmp(&a, &b, 1) < 0)
11255         exit(1);
11256 exit(0);
11257 }
11258 EOCP
11259         set try
11260         if eval $compile_ok; then
11261                 if ./try 2>/dev/null; then
11262                         echo "Yes, it can."
11263                         val="$define"
11264                 else
11265                         echo "No, it can't (it uses signed chars)."
11266                 fi
11267         else
11268                 echo "(I can't compile the test program, so we'll assume not...)"
11269         fi
11270         ;;
11271 esac
11272 $rm -f try.* try core
11273 set d_sanemcmp
11274 eval $setvar
11275
11276 : see if prototype for sbrk is available
11277 echo " "
11278 set d_sbrkproto sbrk $i_unistd unistd.h
11279 eval $hasproto
11280
11281 : see if select exists
11282 set select d_select
11283 eval $inlibc
11284
11285 : see if semctl exists
11286 set semctl d_semctl
11287 eval $inlibc
11288
11289 : see if semget exists
11290 set semget d_semget
11291 eval $inlibc
11292
11293 : see if semop exists
11294 set semop d_semop
11295 eval $inlibc
11296
11297 : see how much of the 'sem*(2)' library is present.
11298 h_sem=true
11299 echo " "
11300 case "$d_semctl$d_semget$d_semop" in
11301 *"$undef"*) h_sem=false;;
11302 esac
11303 case "$osname" in
11304 freebsd)
11305     case "`ipcs 2>&1`" in
11306     "SVID messages"*"not configured"*)
11307         echo "Your $osname does not have the sem*(2) configured." >&4
11308         h_sem=false
11309         val="$undef"
11310         set semctl d_semctl
11311         eval $setvar
11312         set semget d_semget
11313         eval $setvar
11314         set semop d_semop
11315         eval $setvar
11316         ;;
11317     esac
11318     ;;
11319 esac
11320 : we could also check for sys/ipc.h ...
11321 if $h_sem && $test `./findhdr sys/sem.h`; then
11322         echo "You have the full sem*(2) library." >&4
11323         val="$define"
11324 else
11325         echo "You don't have the full sem*(2) library." >&4
11326         val="$undef"
11327 fi
11328 set d_sem
11329 eval $setvar
11330
11331 : see whether sys/sem.h defines union semun
11332 echo " "
11333 $cat > try.c <<'END'
11334 #include <sys/types.h>
11335 #include <sys/ipc.h>
11336 #include <sys/sem.h>
11337 int main () { union semun semun; semun.buf = 0; }
11338 END
11339 set try
11340 if eval $compile; then
11341     echo "You have union semun in <sys/sem.h>." >&4
11342     val="$define"
11343 else
11344     echo "You do not have union semun in <sys/sem.h>." >&4
11345     val="$undef"
11346 fi
11347 $rm -f try try.c try.h
11348 set d_union_semun
11349 eval $setvar
11350
11351 : see how to do semctl IPC_STAT
11352 case "$d_sem" in
11353 $define)
11354     : see whether semctl IPC_STAT can use union semun
11355     echo " "
11356     $cat > try.h <<END
11357 #ifndef S_IRUSR
11358 #   ifdef S_IREAD
11359 #       define S_IRUSR S_IREAD
11360 #       define S_IWUSR S_IWRITE
11361 #       define S_IXUSR S_IEXEC
11362 #   else
11363 #       define S_IRUSR 0400
11364 #       define S_IWUSR 0200
11365 #       define S_IXUSR 0100
11366 #   endif
11367 #   define S_IRGRP (S_IRUSR>>3)
11368 #   define S_IWGRP (S_IWUSR>>3)
11369 #   define S_IXGRP (S_IXUSR>>3)
11370 #   define S_IROTH (S_IRUSR>>6)
11371 #   define S_IWOTH (S_IWUSR>>6)
11372 #   define S_IXOTH (S_IXUSR>>6)
11373 #endif
11374 #ifndef S_IRWXU
11375 #   define S_IRWXU (S_IRUSR|S_IWUSR|S_IXUSR)
11376 #   define S_IRWXG (S_IRGRP|S_IWGRP|S_IXGRP)
11377 #   define S_IRWXO (S_IROTH|S_IWOTH|S_IXOTH)
11378 #endif
11379 END
11380
11381     $cat > try.c <<END
11382 #include <sys/types.h>
11383 #include <sys/ipc.h>
11384 #include <sys/sem.h>
11385 #include <sys/stat.h>
11386 #include <stdio.h>
11387 #include <errno.h>
11388 #include "try.h"
11389 #ifndef errno
11390 extern int errno;
11391 #endif
11392 #$d_union_semun HAS_UNION_SEMUN
11393 int main() {
11394     union semun
11395 #ifndef HAS_UNION_SEMUN
11396     {
11397         int val;
11398         struct semid_ds *buf;
11399         unsigned short *array;
11400     }
11401 #endif
11402     arg;
11403     int sem, st;
11404
11405 #if defined(IPC_PRIVATE) && defined(S_IRWXU) && defined(S_IRWXG) && defined(S_IRWXO) && defined(IPC_CREAT)
11406     sem = semget(IPC_PRIVATE, 1, S_IRWXU|S_IRWXG|S_IRWXO|IPC_CREAT);
11407     if (sem > -1) {
11408         struct semid_ds argbuf;
11409         arg.buf = &argbuf;
11410 #       ifdef IPC_STAT
11411         st = semctl(sem, 0, IPC_STAT, arg);
11412         if (st == 0)
11413             printf("semun\n");
11414         else
11415 #       endif /* IPC_STAT */
11416             printf("semctl IPC_STAT failed: errno = %d\n", errno);
11417 #       ifdef IPC_RMID
11418         if (semctl(sem, 0, IPC_RMID, arg) != 0)
11419 #       endif /* IPC_RMID */
11420             printf("semctl IPC_RMID failed: errno = %d\n", errno);
11421     } else
11422 #endif /* IPC_PRIVATE && ... */
11423         printf("semget failed: errno = %d\n", errno);
11424   return 0;
11425 }
11426 END
11427     val="$undef"
11428     set try
11429     if eval $compile; then
11430         xxx=`./try`
11431         case "$xxx" in
11432         semun) val="$define" ;;
11433         esac
11434     fi
11435     $rm -f try try.c
11436     set d_semctl_semun
11437     eval $setvar
11438     case "$d_semctl_semun" in
11439     $define)
11440         echo "You can use union semun for semctl IPC_STAT." >&4
11441         also='also'
11442         ;;
11443     *)  echo "You cannot use union semun for semctl IPC_STAT." >&4
11444         also=''
11445         ;;
11446     esac
11447
11448     : see whether semctl IPC_STAT can use struct semid_ds pointer
11449     $cat > try.c <<'END'
11450 #include <sys/types.h>
11451 #include <sys/ipc.h>
11452 #include <sys/sem.h>
11453 #include <sys/stat.h>
11454 #include "try.h"
11455 #include <stdio.h>
11456 #include <errno.h>
11457 #ifndef errno
11458 extern int errno;
11459 #endif
11460 int main() {
11461     struct semid_ds arg;
11462     int sem, st;
11463
11464 #if defined(IPC_PRIVATE) && defined(S_IRWXU) && defined(S_IRWXG) &&  defined(S_IRWXO) && defined(IPC_CREAT)
11465     sem = semget(IPC_PRIVATE, 1, S_IRWXU|S_IRWXG|S_IRWXO|IPC_CREAT);
11466     if (sem > -1) {
11467 #       ifdef IPC_STAT
11468         st = semctl(sem, 0, IPC_STAT, &arg);
11469         if (st == 0)
11470             printf("semid_ds\n");
11471         else
11472 #       endif /* IPC_STAT */
11473             printf("semctl IPC_STAT failed: errno = %d\n", errno);
11474 #       ifdef IPC_RMID
11475         if (semctl(sem, 0, IPC_RMID, &arg) != 0)
11476 #       endif /* IPC_RMID */
11477             printf("semctl IPC_RMID failed: errno = %d\n", errno);
11478     } else
11479 #endif /* IPC_PRIVATE && ... */
11480         printf("semget failed: errno = %d\n", errno);
11481
11482     return 0;
11483 }
11484 END
11485     val="$undef"
11486     set try
11487     if eval $compile; then
11488         xxx=`./try`
11489         case "$xxx" in
11490         semid_ds) val="$define" ;;
11491         esac
11492     fi
11493     $rm -f try try.c
11494     set d_semctl_semid_ds
11495     eval $setvar
11496     case "$d_semctl_semid_ds" in
11497     $define)
11498         echo "You can $also use struct semid_ds* for semctl IPC_STAT." >&4
11499         ;;
11500     *)  echo "You cannot use struct semid_ds* for semctl IPC_STAT." >&4
11501         ;;
11502     esac
11503     $rm -f try.h
11504     ;;
11505 *)  val="$undef"
11506
11507     # We do not have the full sem*(2) library, so assume we can not
11508     # use either.
11509
11510     set d_semctl_semun
11511     eval $setvar
11512
11513     set d_semctl_semid_ds
11514     eval $setvar
11515     ;;
11516 esac
11517
11518 : see if sendmsg exists
11519 set sendmsg d_sendmsg
11520 eval $inlibc
11521
11522 : see if setegid exists
11523 set setegid d_setegid
11524 eval $inlibc
11525
11526 : see if seteuid exists
11527 set seteuid d_seteuid
11528 eval $inlibc
11529
11530 : see if setgrent exists
11531 set setgrent d_setgrent
11532 eval $inlibc
11533
11534 : see if sethostent exists
11535 set sethostent d_sethent
11536 eval $inlibc
11537
11538 : see if setitimer exists
11539 set setitimer d_setitimer
11540 eval $inlibc
11541
11542 : see if setlinebuf exists
11543 set setlinebuf d_setlinebuf
11544 eval $inlibc
11545
11546 : see if setlocale exists
11547 set setlocale d_setlocale
11548 eval $inlibc
11549
11550 : see if setnetent exists
11551 set setnetent d_setnent
11552 eval $inlibc
11553
11554 : see if setprotoent exists
11555 set setprotoent d_setpent
11556 eval $inlibc
11557
11558 : see if setpgid exists
11559 set setpgid d_setpgid
11560 eval $inlibc
11561
11562 : see if setpgrp2 exists
11563 set setpgrp2 d_setpgrp2
11564 eval $inlibc
11565
11566 : see if setpriority exists
11567 set setpriority d_setprior
11568 eval $inlibc
11569
11570 : see if setproctitle exists
11571 set setproctitle d_setproctitle
11572 eval $inlibc
11573
11574 : see if setpwent exists
11575 set setpwent d_setpwent
11576 eval $inlibc
11577
11578 : see if setregid exists
11579 set setregid d_setregid
11580 eval $inlibc
11581 set setresgid d_setresgid
11582 eval $inlibc
11583
11584 : see if setreuid exists
11585 set setreuid d_setreuid
11586 eval $inlibc
11587 set setresuid d_setresuid
11588 eval $inlibc
11589
11590 : see if setrgid exists
11591 set setrgid d_setrgid
11592 eval $inlibc
11593
11594 : see if setruid exists
11595 set setruid d_setruid
11596 eval $inlibc
11597
11598 : see if setservent exists
11599 set setservent d_setsent
11600 eval $inlibc
11601
11602 : see if setsid exists
11603 set setsid d_setsid
11604 eval $inlibc
11605
11606 : see if setvbuf exists
11607 set setvbuf d_setvbuf
11608 eval $inlibc
11609
11610 : see if sfio.h is available
11611 set sfio.h i_sfio
11612 eval $inhdr
11613
11614
11615 : see if sfio library is available
11616 case "$i_sfio" in
11617 $define)
11618         val=''
11619         set sfreserve val
11620         eval $inlibc
11621         ;;
11622 *)
11623         val="$undef"
11624         ;;
11625 esac
11626 : Ok, but do we want to use it.
11627 case "$val" in
11628 $define)
11629         case "$usesfio" in
11630         true|$define|[yY]*) dflt='y';;
11631         *) dflt='n';;
11632         esac
11633         echo "$package can use the sfio library, but it is experimental."
11634         case "$useperlio" in
11635         "$undef")
11636             echo "For sfio also the PerlIO abstraction layer is needed."
11637             echo "Earlier you said you wouldn't want that."
11638             ;;
11639         esac
11640         rp="You seem to have sfio available, do you want to try using it?"
11641         . ./myread
11642         case "$ans" in
11643         y|Y)    echo "Ok, turning on both sfio and PerlIO, then."
11644                 useperlio="$define"
11645                 val="$define"
11646                 ;;
11647         *)      echo "Ok, avoiding sfio this time.  I'll use stdio instead."
11648                 val="$undef"
11649                 ;;
11650         esac
11651         ;;
11652 *)      case "$usesfio" in
11653         true|$define|[yY]*)
11654                 echo "Sorry, cannot find sfio on this machine." >&4
11655                 echo "Ignoring your setting of usesfio=$usesfio." >&4
11656                 val="$undef"
11657                 ;;
11658         esac
11659         ;;
11660 esac
11661 set d_sfio
11662 eval $setvar
11663 case "$d_sfio" in
11664 $define) usesfio='true';;
11665 *) usesfio='false';;
11666 esac
11667 case "$d_sfio" in
11668 $define) ;;
11669 *)      : Remove sfio from list of libraries to use
11670         set `echo X $libs | $sed -e 's/-lsfio / /' -e 's/-lsfio$//'`
11671         shift
11672         libs="$*"
11673         echo "libs = $libs" >&4
11674 ;;
11675 esac
11676
11677
11678 : see if shmctl exists
11679 set shmctl d_shmctl
11680 eval $inlibc
11681
11682 : see if shmget exists
11683 set shmget d_shmget
11684 eval $inlibc
11685
11686 : see if shmat exists
11687 set shmat d_shmat
11688 eval $inlibc
11689 : see what shmat returns
11690 case "$d_shmat" in
11691 "$define")
11692         $cat >shmat.c <<'END'
11693 #include <sys/shm.h>
11694 void *shmat();
11695 END
11696         if $cc $ccflags -c shmat.c >/dev/null 2>&1; then
11697                 shmattype='void *'
11698         else
11699                 shmattype='char *'
11700         fi
11701         echo "and it returns ($shmattype)." >&4
11702         : see if a prototype for shmat is available
11703         xxx=`./findhdr sys/shm.h`
11704         $cppstdin $cppflags $cppminus < $xxx > shmat.c 2>/dev/null
11705         if $contains 'shmat.*(' shmat.c >/dev/null 2>&1; then
11706                 val="$define"
11707         else
11708                 val="$undef"
11709         fi
11710         $rm -f shmat.[co]
11711         ;;
11712 *)
11713         val="$undef"
11714         ;;
11715 esac
11716 set d_shmatprototype
11717 eval $setvar
11718
11719 : see if shmdt exists
11720 set shmdt d_shmdt
11721 eval $inlibc
11722
11723 : see how much of the 'shm*(2)' library is present.
11724 h_shm=true
11725 echo " "
11726 case "$d_shmctl$d_shmget$d_shmat$d_shmdt" in
11727 *"$undef"*) h_shm=false;;
11728 esac
11729 case "$osname" in
11730 freebsd)
11731     case "`ipcs 2>&1`" in
11732     "SVID shared memory"*"not configured"*)
11733         echo "Your $osname does not have the shm*(2) configured." >&4
11734         h_shm=false
11735         val="$undef"
11736         set shmctl d_shmctl
11737         evat $setvar
11738         set shmget d_shmget
11739         evat $setvar
11740         set shmat d_shmat
11741         evat $setvar
11742         set shmdt d_shmdt
11743         evat $setvar
11744         ;;
11745     esac
11746     ;;
11747 esac
11748 : we could also check for sys/ipc.h ...
11749 if $h_shm && $test `./findhdr sys/shm.h`; then
11750         echo "You have the full shm*(2) library." >&4
11751         val="$define"
11752 else
11753         echo "You don't have the full shm*(2) library." >&4
11754         val="$undef"
11755 fi
11756 set d_shm
11757 eval $setvar
11758
11759 echo " "
11760 : see if we have sigaction
11761 if set sigaction val -f d_sigaction; eval $csym; $val; then
11762         echo 'sigaction() found.' >&4
11763         $cat > try.c <<'EOP'
11764 #include <stdio.h>
11765 #include <sys/types.h>
11766 #include <signal.h>
11767 int main()
11768 {
11769     struct sigaction act, oact;
11770     act.sa_flags = 0;
11771     oact.sa_handler = 0;
11772     /* so that act and oact are used */
11773     exit(act.sa_flags == 0 &&  oact.sa_handler == 0);
11774 }
11775 EOP
11776         set try
11777         if eval $compile_ok; then
11778                 val="$define"
11779         else
11780                 echo "But you don't seem to have a useable struct sigaction." >&4
11781                 val="$undef"
11782         fi
11783 else
11784         echo 'sigaction NOT found.' >&4
11785         val="$undef"
11786 fi
11787 set d_sigaction; eval $setvar
11788 $rm -f try try$_o try.c
11789
11790 : see if sigprocmask exists
11791 set sigprocmask d_sigprocmask
11792 eval $inlibc
11793
11794 : see if sigsetjmp exists
11795 echo " "
11796 case "$d_sigsetjmp" in
11797 '')
11798         $cat >try.c <<'EOP'
11799 #include <setjmp.h>
11800 sigjmp_buf env;
11801 int set = 1;
11802 int main()
11803 {
11804         if (sigsetjmp(env,1))
11805                 exit(set);
11806         set = 0;
11807         siglongjmp(env, 1);
11808         exit(1);
11809 }
11810 EOP
11811         set try
11812         if eval $compile; then
11813                 if ./try >/dev/null 2>&1; then
11814                         echo "POSIX sigsetjmp found." >&4
11815                         val="$define"
11816                 else
11817                         $cat >&4 <<EOM
11818 Uh-Oh! You have POSIX sigsetjmp and siglongjmp, but they do not work properly!!
11819 I'll ignore them.
11820 EOM
11821                         val="$undef"
11822                 fi
11823         else
11824                 echo "sigsetjmp not found." >&4
11825                 val="$undef"
11826         fi
11827         ;;
11828 *) val="$d_sigsetjmp"
11829         case "$d_sigsetjmp" in
11830         $define) echo "POSIX sigsetjmp found." >&4;;
11831         $undef) echo "sigsetjmp not found." >&4;;
11832         esac
11833         ;;
11834 esac
11835 set d_sigsetjmp
11836 eval $setvar
11837 $rm -f try.c try
11838
11839 : see if sockatmark exists
11840 set sockatmark d_sockatmark
11841 eval $inlibc
11842
11843 : see if socks5_init exists
11844 set socks5_init d_socks5_init
11845 eval $inlibc
11846
11847 : see if sys/stat.h is available
11848 set sys/stat.h i_sysstat
11849 eval $inhdr
11850
11851
11852 : see if stat knows about block sizes
11853 echo " "
11854 echo "Checking to see if your struct stat has st_blocks field..." >&4
11855 set d_statblks stat st_blocks $i_sysstat sys/stat.h
11856 eval $hasfield
11857
11858
11859 : see if this is a sys/vfs.h system
11860 set sys/vfs.h i_sysvfs
11861 eval $inhdr
11862
11863
11864 : see if this is a sys/statfs.h system
11865 set sys/statfs.h i_sysstatfs
11866 eval $inhdr
11867
11868
11869 echo " "
11870 echo "Checking to see if your system supports struct statfs..." >&4
11871 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
11872 eval $hasstruct
11873 case "$d_statfs_s" in
11874 "$define")      echo "Yes, it does."   ;;
11875 *)              echo "No, it doesn't." ;;
11876 esac
11877
11878
11879
11880 : see if struct statfs knows about f_flags
11881 case "$d_statfs_s" in
11882 define) 
11883         echo " "
11884         echo "Checking to see if your struct statfs has f_flags field..." >&4
11885         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
11886         eval $hasfield
11887         ;;
11888 *)      val="$undef"
11889         set d_statfs_f_flags
11890         eval $setvar
11891         ;;
11892 esac
11893 case "$d_statfs_f_flags" in
11894 "$define")      echo "Yes, it does."   ;;
11895 *)              echo "No, it doesn't." ;;
11896 esac
11897
11898 : see if _ptr and _cnt from stdio act std
11899 echo " "
11900
11901 if $contains '_lbfsize' `./findhdr stdio.h` >/dev/null 2>&1 ; then
11902         echo "(Looks like you have stdio.h from BSD.)"
11903         case "$stdio_ptr" in
11904         '') stdio_ptr='((fp)->_p)'
11905                 ptr_lval=$define
11906                 ;;
11907         *)      ptr_lval=$d_stdio_ptr_lval;;
11908         esac
11909         case "$stdio_cnt" in
11910         '') stdio_cnt='((fp)->_r)'
11911                 cnt_lval=$define
11912                 ;;
11913         *)      cnt_lval=$d_stdio_cnt_lval;;
11914         esac
11915         case "$stdio_base" in
11916         '') stdio_base='((fp)->_ub._base ? (fp)->_ub._base : (fp)->_bf._base)';;
11917         esac
11918         case "$stdio_bufsiz" in
11919         '') stdio_bufsiz='((fp)->_ub._base ? (fp)->_ub._size : (fp)->_bf._size)';;
11920         esac
11921 elif $contains '_IO_fpos_t' `./findhdr stdio.h` `./findhdr libio.h` >/dev/null 2>&1 ; then
11922         echo "(Looks like you have stdio.h from Linux.)"
11923         case "$stdio_ptr" in
11924         '') stdio_ptr='((fp)->_IO_read_ptr)'
11925                 ptr_lval=$define
11926                 ;;
11927         *)      ptr_lval=$d_stdio_ptr_lval;;
11928         esac
11929         case "$stdio_cnt" in
11930         '') stdio_cnt='((fp)->_IO_read_end - (fp)->_IO_read_ptr)'
11931                 cnt_lval=$undef
11932                 ;;
11933         *)      cnt_lval=$d_stdio_cnt_lval;;
11934         esac
11935         case "$stdio_base" in
11936         '') stdio_base='((fp)->_IO_read_base)';;
11937         esac
11938         case "$stdio_bufsiz" in
11939         '') stdio_bufsiz='((fp)->_IO_read_end - (fp)->_IO_read_base)';;
11940         esac
11941 else
11942         case "$stdio_ptr" in
11943         '') stdio_ptr='((fp)->_ptr)'
11944                 ptr_lval=$define
11945                 ;;
11946         *)      ptr_lval=$d_stdio_ptr_lval;;
11947         esac
11948         case "$stdio_cnt" in
11949         '') stdio_cnt='((fp)->_cnt)'
11950                 cnt_lval=$define
11951                 ;;
11952         *)      cnt_lval=$d_stdio_cnt_lval;;
11953         esac
11954         case "$stdio_base" in
11955         '') stdio_base='((fp)->_base)';;
11956         esac
11957         case "$stdio_bufsiz" in
11958         '') stdio_bufsiz='((fp)->_cnt + (fp)->_ptr - (fp)->_base)';;
11959         esac
11960 fi
11961
11962 : test whether _ptr and _cnt really work
11963 echo "Checking how std your stdio is..." >&4
11964 $cat >try.c <<EOP
11965 #include <stdio.h>
11966 #define FILE_ptr(fp)    $stdio_ptr
11967 #define FILE_cnt(fp)    $stdio_cnt
11968 int main() {
11969         FILE *fp = fopen("try.c", "r");
11970         char c = getc(fp);
11971         if (
11972                 18 <= FILE_cnt(fp) &&
11973                 strncmp(FILE_ptr(fp), "include <stdio.h>\n", 18) == 0
11974         )
11975                 exit(0);
11976         exit(1);
11977 }
11978 EOP
11979 val="$undef"
11980 set try
11981 if eval $compile; then
11982         if ./try; then
11983                 echo "Your stdio acts pretty std."
11984                 val="$define"
11985         else
11986                 echo "Your stdio isn't very std."
11987         fi
11988 else
11989         echo "Your stdio doesn't appear very std."
11990 fi
11991 $rm -f try.c try
11992 set d_stdstdio
11993 eval $setvar
11994
11995 : Can _ptr be used as an lvalue?
11996 case "$d_stdstdio$ptr_lval" in
11997 $define$define) val=$define ;;
11998 *) val=$undef ;;
11999 esac
12000 set d_stdio_ptr_lval
12001 eval $setvar
12002
12003 : Can _cnt be used as an lvalue?
12004 case "$d_stdstdio$cnt_lval" in
12005 $define$define) val=$define ;;
12006 *) val=$undef ;;
12007 esac
12008 set d_stdio_cnt_lval
12009 eval $setvar
12010
12011
12012 : test whether setting _ptr sets _cnt as a side effect
12013 d_stdio_ptr_lval_sets_cnt="$undef"
12014 d_stdio_ptr_lval_nochange_cnt="$undef"
12015 case "$d_stdio_ptr_lval$d_stdstdio" in
12016 $define$define)
12017         echo "Checking to see what happens if we set the stdio ptr..." >&4
12018 $cat >try.c <<EOP
12019 #include <stdio.h>
12020 /* Can we scream? */
12021 /* Eat dust sed :-) */
12022 /* In the buffer space, no one can hear you scream. */
12023 #define FILE_ptr(fp)    $stdio_ptr
12024 #define FILE_cnt(fp)    $stdio_cnt
12025 #include <sys/types.h>
12026 int main() {
12027         FILE *fp = fopen("try.c", "r");
12028         int c;
12029         char *ptr;
12030         size_t cnt;
12031         if (!fp) {
12032             puts("Fail even to read");
12033             exit(1);
12034         }
12035         c = getc(fp); /* Read away the first # */
12036         if (c == EOF) {
12037             puts("Fail even to read");
12038             exit(1);
12039         }
12040         if (!(
12041                 18 <= FILE_cnt(fp) &&
12042                 strncmp(FILE_ptr(fp), "include <stdio.h>\n", 18) == 0
12043         )) {
12044                 puts("Fail even to read");
12045                 exit (1);
12046         }
12047         ptr = (char*) FILE_ptr(fp);
12048         cnt = (size_t)FILE_cnt(fp);
12049
12050         FILE_ptr(fp) += 42;
12051
12052         if ((char*)FILE_ptr(fp) != (ptr + 42)) {
12053                 printf("Fail ptr check %p != %p", FILE_ptr(fp), (ptr + 42));
12054                 exit (1);
12055         }
12056         if (FILE_cnt(fp) <= 20) {
12057                 printf ("Fail (<20 chars to test)");
12058                 exit (1);
12059         }
12060         if (strncmp(FILE_ptr(fp), "Eat dust sed :-) */\n", 20) != 0) {
12061                 puts("Fail compare");
12062                 exit (1);
12063         }
12064         if (cnt == FILE_cnt(fp)) {
12065                 puts("Pass_unchanged");
12066                 exit (0);
12067         }       
12068         if (FILE_cnt(fp) == (cnt - 42)) {
12069                 puts("Pass_changed");
12070                 exit (0);
12071         }
12072         printf("Fail count was %d now %d\n", cnt, FILE_cnt(fp));
12073         return 1;
12074
12075 }
12076 EOP
12077         set try
12078         if eval $compile; then
12079                 case `./try$exe_ext` in
12080                 Pass_changed)
12081                         echo "Increasing ptr in your stdio decreases cnt by the same amount.  Good." >&4
12082                         d_stdio_ptr_lval_sets_cnt="$define" ;;
12083                 Pass_unchanged)
12084                         echo "Increasing ptr in your stdio leaves cnt unchanged.  Good." >&4
12085                         d_stdio_ptr_lval_nochange_cnt="$define" ;;
12086                 Fail*)
12087                         echo "Increasing ptr in your stdio didn't do exactly what I expected.  We'll not be doing that then." >&4 ;;
12088                 *)
12089                         echo "It appears attempting to set ptr in your stdio is a bad plan." >&4 ;;
12090         esac
12091         else
12092                 echo "It seems we can't set ptr in your stdio.  Nevermind." >&4
12093         fi
12094         $rm -f try.c try
12095         ;;
12096 esac
12097
12098 : see if _base is also standard
12099 val="$undef"
12100 case "$d_stdstdio" in
12101 $define)
12102         $cat >try.c <<EOP
12103 #include <stdio.h>
12104 #define FILE_base(fp)   $stdio_base
12105 #define FILE_bufsiz(fp) $stdio_bufsiz
12106 int main() {
12107         FILE *fp = fopen("try.c", "r");
12108         char c = getc(fp);
12109         if (
12110                 19 <= FILE_bufsiz(fp) &&
12111                 strncmp(FILE_base(fp), "#include <stdio.h>\n", 19) == 0
12112         )
12113                 exit(0);
12114         exit(1);
12115 }
12116 EOP
12117         set try
12118         if eval $compile; then
12119                 if ./try; then
12120                         echo "And its _base field acts std."
12121                         val="$define"
12122                 else
12123                         echo "But its _base field isn't std."
12124                 fi
12125         else
12126                 echo "However, it seems to be lacking the _base field."
12127         fi
12128         $rm -f try.c try
12129         ;;
12130 esac
12131 set d_stdiobase
12132 eval $setvar
12133
12134 $cat >&4 <<EOM
12135 Checking how to access stdio streams by file descriptor number...
12136 EOM
12137 case "$stdio_stream_array" in
12138 '')     $cat >try.c <<EOCP
12139 #include <stdio.h>
12140 int main() {
12141   if (&STDIO_STREAM_ARRAY[fileno(stdin)] == stdin)
12142     printf("yes\n");
12143 }
12144 EOCP
12145         for s in _iob __iob __sF
12146         do
12147                 set try -DSTDIO_STREAM_ARRAY=$s
12148                 if eval $compile; then
12149                         case "`./try$exe_ext`" in
12150                         yes)    stdio_stream_array=$s; break ;;
12151                         esac
12152                 fi
12153         done
12154         $rm -f try.* try$exe_ext
12155 esac
12156 case "$stdio_stream_array" in
12157 '')     $cat >&4 <<EOM
12158 I can't figure out how to access stdio streams by file descriptor number.
12159 EOM
12160         d_stdio_stream_array="$undef"
12161         ;;
12162 *)      $cat >&4 <<EOM
12163 You can access stdio streams by file descriptor number by the $stdio_stream_array array.
12164 EOM
12165         d_stdio_stream_array="$define"
12166         ;;
12167 esac
12168
12169 : see if strcoll exists
12170 set strcoll d_strcoll
12171 eval $inlibc
12172
12173 : check for structure copying
12174 echo " "
12175 echo "Checking to see if your C compiler can copy structs..." >&4
12176 $cat >try.c <<'EOCP'
12177 int main()
12178 {
12179         struct blurfl {
12180                 int dyick;
12181         } foo, bar;
12182
12183         foo = bar;
12184 }
12185 EOCP
12186 if $cc -c try.c >/dev/null 2>&1 ; then
12187         val="$define"
12188         echo "Yup, it can."
12189 else
12190         val="$undef"
12191         echo "Nope, it can't."
12192 fi
12193 set d_strctcpy
12194 eval $setvar
12195 $rm -f try.*
12196
12197 : see if strerror and/or sys_errlist[] exist
12198 echo " "
12199 if test "X$d_strerror" = X -o "X$d_syserrlst" = X; then
12200     if set strerror val -f d_strerror; eval $csym; $val; then
12201                 echo 'strerror() found.' >&4
12202                 d_strerror="$define"
12203                 d_strerrm='strerror(e)'
12204                 if set sys_errlist val -a d_syserrlst; eval $csym; $val; then   
12205                         echo "(You also have sys_errlist[], so we could roll our own strerror.)" 
12206                         d_syserrlst="$define"
12207                 else
12208                         echo "(Since you don't have sys_errlist[], sterror() is welcome.)"
12209                         d_syserrlst="$undef"
12210                 fi
12211     elif xxx=`./findhdr string.h`; test "$xxx" || xxx=`./findhdr strings.h`; \
12212                         $contains '#[   ]*define.*strerror' "$xxx" >/dev/null 2>&1; then
12213                 echo 'strerror() found in string header.' >&4
12214                 d_strerror="$define"
12215                 d_strerrm='strerror(e)'
12216                 if set sys_errlist val -a d_syserrlst; eval $csym; $val; then   
12217                         echo "(Most probably, strerror() uses sys_errlist[] for descriptions.)"
12218                                 d_syserrlst="$define"
12219                 else
12220                         echo "(You don't appear to have any sys_errlist[], how can this be?)"
12221                         d_syserrlst="$undef"
12222                 fi
12223     elif set sys_errlist val -a d_syserrlst; eval $csym; $val; then
12224                 echo "strerror() not found, but you have sys_errlist[] so we'll use that." >&4
12225                 d_strerror="$undef"
12226                 d_syserrlst="$define"
12227                 d_strerrm='((e)<0||(e)>=sys_nerr?"unknown":sys_errlist[e])'
12228     else
12229                 echo 'strerror() and sys_errlist[] NOT found.' >&4
12230                 d_strerror="$undef"
12231                 d_syserrlst="$undef"
12232                 d_strerrm='"unknown"'
12233     fi
12234 fi
12235
12236 : see if strftime exists
12237 set strftime d_strftime
12238 eval $inlibc
12239
12240 : see if strtod exists
12241 set strtod d_strtod
12242 eval $inlibc
12243
12244 : see if strtol exists
12245 set strtol d_strtol
12246 eval $inlibc
12247
12248 : see if strtold exists
12249 set strtold d_strtold
12250 eval $inlibc
12251
12252 : see if strtoll exists
12253 set strtoll d_strtoll
12254 eval $inlibc
12255
12256 case "$d_longlong-$d_strtoll" in
12257 "$define-$define")
12258         $cat <<EOM
12259 Checking whether your strtoll() works okay...
12260 EOM
12261         $cat >try.c <<'EOCP'
12262 #include <errno.h>
12263 #ifdef __hpux
12264 #define strtoll __strtoll
12265 #endif
12266 #ifdef __EMX__
12267 #define strtoll _strtoll
12268 #endif
12269 #include <stdio.h>
12270 extern long long int strtoll(char *s, char **, int); 
12271 static int bad = 0;
12272 int check(char *s, long long ell, int een) {
12273         long long gll;
12274         errno = 0;
12275         gll = strtoll(s, 0, 10);
12276         if (!((gll == ell) && (errno == een)))
12277                 bad++;
12278 }
12279 int main() {
12280         check(" 1",                                      1LL, 0);
12281         check(" 0",                                      0LL, 0);
12282         check("-1",                                     -1LL, 0);
12283         check("-9223372036854775808", -9223372036854775808LL, 0);
12284         check("-9223372036854775808", -9223372036854775808LL, 0);
12285         check(" 9223372036854775807",  9223372036854775807LL, 0);
12286         check("-9223372036854775808", -9223372036854775808LL, 0);
12287         check(" 9223372036854775808",  9223372036854775807LL, ERANGE);
12288         check("-9223372036854775809", -9223372036854775808LL, ERANGE);
12289         if (!bad)
12290                 printf("ok\n");
12291 }
12292 EOCP
12293         set try
12294         if eval $compile; then
12295                 yyy=`./try`
12296                 case "$yyy" in
12297                 ok) echo "Your strtoll() seems to be working okay." ;;
12298                 *) cat <<EOM >&4
12299 Your strtoll() doesn't seem to be working okay.
12300 EOM
12301                    d_strtoll="$undef"
12302                    ;;
12303                 esac
12304         else
12305                 echo "(I can't seem to compile the test program--assuming it doesn't)"
12306                 d_strtoll="$undef"
12307         fi
12308         ;;
12309 esac
12310
12311 : see if strtoq exists
12312 set strtoq d_strtoq
12313 eval $inlibc
12314
12315 : see if strtoul exists
12316 set strtoul d_strtoul
12317 eval $inlibc
12318
12319 case "$d_strtoul" in
12320 "$define")
12321         $cat <<EOM
12322 Checking whether your strtoul() works okay...
12323 EOM
12324         $cat >try.c <<'EOCP'
12325 #include <errno.h>
12326 #include <stdio.h>
12327 extern unsigned long int strtoul(char *s, char **, int); 
12328 static int bad = 0;
12329 void check(char *s, unsigned long eul, int een) {
12330         unsigned long gul;
12331         errno = 0;
12332         gul = strtoul(s, 0, 10);
12333         if (!((gul == eul) && (errno == een)))
12334                 bad++;
12335 }
12336 int main() {
12337         check(" 1", 1L, 0);
12338         check(" 0", 0L, 0);
12339 EOCP
12340         case "$longsize" in
12341         8)
12342             $cat >>try.c <<'EOCP'
12343         check("18446744073709551615", 18446744073709551615UL, 0);
12344         check("18446744073709551616", 18446744073709551615UL, ERANGE);
12345 #if 0 /* strtoul() for /^-/ strings is undefined. */
12346         check("-1", 18446744073709551615UL, 0);
12347         check("-18446744073709551614", 2, 0);
12348         check("-18446744073709551615", 1, 0);
12349         check("-18446744073709551616", 18446744073709551615UL, ERANGE);
12350         check("-18446744073709551617", 18446744073709551615UL, ERANGE);
12351 #endif
12352 EOCP
12353                 ;;
12354         4)
12355                     $cat >>try.c <<'EOCP'
12356         check("4294967295", 4294967295UL, 0);
12357         check("4294967296", 4294967295UL, ERANGE);
12358 #if 0 /* strtoul() for /^-/ strings is undefined. */
12359         check("-1", 4294967295UL, 0);
12360         check("-4294967294", 2, 0);
12361         check("-4294967295", 1, 0);
12362         check("-4294967296", 4294967295UL, ERANGE);
12363         check("-4294967297", 4294967295UL, ERANGE);
12364 #endif
12365 EOCP
12366                 ;;
12367         *)
12368 : Should we write these tests to be more portable by sprintf-ing
12369 : ~0 and then manipulating that char string as input for strtol?
12370                 ;;
12371         esac
12372         $cat >>try.c <<'EOCP'
12373         if (!bad)
12374                 printf("ok\n");
12375         return 0;
12376 }
12377 EOCP
12378         set try
12379         if eval $compile; then
12380                 case "`./try`" in
12381                 ok) echo "Your strtoul() seems to be working okay." ;;
12382                 *) cat <<EOM >&4
12383 Your strtoul() doesn't seem to be working okay.
12384 EOM
12385                    d_strtoul="$undef"
12386                    ;;
12387                 esac
12388         fi
12389         ;;
12390 esac
12391
12392 : see if strtoull exists
12393 set strtoull d_strtoull
12394 eval $inlibc
12395
12396 case "$d_longlong-$d_strtoull" in
12397 "$define-$define")
12398         $cat <<EOM
12399 Checking whether your strtoull() works okay...
12400 EOM
12401         $cat >try.c <<'EOCP'
12402 #include <errno.h>
12403 #ifdef __hpux
12404 #define strtoull __strtoull
12405 #endif
12406 #include <stdio.h>
12407 extern unsigned long long int strtoull(char *s, char **, int); 
12408 static int bad = 0;
12409 int check(char *s, long long eull, int een) {
12410         long long gull;
12411         errno = 0;
12412         gull = strtoull(s, 0, 10);
12413         if (!((gull == eull) && (errno == een)))
12414                 bad++;
12415 }
12416 int main() {
12417         check(" 1",                                        1LL, 0);
12418         check(" 0",                                        0LL, 0);
12419         check("18446744073709551615",  18446744073709551615ULL, 0);
12420         check("18446744073709551616",  18446744073709551615ULL, ERANGE);
12421 #if 0 /* strtoull() for /^-/ strings is undefined. */
12422         check("-1",                    18446744073709551615ULL, 0);
12423         check("-18446744073709551614",                     2LL, 0);
12424         check("-18446744073709551615",                     1LL, 0);
12425         check("-18446744073709551616", 18446744073709551615ULL, ERANGE);
12426         check("-18446744073709551617", 18446744073709551615ULL, ERANGE);
12427 #endif
12428         if (!bad)
12429                 printf("ok\n");
12430 }
12431 EOCP
12432         set try
12433         if eval $compile; then
12434                 case "`./try`" in
12435                 ok) echo "Your strtoull() seems to be working okay." ;;
12436                 *) cat <<EOM >&4
12437 Your strtoull() doesn't seem to be working okay.
12438 EOM
12439                    d_strtoull="$undef"
12440                    ;;
12441                 esac
12442         fi
12443         ;;
12444 esac
12445
12446 : see if strtouq exists
12447 set strtouq d_strtouq
12448 eval $inlibc
12449
12450 case "$d_strtouq" in
12451 "$define")
12452         $cat <<EOM
12453 Checking whether your strtouq() works okay...
12454 EOM
12455         $cat >try.c <<'EOCP'
12456 #include <errno.h>
12457 #include <stdio.h>
12458 extern unsigned long long int strtouq(char *s, char **, int); 
12459 static int bad = 0;
12460 void check(char *s, unsigned long long eull, int een) {
12461         unsigned long long gull;
12462         errno = 0;
12463         gull = strtouq(s, 0, 10);
12464         if (!((gull == eull) && (errno == een)))
12465                 bad++;
12466 }
12467 int main() {
12468         check(" 1",                                        1LL, 0);
12469         check(" 0",                                        0LL, 0);
12470         check("18446744073709551615",  18446744073709551615ULL, 0);
12471         check("18446744073709551616",  18446744073709551615ULL, ERANGE);
12472 #if 0 /* strtouq() for /^-/ strings is undefined. */
12473         check("-1",                    18446744073709551615ULL, 0);
12474         check("-18446744073709551614",                     2LL, 0);
12475         check("-18446744073709551615",                     1LL, 0);
12476         check("-18446744073709551616", 18446744073709551615ULL, ERANGE);
12477         check("-18446744073709551617", 18446744073709551615ULL, ERANGE);
12478 #endif
12479         if (!bad)
12480                 printf("ok\n");
12481         return 0;
12482 }
12483 EOCP
12484         set try
12485         if eval $compile; then
12486                 case "`./try`" in
12487                 ok) echo "Your strtouq() seems to be working okay." ;;
12488                 *) cat <<EOM >&4
12489 Your strtouq() doesn't seem to be working okay.
12490 EOM
12491                    d_strtouq="$undef"
12492                    ;;
12493                 esac
12494         fi
12495         ;;
12496 esac
12497
12498 : see if strxfrm exists
12499 set strxfrm d_strxfrm
12500 eval $inlibc
12501
12502 : see if symlink exists
12503 set symlink d_symlink
12504 eval $inlibc
12505
12506 : see if syscall exists
12507 set syscall d_syscall
12508 eval $inlibc
12509
12510 : see if sysconf exists
12511 set sysconf d_sysconf
12512 eval $inlibc
12513
12514 : see if system exists
12515 set system d_system
12516 eval $inlibc
12517
12518 : see if tcgetpgrp exists
12519 set tcgetpgrp d_tcgetpgrp
12520 eval $inlibc
12521
12522 : see if tcsetpgrp exists
12523 set tcsetpgrp d_tcsetpgrp
12524 eval $inlibc
12525
12526 : see if prototype for telldir is available
12527 echo " "
12528 set d_telldirproto telldir $i_systypes sys/types.h $i_dirent dirent.h
12529 eval $hasproto
12530
12531 : see if this is a sys/times.h system
12532 set sys/times.h i_systimes
12533 eval $inhdr
12534
12535 : see if times exists
12536 echo " "
12537 if set times val -f d_times; eval $csym; $val; then
12538         echo 'times() found.' >&4
12539         d_times="$define"
12540         inc=''
12541         case "$i_systimes" in
12542         "$define") inc='sys/times.h';;
12543         esac
12544         rp="What is the type returned by times() on this system?"
12545         set clock_t clocktype long stdio.h sys/types.h $inc
12546         eval $typedef_ask
12547 else
12548         echo 'times() NOT found, hope that will do.' >&4
12549         d_times="$undef"
12550         clocktype='int'
12551 fi
12552
12553 : see if truncate exists
12554 set truncate d_truncate
12555 eval $inlibc
12556
12557 : see if tzname[] exists
12558 echo " "
12559 if set tzname val -a d_tzname; eval $csym; $val; then
12560         val="$define"
12561         echo 'tzname[] found.' >&4
12562 else
12563         val="$undef"
12564         echo 'tzname[] NOT found.' >&4
12565 fi
12566 set d_tzname
12567 eval $setvar
12568
12569 case "$crosscompile" in
12570 ''|[nN]*) crosscompile="$undef" ;;
12571 esac
12572
12573 case "$osname" in
12574 next|rhapsody|darwin) multiarch="$define" ;;
12575 esac
12576 case "$multiarch" in
12577 ''|[nN]*) multiarch="$undef" ;;
12578 esac
12579
12580 : check for ordering of bytes in a long
12581 echo " "
12582 case "$crosscompile$multiarch" in
12583 *$define*)
12584         $cat <<EOM
12585 You seem to be either cross-compiling or doing a multiarchitecture build,
12586 skipping the byteorder check.
12587
12588 EOM
12589         byteorder='0xffff'
12590         ;;
12591 *)
12592         case "$byteorder" in
12593         '')
12594                 $cat <<'EOM'
12595 In the following, larger digits indicate more significance.  A big-endian
12596 machine like a Pyramid or a Motorola 680?0 chip will come out to 4321. A
12597 little-endian machine like a Vax or an Intel 80?86 chip would be 1234. Other
12598 machines may have weird orders like 3412.  A Cray will report 87654321,
12599 an Alpha will report 12345678. If the test program works the default is
12600 probably right.
12601 I'm now running the test program...
12602 EOM
12603                 $cat >try.c <<'EOCP'
12604 #include <stdio.h>
12605 int main()
12606 {
12607         int i;
12608         union {
12609                 unsigned long l;
12610                 char c[sizeof(long)];
12611         } u;
12612
12613         if (sizeof(long) > 4)
12614                 u.l = (0x08070605L << 32) | 0x04030201L;
12615         else
12616                 u.l = 0x04030201L;
12617         for (i = 0; i < sizeof(long); i++)
12618                 printf("%c", u.c[i]+'0');
12619         printf("\n");
12620         exit(0);
12621 }
12622 EOCP
12623                 xxx_prompt=y
12624                 set try
12625                 if eval $compile && ./try > /dev/null; then
12626                         dflt=`./try`
12627                         case "$dflt" in
12628                         [1-4][1-4][1-4][1-4]|12345678|87654321)
12629                                 echo "(The test program ran ok.)"
12630                                 echo "byteorder=$dflt"
12631                                 xxx_prompt=n
12632                         ;;
12633                         ????|????????) echo "(The test program ran ok.)" ;;
12634                         *) echo "(The test program didn't run right for some reason.)" ;;
12635                         esac
12636                 else
12637                         dflt='4321'
12638                         cat <<'EOM'
12639 (I can't seem to compile the test program.  Guessing big-endian...)
12640 EOM
12641                 fi
12642                 case "$xxx_prompt" in
12643                 y)
12644                         rp="What is the order of bytes in a long?"
12645                         . ./myread
12646                         byteorder="$ans"
12647                         ;;
12648                 *)      byteorder=$dflt
12649                         ;;
12650                 esac
12651                 ;;
12652         esac
12653         $rm -f try.c try
12654         ;;
12655 esac
12656
12657
12658 $cat <<EOM
12659
12660 Checking to see whether you can access character data unalignedly...
12661 EOM
12662 $cat >try.c <<EOCP
12663 #include <stdio.h>
12664 #define U32 $u32type
12665 #define BYTEORDER $byteorder
12666 int main() {
12667 #if BYTEORDER == 0x1234 || BYTEORDER == 0x4321
12668     U8 buf[] = "\0\0\0\1\0\0\0\0";
12669     U32 *up;
12670     int i;
12671
12672     if (sizeof(U32) != 4) {
12673         printf("sizeof(U32) is not 4, but %d\n", sizeof(U32));
12674         exit(1);
12675     }
12676
12677     fflush(stdout);
12678
12679     for (i = 0; i < 4; i++) {
12680         up = (U32*)(buf + i);
12681         if (! ((*up == 1 << (8*i)) ||   /* big-endian */
12682                (*up == 1 << (8*(3-i)))  /* little-endian */
12683               )
12684            )
12685         {
12686             printf("read failed (%x)\n", *up);
12687             exit(2);
12688         }
12689     }
12690
12691     /* write test */
12692     for (i = 0; i < 4; i++) {
12693         up = (U32*)(buf + i);
12694         *up = 0xBeef;
12695         if (*up != 0xBeef) {
12696             printf("write failed (%x)\n", *up);
12697             exit(3);
12698         }
12699     }
12700
12701     exit(0);
12702 #else
12703     printf("1\n");
12704     exit(1);
12705 #endif
12706     return 0;
12707 }
12708 EOCP
12709 set try
12710 if eval $compile_ok; then
12711         echo "(This test may dump core.)" >&4
12712         ./try >&2 >/dev/null
12713         case "$?" in
12714         0)      cat >&4 <<EOM
12715 You can access character data pretty unalignedly.
12716 EOM
12717                 d_u32align="$undef"
12718                 ;;
12719         *)      cat >&4 <<EOM
12720 It seems that you must access character data in an aligned manner.
12721 EOM
12722                 d_u32align="$define"
12723                 ;;
12724         esac
12725         $rm -f core core.try.* try.core
12726 else
12727         rp='Can you access character data at unaligned addresses?'
12728         dflt='n'
12729         . ./myread
12730         case "$ans" in
12731         [yY]*)  d_u32align="$undef"  ;;
12732         *)      d_u32align="$define" ;;
12733         esac
12734 fi
12735
12736 : see if ualarm exists
12737 set ualarm d_ualarm
12738 eval $inlibc
12739
12740 : see if umask exists
12741 set umask d_umask
12742 eval $inlibc
12743
12744 : see if usleep exists
12745 set usleep d_usleep
12746 eval $inlibc
12747
12748 : see if ustat exists
12749 set ustat d_ustat
12750 eval $inlibc
12751
12752 : backward compatibility for d_hvfork
12753 if test X$d_hvfork != X; then
12754         d_vfork="$d_hvfork"
12755         d_hvfork=''
12756 fi
12757 : see if there is a vfork
12758 val=''
12759 set vfork val
12760 eval $inlibc
12761
12762 : Ok, but do we want to use it. vfork is reportedly unreliable in 
12763 : perl on Solaris 2.x, and probably elsewhere.
12764 case "$val" in
12765 $define)
12766         echo " "
12767         case "$usevfork" in
12768         false) dflt='n';;
12769         *) dflt='y';;
12770         esac
12771         cat <<'EOM'
12772  
12773 Perl can only use a vfork() that doesn't suffer from strict
12774 restrictions on calling functions or modifying global data in
12775 the child.  For example, glibc-2.1 contains such a vfork()
12776 that is unsuitable.  If your system provides a proper fork()
12777 call, chances are that you do NOT want perl to use vfork().
12778
12779 EOM
12780         rp="Do you still want to use vfork()?"
12781         . ./myread
12782         case "$ans" in
12783         y|Y) ;;
12784         *)
12785                 echo "Ok, we won't use vfork()."
12786                 val="$undef"
12787                 ;;
12788         esac
12789         ;;
12790 esac
12791 set d_vfork
12792 eval $setvar
12793 case "$d_vfork" in
12794 $define) usevfork='true';;
12795 *) usevfork='false';;
12796 esac
12797
12798 : see if this is an sysdir system
12799 set sys/dir.h i_sysdir
12800 eval $inhdr
12801
12802 : see if this is an sysndir system
12803 set sys/ndir.h i_sysndir
12804 eval $inhdr
12805
12806 : see if closedir exists
12807 set closedir d_closedir
12808 eval $inlibc
12809
12810 case "$d_closedir" in
12811 "$define")
12812         echo " "
12813         echo "Checking whether closedir() returns a status..." >&4
12814         cat > closedir.c <<EOM
12815 #$i_dirent I_DIRENT             /**/
12816 #$i_sysdir I_SYS_DIR            /**/
12817 #$i_sysndir I_SYS_NDIR          /**/
12818 #$i_systypes I_SYS_TYPES        /**/
12819
12820 #if defined(I_SYS_TYPES)
12821 #include <sys/types.h>
12822 #endif
12823 #if defined(I_DIRENT)
12824 #include <dirent.h>
12825 #if defined(NeXT) && defined(I_SYS_DIR) /* NeXT needs dirent + sys/dir.h */
12826 #include <sys/dir.h>
12827 #endif
12828 #else
12829 #ifdef I_SYS_NDIR
12830 #include <sys/ndir.h>
12831 #else
12832 #ifdef I_SYS_DIR
12833 #ifdef hp9000s500
12834 #include <ndir.h>       /* may be wrong in the future */
12835 #else
12836 #include <sys/dir.h>
12837 #endif
12838 #endif
12839 #endif
12840 #endif 
12841 int main() { return closedir(opendir(".")); }
12842 EOM
12843         set closedir
12844         if eval $compile_ok; then
12845                 if ./closedir > /dev/null 2>&1 ; then
12846                         echo "Yes, it does."
12847                         val="$undef"
12848                 else
12849                         echo "No, it doesn't."
12850                         val="$define"
12851                 fi
12852         else
12853                 echo "(I can't seem to compile the test program--assuming it doesn't)"
12854                 val="$define"
12855         fi
12856         ;;
12857 *)
12858         val="$undef";
12859         ;;
12860 esac
12861 set d_void_closedir
12862 eval $setvar
12863 $rm -f closedir*
12864 : see if there is a wait4
12865 set wait4 d_wait4
12866 eval $inlibc
12867
12868 : see if waitpid exists
12869 set waitpid d_waitpid
12870 eval $inlibc
12871
12872 : see if wcstombs exists
12873 set wcstombs d_wcstombs
12874 eval $inlibc
12875
12876 : see if wctomb exists
12877 set wctomb d_wctomb
12878 eval $inlibc
12879
12880 : see if writev exists
12881 set writev d_writev
12882 eval $inlibc
12883
12884 : preserve RCS keywords in files with variable substitution, grrr
12885 Date='$Date'
12886 Id='$Id'
12887 Log='$Log'
12888 RCSfile='$RCSfile'
12889 Revision='$Revision'
12890
12891 : check for alignment requirements
12892 echo " "
12893 case "$crosscompile$multiarch" in
12894 *$define*)
12895         $cat <<EOM
12896 You seem to be either cross-compiling or doing a multiarchitecture build,
12897 skipping the memory alignment check.
12898
12899 EOM
12900         case "$alignbytes" in
12901         '') alignbytes=8 ;;
12902         esac
12903         ;;
12904 *)
12905         case "$alignbytes" in
12906         '') echo "Checking alignment constraints..." >&4
12907                 if $test "X$uselongdouble" = Xdefine -a "X$d_longdbl" = Xdefine; then
12908                         $cat >try.c <<'EOCP'
12909 typedef long double NV;
12910 EOCP
12911                 else
12912                         $cat >try.c <<'EOCP'
12913 typedef double NV;
12914 EOCP
12915                 fi
12916                 $cat >>try.c <<'EOCP'
12917 #include <stdio.h>
12918 struct foobar {
12919         char foo;
12920         NV bar;
12921 } try_algn;
12922 int main()
12923 {
12924     printf("%d\n", (int)((char *)&try_algn.bar - (char *)&try_algn.foo));
12925     return(0);
12926 }
12927 EOCP
12928                 set try
12929                 if eval $compile_ok; then
12930                         dflt=`./try`
12931                 else
12932                         dflt='8'
12933                         echo "(I can't seem to compile the test program...)"
12934                 fi
12935                 ;;
12936         *) dflt="$alignbytes"
12937                 ;;
12938         esac
12939         rp="Doubles must be aligned on a how-many-byte boundary?"
12940         . ./myread
12941         alignbytes="$ans"
12942         $rm -f try.c try
12943         ;;
12944 esac
12945
12946
12947 : set the base revision
12948 baserev=5.0
12949
12950 : how do we catenate cpp tokens here?
12951 echo " "
12952 echo "Checking to see how your cpp does stuff like catenate tokens..." >&4
12953 $cat >cpp_stuff.c <<'EOCP'
12954 #define RCAT(a,b)a/**/b
12955 #define ACAT(a,b)a ## b
12956 RCAT(Rei,ser)
12957 ACAT(Cir,cus)
12958 EOCP
12959 $cppstdin $cppflags $cppminus <cpp_stuff.c >cpp_stuff.out 2>&1
12960 if $contains 'Circus' cpp_stuff.out >/dev/null 2>&1; then
12961         echo "Oh!  Smells like ANSI's been here." >&4
12962         echo "We can catify or stringify, separately or together!"
12963         cpp_stuff=42
12964 elif $contains 'Reiser' cpp_stuff.out >/dev/null 2>&1; then
12965         echo "Ah, yes!  The good old days!" >&4
12966         echo "However, in the good old days we don't know how to stringify and"
12967         echo "catify at the same time."
12968         cpp_stuff=1
12969 else
12970         $cat >&4 <<EOM
12971 Hmm, I don't seem to be able to catenate tokens with your cpp.  You're going
12972 to have to edit the values of CAT[2-5] in config.h...
12973 EOM
12974         cpp_stuff="/* Help! How do we handle cpp_stuff? */*/"
12975 fi
12976 $rm -f cpp_stuff.*
12977
12978 : see if this is a db.h system
12979 set db.h i_db
12980 eval $inhdr
12981
12982 case "$i_db" in
12983 $define)
12984         : Check db version.
12985         echo " "
12986         echo "Checking Berkeley DB version ..." >&4
12987         $cat >try.c <<EOCP
12988 #$d_const HASCONST
12989 #ifndef HASCONST
12990 #define const
12991 #endif
12992 #include <sys/types.h>
12993 #include <stdio.h>
12994 #include <db.h>
12995 int main()
12996 {
12997 #ifdef DB_VERSION_MAJOR /* DB version >= 2 */
12998     int Major, Minor, Patch ;
12999     unsigned long Version ;
13000     (void)db_version(&Major, &Minor, &Patch) ;
13001     printf("You have Berkeley DB Version 2 or greater\n");
13002
13003     printf("db.h is from Berkeley DB Version %d.%d.%d\n",
13004                 DB_VERSION_MAJOR, DB_VERSION_MINOR, DB_VERSION_PATCH);
13005     printf("libdb is from Berkeley DB Version %d.%d.%d\n",
13006                 Major, Minor, Patch) ;
13007
13008     /* check that db.h & libdb are compatible */
13009     if (DB_VERSION_MAJOR != Major || DB_VERSION_MINOR != Minor || DB_VERSION_PATCH != Patch) {
13010         printf("db.h and libdb are incompatible\n") ;
13011         exit(3);        
13012     }
13013
13014     printf("db.h and libdb are compatible\n") ;
13015
13016     Version = DB_VERSION_MAJOR * 1000000 + DB_VERSION_MINOR * 1000
13017                 + DB_VERSION_PATCH ;
13018
13019     /* needs to be >= 2.3.4 */
13020     if (Version < 2003004) {
13021     /* if (DB_VERSION_MAJOR == 2 && DB_VERSION_MINOR == 0 && DB_VERSION_PATCH < 5) { */
13022         printf("but Perl needs Berkeley DB 2.3.4 or greater\n") ;
13023         exit(2);        
13024     }
13025
13026     exit(0);
13027 #else
13028 #if defined(_DB_H_) && defined(BTREEMAGIC) && defined(HASHMAGIC)
13029     printf("You have Berkeley DB Version 1\n");
13030     exit(0);    /* DB version < 2: the coast is clear. */
13031 #else
13032     exit(1);    /* <db.h> not Berkeley DB? */
13033 #endif
13034 #endif
13035 }
13036 EOCP
13037         set try
13038         if eval $compile_ok && ./try; then
13039                 echo 'Looks OK.' >&4
13040         else
13041                 echo "I can't use Berkeley DB with your <db.h>.  I'll disable Berkeley DB." >&4
13042                 i_db=$undef
13043                 case " $libs " in
13044                 *"-ldb "*)
13045                         : Remove db from list of libraries to use
13046                         echo "Removing unusable -ldb from library list" >&4
13047                         set `echo X $libs | $sed -e 's/-ldb / /' -e 's/-ldb$//'`
13048                         shift
13049                         libs="$*"
13050                         echo "libs = $libs" >&4
13051                         ;;
13052                 esac
13053         fi
13054         $rm -f try.*
13055         ;;
13056 esac
13057
13058 case "$i_db" in
13059 define)
13060         : Check the return type needed for hash 
13061         echo " "
13062         echo "Checking return type needed for hash for Berkeley DB ..." >&4
13063         $cat >try.c <<EOCP
13064 #$d_const HASCONST
13065 #ifndef HASCONST
13066 #define const
13067 #endif
13068 #include <sys/types.h>
13069 #include <db.h>
13070
13071 #ifndef DB_VERSION_MAJOR
13072 u_int32_t hash_cb (ptr, size)
13073 const void *ptr;
13074 size_t size;
13075 {
13076 }
13077 HASHINFO info;
13078 int main()
13079 {
13080         info.hash = hash_cb;
13081 }
13082 #endif
13083 EOCP
13084         if $cc $ccflags -c try.c >try.out 2>&1 ; then
13085                 if $contains warning try.out >>/dev/null 2>&1 ; then
13086                         db_hashtype='int'
13087                 else
13088                         db_hashtype='u_int32_t'
13089                 fi
13090         else
13091                 : XXX Maybe we should just give up here.
13092                 db_hashtype=u_int32_t
13093                 $cat try.out >&4
13094                 echo "Help:  I can't seem to compile the db test program." >&4
13095                 echo "Something's wrong, but I'll assume you use $db_hashtype." >&4
13096         fi
13097         $rm -f try.*
13098         echo "Your version of Berkeley DB uses $db_hashtype for hash."
13099         ;;
13100 *)      db_hashtype=u_int32_t
13101         ;;
13102 esac
13103 case "$i_db" in
13104 define)
13105         : Check the return type needed for prefix 
13106         echo " "
13107         echo "Checking return type needed for prefix for Berkeley DB ..." >&4
13108         cat >try.c <<EOCP
13109 #$d_const HASCONST
13110 #ifndef HASCONST
13111 #define const
13112 #endif
13113 #include <sys/types.h>
13114 #include <db.h>
13115
13116 #ifndef DB_VERSION_MAJOR
13117 size_t prefix_cb (key1, key2)
13118 const DBT *key1;
13119 const DBT *key2;
13120 {
13121 }
13122 BTREEINFO info;
13123 int main()
13124 {
13125         info.prefix = prefix_cb;
13126 }
13127 #endif
13128 EOCP
13129         if $cc $ccflags -c try.c  >try.out 2>&1 ; then
13130                 if $contains warning try.out >>/dev/null 2>&1 ; then
13131                         db_prefixtype='int'
13132                 else
13133                         db_prefixtype='size_t'
13134                 fi
13135         else
13136                 db_prefixtype='size_t'
13137                 : XXX Maybe we should just give up here.
13138                 $cat try.out >&4
13139                 echo "Help:  I can't seem to compile the db test program." >&4
13140                 echo "Something's wrong, but I'll assume you use $db_prefixtype." >&4
13141         fi
13142         $rm -f try.*
13143         echo "Your version of Berkeley DB uses $db_prefixtype for prefix."
13144         ;;
13145 *)      db_prefixtype='size_t'
13146         ;;
13147 esac
13148
13149
13150 : How can we generate normalized random numbers ?
13151 echo " "
13152 echo "Looking for a random number function..." >&4
13153 case "$randfunc" in
13154 '')
13155         if set drand48 val -f; eval $csym; $val; then
13156                 dflt="drand48"
13157                 echo "Good, found drand48()." >&4
13158         elif set random val -f; eval $csym; $val; then
13159                 dflt="random"
13160                 echo "OK, found random()." >&4
13161         else
13162                 dflt="rand"
13163                 echo "Yick, looks like I have to use rand()." >&4
13164         fi
13165         echo " "
13166         ;;
13167 *)
13168         dflt="$randfunc"
13169         ;;
13170 esac
13171 cont=true
13172
13173 case "$ccflags" in
13174 *-Dmy_rand=*|*-Dmy_srand=*)
13175         echo "Removing obsolete -Dmy_rand, -Dmy_srand, and -Drandbits from ccflags." >&4
13176         ccflags="`echo $ccflags | sed -e 's/-Dmy_rand=random/ /'`"
13177         ccflags="`echo $ccflags | sed -e 's/-Dmy_srand=srandom/ /'`"
13178         ccflags="`echo $ccflags | sed -e 's/-Drandbits=[0-9][0-9]*/ /'`"
13179         ;;
13180 esac
13181
13182 while $test "$cont"; do
13183         rp="Use which function to generate random numbers?"
13184         . ./myread
13185         if $test "$ans" = "$dflt"; then
13186                 : null
13187         else
13188                 randbits=''
13189         fi
13190         randfunc="$ans"
13191         if set $ans val -f; eval $csym; $val; then
13192                 cont=''
13193         else
13194                 dflt=y
13195                 rp="I cannot find function $ans. Use that name anyway?"
13196                 . ./myread
13197                 dflt=rand
13198                 case "$ans" in
13199                         [yY]*) cont='';;
13200                 esac
13201         fi
13202         case "$cont" in
13203         '')
13204                 case "$randfunc" in
13205                 drand48)
13206                         drand01="drand48()"
13207                         seedfunc="srand48"
13208                         randbits=48
13209                         randseedtype=long
13210                         ;;
13211                 rand|random)
13212                         case "$randbits" in
13213                         '')
13214 echo "Checking to see how many bits your $randfunc() function produces..." >&4
13215                                 $cat >try.c <<EOCP
13216 #$i_unistd I_UNISTD
13217 #$i_stdlib I_STDLIB
13218 #include <stdio.h>
13219 #ifdef I_UNISTD
13220 #  include <unistd.h>
13221 #endif
13222 #ifdef I_STDLIB
13223 #  include <stdlib.h>
13224 #endif
13225 int main()
13226 {
13227         register int i;
13228         register unsigned long tmp;
13229         register unsigned long max = 0L;
13230
13231         for (i = 1000; i; i--) {
13232                 tmp = (unsigned long) $randfunc();
13233                 if (tmp > max) max = tmp;
13234         }
13235         for (i = 0; max; i++)
13236                 max /= 2;
13237         printf("%d\n",i);
13238 }
13239 EOCP
13240                                 set try
13241                                 if eval $compile_ok; then
13242                                         dflt=`try`
13243                                 else
13244                                         dflt='?'
13245                                         echo "(I can't seem to compile the test program...)"
13246                                 fi
13247                                 ;;
13248                         *)
13249                                 dflt="$randbits"
13250                                 ;;
13251                         esac
13252                         rp="How many bits does your $randfunc() function produce?"
13253                         . ./myread
13254                         randbits="$ans"
13255                         $rm -f try.c try
13256                         drand01="($randfunc() / (double) ((unsigned long)1 << $randbits))"
13257                         seedfunc="s$randfunc"
13258                         randseedtype=unsigned
13259                         ;;
13260                 *)
13261                         dflt="31"
13262                         rp="How many bits does your $randfunc() function produce?"
13263                         . ./myread
13264                         randbits="$ans"
13265                         seedfunc="s$randfunc"
13266                         drand01="($randfunc() / (double) ((unsigned long)1 << $randbits))"
13267                         if set $seedfunc val -f; eval $csym; $val; then
13268                                 echo "(Using $seedfunc() to seed random generator)"
13269                         else
13270                                 echo "(Warning: no $seedfunc() to seed random generator)"
13271                                 seedfunc=rand
13272                         fi
13273                         randseedtype=unsigned
13274                         ;;
13275                 esac
13276                 ;;
13277         esac
13278 done
13279
13280 echo " "
13281 echo "Determining whether or not we are on an EBCDIC system..." >&4
13282 $cat >tebcdic.c <<'EOM'
13283 int main()
13284 {
13285   if ('M'==0xd4) return 0;
13286   return 1;
13287 }
13288 EOM
13289
13290 val=$undef
13291 set tebcdic
13292 if eval $compile_ok; then
13293         if ./tebcdic; then
13294                 echo "You seem to speak EBCDIC." >&4
13295                 val="$define"
13296         else
13297                 echo "Nope, no EBCDIC, probably ASCII or some ISO Latin. Or UTF8." >&4
13298         fi
13299 else
13300         echo "I'm unable to compile the test program." >&4
13301         echo "I'll assume ASCII or some ISO Latin. Or UTF8." >&4
13302 fi
13303 $rm -f tebcdic.c tebcdic
13304 set ebcdic
13305 eval $setvar
13306
13307 echo " "
13308 $cat >&4 <<EOM
13309 Checking how to flush all pending stdio output...
13310 EOM
13311 # I only know how to find the first 32 possibly open files on SunOS.
13312 # See also hints/sunos_4_1.sh and util.c  --AD
13313 case "$osname" in
13314 sunos) $echo '#define PERL_FFLUSH_ALL_FOPEN_MAX 32' > try.c ;;
13315 esac
13316 $cat >>try.c <<EOCP
13317 #include <stdio.h>
13318 #$i_unistd I_UNISTD
13319 #ifdef I_UNISTD
13320 # include <unistd.h>
13321 #endif
13322 #$d_sysconf HAS_SYSCONF
13323 #$d_stdio_stream_array HAS_STDIO_STREAM_ARRAY
13324 #ifdef HAS_STDIO_STREAM_ARRAY
13325 # define STDIO_STREAM_ARRAY $stdio_stream_array
13326 #endif
13327 int main() {
13328   FILE* p = fopen("try.out", "w");
13329 #ifdef TRY_FPUTC
13330   fputc('x', p);
13331 #else
13332 # ifdef TRY_FPRINTF
13333   fprintf(p, "x");
13334 # endif
13335 #endif
13336 #ifdef TRY_FFLUSH_NULL
13337   fflush(NULL);
13338 #endif
13339 #ifdef TRY_FFLUSH_ALL
13340   {
13341     long open_max = -1;
13342 # ifdef PERL_FFLUSH_ALL_FOPEN_MAX
13343     open_max = PERL_FFLUSH_ALL_FOPEN_MAX;
13344 # else
13345 #  if defined(HAS_SYSCONF) && defined(_SC_OPEN_MAX)
13346     open_max = sysconf(_SC_OPEN_MAX);
13347 #  else
13348 #   ifdef FOPEN_MAX
13349     open_max = FOPEN_MAX;
13350 #   else
13351 #    ifdef OPEN_MAX
13352     open_max = OPEN_MAX;
13353 #    else
13354 #     ifdef _NFILE
13355     open_max = _NFILE;
13356 #     endif
13357 #    endif
13358 #   endif
13359 #  endif
13360 # endif 
13361 # ifdef HAS_STDIO_STREAM_ARRAY
13362     if (open_max > 0) {
13363       long i;
13364       for (i = 0; i < open_max; i++)
13365             if (STDIO_STREAM_ARRAY[i]._file >= 0 &&
13366                 STDIO_STREAM_ARRAY[i]._file < open_max &&
13367                 STDIO_STREAM_ARRAY[i]._flag)
13368                 fflush(&STDIO_STREAM_ARRAY[i]);
13369     }   
13370   }
13371 # endif
13372 #endif
13373   _exit(42);
13374 }
13375 EOCP
13376 : first we have to find out how _not_ to flush
13377 if $test "X$fflushNULL" = X -o "X$fflushall" = X; then
13378     output=''
13379     set try -DTRY_FPUTC
13380     if eval $compile; then
13381             $rm -f try.out
13382             ./try$exe_ext 2>/dev/null
13383             if $test ! -s try.out -a "X$?" = X42; then
13384                 output=-DTRY_FPUTC
13385             fi
13386     fi
13387     case "$output" in
13388     '')
13389             set try -DTRY_FPRINTF
13390             $rm -f try.out
13391             if eval $compile; then
13392                     $rm -f try.out
13393                     ./try$exe_ext 2>/dev/null
13394                     if $test ! -s try.out -a "X$?" = X42; then
13395                         output=-DTRY_FPRINTF
13396                     fi
13397             fi
13398         ;;
13399     esac
13400 fi
13401 : check for fflush NULL behaviour
13402 case "$fflushNULL" in
13403 '')     set try -DTRY_FFLUSH_NULL $output
13404         if eval $compile; then
13405                 $rm -f try.out
13406                 ./try$exe_ext 2>/dev/null
13407                 code="$?"
13408                 if $test -s try.out -a "X$code" = X42; then
13409                         fflushNULL="`$cat try.out`"
13410                 else
13411                         if $test "X$code" != X42; then
13412                                 $cat >&4 <<EOM
13413 (If this test failed, don't worry, we'll try another method shortly.)
13414 EOM
13415                         fi
13416                 fi
13417         fi
13418         $rm -f core try.core core.try.*
13419         case "$fflushNULL" in
13420         x)      $cat >&4 <<EOM
13421 Your fflush(NULL) works okay for output streams.
13422 Let's see if it clobbers input pipes...
13423 EOM
13424 # As of mid-March 2000 all versions of Solaris appear to have a stdio
13425 # bug that improperly flushes the input end of pipes.  So we avoid the
13426 # autoflush on fork/system/exec support for now. :-(
13427 $cat >tryp.c <<EOCP
13428 #include <stdio.h>
13429 int
13430 main(int argc, char **argv)
13431 {
13432     char buf[1024];
13433     int i;
13434     char *bp = buf;
13435     while (1) {
13436         while ((i = getc(stdin)) != -1
13437                && (*bp++ = i) != '\n'
13438                && bp < &buf[1024])
13439         /* DO NOTHING */ ;
13440         *bp = '\0';
13441         fprintf(stdout, "%s", buf);
13442         fflush(NULL);
13443         if (i == -1)
13444             return 0;
13445         bp = buf;
13446     }
13447 }
13448 EOCP
13449                 fflushNULL="$define"
13450                 set tryp
13451                 if eval $compile; then
13452                     $rm -f tryp.out
13453                     $cat tryp.c | ./tryp$exe_ext 2>/dev/null > tryp.out
13454                     if cmp tryp.c tryp.out >/dev/null 2>&1; then
13455                        $cat >&4 <<EOM
13456 fflush(NULL) seems to behave okay with input streams.
13457 EOM
13458                         fflushNULL="$define"
13459                     else
13460                         $cat >&4 <<EOM
13461 Ouch, fflush(NULL) clobbers input pipes!  We will not use it.
13462 EOM
13463                         fflushNULL="$undef"
13464                     fi
13465                 fi
13466                 $rm -f core tryp.c tryp.core core.tryp.*
13467                 ;;
13468         '')     $cat >&4 <<EOM
13469 Your fflush(NULL) isn't working (contrary to ANSI C).
13470 EOM
13471                 fflushNULL="$undef"
13472                 ;;
13473         *)      $cat >&4 <<EOM
13474 Cannot figure out whether your fflush(NULL) works or not.
13475 I'm assuming it doesn't (contrary to ANSI C).
13476 EOM
13477                 fflushNULL="$undef"
13478                 ;;
13479         esac
13480         ;;
13481 $define|true|[yY]*)
13482         fflushNULL="$define"
13483         ;;
13484 *)
13485         fflushNULL="$undef"
13486         ;;
13487 esac
13488 : check explicit looping only if NULL did not work, and if the pipe
13489 : bug does not show up on an explicit flush too
13490 case "$fflushNULL" in
13491 "$undef")
13492         $cat >tryp.c <<EOCP
13493 #include <stdio.h>
13494 int
13495 main(int argc, char **argv)
13496 {
13497     char buf[1024];
13498     int i;
13499     char *bp = buf;
13500     while (1) {
13501         while ((i = getc(stdin)) != -1
13502                && (*bp++ = i) != '\n'
13503                && bp < &buf[1024])
13504         /* DO NOTHING */ ;
13505         *bp = '\0';
13506         fprintf(stdout, "%s", buf);
13507         fflush(stdin);
13508         if (i == -1)
13509             return 0;
13510         bp = buf;
13511     }
13512 }
13513 EOCP
13514         set tryp
13515         if eval $compile; then
13516             $rm -f tryp.out
13517             $cat tryp.c | ./tryp$exe_ext 2>/dev/null > tryp.out
13518             if cmp tryp.c tryp.out >/dev/null 2>&1; then
13519                $cat >&4 <<EOM
13520 Good, at least fflush(stdin) seems to behave okay when stdin is a pipe.
13521 EOM
13522                 : now check for fflushall behaviour
13523                 case "$fflushall" in
13524                 '')     set try -DTRY_FFLUSH_ALL $output
13525                         if eval $compile; then
13526                                 $cat >&4 <<EOM
13527 (Now testing the other method--but note that this also may fail.)
13528 EOM
13529                                 $rm -f try.out
13530                                 ./try$exe_ext 2>/dev/null
13531                                 if $test -s try.out -a "X$?" = X42; then
13532                                         fflushall="`$cat try.out`"
13533                                 fi
13534                         fi
13535                         $rm -f core try.core core.try.*
13536                         case "$fflushall" in
13537                         x)      $cat >&4 <<EOM
13538 Whew. Flushing explicitly all the stdio streams works.
13539 EOM
13540                                 fflushall="$define"
13541                                 ;;
13542                         '')     $cat >&4 <<EOM
13543 Sigh. Flushing explicitly all the stdio streams doesn't work.
13544 EOM
13545                                 fflushall="$undef"
13546                                 ;;
13547                         *)      $cat >&4 <<EOM
13548 Cannot figure out whether flushing stdio streams explicitly works or not.
13549 I'm assuming it doesn't.
13550 EOM
13551                                 fflushall="$undef"
13552                                 ;;
13553                         esac
13554                         ;;
13555                 "$define"|true|[yY]*)
13556                         fflushall="$define"
13557                         ;;
13558                 *)
13559                         fflushall="$undef"
13560                         ;;
13561                 esac
13562             else
13563                 $cat >&4 <<EOM
13564 All is futile.  Even fflush(stdin) clobbers input pipes!
13565 EOM
13566                 fflushall="$undef"
13567             fi
13568         else
13569             fflushall="$undef"
13570         fi
13571         $rm -f core tryp.c tryp.core core.tryp.*
13572         ;;
13573 *)      fflushall="$undef"
13574         ;;
13575 esac
13576
13577 case "$fflushNULL$fflushall" in
13578 undefundef)
13579         $cat <<EOM
13580 OK, I give up.  I cannot figure out how to flush pending stdio output.
13581 We won't be flushing handles at all before fork/exec/popen.
13582 EOM
13583         ;;
13584 esac
13585 $rm -f try.* try$exe_ext
13586
13587 : Store the full pathname to the ar program for use in the C program
13588 : Respect a hint or command line value for full_ar.
13589 case "$full_ar" in
13590 '') full_ar=$ar ;;
13591 esac
13592
13593 : Store the full pathname to the sed program for use in the C program
13594 full_sed=$sed
13595
13596 : see what type gids are declared as in the kernel
13597 echo " "
13598 echo "Looking for the type for group ids returned by getgid()."
13599 set gid_t gidtype xxx stdio.h sys/types.h
13600 eval $typedef
13601 case "$gidtype" in
13602 xxx)
13603         xxx=`./findhdr sys/user.h`
13604         set `grep 'groups\[NGROUPS\];' "$xxx" 2>/dev/null` unsigned short
13605         case $1 in
13606         unsigned) dflt="$1 $2" ;;
13607         *) dflt="$1" ;;
13608         esac
13609         ;;
13610 *) dflt="$gidtype";;
13611 esac
13612 case "$gidtype" in
13613 gid_t) echo "gid_t found." ;;
13614 *)      rp="What is the type for group ids returned by getgid()?"
13615         . ./myread
13616         gidtype="$ans"
13617         ;;
13618 esac
13619
13620 echo " "
13621 case "$gidtype" in
13622 *_t) zzz="$gidtype"     ;;
13623 *)   zzz="gid"          ;;
13624 esac
13625 echo "Checking the size of $zzz..." >&4 
13626 cat > try.c <<EOCP
13627 #include <sys/types.h>
13628 #include <stdio.h>
13629 int main() {
13630     printf("%d\n", (int)sizeof($gidtype));
13631     exit(0);
13632 }
13633 EOCP
13634 set try
13635 if eval $compile_ok; then
13636         yyy=`./try`
13637         case "$yyy" in
13638         '')     gidsize=4
13639                 echo "(I can't execute the test program--guessing $gidsize.)" >&4
13640                 ;;
13641         *)      gidsize=$yyy
13642                 echo "Your $zzz is $gidsize bytes long."
13643                 ;;
13644         esac
13645 else
13646         gidsize=4
13647         echo "(I can't compile the test program--guessing $gidsize.)" >&4
13648 fi
13649
13650
13651 echo " "
13652 case "$gidtype" in
13653 *_t) zzz="$gidtype"     ;;
13654 *)   zzz="gid"          ;;
13655 esac
13656 echo "Checking the sign of $zzz..." >&4 
13657 cat > try.c <<EOCP
13658 #include <sys/types.h>
13659 #include <stdio.h>
13660 int main() {
13661         $gidtype foo = -1;
13662         if (foo < 0)
13663                 printf("-1\n");
13664         else
13665                 printf("1\n");
13666 }
13667 EOCP
13668 set try
13669 if eval $compile; then
13670         yyy=`./try`
13671         case "$yyy" in
13672         '')     gidsign=1
13673                 echo "(I can't execute the test program--guessing unsigned.)" >&4
13674                 ;;
13675         *)      gidsign=$yyy
13676                 case "$gidsign" in
13677                  1) echo "Your $zzz is unsigned." ;;
13678                 -1) echo "Your $zzz is signed."   ;;
13679                 esac
13680                 ;;
13681         esac
13682 else
13683         gidsign=1
13684         echo "(I can't compile the test program--guessing unsigned.)" >&4
13685 fi
13686
13687
13688 echo " "
13689
13690 if $test X"$quadtype" != X; then
13691
13692 echo "Checking how to print 64-bit integers..." >&4
13693
13694 if $test X"$sPRId64" = X -a X"$quadtype" = Xint; then
13695         $cat >try.c <<'EOCP'
13696 #include <sys/types.h>
13697 #include <stdio.h>
13698 int main() {
13699   int q = 12345678901;
13700   printf("%ld\n", q);
13701 }
13702 EOCP
13703         set try
13704         if eval $compile; then
13705                 yyy=`./try$exe_ext`
13706                 case "$yyy" in
13707                 12345678901)
13708                         sPRId64='"d"'; sPRIi64='"i"'; sPRIu64='"u"';
13709                         sPRIo64='"o"'; sPRIx64='"x"'; sPRIXU64='"X"';
13710                         echo "We will use %d."
13711                         ;;
13712                 esac
13713         fi
13714 fi
13715
13716 if $test X"$sPRId64" = X -a X"$quadtype" = Xlong; then
13717         $cat >try.c <<'EOCP'
13718 #include <sys/types.h>
13719 #include <stdio.h>
13720 int main() {
13721   long q = 12345678901;
13722   printf("%ld\n", q);
13723 }
13724 EOCP
13725         set try
13726         if eval $compile; then
13727                 yyy=`./try$exe_ext`
13728                 case "$yyy" in
13729                 12345678901)
13730                         sPRId64='"ld"'; sPRIi64='"li"'; sPRIu64='"lu"';
13731                         sPRIo64='"lo"'; sPRIx64='"lx"'; sPRIXU64='"lX"';
13732                         echo "We will use %ld."
13733                         ;;
13734                 esac
13735         fi
13736 fi
13737
13738 if $test X"$sPRId64" = X -a X"$i_inttypes" = X"$define" -a X"$quadtype" = Xint64_t; then
13739         $cat >try.c <<'EOCP'
13740 #include <sys/types.h>
13741 #include <inttypes.h>
13742 #include <stdio.h>
13743 int main() {
13744   int64_t q = 12345678901;
13745   printf("%" PRId64 "\n", q);
13746 }
13747 EOCP
13748         set try
13749         if eval $compile; then
13750                 yyy=`./try$exe_ext`
13751                 case "$yyy" in
13752                 12345678901)
13753                         sPRId64=PRId64; sPRIi64=PRIi64; sPRIu64=PRIu64;
13754                         sPRIo64=PRIo64; sPRIx64=PRIx64; sPRIXU64=PRIXU64;
13755                         echo "We will use the C9X style."
13756                         ;;
13757                 esac
13758         fi
13759 fi
13760
13761 if $test X"$sPRId64" = X -a X"$quadtype" = X"long long"; then
13762         $cat >try.c <<'EOCP'
13763 #include <sys/types.h>
13764 #include <stdio.h>
13765 int main() {
13766   long long q = 12345678901LL; /* AIX cc requires the LL suffix. */
13767   printf("%lld\n", q);
13768 }
13769 EOCP
13770         set try
13771         if eval $compile; then
13772                 yyy=`./try$exe_ext`
13773                 case "$yyy" in
13774                 12345678901)
13775                         sPRId64='"lld"'; sPRIi64='"lli"'; sPRIu64='"llu"';
13776                         sPRIo64='"llo"'; sPRIx64='"llx"'; sPRIXU64='"llX"';
13777                         echo "We will use the %lld style."
13778                         ;;
13779                 esac
13780         fi
13781 fi
13782
13783 if $test X"$sPRId64" = X -a X"$quadtype" != X; then
13784         $cat >try.c <<EOCP
13785 #include <sys/types.h>
13786 #include <stdio.h>
13787 int main() {
13788   $quadtype q = 12345678901;
13789   printf("%Ld\n", q);
13790 }
13791 EOCP
13792         set try
13793         if eval $compile; then
13794                 yyy=`./try$exe_ext`
13795                 case "$yyy" in
13796                 12345678901)
13797                         sPRId64='"Ld"'; sPRIi64='"Li"'; sPRIu64='"Lu"';
13798                         sPRIo64='"Lo"'; sPRIx64='"Lx"'; sPRIXU64='"LX"';
13799                         echo "We will use %Ld."
13800                         ;;
13801                 esac
13802         fi
13803 fi
13804
13805 if $test X"$sPRId64" = X -a X"$quadtype" != X; then
13806         $cat >try.c <<EOCP
13807 #include <sys/types.h>
13808 #include <stdio.h>
13809 int main() {
13810   $quadtype q = 12345678901;
13811   printf("%qd\n", q);
13812 }
13813 EOCP
13814         set try
13815         if eval $compile; then
13816                 yyy=`./try$exe_ext`
13817                 case "$yyy" in
13818                 12345678901)
13819                         sPRId64='"qd"'; sPRIi64='"qi"'; sPRIu64='"qu"';
13820                         sPRIo64='"qo"'; sPRIx64='"qx"'; sPRIXU64='"qX"';
13821                         echo "We will use %qd."
13822                         ;;
13823                 esac
13824         fi
13825 fi
13826
13827 if $test X"$sPRId64" = X; then
13828         echo "Cannot figure out how to print 64-bit integers." >&4
13829 fi
13830
13831 $rm -f try try.*
13832
13833 fi
13834
13835 case "$sPRId64" in
13836 '')     d_PRId64="$undef"; d_PRIi64="$undef"; d_PRIu64="$undef"; 
13837         d_PRIo64="$undef"; d_PRIx64="$undef"; d_PRIXU64="$undef"; 
13838         ;;
13839 *)      d_PRId64="$define"; d_PRIi64="$define"; d_PRIu64="$define"; 
13840         d_PRIo64="$define"; d_PRIx64="$define"; d_PRIXU64="$define"; 
13841         ;;
13842 esac
13843
13844
13845 echo " "
13846 $echo "Checking the format strings to be used for Perl's internal types..." >&4
13847
13848 if $test X"$ivsize" = X8; then
13849         ivdformat="$sPRId64"
13850         uvuformat="$sPRIu64"
13851         uvoformat="$sPRIo64"
13852         uvxformat="$sPRIx64"
13853         uvXUformat="$sPRIXU64"
13854 else
13855         if $test X"$ivsize" = X"$longsize"; then
13856                 ivdformat='"ld"'
13857                 uvuformat='"lu"'
13858                 uvoformat='"lo"'
13859                 uvxformat='"lx"'
13860                 uvXUformat='"lX"'
13861         else
13862                 if $test X"$ivsize" = X"$intsize"; then
13863                         ivdformat='"d"'
13864                         uvuformat='"u"'
13865                         uvoformat='"o"'
13866                         uvxformat='"x"'
13867                         uvXUformat='"X"'
13868                 else
13869                         : far out
13870                         if $test X"$ivsize" = X"$shortsize"; then
13871                                 ivdformat='"hd"'
13872                                 uvuformat='"hu"'
13873                                 uvoformat='"ho"'
13874                                 uvxformat='"hx"'
13875                                 uvXUformat='"hX"'
13876                         fi
13877                 fi
13878         fi
13879 fi
13880
13881 if $test X"$uselongdouble" = X"$define" -a X"$d_longdbl" = X"$define" -a X"$d_PRIgldbl" = X"$define"; then
13882         nveformat="$sPRIeldbl"
13883         nvfformat="$sPRIfldbl"
13884         nvgformat="$sPRIgldbl"
13885         nvEUformat="$sPRIEUldbl"
13886         nvFUformat="$sPRIFUldbl"
13887         nvGUformat="$sPRIGUldbl"
13888 else
13889         nveformat='"e"'
13890         nvfformat='"f"'
13891         nvgformat='"g"'
13892         nvEUformat='"E"'
13893         nvFUformat='"F"'
13894         nvGUformat='"G"'
13895 fi
13896
13897 case "$ivdformat" in
13898 '') echo "$0: Fatal: failed to find format strings, cannot continue." >& 4
13899     exit 1
13900     ;;
13901 esac
13902
13903
13904 echo " "
13905 $echo "Checking the format string to be used for gids..." >&4
13906
13907 case "$gidsign" in
13908 -1)     if $test X"$gidsize" = X"$ivsize"; then
13909                 gidformat="$ivdformat"
13910         else
13911                 if $test X"$gidsize" = X"$longsize"; then
13912                         gidformat='"ld"'
13913                 else
13914                         if $test X"$gidsize" = X"$intsize"; then
13915                                 gidformat='"d"'
13916                         else
13917                                 if $test X"$gidsize" = X"$shortsize"; then
13918                                         gidformat='"hd"'
13919                                 fi
13920                         fi
13921                 fi
13922         fi
13923         ;;
13924 *)      if $test X"$gidsize" = X"$uvsize"; then
13925                 gidformat="$uvuformat"
13926         else
13927                 if $test X"$gidsize" = X"$longsize"; then
13928                         gidformat='"lu"'
13929                 else
13930                         if $test X"$gidsize" = X"$intsize"; then
13931                                 gidformat='"u"'
13932                         else
13933                                 if $test X"$gidsize" = X"$shortsize"; then
13934                                         gidformat='"hu"'
13935                                 fi
13936                         fi
13937                 fi
13938         fi
13939         ;;
13940 esac
13941
13942 : see if getgroups exists
13943 set getgroups d_getgrps
13944 eval $inlibc
13945
13946 : see if setgroups exists
13947 set setgroups d_setgrps
13948 eval $inlibc
13949
13950
13951 : Find type of 2nd arg to 'getgroups()' and 'setgroups()'
13952 echo " "
13953 case "$d_getgrps$d_setgrps" in
13954 *define*)
13955         case "$groupstype" in
13956         '') dflt="$gidtype" ;;
13957         *)  dflt="$groupstype" ;;
13958         esac
13959         $cat <<EOM
13960 What type of pointer is the second argument to getgroups() and setgroups()?
13961 Usually this is the same as group ids, $gidtype, but not always.
13962
13963 EOM
13964         rp='What type pointer is the second argument to getgroups() and setgroups()?'
13965         . ./myread
13966         groupstype="$ans"
13967         ;;
13968 *)  groupstype="$gidtype";;
13969 esac
13970
13971 echo " "
13972 echo "Checking if your $make program sets \$(MAKE)..." >&4
13973 case "$make_set_make" in
13974 '')
13975         $sed 's/^X //' > testmake.mak << 'EOF'
13976 Xall:
13977 X       @echo 'maketemp="$(MAKE)"'
13978 EOF
13979         case "`$make -f testmake.mak 2>/dev/null`" in
13980         *maketemp=*) make_set_make='#' ;;
13981         *)      make_set_make="MAKE=$make" ;;
13982         esac
13983         $rm -f testmake.mak
13984         ;;
13985 esac
13986 case "$make_set_make" in
13987 '#') echo "Yup, it does.";;
13988 *) echo "Nope, it doesn't.";;
13989 esac
13990
13991 : see what type is used for mode_t
13992 rp="What is the type used for file modes for system calls (e.g. fchmod())?"
13993 set mode_t modetype int stdio.h sys/types.h
13994 eval $typedef_ask
13995
13996 : see if stdarg is available
13997 echo " "
13998 if $test `./findhdr stdarg.h`; then
13999         echo "<stdarg.h> found." >&4
14000         valstd="$define"
14001 else
14002         echo "<stdarg.h> NOT found." >&4
14003         valstd="$undef"
14004 fi
14005
14006 : see if varags is available
14007 echo " "
14008 if $test `./findhdr varargs.h`; then
14009         echo "<varargs.h> found." >&4
14010 else
14011         echo "<varargs.h> NOT found, but that's ok (I hope)." >&4
14012 fi
14013
14014 : set up the varargs testing programs
14015 $cat > varargs.c <<EOP
14016 #ifdef I_STDARG
14017 #include <stdarg.h>
14018 #endif
14019 #ifdef I_VARARGS
14020 #include <varargs.h>
14021 #endif
14022
14023 #ifdef I_STDARG
14024 int f(char *p, ...)
14025 #else
14026 int f(va_alist)
14027 va_dcl
14028 #endif
14029 {
14030         va_list ap;
14031 #ifndef I_STDARG
14032         char *p;
14033 #endif
14034 #ifdef I_STDARG
14035         va_start(ap,p);
14036 #else
14037         va_start(ap);
14038         p = va_arg(ap, char *);
14039 #endif
14040         va_end(ap);
14041 }
14042 EOP
14043 $cat > varargs <<EOP
14044 $startsh
14045 if $cc -c $ccflags -D\$1 varargs.c >/dev/null 2>&1; then
14046         echo "true"
14047 else
14048         echo "false"
14049 fi
14050 $rm -f varargs$_o
14051 EOP
14052 chmod +x varargs
14053
14054 : now check which varargs header should be included
14055 echo " "
14056 i_varhdr=''
14057 case "$valstd" in
14058 "$define")
14059         if `./varargs I_STDARG`; then
14060                 val='stdarg.h'
14061         elif `./varargs I_VARARGS`; then
14062                 val='varargs.h'
14063         fi
14064         ;;
14065 *)
14066         if `./varargs I_VARARGS`; then
14067                 val='varargs.h'
14068         fi
14069         ;;
14070 esac
14071 case "$val" in
14072 '')
14073 echo "I could not find the definition for va_dcl... You have problems..." >&4
14074         val="$undef"; set i_stdarg; eval $setvar
14075         val="$undef"; set i_varargs; eval $setvar
14076         ;;
14077 *) 
14078         set i_varhdr
14079         eval $setvar
14080         case "$i_varhdr" in
14081         stdarg.h)
14082                 val="$define"; set i_stdarg; eval $setvar
14083                 val="$undef"; set i_varargs; eval $setvar
14084                 ;;
14085         varargs.h)
14086                 val="$undef"; set i_stdarg; eval $setvar
14087                 val="$define"; set i_varargs; eval $setvar
14088                 ;;
14089         esac
14090         echo "We'll include <$i_varhdr> to get va_dcl definition." >&4;;
14091 esac
14092 $rm -f varargs*
14093
14094 : see if we need va_copy
14095 echo " "
14096 case "$i_stdarg" in
14097 "$define")
14098         $cat >try.c <<EOCP
14099 #include <stdarg.h>
14100 #include <stdio.h>
14101 #$i_stdlib I_STDLIB
14102 #ifdef I_STDLIB
14103 #include <stdlib.h>
14104 #endif
14105 #include <signal.h>
14106
14107 int
14108 ivfprintf(FILE *f, const char *fmt, va_list *valp)
14109 {
14110   return vfprintf(f, fmt, *valp);
14111 }
14112  
14113 int    
14114 myvfprintf(FILE *f, const  char *fmt, va_list val)
14115 {
14116   return ivfprintf(f, fmt, &val);
14117 }
14118       
14119 int
14120 myprintf(char *fmt, ...) 
14121 {
14122   va_list val;
14123   va_start(val, fmt);
14124   return myvfprintf(stdout, fmt, val); 
14125 }         
14126
14127 int
14128 main(int ac, char **av)
14129 {
14130   signal(SIGSEGV, exit);
14131
14132   myprintf("%s%cs all right, then\n", "that", '\'');                            
14133   exit(0);      
14134 }
14135 EOCP
14136         set try
14137         if eval $compile && ./try 2>&1 >/dev/null; then
14138                 case "`./try`" in
14139                 "that's all right, then")
14140                         okay=yes
14141                         ;;
14142                 esac
14143         fi
14144         case "$okay" in
14145         yes)    echo "It seems that you don't need va_copy()." >&4
14146                 need_va_copy="$undef"
14147                 ;;
14148         *)      echo "It seems that va_copy() or similar will be needed." >&4
14149                 need_va_copy="$define"
14150                 ;;
14151         esac
14152         $rm -f try.* core core.* *.core *.core.*
14153         ;;
14154 *)      echo "You don't have <stdarg.h>, not checking for va_copy()." >&4
14155         ;;
14156 esac
14157
14158 : define a fucntion to check prototypes
14159 $cat > protochk <<EOSH
14160 $startsh
14161 cc="$cc"
14162 optimize="$optimize"
14163 ccflags="$ccflags"
14164 prototype="$prototype"
14165 define="$define"
14166 rm=$rm
14167 EOSH
14168
14169 $cat >> protochk <<'EOSH'
14170
14171 $rm -f try.c
14172 foo="$1"
14173 shift
14174 while test $# -ge 2; do
14175         case "$1" in
14176                 $define) echo "#include <$2>" >> try.c ;;
14177                 literal) echo "$2" >> try.c ;;
14178         esac
14179     shift 2
14180 done
14181 test "$prototype" = "$define"  && echo '#define CAN_PROTOTYPE' >> try.c
14182 cat >> try.c <<'EOCP'
14183 #ifdef CAN_PROTOTYPE
14184 #define _(args) args
14185 #else
14186 #define _(args) ()
14187 #endif
14188 EOCP
14189 echo "$foo" >> try.c
14190 echo 'int no_real_function_has_this_name _((void)) { return 0; }' >> try.c
14191 $cc $optimize $ccflags -c try.c > /dev/null 2>&1
14192 status=$?
14193 $rm -f try.[co]
14194 exit $status
14195 EOSH
14196 chmod +x protochk
14197 $eunicefix protochk
14198
14199 : see what type is used for size_t
14200 rp="What is the type used for the length parameter for string functions?"
14201 set size_t sizetype 'unsigned int' stdio.h sys/types.h
14202 eval $typedef_ask
14203
14204 : check for type of arguments to gethostbyaddr. 
14205 if test "X$netdb_host_type" = X -o "X$netdb_hlen_type" = X; then
14206         case "$d_gethbyaddr" in
14207         $define)
14208                 $cat <<EOM
14209
14210 Checking to see what type of arguments are accepted by gethostbyaddr().
14211 EOM
14212                 hdrs="$define sys/types.h
14213                         $d_socket sys/socket.h 
14214                         $i_niin netinet/in.h 
14215                         $i_netdb netdb.h
14216                         $i_unistd unistd.h"
14217                 : The first arg can 'char *' or 'void *'
14218                 : The second arg is some of integral type
14219                 for xxx in in_addr_t 'const void *' 'const char *' 'void *' 'char *'; do
14220                         for yyy in size_t long int; do
14221                                 case "$netdb_host_type" in
14222                                 '')     try="extern struct hostent *gethostbyaddr($xxx, $yyy, int);"
14223                                         if ./protochk "$try" $hdrs; then
14224                                                 echo "Your system accepts $xxx for the first arg."
14225                                                 echo "...and $yyy for the second arg."
14226                                                 netdb_host_type="$xxx"
14227                                                 netdb_hlen_type="$yyy"
14228                                         fi
14229                                         ;;
14230                                 esac
14231                         done
14232                 done
14233                 : In case none of those worked, prompt the user.
14234                 case "$netdb_host_type" in
14235                 '')     rp='What is the type for the 1st argument to gethostbyaddr?'
14236                         dflt='char *'
14237                         . ./myread
14238                         netdb_host_type=$ans
14239                         rp='What is the type for the 2nd argument to gethostbyaddr?'
14240                         dflt="$sizetype"
14241                         . ./myread
14242                         netdb_hlen_type=$ans
14243                         ;;
14244                 esac
14245                 ;;
14246         *)      : no gethostbyaddr, so pick harmless defaults
14247                 netdb_host_type='char *'
14248                 netdb_hlen_type="$sizetype"
14249                 ;;
14250         esac
14251         # Remove the "const" if needed. -- but then we'll have a 
14252         # prototype clash!
14253         # netdb_host_type=`echo "$netdb_host_type" | sed 's/^const //'`
14254 fi
14255
14256 : check for type of argument to gethostbyname. 
14257 if test "X$netdb_name_type" = X ; then
14258         case "$d_gethbyname" in
14259         $define)
14260                 $cat <<EOM
14261
14262 Checking to see what type of argument is accepted by gethostbyname().
14263 EOM
14264                 hdrs="$define sys/types.h
14265                         $d_socket sys/socket.h 
14266                         $i_niin netinet/in.h 
14267                         $i_netdb netdb.h
14268                         $i_unistd unistd.h"
14269                 for xxx in "const char *" "char *"; do
14270                         case "$netdb_name_type" in
14271                         '')     try="extern struct hostent *gethostbyname($xxx);"
14272                                 if ./protochk "$try" $hdrs; then
14273                                         echo "Your system accepts $xxx."
14274                                         netdb_name_type="$xxx"
14275                                 fi
14276                                 ;;
14277                         esac
14278                 done
14279                 : In case none of those worked, prompt the user.
14280                 case "$netdb_name_type" in
14281                 '')     rp='What is the type for the 1st argument to gethostbyname?'
14282                         dflt='char *'
14283                         . ./myread
14284                         netdb_name_type=$ans
14285                         ;;
14286                 esac
14287                 ;;
14288         *)      : no gethostbyname, so pick harmless default
14289                 netdb_name_type='char *'
14290                 ;;
14291         esac
14292 fi
14293
14294 : check for type of 1st argument to getnetbyaddr. 
14295 if test "X$netdb_net_type" = X ; then
14296         case "$d_getnbyaddr" in
14297         $define)
14298                 $cat <<EOM
14299
14300 Checking to see what type of 1st argument is accepted by getnetbyaddr().
14301 EOM
14302                 hdrs="$define sys/types.h
14303                         $d_socket sys/socket.h 
14304                         $i_niin netinet/in.h 
14305                         $i_netdb netdb.h
14306                         $i_unistd unistd.h"
14307                 for xxx in in_addr_t "unsigned long" long "unsigned int" int; do
14308                         case "$netdb_net_type" in
14309                         '')     try="extern struct netent *getnetbyaddr($xxx, int);"
14310                                 if ./protochk "$try" $hdrs; then
14311                                         echo "Your system accepts $xxx."
14312                                         netdb_net_type="$xxx"
14313                                 fi
14314                                 ;;
14315                         esac
14316                 done
14317                 : In case none of those worked, prompt the user.
14318                 case "$netdb_net_type" in
14319                 '')     rp='What is the type for the 1st argument to getnetbyaddr?'
14320                         dflt='long'
14321                         . ./myread
14322                         netdb_net_type=$ans
14323                         ;;
14324                 esac
14325                 ;;
14326         *)      : no getnetbyaddr, so pick harmless default
14327                 netdb_net_type='long'
14328                 ;;
14329         esac
14330 fi
14331 : locate the preferred pager for this system
14332 case "$pager" in
14333 '')
14334         dflt=''
14335         case "$pg" in
14336         /*) dflt=$pg;;
14337         [a-zA-Z]:/*) dflt=$pg;;
14338         esac
14339         case "$more" in
14340         /*) dflt=$more;;
14341         [a-zA-Z]:/*) dflt=$more;;
14342         esac
14343         case "$less" in
14344         /*) dflt=$less;;
14345         [a-zA-Z]:/*) dflt=$less;;
14346         esac
14347         case "$dflt" in
14348         '') dflt=/usr/ucb/more;;
14349         esac
14350         ;;
14351 *) dflt="$pager";;
14352 esac
14353 echo " "
14354 fn=f/
14355 rp='What pager is used on your system?'
14356 . ./getfile
14357 pager="$ans"
14358
14359 : see what type pids are declared as in the kernel
14360 rp="What is the type of process ids on this system?"
14361 set pid_t pidtype int stdio.h sys/types.h
14362 eval $typedef_ask
14363
14364 : Find earliest binary compatible site_perl subdirectory perl can use.
14365 case "$bincompat5005" in
14366 "$define") xs_apiversion='5.005' ;;
14367 *) xs_apiversion=$version ;;   # The current site_perl version.
14368 esac
14369 : Find earliest pure perl site_perl subdirectory perl can use.
14370 : The versioned directories started at 5.005.
14371 pm_apiversion='5.005'
14372
14373 : see if ar generates random libraries by itself
14374 echo " "
14375 echo "Checking how to generate random libraries on your machine..." >&4
14376 echo 'int bar1() { return bar2(); }' > bar1.c
14377 echo 'int bar2() { return 2; }' > bar2.c
14378 $cat > foo.c <<'EOP'
14379 int main() { printf("%d\n", bar1()); exit(0); }
14380 EOP
14381 $cc $ccflags -c bar1.c >/dev/null 2>&1
14382 $cc $ccflags -c bar2.c >/dev/null 2>&1
14383 $cc $ccflags -c foo.c >/dev/null 2>&1
14384 $ar rc bar$_a bar2$_o bar1$_o >/dev/null 2>&1
14385 if $cc -o foobar $ccflags $ldflags foo$_o bar$_a $libs > /dev/null 2>&1 &&
14386         ./foobar >/dev/null 2>&1; then
14387         echo "$ar appears to generate random libraries itself."
14388         orderlib=false
14389         ranlib=":"
14390 elif $ar ts bar$_a >/dev/null 2>&1 &&
14391         $cc -o foobar $ccflags $ldflags foo$_o bar$_a $libs > /dev/null 2>&1 &&
14392         ./foobar >/dev/null 2>&1; then
14393                 echo "a table of contents needs to be added with '$ar ts'."
14394                 orderlib=false
14395                 ranlib="$ar ts"
14396 else
14397         case "$ranlib" in
14398         :) ranlib='';;
14399         '')
14400                 ranlib=`./loc ranlib X /usr/bin /bin /usr/local/bin`
14401                 $test -f $ranlib || ranlib=''
14402                 ;;
14403         esac
14404         if $test -n "$ranlib"; then
14405                 echo "your system has '$ranlib'; we'll use that."
14406                 orderlib=false
14407         else
14408                 echo "your system doesn't seem to support random libraries"
14409                 echo "so we'll use lorder and tsort to order the libraries."
14410                 orderlib=true
14411                 ranlib=":"
14412         fi
14413 fi
14414 $rm -f foo* bar* 
14415
14416 : check for type of arguments to select. 
14417 case "$selecttype" in
14418 '') case "$d_select" in
14419         $define)
14420                 echo " "
14421                 $cat <<EOM
14422 Checking to see what type of arguments are accepted by select().
14423 EOM
14424                 hdrs="$define sys/types.h
14425                         $i_systime sys/time.h 
14426                         $i_sysselct sys/select.h
14427                         $d_socket sys/socket.h"
14428                 : The first arg can be int, unsigned, or size_t
14429                 : The last arg may or may not be 'const'
14430                 val=''
14431                 : void pointer has been seen but using that
14432                 : breaks the selectminbits test
14433                 for xxx in 'fd_set *' 'int *'; do
14434                         for nfd in 'int' 'size_t' 'unsigned long' 'unsigned' ; do
14435                                 for tmo in 'struct timeval *' 'const struct timeval *'; do
14436                                         case "$val" in
14437                                         '')     try="extern select _(($nfd, $xxx, $xxx, $xxx, $tmo));"
14438                                                 if ./protochk "$try" $hdrs; then
14439                                                         echo "Your system accepts $xxx."
14440                                                         val="$xxx"
14441                                                 fi
14442                                                 ;;
14443                                         esac
14444                                 done
14445                         done
14446                 done
14447                 case "$val" in
14448                 '')     rp='What is the type for the 2nd, 3rd, and 4th arguments to select?'
14449                         case "$d_fd_set" in
14450                                 $define) dflt="fd_set *" ;;
14451                                 *)              dflt="int *" ;;
14452                         esac
14453                         . ./myread
14454                         val=$ans
14455                         ;;
14456                 esac
14457                 selecttype="$val"
14458                 ;;
14459         *)      : no select, so pick a harmless default
14460                 selecttype='int *'
14461                 ;;
14462         esac
14463         ;;
14464 esac
14465
14466 : check for the select 'width'
14467 case "$selectminbits" in
14468 '') case "$d_select" in
14469         $define)
14470                 $cat <<EOM
14471
14472 Checking to see on how many bits at a time your select() operates...
14473 EOM
14474                 $cat >try.c <<EOCP
14475 #include <sys/types.h>
14476 #$i_time I_TIME
14477 #$i_systime I_SYS_TIME
14478 #$i_systimek I_SYS_TIME_KERNEL
14479 #ifdef I_TIME
14480 #   include <time.h>
14481 #endif
14482 #ifdef I_SYS_TIME
14483 #   ifdef I_SYS_TIME_KERNEL
14484 #       define KERNEL
14485 #   endif
14486 #   include <sys/time.h>
14487 #   ifdef I_SYS_TIME_KERNEL
14488 #       undef KERNEL
14489 #   endif
14490 #endif
14491 #$i_sysselct I_SYS_SELECT
14492 #ifdef I_SYS_SELECT
14493 #include <sys/select.h>
14494 #endif
14495 #$d_socket HAS_SOCKET
14496 #ifdef HAS_SOCKET
14497 #   include <sys/socket.h> /* Might include <sys/bsdtypes.h> */
14498 #endif
14499 #include <stdio.h>
14500 $selecttype b;
14501 #define S sizeof(*(b))
14502 #define MINBITS 64
14503 #define NBYTES (S * 8 > MINBITS ? S : MINBITS/8)
14504 #define NBITS  (NBYTES * 8)
14505 int main() {
14506     char s[NBYTES];
14507     struct timeval t;
14508     int i;
14509     FILE* fp;
14510     int fd;
14511
14512     fclose(stdin);
14513     fp = fopen("try.c", "r");
14514     if (fp == 0)
14515       exit(1);
14516     fd = fileno(fp);
14517     if (fd < 0)
14518       exit(2);
14519     b = ($selecttype)s;
14520     for (i = 0; i < NBITS; i++)
14521         FD_SET(i, b);
14522     t.tv_sec  = 0;
14523     t.tv_usec = 0;
14524     select(fd + 1, b, 0, 0, &t);
14525     for (i = NBITS - 1; i > fd && FD_ISSET(i, b); i--);
14526     printf("%d\n", i + 1);
14527     return 0;
14528 }
14529 EOCP
14530                 set try
14531                 if eval $compile_ok; then
14532                         selectminbits=`./try`
14533                         case "$selectminbits" in
14534                         '')     cat >&4 <<EOM
14535 Cannot figure out on how many bits at a time your select() operates.
14536 I'll play safe and guess it is 32 bits.
14537 EOM
14538                                 selectminbits=32
14539                                 bits="32 bits"
14540                                 ;;
14541                         1)      bits="1 bit" ;;
14542                         *)      bits="$selectminbits bits" ;;
14543                         esac
14544                         echo "Your select() operates on $bits at a time." >&4
14545                 else
14546                         rp='What is the minimum number of bits your select() operates on?'
14547                         case "$byteorder" in
14548                         1234|12345678)  dflt=32 ;;
14549                         *)              dflt=1  ;;
14550                         esac
14551                         . ./myread
14552                         val=$ans
14553                         selectminbits="$val"
14554                 fi
14555                 $rm -f try.* try
14556                 ;;
14557         *)      : no select, so pick a harmless default
14558                 selectminbits='32'
14559                 ;;
14560         esac
14561         ;;
14562 esac
14563
14564 : Trace out the files included by signal.h, then look for SIGxxx names.
14565 : Remove SIGARRAYSIZE used by HPUX.
14566 : Remove SIGSTKSIZE used by Linux.
14567 : Remove SIGSTKSZ used by Posix.
14568 : Remove SIGTYP void lines used by OS2.
14569 : Some cpps, like os390, dont give the file name anywhere
14570 if [ "X$fieldn" = X ]; then
14571         : Just make some guesses.  We check them later.
14572         xxx='/usr/include/signal.h /usr/include/sys/signal.h'
14573 else
14574         xxx=`echo '#include <signal.h>' |
14575         $cppstdin $cppminus $cppflags 2>/dev/null |
14576         $grep '^[       ]*#.*include' | 
14577         $awk "{print \\$$fieldn}" | $sed 's!"!!g' | $sort | $uniq`
14578 fi
14579 : Check this list of files to be sure we have parsed the cpp output ok.
14580 : This will also avoid potentially non-existent files, such 
14581 : as ../foo/bar.h
14582 xxxfiles=''
14583 for xx in $xxx /dev/null ; do
14584         $test -f "$xx" && xxxfiles="$xxxfiles $xx"
14585 done
14586 : If we have found no files, at least try signal.h
14587 case "$xxxfiles" in
14588 '')     xxxfiles=`./findhdr signal.h` ;;
14589 esac
14590 xxx=`awk '
14591 $1 ~ /^#define$/ && $2 ~ /^SIG[A-Z0-9]*$/ && $2 !~ /SIGARRAYSIZE/ && $2 !~ /SIGSTKSIZE/ && $2 !~ /SIGSTKSZ/ && $3 !~ /void/ {
14592         print substr($2, 4, 20)
14593 }
14594 $1 == "#" && $2 ~ /^define$/ && $3 ~ /^SIG[A-Z0-9]*$/ && $3 !~ /SIGARRAYSIZE/ && $4 !~ /void/ {
14595         print substr($3, 4, 20)
14596 }' $xxxfiles`
14597 : Append some common names just in case the awk scan failed.
14598 xxx="$xxx ABRT ALRM BUS CANCEL CHLD CLD CONT DIL EMT FPE"
14599 xxx="$xxx FREEZE HUP ILL INT IO IOT KILL LOST LWP PHONE"
14600 xxx="$xxx PIPE POLL PROF PWR QUIT RTMAX RTMIN SEGV STKFLT STOP"
14601 xxx="$xxx SYS TERM THAW TRAP TSTP TTIN TTOU URG USR1 USR2"
14602 xxx="$xxx USR3 USR4 VTALRM WAITING WINCH WIND WINDOW XCPU XFSZ"
14603
14604 : generate a few handy files for later
14605 $cat > signal.c <<'EOCP'
14606 #include <sys/types.h>
14607 #include <signal.h>
14608 #include <stdio.h>
14609 int main() {
14610
14611 /* Strange style to avoid deeply-nested #if/#else/#endif */
14612 #ifndef NSIG
14613 #  ifdef _NSIG
14614 #    define NSIG (_NSIG)
14615 #  endif
14616 #endif
14617
14618 #ifndef NSIG
14619 #  ifdef SIGMAX
14620 #    define NSIG (SIGMAX+1)
14621 #  endif
14622 #endif
14623
14624 #ifndef NSIG
14625 #  ifdef SIG_MAX
14626 #    define NSIG (SIG_MAX+1)
14627 #  endif
14628 #endif
14629
14630 #ifndef NSIG
14631 #  ifdef MAXSIG
14632 #    define NSIG (MAXSIG+1)
14633 #  endif
14634 #endif
14635
14636 #ifndef NSIG
14637 #  ifdef MAX_SIG
14638 #    define NSIG (MAX_SIG+1)
14639 #  endif
14640 #endif
14641
14642 #ifndef NSIG
14643 #  ifdef SIGARRAYSIZE
14644 #    define NSIG (SIGARRAYSIZE+1) /* Not sure of the +1 */
14645 #  endif
14646 #endif
14647
14648 #ifndef NSIG
14649 #  ifdef _sys_nsig
14650 #    define NSIG (_sys_nsig) /* Solaris 2.5 */
14651 #  endif
14652 #endif
14653
14654 /* Default to some arbitrary number that's big enough to get most
14655    of the common signals.
14656 */
14657 #ifndef NSIG
14658 #    define NSIG 50
14659 #endif
14660
14661 printf("NSIG %d\n", NSIG);
14662
14663 #ifndef JUST_NSIG
14664
14665 EOCP
14666
14667 echo $xxx | $tr ' ' $trnl | $sort | $uniq | $awk '
14668 {
14669         printf "#ifdef SIG"; printf $1; printf "\n"
14670         printf "printf(\""; printf $1; printf " %%d\\n\",SIG";
14671         printf $1; printf ");\n"
14672         printf "#endif\n"
14673 }
14674 END {
14675         printf "#endif /* JUST_NSIG */\n";
14676         printf "exit(0);\n}\n";
14677 }
14678 ' >>signal.c
14679 $cat >signal.awk <<'EOP'
14680 BEGIN { ndups = 0 }
14681 $1 ~ /^NSIG$/ { nsig = $2 }
14682 ($1 !~ /^NSIG$/) && (NF == 2) {
14683     if ($2 > maxsig) { maxsig = $2 }
14684     if (sig_name[$2]) {
14685         dup_name[ndups] = $1
14686         dup_num[ndups] = $2
14687         ndups++ 
14688     }
14689     else {
14690         sig_name[$2] = $1
14691         sig_num[$2] = $2
14692     }
14693 }
14694 END { 
14695     if (nsig == 0) {
14696         nsig = maxsig + 1
14697     }
14698     printf("NSIG %d\n", nsig);
14699     for (n = 1; n < nsig; n++) {
14700         if (sig_name[n]) {
14701             printf("%s %d\n", sig_name[n], sig_num[n])
14702         }
14703         else {
14704             printf("NUM%d %d\n", n, n) 
14705         }
14706     }
14707     for (n = 0; n < ndups; n++) {
14708         printf("%s %d\n", dup_name[n], dup_num[n])
14709     }
14710 }
14711 EOP
14712 $cat >signal_cmd <<EOS
14713 $startsh
14714 if $test -s signal.lst; then
14715     echo "Using your existing signal.lst file"
14716         exit 0
14717 fi
14718 xxx="$xxx"
14719 EOS
14720 $cat >>signal_cmd <<'EOS'
14721
14722 set signal
14723 if eval $compile_ok; then
14724         ./signal$_exe | $sort -n +1 | $uniq | $awk -f signal.awk >signal.lst
14725 else
14726         echo "(I can't seem be able to compile the whole test program)" >&4
14727         echo "(I'll try it in little pieces.)" >&4
14728         set signal -DJUST_NSIG
14729         if eval $compile_ok; then
14730                 ./signal$_exe > signal.nsg
14731                 $cat signal.nsg
14732         else
14733                 echo "I can't seem to figure out how many signals you have." >&4
14734                 echo "Guessing 50." >&4
14735                 echo 'NSIG 50' > signal.nsg
14736         fi
14737         : Now look at all the signal names, one at a time.
14738         for xx in `echo $xxx | $tr ' ' $trnl | $sort | $uniq`; do
14739                 $cat > signal.c <<EOCP
14740 #include <sys/types.h>
14741 #include <signal.h>
14742 #include <stdio.h>
14743 int main() {
14744 printf("$xx %d\n", SIG${xx});
14745 return 0;
14746 }
14747 EOCP
14748                 set signal
14749                 if eval $compile; then
14750                         echo "SIG${xx} found."
14751                         ./signal$_exe  >> signal.ls1
14752                 else
14753                         echo "SIG${xx} NOT found."
14754                 fi
14755         done
14756         if $test -s signal.ls1; then
14757                 $cat signal.nsg signal.ls1 |
14758                         $sort -n +1 | $uniq | $awk -f signal.awk >signal.lst
14759         fi
14760
14761 fi
14762 if $test -s signal.lst; then
14763         :
14764 else
14765         echo "(AAK! I can't compile the test programs -- Guessing)" >&4
14766         echo 'kill -l' >signal
14767         set X `csh -f <signal`
14768         $rm -f signal
14769         shift
14770         case $# in
14771         0) set HUP INT QUIT ILL TRAP ABRT EMT FPE KILL BUS SEGV SYS PIPE ALRM TERM;;
14772         esac
14773         echo $@ | $tr ' ' $trnl | \
14774             $awk '{ printf "%s %d\n", $1, ++s; }
14775                   END { printf "NSIG %d\n", ++s }' >signal.lst
14776 fi
14777 $rm -f signal.c signal$_exe signal$_o signal.nsg signal.ls1
14778 EOS
14779 chmod a+x signal_cmd
14780 $eunicefix signal_cmd
14781
14782 : generate list of signal names
14783 echo " "
14784 case "$sig_name_init" in
14785 '') doinit=yes ;;
14786 *)  case "$sig_num_init" in
14787     ''|*,*) doinit=yes ;;
14788     esac ;;
14789 esac
14790 case "$doinit" in
14791 yes)
14792         echo "Generating a list of signal names and numbers..." >&4
14793         . ./signal_cmd
14794         sig_count=`$awk '/^NSIG/ { printf "%d", $2 }' signal.lst`
14795         sig_name=`$awk 'BEGIN { printf "ZERO " }
14796                         !/^NSIG/ { printf "%s ", $1 }' signal.lst`
14797         sig_num=`$awk  'BEGIN { printf "0 " }
14798                         !/^NSIG/ { printf "%d ", $2 }' signal.lst`
14799         sig_name_init=`$awk 'BEGIN      { printf "\"ZERO\", " }
14800                              !/^NSIG/   { printf "\"%s\", ", $1 }
14801                              END        { printf "0\n" }' signal.lst`
14802         sig_num_init=`$awk  'BEGIN      { printf "0, " }
14803                              !/^NSIG/   { printf "%d, ", $2}
14804                              END        { printf "0\n"}' signal.lst`
14805         ;;
14806 esac
14807 echo "The following $sig_count signals are available:"
14808 echo " "
14809 echo $sig_name | $awk \
14810 'BEGIN { linelen = 0 }
14811 {
14812         for (i = 1; i <= NF; i++) {
14813                 name = "SIG" $i " "
14814                 linelen = linelen + length(name)
14815                 if (linelen > 70) {
14816                         printf "\n"
14817                         linelen = length(name)
14818                 }
14819                 printf "%s", name
14820         }
14821         printf "\n"
14822 }'
14823 sig_size=`echo $sig_name | awk '{print NF}'`
14824 $rm -f signal signal.c signal.awk signal.lst signal_cmd 
14825
14826 echo " "
14827 case "$sizetype" in
14828 *_t) zzz="$sizetype"    ;;
14829 *)   zzz="filesize"     ;;
14830 esac
14831 echo "Checking the size of $zzz..." >&4 
14832 cat > try.c <<EOCP
14833 #include <sys/types.h>
14834 #include <stdio.h>
14835 int main() {
14836     printf("%d\n", (int)sizeof($sizetype));
14837     exit(0);
14838 }
14839 EOCP
14840 set try
14841 if eval $compile_ok; then
14842         yyy=`./try`
14843         case "$yyy" in
14844         '')     sizesize=4
14845                 echo "(I can't execute the test program--guessing $sizesize.)" >&4
14846                 ;;
14847         *)      sizesize=$yyy
14848                 echo "Your $zzz size is $sizesize bytes."
14849                 ;;
14850         esac
14851 else
14852         sizesize=4
14853         echo "(I can't compile the test program--guessing $sizesize.)" >&4
14854 fi
14855
14856
14857 : check for socklen_t
14858 echo " "
14859 echo "Checking to see if you have socklen_t..." >&4
14860 $cat >try.c <<EOCP
14861 #include <sys/types.h>
14862 #$d_socket HAS_SOCKET
14863 #ifdef HAS_SOCKET
14864 #include <sys/socket.h>
14865 #endif
14866 int main() { socklen_t x = 16; }
14867 EOCP
14868 set try
14869 if eval $compile; then
14870         val="$define"
14871         echo "You have socklen_t."
14872 else
14873         val="$undef"
14874         echo "You do not have socklen_t."
14875         case "$sizetype" in
14876         size_t) echo "(You do have size_t, that might work. Some people are happy with just an int.)" ;;
14877         esac
14878 fi
14879 $rm -f try try.*
14880 set d_socklen_t
14881 eval $setvar
14882
14883 : see if this is a socks.h system
14884 set socks.h i_socks
14885 eval $inhdr
14886
14887 : check for type of the size argument to socket calls
14888 case "$d_socket" in
14889 "$define")
14890         $cat <<EOM
14891
14892 Checking to see what type is the last argument of accept().
14893 EOM
14894         yyy=''
14895         case "$d_socklen_t" in
14896         "$define") yyy="$yyy socklen_t"
14897         esac
14898         yyy="$yyy $sizetype int long unsigned"
14899         for xxx in $yyy; do
14900                 case "$socksizetype" in
14901                 '')     try="extern int accept(int, struct sockaddr *, $xxx *);"
14902                         case "$usesocks" in
14903                         "$define")
14904                                 if ./protochk "$try" $i_systypes sys/types.h $d_socket sys/socket.h literal '#define INCLUDE_PROTOTYPES' $i_socks socks.h.; then
14905                                         echo "Your system accepts '$xxx *' for the last argument of accept()."
14906                                         socksizetype="$xxx"
14907                                 fi
14908                                 ;;
14909                         *)      if ./protochk "$try"  $i_systypes sys/types.h $d_socket sys/socket.h; then
14910                                         echo "Your system accepts '$xxx *' for the last argument of accept()."
14911                                         socksizetype="$xxx"
14912                                 fi
14913                                 ;;
14914                         esac
14915                         ;;
14916                 esac
14917         done
14918 : In case none of those worked, prompt the user.
14919         case "$socksizetype" in
14920         '')     rp='What is the type for socket address structure sizes?'
14921                 dflt='int'
14922                 . ./myread
14923                 socksizetype=$ans
14924                 ;;
14925         esac
14926         ;;
14927 *)      : no sockets, so pick relatively harmless default
14928         socksizetype='int'
14929         ;;
14930 esac
14931
14932 : see what type is used for signed size_t
14933 set ssize_t ssizetype int stdio.h sys/types.h
14934 eval $typedef
14935 dflt="$ssizetype"
14936 $cat > ssize.c <<EOM
14937 #include <stdio.h>
14938 #include <sys/types.h>
14939 #define Size_t $sizetype
14940 #define SSize_t $dflt
14941 int main()
14942 {
14943         if (sizeof(Size_t) == sizeof(SSize_t))
14944                 printf("$dflt\n");
14945         else if (sizeof(Size_t) == sizeof(int))
14946                 printf("int\n");
14947         else 
14948                 printf("long\n");
14949         exit(0);
14950 }
14951 EOM
14952 echo " "
14953 set ssize
14954 if eval $compile_ok && ./ssize > /dev/null; then
14955         ssizetype=`./ssize`
14956         echo "I'll be using $ssizetype for functions returning a byte count." >&4
14957 else
14958         $cat >&4 <<EOM
14959 Help! I can't compile and run the ssize_t test program: please enlighten me!
14960 (This is probably a misconfiguration in your system or libraries, and
14961 you really ought to fix it.  Still, I'll try anyway.)
14962
14963 I need a type that is the same size as $sizetype, but is guaranteed to
14964 be signed.  Common values are ssize_t, int and long.
14965
14966 EOM
14967         rp="What signed type is the same size as $sizetype?"
14968         . ./myread
14969         ssizetype="$ans"
14970 fi
14971 $rm -f ssize ssize.*
14972
14973 : see what type of char stdio uses.
14974 echo " "
14975 echo '#include <stdio.h>' | $cppstdin $cppminus > stdioh
14976 if $contains 'unsigned.*char.*_ptr;' stdioh >/dev/null 2>&1 ; then
14977         echo "Your stdio uses unsigned chars." >&4
14978         stdchar="unsigned char"
14979 else
14980         echo "Your stdio uses signed chars." >&4
14981         stdchar="char"
14982 fi
14983 $rm -f stdioh
14984
14985
14986
14987 : see if time exists
14988 echo " "
14989 if test "X$d_time" = X -o X"$timetype" = X; then
14990     if set time val -f d_time; eval $csym; $val; then
14991                 echo 'time() found.' >&4
14992                 val="$define"
14993                 rp="What is the type returned by time() on this system?"
14994                 set time_t timetype long stdio.h sys/types.h
14995                 eval $typedef_ask
14996     else
14997                 echo 'time() not found, hope that will do.' >&4
14998                 val="$undef"
14999                 timetype='int';
15000     fi
15001     set d_time
15002     eval $setvar
15003 fi
15004
15005 : see what type uids are declared as in the kernel
15006 echo " "
15007 echo "Looking for the type for user ids returned by getuid()."
15008 set uid_t uidtype xxx stdio.h sys/types.h
15009 eval $typedef
15010 case "$uidtype" in
15011 xxx)
15012         xxx=`./findhdr sys/user.h`
15013         set `grep '_ruid;' "$xxx" 2>/dev/null` unsigned short
15014         case $1 in
15015         unsigned) dflt="$1 $2" ;;
15016         *) dflt="$1" ;;
15017         esac
15018         ;;
15019 *) dflt="$uidtype";;
15020 esac
15021 case "$uidtype" in
15022 uid_t)  echo "uid_t found." ;;
15023 *)      rp="What is the type for user ids returned by getuid()?"
15024         . ./myread
15025         uidtype="$ans"
15026         ;;
15027 esac
15028
15029 echo " "
15030 case "$uidtype" in
15031 *_t) zzz="$uidtype"     ;;
15032 *)   zzz="uid"          ;;
15033 esac
15034 echo "Checking the size of $zzz..." >&4 
15035 cat > try.c <<EOCP
15036 #include <sys/types.h>
15037 #include <stdio.h>
15038 int main() {
15039     printf("%d\n", (int)sizeof($uidtype));
15040     exit(0);
15041 }
15042 EOCP
15043 set try
15044 if eval $compile_ok; then
15045         yyy=`./try`
15046         case "$yyy" in
15047         '')     uidsize=4
15048                 echo "(I can't execute the test program--guessing $uidsize.)" >&4
15049                 ;;
15050         *)      uidsize=$yyy
15051                 echo "Your $zzz is $uidsize bytes long."
15052                 ;;
15053         esac
15054 else
15055         uidsize=4
15056         echo "(I can't compile the test program--guessing $uidsize.)" >&4
15057 fi
15058
15059 echo " "
15060 case "$uidtype" in
15061 *_t) zzz="$uidtype"     ;;
15062 *)   zzz="uid"          ;;
15063 esac
15064 echo "Checking the sign of $zzz..." >&4
15065 cat > try.c <<EOCP
15066 #include <sys/types.h>
15067 #include <stdio.h>
15068 int main() {
15069         $uidtype foo = -1;
15070         if (foo < 0)
15071                 printf("-1\n");
15072         else
15073                 printf("1\n");
15074 }
15075 EOCP
15076 set try
15077 if eval $compile; then
15078         yyy=`./try`
15079         case "$yyy" in
15080         '')     uidsign=1
15081                 echo "(I can't execute the test program--guessing unsigned.)" >&4
15082                 ;;
15083         *)      uidsign=$yyy
15084                 case "$uidsign" in
15085                  1) echo "Your $zzz is unsigned." ;;
15086                 -1) echo "Your $zzz is signed."   ;;
15087                 esac
15088                 ;;
15089         esac
15090 else
15091         uidsign=1
15092         echo "(I can't compile the test program--guessing unsigned.)" >&4
15093 fi
15094
15095
15096
15097 echo " "
15098 $echo "Checking the format string to be used for uids..." >&4
15099
15100 case "$uidsign" in
15101 -1)     if $test X"$uidsize" = X"$ivsize"; then
15102                 uidformat="$ivdformat"
15103         else
15104                 if $test X"$uidsize" = X"$longsize"; then
15105                         uidformat='"ld"'
15106                 else
15107                         if $test X"$uidsize" = X"$intsize"; then
15108                                 uidformat='"d"'
15109                         else
15110                                 if $test X"$uidsize" = X"$shortsize"; then
15111                                         uidformat='"hd"'
15112                                 fi
15113                         fi
15114                 fi
15115         fi
15116         ;;
15117 *)      if $test X"$uidsize" = X"$uvsize"; then
15118                 uidformat="$uvuformat"
15119         else
15120                 if $test X"$uidsize" = X"$longsize"; then
15121                         uidformat='"lu"'
15122                 else
15123                         if $test X"$uidsize" = X"$intsize"; then
15124                                 uidformat='"u"'
15125                         else
15126                                 if $test X"$uidsize" = X"$shortsize"; then
15127                                         uidformat='"hu"'
15128                                 fi
15129                         fi
15130                 fi
15131         fi
15132         ;;
15133 esac
15134
15135 : determine compiler compiler
15136 case "$yacc" in
15137 '')
15138         dflt=yacc;;
15139 *)
15140         dflt="$yacc";;
15141 esac
15142 echo " "
15143 comp='yacc'
15144 if $test -f "$byacc"; then
15145         dflt="$byacc"
15146         comp="byacc or $comp"
15147 fi
15148 if $test -f "$bison"; then
15149         comp="$comp or bison -y"
15150 fi
15151 rp="Which compiler compiler ($comp) shall I use?"
15152 . ./myread
15153 yacc="$ans"
15154 case "$yacc" in
15155 *bis*)
15156         case "$yacc" in
15157         *-y*) ;;
15158         *)
15159                 yacc="$yacc -y"
15160                 echo "(Adding -y option to bison to get yacc-compatible behaviour.)"
15161                 ;;
15162         esac
15163         ;;
15164 esac
15165
15166 : see if dbm.h is available
15167 : see if dbmclose exists
15168 set dbmclose d_dbmclose
15169 eval $inlibc
15170
15171 case "$d_dbmclose" in
15172 $define)
15173         set dbm.h i_dbm
15174         eval $inhdr
15175         case "$i_dbm" in
15176         $define)
15177                 val="$undef"
15178                 set i_rpcsvcdbm
15179                 eval $setvar
15180                 ;;
15181         *)      set rpcsvc/dbm.h i_rpcsvcdbm
15182                 eval $inhdr
15183                 ;;
15184         esac
15185         ;;
15186 *)      echo "We won't be including <dbm.h>"
15187         val="$undef"
15188         set i_dbm
15189         eval $setvar
15190         val="$undef"
15191         set i_rpcsvcdbm
15192         eval $setvar
15193         ;;
15194 esac
15195
15196 : see if this is a sys/file.h system
15197 val=''
15198 set sys/file.h val
15199 eval $inhdr
15200
15201 : do we need to include sys/file.h ?
15202 case "$val" in
15203 "$define")
15204         echo " "
15205         if $h_sysfile; then
15206                 val="$define"
15207                 echo "We'll be including <sys/file.h>." >&4
15208         else
15209                 val="$undef"
15210                 echo "We won't be including <sys/file.h>." >&4
15211         fi
15212         ;;
15213 *)
15214         h_sysfile=false
15215         ;;
15216 esac
15217 set i_sysfile
15218 eval $setvar
15219
15220 : see if fcntl.h is there
15221 val=''
15222 set fcntl.h val
15223 eval $inhdr
15224
15225 : see if we can include fcntl.h
15226 case "$val" in
15227 "$define")
15228         echo " "
15229         if $h_fcntl; then
15230                 val="$define"
15231                 echo "We'll be including <fcntl.h>." >&4
15232         else
15233                 val="$undef"
15234                 if $h_sysfile; then
15235         echo "We don't need to include <fcntl.h> if we include <sys/file.h>." >&4
15236                 else
15237                         echo "We won't be including <fcntl.h>." >&4
15238                 fi
15239         fi
15240         ;;
15241 *)
15242         h_fcntl=false
15243         val="$undef"
15244         ;;
15245 esac
15246 set i_fcntl
15247 eval $setvar
15248
15249 : see if this is a iconv.h system
15250 set iconv.h i_iconv
15251 eval $inhdr
15252
15253 : see if this is a ieeefp.h system
15254 set ieeefp.h i_ieeefp
15255 eval $inhdr
15256
15257 : see if this is a libutil.h system
15258 set libutil.h i_libutil
15259 eval $inhdr
15260
15261 : see if locale.h is available
15262 set locale.h i_locale
15263 eval $inhdr
15264
15265 : see if mach cthreads are available
15266 if test "X$usethreads" = "X$define"; then
15267         set mach/cthreads.h i_machcthr
15268         eval $inhdr
15269 else
15270         i_machcthr="$undef"
15271 fi
15272
15273
15274
15275 : see if this is a math.h system
15276 set math.h i_math
15277 eval $inhdr
15278
15279 : see if this is a mntent.h system
15280 set mntent.h i_mntent
15281 eval $inhdr
15282
15283 : see if ndbm.h is available
15284 set ndbm.h t_ndbm
15285 eval $inhdr
15286 case "$t_ndbm" in
15287 $define)
15288         : see if dbm_open exists
15289         set dbm_open d_dbm_open
15290         eval $inlibc
15291         case "$d_dbm_open" in
15292         $undef)
15293                 t_ndbm="$undef"
15294                 echo "We won't be including <ndbm.h>"
15295                 ;;
15296         esac
15297         ;;
15298 esac
15299 val="$t_ndbm"
15300 set i_ndbm
15301 eval $setvar
15302
15303 : see if net/errno.h is available
15304 val=''
15305 set net/errno.h val
15306 eval $inhdr
15307
15308 : Unfortunately, it causes problems on some systems.  Arrgh.
15309 case "$val" in
15310 $define)
15311         cat > try.c <<'EOM'
15312 #include <stdio.h>
15313 #include <errno.h>
15314 #include <net/errno.h>
15315 int func()
15316 {
15317         return ENOTSOCK;
15318 }
15319 EOM
15320         if $cc $ccflags -c try.c >/dev/null 2>&1; then
15321                 echo "We'll be including <net/errno.h>." >&4
15322         else
15323                 echo "We won't be including <net/errno.h>." >&4
15324                 val="$undef"
15325         fi
15326         $rm -f try.* try
15327         ;;
15328 esac
15329 set i_neterrno
15330 eval $setvar
15331
15332 : see if netinet/tcp.h is available
15333 set netinet/tcp.h i_netinettcp
15334 eval $inhdr
15335
15336 : see if this is a poll.h system
15337 set poll.h i_poll
15338 eval $inhdr
15339
15340 : see if this is a prot.h system
15341 set prot.h i_prot
15342 eval $inhdr
15343
15344 echo " "
15345 $echo "Guessing which symbols your C compiler and preprocessor define..." >&4 
15346 $cat <<'EOSH' > Cppsym.know
15347 a29k ABI64 aegis AES_SOURCE AIX AIX32 AIX370
15348 AIX41 AIX42 AIX43 AIX_SOURCE aixpc ALL_SOURCE
15349 alliant alpha am29000 AM29000 AMD64 amiga AMIGAOS AMIX
15350 ansi ANSI_C_SOURCE apollo ardent ARM32 atarist att386 att3b
15351 BeOS BIG_ENDIAN BIT_MSF bsd BSD bsd43 bsd4_2 bsd4_3 BSD4_3 bsd4_4
15352 BSD_4_3 BSD_4_4 BSD_NET2 BSD_TIME BSD_TYPES BSDCOMPAT bsdi
15353 bull c cadmus clipper CMU COFF COMPILER_VERSION
15354 concurrent convex cpu cray CRAY CRAYMPP ctix CX_UX
15355 CYGWIN DGUX DGUX_SOURCE DJGPP dmert DOLPHIN DPX2 DSO
15356 Dynix DynixPTX ELF encore EPI EXTENSIONS FILE_OFFSET_BITS
15357 FreeBSD GCC_NEW_VARARGS gcos gcx gimpel
15358 GNU_SOURCE GNUC GNUC_MINOR GO32 gould GOULD_PN
15359 H3050R H3050RX hbullx20 hcx host_mips
15360 hp200 hp300 hp700 HP700 hp800 hp9000
15361 hp9000s200 hp9000s300 hp9000s400 hp9000s500
15362 hp9000s700 hp9000s800 hp9k8 hp_osf hppa hpux HPUX_SOURCE
15363 i186 i286 i386 i486 i586 i686 i8086 i80960 i860 I960
15364 IA64 iAPX286 ibm ibm032 ibmesa IBMR2 ibmrt ILP32 ILP64
15365 INLINE_INTRINSICS INTRINSICS INT64 interdata is68k ksr1
15366 LANGUAGE_C LARGE_FILE_API LARGEFILE64_SOURCE
15367 LARGEFILE_SOURCE LFS64_LARGEFILE LFS_LARGEFILE
15368 Linux LITTLE_ENDIAN LONG64 LONG_DOUBLE LONG_LONG
15369 LONGDOUBLE LONGLONG LP64 luna luna88k Lynx
15370 M68000 m68k m88100 m88k M88KBCS_TARGET M_COFF
15371 M_I186 M_I286 M_I386 M_I8086 M_I86 M_I86SM M_SYS3
15372 M_SYS5 M_SYSIII M_SYSV M_UNIX M_XENIX MACH machine MachTen
15373 MATH_HAS_NO_SIDE_EFFECTS
15374 mc300 mc500 mc68000 mc68010 mc68020 mc68030 mc68040
15375 mc68060 mc68k mc68k32 mc700 mc88000 mc88100 merlin
15376 mert MiNT mips MIPS_FPSET MIPS_ISA MIPS_SIM MIPS_SZINT
15377 MIPS_SZLONG MIPS_SZPTR MIPSEB MIPSEL MODERN_C motorola
15378 mpeix MSDOS MTXINU MULTIMAX mvs MVS n16 ncl_el ncl_mr
15379 NetBSD news1500 news1700 news1800 news1900 news3700
15380 news700 news800 news900 NeXT NLS nonstopux ns16000 ns32000
15381 ns32016 ns32332 ns32k nsc32000
15382 OCS88 OEMVS OpenBSD os OS2 OS390 osf OSF1 OSF_SOURCE
15383 pa_risc PA_RISC1_1 PA_RISC2_0 PARAGON parisc
15384 pc532 pdp11 PGC PIC plexus PORTAR posix
15385 POSIX1B_SOURCE POSIX2_SOURCE POSIX4_SOURCE
15386 POSIX_C_SOURCE POSIX_SOURCE POWER
15387 PROTOTYPES PWB pyr QNX R3000 REENTRANT RES Rhapsody RISC6000
15388 riscix riscos RT S390 SA110 scs SCO sequent sgi SGI_SOURCE SH3 sinix
15389 SIZE_INT SIZE_LONG SIZE_PTR SOCKET_SOURCE SOCKETS_SOURCE
15390 sony sony_news sonyrisc sparc sparclite spectrum
15391 stardent stdc STDC_EXT stratos sun sun3 sun386
15392 Sun386i svr3 svr4 SVR4_2 SVR4_SOURCE svr5
15393 SX system SYSTYPE_BSD SYSTYPE_BSD43 SYSTYPE_BSD44
15394 SYSTYPE_SVR4 SYSTYPE_SVR5 SYSTYPE_SYSV SYSV SYSV3 SYSV4 SYSV5
15395 sysV68 sysV88 Tek4132 Tek4300 titan
15396 TM3200 TM5400 TM5600
15397 tower tower32 tower32_200 tower32_600 tower32_700
15398 tower32_800 tower32_850 tss
15399 u370 u3b u3b2 u3b20 u3b200 u3b20d u3b5
15400 ultrix UMAXV UnicomPBB UnicomPBD UNICOS UNICOSMK
15401 unix UNIX95 UNIX99 unixpc unos USGr4 USGr4_2
15402 Utek UTek UTS UWIN uxpm uxps vax venix VMESA vms xenix Xenix286
15403 XOPEN_SOURCE XOPEN_SOURCE_EXTENDED XPG2 XPG2_EXTENDED
15404 XPG3 XPG3_EXTENDED XPG4 XPG4_EXTENDED
15405 z8000
15406 EOSH
15407 # Maybe put other stuff here too.
15408 cat <<EOSH >>Cppsym.know
15409 $osname
15410 EOSH
15411 ./tr '[a-z]' '[A-Z]' < Cppsym.know > Cppsym.a
15412 ./tr '[A-Z]' '[a-z]' < Cppsym.know > Cppsym.b
15413 $cat Cppsym.know > Cppsym.c
15414 $cat Cppsym.a Cppsym.b Cppsym.c | $tr ' ' $trnl | $sort | $uniq > Cppsym.know
15415 $rm -f Cppsym.a Cppsym.b Cppsym.c
15416 cat <<EOSH > Cppsym
15417 $startsh
15418 if $test \$# -gt 0; then
15419     echo \$* | $tr " " "$trnl" | ./Cppsym.try > Cppsym.got
15420     if $test -s Cppsym.got; then
15421         $rm -f Cppsym.got
15422         exit 0
15423     fi
15424     $rm -f Cppsym.got
15425     exit 1
15426 else
15427     $tr " " "$trnl" | ./Cppsym.try
15428     exit 0
15429 fi
15430 EOSH
15431 chmod +x Cppsym
15432 $eunicefix Cppsym
15433 cat <<EOSH > Cppsym.try
15434 $startsh
15435 cat <<'EOCP' > try.c
15436 #include <stdio.h>
15437 int main() {
15438 EOCP
15439 $awk \\
15440 EOSH
15441 cat <<'EOSH' >> Cppsym.try
15442 'length($1) > 0 {
15443     printf "#ifdef %s\n#if %s+0\nprintf(\"%s=%%ld\\n\", %s);\n#else\nprintf(\"%s\\n\");\n#endif\n#endif\n", $1, $1, $1, $1, $1
15444     printf "#ifdef _%s\n#if _%s+0\nprintf(\"_%s=%%ld\\n\", _%s);\n#else\nprintf(\"_%s\\n\");\n#endif\n#endif\n", $1, $1, $1, $1, $1
15445     printf "#ifdef __%s\n#if __%s+0\nprintf(\"__%s=%%ld\\n\", __%s);\n#else\nprintf(\"__%s\\n\");\n#endif\n#endif\n", $1, $1, $1, $1, $1
15446     printf "#ifdef __%s__\n#if __%s__+0\nprintf(\"__%s__=%%ld\\n\", __%s__);\n#else\nprintf(\"__%s__\\n\");\n#endif\n#endif\n", $1, $1, $1, $1, $1
15447 }'       >> try.c
15448 echo '}' >> try.c
15449 EOSH
15450 cat <<EOSH >> Cppsym.try
15451 ccflags="$ccflags"
15452 case "$osname-$gccversion" in
15453 irix-) ccflags="\$ccflags -woff 1178" ;;
15454 os2-*) ccflags="\$ccflags -Zlinker /PM:VIO" ;;
15455 esac
15456 $cc -o try $optimize \$ccflags $ldflags try.c $libs && ./try$exe_ext
15457 EOSH
15458 chmod +x Cppsym.try
15459 $eunicefix Cppsym.try
15460 ./Cppsym < Cppsym.know > Cppsym.true
15461 : now check the C compiler for additional symbols
15462 postprocess_cc_v=''
15463 case "$osname" in
15464 aix) postprocess_cc_v="|$tr , ' '" ;;
15465 esac
15466 $cat >ccsym <<EOS
15467 $startsh
15468 $cat >tmp.c <<EOF
15469 extern int foo;
15470 EOF
15471 for i in \`$cc -v -c tmp.c 2>&1 $postprocess_cc_v\`
15472 do
15473         case "\$i" in
15474         -D*) echo "\$i" | $sed 's/^-D//';;
15475         -A*) $test "$gccversion" && echo "\$i" | $sed 's/^-A\(.*\)(\(.*\))/\1=\2/';;
15476         esac
15477 done
15478 $rm -f try.c
15479 EOS
15480 postprocess_cc_v=''
15481 chmod +x ccsym
15482 $eunicefix ccsym
15483 ./ccsym > ccsym1.raw
15484 if $test -s ccsym1.raw; then
15485        $sort ccsym1.raw | $uniq >ccsym.raw
15486 else
15487        mv ccsym1.raw ccsym.raw
15488 fi
15489
15490 $awk '/\=/ { print $0; next }
15491         { print $0"=1" }' ccsym.raw >ccsym.list
15492 $awk '/\=/ { print $0; next }
15493         { print $0"=1" }' Cppsym.true >ccsym.true
15494 $comm -13 ccsym.true ccsym.list >ccsym.own
15495 $comm -12 ccsym.true ccsym.list >ccsym.com
15496 $comm -23 ccsym.true ccsym.list >ccsym.cpp
15497 also=''
15498 if $test -z ccsym.raw; then
15499         echo "Your C compiler doesn't seem to define any symbols!" >&4
15500         echo " "
15501         echo "However, your C preprocessor defines the following symbols:"
15502         $cat Cppsym.true
15503         ccsymbols=''
15504         cppsymbols=`$cat Cppsym.true`
15505         cppsymbols=`echo $cppsymbols`
15506         cppccsymbols="$cppsymbols"
15507 else
15508         if $test -s ccsym.com; then
15509                 echo "Your C compiler and pre-processor define these symbols:"
15510                 $sed -e 's/\(..*\)=.*/\1/' ccsym.com
15511                 also='also '
15512                 symbols='ones'
15513                 cppccsymbols=`$cat ccsym.com`
15514                 cppccsymbols=`echo $cppccsymbols`
15515                 $test "$silent" || sleep 1
15516         fi
15517         if $test -s ccsym.cpp; then
15518                 $test "$also" && echo " "
15519                 echo "Your C pre-processor ${also}defines the following symbols:"
15520                 $sed -e 's/\(..*\)=.*/\1/' ccsym.cpp
15521                 also='further '
15522                 cppsymbols=`$cat ccsym.cpp`
15523                 cppsymbols=`echo $cppsymbols`
15524                 $test "$silent" || sleep 1
15525         fi
15526         if $test -s ccsym.own; then
15527                 $test "$also" && echo " "
15528                 echo "Your C compiler ${also}defines the following cpp symbols:"
15529                 $sed -e 's/\(..*\)=1/\1/' ccsym.own
15530                 $sed -e 's/\(..*\)=.*/\1/' ccsym.own | $uniq >>Cppsym.true
15531                 ccsymbols=`$cat ccsym.own`
15532                 ccsymbols=`echo $ccsymbols`
15533                 $test "$silent" || sleep 1
15534         fi
15535 fi
15536 $rm -f ccsym* Cppsym.*
15537
15538 : see if this is a termio system
15539 val="$undef"
15540 val2="$undef"
15541 val3="$undef"
15542 if $test `./findhdr termios.h`; then
15543         set tcsetattr i_termios
15544         eval $inlibc
15545         val3="$i_termios"
15546 fi
15547 echo " "
15548 case "$val3" in
15549 "$define") echo "You have POSIX termios.h... good!" >&4;;
15550 *) if ./Cppsym pyr; then
15551                 case "`/bin/universe`" in
15552                 ucb) if $test `./findhdr sgtty.h`; then
15553                                 val2="$define"
15554                                 echo "<sgtty.h> found." >&4
15555                         else
15556                                 echo "System is pyramid with BSD universe."
15557                                 echo "<sgtty.h> not found--you could have problems." >&4
15558                         fi;;
15559                 *) if $test `./findhdr termio.h`; then
15560                                 val="$define"
15561                                 echo "<termio.h> found." >&4
15562                         else
15563                                 echo "System is pyramid with USG universe."
15564                                 echo "<termio.h> not found--you could have problems." >&4
15565                         fi;;
15566                 esac
15567         elif ./usg; then
15568                 if $test `./findhdr termio.h`; then
15569                         echo "<termio.h> found." >&4
15570                         val="$define"
15571                 elif $test `./findhdr sgtty.h`; then
15572                         echo "<sgtty.h> found." >&4
15573                         val2="$define"
15574                 else
15575 echo "Neither <termio.h> nor <sgtty.h> found--you could have problems." >&4
15576                 fi
15577         else
15578                 if $test `./findhdr sgtty.h`; then
15579                         echo "<sgtty.h> found." >&4
15580                         val2="$define"
15581                 elif $test `./findhdr termio.h`; then
15582                         echo "<termio.h> found." >&4
15583                         val="$define"
15584                 else
15585 echo "Neither <sgtty.h> nor <termio.h> found--you could have problems." >&4
15586                 fi
15587         fi;;
15588 esac
15589 set i_termio; eval $setvar
15590 val=$val2; set i_sgtty; eval $setvar
15591 val=$val3; set i_termios; eval $setvar
15592
15593 : see if this is a shadow.h system
15594 set shadow.h i_shadow
15595 eval $inhdr
15596
15597 : see if stddef is available
15598 set stddef.h i_stddef
15599 eval $inhdr
15600
15601 : see if this is a sunmath.h system
15602 set sunmath.h i_sunmath
15603 eval $inhdr
15604
15605 : see if sys/access.h is available
15606 set sys/access.h i_sysaccess
15607 eval $inhdr
15608
15609 : see if ioctl defs are in sgtty, termio, sys/filio or sys/ioctl
15610 set sys/filio.h i_sysfilio
15611 eval $inhdr
15612 echo " "
15613 if $test `./findhdr sys/ioctl.h`; then
15614         val="$define"
15615         echo '<sys/ioctl.h> found.' >&4
15616 else
15617         val="$undef"
15618         if $test $i_sysfilio = "$define"; then
15619             echo '<sys/ioctl.h> NOT found.' >&4
15620         else
15621                 $test $i_sgtty = "$define" && xxx="sgtty.h"
15622                 $test $i_termio = "$define" && xxx="termio.h"
15623                 $test $i_termios = "$define" && xxx="termios.h"
15624 echo "No <sys/ioctl.h> found, assuming ioctl args are defined in <$xxx>." >&4
15625         fi
15626 fi
15627 set i_sysioctl
15628 eval $setvar
15629
15630 : see if socket ioctl defs are in sys/sockio.h
15631 echo " "
15632 xxx=`./findhdr sys/sockio.h`
15633 if $test "$xxx"; then
15634         if $contains SIOCATMARK $xxx >/dev/null 2>&1; then
15635                 val="$define"
15636                 echo "You have socket ioctls defined in <sys/sockio.h>." >&4
15637         else
15638                 val="$undef"
15639                 echo "No socket ioctls found in <sys/sockio.h>." >&4
15640         fi
15641 else
15642         val="$undef"
15643         $cat <<EOM
15644 <sys/sockio.h> not found, assuming socket ioctls are in <sys/ioctl.h>.
15645 EOM
15646 fi
15647 set i_syssockio
15648 eval $setvar
15649
15650
15651 : see if this is a syslog.h system
15652 set syslog.h i_syslog
15653 eval $inhdr
15654
15655
15656 : see if this is a sys/mode.h system
15657 set sys/mode.h i_sysmode
15658 eval $inhdr
15659
15660 : see if sys/resource.h has to be included
15661 set sys/resource.h i_sysresrc
15662 eval $inhdr
15663
15664 : see if sys/security.h is available
15665 set sys/security.h i_syssecrt
15666 eval $inhdr
15667
15668 : see if this is a sys/statvfs.h system
15669 set sys/statvfs.h i_sysstatvfs
15670 eval $inhdr
15671
15672 : see if this is a sys/un.h system
15673 set sys/un.h i_sysun
15674 eval $inhdr
15675
15676
15677 : see if this is a sys/utsname.h system
15678 set sys/utsname.h i_sysutsname
15679 eval $inhdr
15680
15681 : see if this is a syswait system
15682 set sys/wait.h i_syswait
15683 eval $inhdr
15684
15685 : see if this is a ustat.h system
15686 set ustat.h i_ustat
15687 eval $inhdr
15688
15689 : see if this is an utime system
15690 set utime.h i_utime
15691 eval $inhdr
15692
15693 : see if this is a values.h system
15694 set values.h i_values
15695 eval $inhdr
15696
15697 : see if this is a vfork system
15698 case "$d_vfork" in
15699 "$define")
15700         set vfork.h i_vfork
15701         eval $inhdr
15702         ;;
15703 *)
15704         i_vfork="$undef"
15705         ;;
15706 esac
15707
15708 : see if gdbm.h is available
15709 set gdbm.h t_gdbm
15710 eval $inhdr
15711 case "$t_gdbm" in
15712 $define)
15713         : see if gdbm_open exists
15714         set gdbm_open d_gdbm_open
15715         eval $inlibc
15716         case "$d_gdbm_open" in
15717         $undef)
15718                 t_gdbm="$undef"
15719                 echo "We won't be including <gdbm.h>"
15720                 ;;
15721         esac
15722         ;;
15723 esac
15724 val="$t_gdbm"
15725 set i_gdbm
15726 eval $setvar
15727
15728 echo " "
15729 echo "Looking for extensions..." >&4
15730 : If we are using the old config.sh, known_extensions may contain
15731 : old or inaccurate or duplicate values.
15732 known_extensions=''
15733 nonxs_extensions=''
15734 : We do not use find because it might not be available.
15735 : We do not just use MANIFEST because the user may have dropped
15736 : some additional extensions into the source tree and expect them
15737 : to be built.
15738
15739 : Function to recursively find available extensions, ignoring DynaLoader
15740 : NOTE: recursion limit of 10 to prevent runaway in case of symlink madness
15741 find_extensions='
15742     for xxx in *; do
15743        case "$xxx" in
15744            DynaLoader|dynaload) ;;
15745            *)
15746            if $test -f $xxx/$xxx.xs; then
15747                known_extensions="$known_extensions $1$xxx";
15748            elif $test -f $xxx/Makefile.PL; then
15749                nonxs_extensions="$nonxs_extensions $1$xxx";
15750            else
15751                if $test -d $xxx -a $# -lt 10; then
15752                    set $1$xxx/ $*;
15753                    cd $xxx;
15754                    eval $find_extensions;
15755                    cd ..;
15756                    shift;
15757                fi;
15758            fi
15759            ;;
15760        esac;
15761     done'
15762 tdir=`pwd`
15763 cd $rsrc/ext
15764 set X
15765 shift
15766 eval $find_extensions
15767 set X $nonxs_extensions
15768 shift
15769 nonxs_extensions="$*"
15770 set X $known_extensions
15771 shift
15772 known_extensions="$*"
15773 cd $tdir
15774
15775 : Now see which are supported on this system.
15776 avail_ext=''
15777 for xxx in $known_extensions ; do
15778         case "$xxx" in
15779         DB_File|db_file)
15780                 case "$i_db" in
15781                 $define) avail_ext="$avail_ext $xxx" ;;
15782                 esac
15783                 ;;
15784         GDBM_File|gdbm_fil)
15785                 case "$i_gdbm" in 
15786                 $define) avail_ext="$avail_ext $xxx" ;;
15787                 esac
15788                 ;;
15789         NDBM_File|ndbm_fil)
15790                 case "$i_ndbm" in
15791                 $define)
15792                     case "$osname-$use64bitint" in
15793                     hpux-define)
15794                         case "$libs" in
15795                         *-lndbm*) avail_ext="$avail_ext $xxx" ;;
15796                         esac
15797                         ;;
15798                     *) avail_ext="$avail_ext $xxx" ;;
15799                     esac
15800                     ;;
15801                 esac
15802                 ;;
15803         ODBM_File|odbm_fil) 
15804                 case "${i_dbm}${i_rpcsvcdbm}" in
15805                 *"${define}"*)
15806                     case "$osname-$use64bitint" in
15807                     hpux-define)
15808                         case "$libs" in
15809                         *-ldbm*) avail_ext="$avail_ext $xxx" ;;
15810                         esac
15811                         ;;
15812                     *) avail_ext="$avail_ext $xxx" ;;
15813                     esac
15814                     ;;
15815                 esac
15816                 ;;
15817         POSIX|posix)
15818                 case "$useposix" in
15819                 true|define|y) avail_ext="$avail_ext $xxx" ;;
15820                 esac
15821                 ;;
15822         Opcode|opcode)
15823                 case "$useopcode" in
15824                 true|define|y) avail_ext="$avail_ext $xxx" ;;
15825                 esac
15826                 ;;
15827         Socket|socket)
15828                 case "$d_socket" in 
15829                 true|$define|y) avail_ext="$avail_ext $xxx" ;;
15830                 esac
15831                 ;;
15832         Sys/Syslog|sys/syslog)
15833                 : XXX syslog requires socket
15834                 case "$d_socket" in 
15835                 true|$define|y) avail_ext="$avail_ext $xxx" ;;
15836                 esac
15837                 ;;
15838         Thread|thread)
15839                 case "$usethreads" in 
15840                 true|$define|y) avail_ext="$avail_ext $xxx" ;;
15841                 esac
15842                 ;;
15843         IPC/SysV|ipc/sysv)
15844                 : XXX Do we need a useipcsysv variable here
15845                 case "${d_msg}${d_sem}${d_shm}" in 
15846                 *"${define}"*) avail_ext="$avail_ext $xxx" ;;
15847                 esac
15848                 ;;
15849         *)      avail_ext="$avail_ext $xxx"
15850                 ;;
15851         esac
15852 done
15853
15854 set X $avail_ext
15855 shift
15856 avail_ext="$*"
15857
15858 : Now see which nonxs extensions are supported on this system.
15859 : For now assume all are.
15860 nonxs_ext=''
15861 for xxx in $nonxs_extensions ; do
15862         case "$xxx" in
15863         *)      nonxs_ext="$nonxs_ext $xxx"
15864                 ;;
15865         esac
15866 done
15867
15868 set X $nonxs_ext
15869 shift
15870 nonxs_ext="$*"
15871
15872 case $usedl in
15873 $define)
15874         $cat <<EOM
15875 A number of extensions are supplied with $package.  You may choose to
15876 compile these extensions for dynamic loading (the default), compile
15877 them into the $package executable (static loading), or not include
15878 them at all.  Answer "none" to include no extensions.
15879 Note that DynaLoader is always built and need not be mentioned here.
15880
15881 EOM
15882         case "$dynamic_ext" in
15883         '') dflt="$avail_ext" ;;
15884         *)      dflt="$dynamic_ext"
15885                 # Perhaps we are reusing an old out-of-date config.sh.
15886                 case "$hint" in
15887                 previous)
15888                         if test X"$dynamic_ext" != X"$avail_ext"; then
15889                                 $cat <<EOM
15890 NOTICE:  Your previous config.sh list may be incorrect. 
15891 The extensions now available to you are 
15892         ${avail_ext}
15893 but the default list from your previous config.sh is
15894         ${dynamic_ext} 
15895
15896 EOM
15897                         fi
15898                         ;;
15899                 esac
15900                 ;;
15901         esac
15902         case "$dflt" in
15903         '')     dflt=none;;
15904         esac
15905         rp="What extensions do you wish to load dynamically?"
15906         . ./myread
15907         case "$ans" in
15908         none) dynamic_ext=' ' ;;
15909         *) dynamic_ext="$ans" ;;
15910         esac
15911
15912         case "$static_ext" in
15913         '')
15914                 : Exclude those already listed in dynamic linking
15915                 dflt=''
15916                 for xxx in $avail_ext; do
15917                         case " $dynamic_ext " in
15918                         *" $xxx "*) ;;
15919                         *) dflt="$dflt $xxx" ;;
15920                         esac
15921                 done
15922                 set X $dflt
15923                 shift
15924                 dflt="$*"
15925                 ;;
15926         *)  dflt="$static_ext" 
15927                 ;;
15928         esac
15929
15930         case "$dflt" in
15931         '')     dflt=none;;
15932         esac
15933         rp="What extensions do you wish to load statically?"
15934         . ./myread
15935         case "$ans" in
15936         none) static_ext=' ' ;;
15937         *) static_ext="$ans" ;;
15938         esac
15939         ;;
15940 *)
15941         $cat <<EOM
15942 A number of extensions are supplied with $package.  Answer "none" 
15943 to include no extensions. 
15944 Note that DynaLoader is always built and need not be mentioned here.
15945
15946 EOM
15947         case "$static_ext" in
15948         '') dflt="$avail_ext" ;;
15949         *)      dflt="$static_ext"
15950                 # Perhaps we are reusing an old out-of-date config.sh.
15951                 case "$hint" in
15952                 previous)
15953                         if test X"$static_ext" != X"$avail_ext"; then
15954                                 $cat <<EOM
15955 NOTICE:  Your previous config.sh list may be incorrect. 
15956 The extensions now available to you are 
15957         ${avail_ext}
15958 but the default list from your previous config.sh is
15959         ${static_ext} 
15960
15961 EOM
15962                         fi
15963                         ;;
15964                 esac
15965                 ;;
15966         esac
15967         : Exclude those that are not xs extensions
15968         case "$dflt" in
15969         '')     dflt=none;;
15970         esac
15971         rp="What extensions do you wish to include?"
15972         . ./myread
15973         case "$ans" in
15974         none) static_ext=' ' ;;
15975         *) static_ext="$ans" ;;
15976         esac
15977         ;;
15978 esac
15979
15980 set X $dynamic_ext $static_ext $nonxs_ext
15981 shift
15982 extensions="$*"
15983
15984 : Remove libraries needed only for extensions
15985 : The appropriate ext/Foo/Makefile.PL will add them back in, if necessary.
15986 : The exception is SunOS 4.x, which needs them.
15987 case "${osname}X${osvers}" in
15988 sunos*X4*)
15989     perllibs="$libs"
15990     ;;
15991 *) case "$usedl" in
15992     $define|true|[yY]*)
15993             set X `echo " $libs " | sed -e 's@ -lndbm @ @' -e 's@ -lgdbm @ @' -e 's@ -ldbm @ @' -e 's@ -ldb @ @'` 
15994             shift
15995             perllibs="$*"
15996             ;;
15997     *)  perllibs="$libs"
15998             ;;
15999     esac
16000     ;;
16001 esac
16002
16003 : Remove build directory name from cppstdin so it can be used from
16004 : either the present location or the final installed location.
16005 echo " "
16006 : Get out of the UU directory to get correct path name.
16007 cd ..
16008 case "$cppstdin" in
16009 `pwd`/cppstdin)
16010         echo "Stripping down cppstdin path name"
16011         cppstdin=cppstdin
16012         ;;
16013 esac
16014 cd UU
16015
16016 : end of configuration questions
16017 echo " "
16018 echo "End of configuration questions."
16019 echo " "
16020
16021 : back to where it started
16022 if test -d ../UU; then
16023         cd ..
16024 fi
16025
16026 : configuration may be patched via a 'config.over' file
16027 if $test -f config.over; then
16028         echo " "
16029         dflt=y
16030         rp='I see a config.over file.  Do you wish to load it?'
16031         . UU/myread
16032         case "$ans" in
16033         n*) echo "OK, I'll ignore it.";;
16034         *)      . ./config.over
16035                 echo "Configuration override changes have been loaded."
16036                 ;;
16037         esac
16038 fi
16039
16040 : in case they want portability, strip down executable paths
16041 case "$d_portable" in
16042 "$define")
16043         echo " "
16044         echo "Stripping down executable paths..." >&4
16045         for file in $loclist $trylist; do
16046                 eval temp=\$$file
16047                 eval $file=`basename $temp`
16048         done
16049         ;;
16050 esac
16051
16052 : create config.sh file
16053 echo " "
16054 echo "Creating config.sh..." >&4
16055 $spitshell <<EOT >config.sh
16056 $startsh
16057 #
16058 # This file was produced by running the Configure script. It holds all the
16059 # definitions figured out by Configure. Should you modify one of these values,
16060 # do not forget to propagate your changes by running "Configure -der". You may
16061 # instead choose to run each of the .SH files by yourself, or "Configure -S".
16062 #
16063
16064 # Package name      : $package
16065 # Source directory  : $src
16066 # Configuration time: $cf_time
16067 # Configured by     : $cf_by
16068 # Target system     : $myuname
16069
16070 Author='$Author'
16071 Date='$Date'
16072 Header='$Header'
16073 Id='$Id'
16074 Locker='$Locker'
16075 Log='$Log'
16076 Mcc='$Mcc'
16077 RCSfile='$RCSfile'
16078 Revision='$Revision'
16079 Source='$Source'
16080 State='$State'
16081 _a='$_a'
16082 _exe='$_exe'
16083 _o='$_o'
16084 afs='$afs'
16085 alignbytes='$alignbytes'
16086 ansi2knr='$ansi2knr'
16087 aphostname='$aphostname'
16088 api_revision='$api_revision'
16089 api_subversion='$api_subversion'
16090 api_version='$api_version'
16091 api_versionstring='$api_versionstring'
16092 ar='$ar'
16093 archlib='$archlib'
16094 archlibexp='$archlibexp'
16095 archname64='$archname64'
16096 archname='$archname'
16097 archobjs='$archobjs'
16098 awk='$awk'
16099 baserev='$baserev'
16100 bash='$bash'
16101 bin='$bin'
16102 bincompat5005='$bincompat5005'
16103 binexp='$binexp'
16104 bison='$bison'
16105 byacc='$byacc'
16106 byteorder='$byteorder'
16107 c='$c'
16108 castflags='$castflags'
16109 cat='$cat'
16110 cc='$cc'
16111 cccdlflags='$cccdlflags'
16112 ccdlflags='$ccdlflags'
16113 ccflags='$ccflags'
16114 ccflags_uselargefiles='$ccflags_uselargefiles'
16115 ccname='$ccname'
16116 ccsymbols='$ccsymbols'
16117 ccversion='$ccversion'
16118 cf_by='$cf_by'
16119 cf_email='$cf_email'
16120 cf_time='$cf_time'
16121 charsize='$charsize'
16122 chgrp='$chgrp'
16123 chmod='$chmod'
16124 chown='$chown'
16125 clocktype='$clocktype'
16126 comm='$comm'
16127 compress='$compress'
16128 contains='$contains'
16129 cp='$cp'
16130 cpio='$cpio'
16131 cpp='$cpp'
16132 cpp_stuff='$cpp_stuff'
16133 cppccsymbols='$cppccsymbols'
16134 cppflags='$cppflags'
16135 cpplast='$cpplast'
16136 cppminus='$cppminus'
16137 cpprun='$cpprun'
16138 cppstdin='$cppstdin'
16139 cppsymbols='$cppsymbols'
16140 crosscompile='$crosscompile'
16141 cryptlib='$cryptlib'
16142 csh='$csh'
16143 d_Gconvert='$d_Gconvert'
16144 d_PRIEUldbl='$d_PRIEUldbl'
16145 d_PRIFUldbl='$d_PRIFUldbl'
16146 d_PRIGUldbl='$d_PRIGUldbl'
16147 d_PRIXU64='$d_PRIXU64'
16148 d_PRId64='$d_PRId64'
16149 d_PRIeldbl='$d_PRIeldbl'
16150 d_PRIfldbl='$d_PRIfldbl'
16151 d_PRIgldbl='$d_PRIgldbl'
16152 d_PRIi64='$d_PRIi64'
16153 d_PRIo64='$d_PRIo64'
16154 d_PRIu64='$d_PRIu64'
16155 d_PRIx64='$d_PRIx64'
16156 d_SCNfldbl='$d_SCNfldbl'
16157 d__fwalk='$d__fwalk'
16158 d_access='$d_access'
16159 d_accessx='$d_accessx'
16160 d_alarm='$d_alarm'
16161 d_archlib='$d_archlib'
16162 d_atolf='$d_atolf'
16163 d_atoll='$d_atoll'
16164 d_attribut='$d_attribut'
16165 d_bcmp='$d_bcmp'
16166 d_bcopy='$d_bcopy'
16167 d_bincompat5005='$d_bincompat5005'
16168 d_bsd='$d_bsd'
16169 d_bsdgetpgrp='$d_bsdgetpgrp'
16170 d_bsdsetpgrp='$d_bsdsetpgrp'
16171 d_bzero='$d_bzero'
16172 d_casti32='$d_casti32'
16173 d_castneg='$d_castneg'
16174 d_charvspr='$d_charvspr'
16175 d_chown='$d_chown'
16176 d_chroot='$d_chroot'
16177 d_chsize='$d_chsize'
16178 d_closedir='$d_closedir'
16179 d_cmsghdr_s='$d_cmsghdr_s'
16180 d_const='$d_const'
16181 d_crypt='$d_crypt'
16182 d_csh='$d_csh'
16183 d_cuserid='$d_cuserid'
16184 d_dbl_dig='$d_dbl_dig'
16185 d_difftime='$d_difftime'
16186 d_dirnamlen='$d_dirnamlen'
16187 d_dlerror='$d_dlerror'
16188 d_dlopen='$d_dlopen'
16189 d_dlsymun='$d_dlsymun'
16190 d_dosuid='$d_dosuid'
16191 d_drand48proto='$d_drand48proto'
16192 d_dup2='$d_dup2'
16193 d_eaccess='$d_eaccess'
16194 d_endgrent='$d_endgrent'
16195 d_endhent='$d_endhent'
16196 d_endnent='$d_endnent'
16197 d_endpent='$d_endpent'
16198 d_endpwent='$d_endpwent'
16199 d_endsent='$d_endsent'
16200 d_eofnblk='$d_eofnblk'
16201 d_eunice='$d_eunice'
16202 d_fchmod='$d_fchmod'
16203 d_fchown='$d_fchown'
16204 d_fcntl='$d_fcntl'
16205 d_fcntl_can_lock='$d_fcntl_can_lock'
16206 d_fd_macros='$d_fd_macros'
16207 d_fd_set='$d_fd_set'
16208 d_fds_bits='$d_fds_bits'
16209 d_fgetpos='$d_fgetpos'
16210 d_flexfnam='$d_flexfnam'
16211 d_flock='$d_flock'
16212 d_fork='$d_fork'
16213 d_fpathconf='$d_fpathconf'
16214 d_fpos64_t='$d_fpos64_t'
16215 d_frexpl='$d_frexpl'
16216 d_fs_data_s='$d_fs_data_s'
16217 d_fseeko='$d_fseeko'
16218 d_fsetpos='$d_fsetpos'
16219 d_fstatfs='$d_fstatfs'
16220 d_fstatvfs='$d_fstatvfs'
16221 d_fsync='$d_fsync'
16222 d_ftello='$d_ftello'
16223 d_ftime='$d_ftime'
16224 d_getcwd='$d_getcwd'
16225 d_getespwnam='$d_getespwnam'
16226 d_getfsstat='$d_getfsstat'
16227 d_getgrent='$d_getgrent'
16228 d_getgrps='$d_getgrps'
16229 d_gethbyaddr='$d_gethbyaddr'
16230 d_gethbyname='$d_gethbyname'
16231 d_gethent='$d_gethent'
16232 d_gethname='$d_gethname'
16233 d_gethostprotos='$d_gethostprotos'
16234 d_getitimer='$d_getitimer'
16235 d_getlogin='$d_getlogin'
16236 d_getmnt='$d_getmnt'
16237 d_getmntent='$d_getmntent'
16238 d_getnbyaddr='$d_getnbyaddr'
16239 d_getnbyname='$d_getnbyname'
16240 d_getnent='$d_getnent'
16241 d_getnetprotos='$d_getnetprotos'
16242 d_getpagsz='$d_getpagsz'
16243 d_getpbyname='$d_getpbyname'
16244 d_getpbynumber='$d_getpbynumber'
16245 d_getpent='$d_getpent'
16246 d_getpgid='$d_getpgid'
16247 d_getpgrp2='$d_getpgrp2'
16248 d_getpgrp='$d_getpgrp'
16249 d_getppid='$d_getppid'
16250 d_getprior='$d_getprior'
16251 d_getprotoprotos='$d_getprotoprotos'
16252 d_getprpwnam='$d_getprpwnam'
16253 d_getpwent='$d_getpwent'
16254 d_getsbyname='$d_getsbyname'
16255 d_getsbyport='$d_getsbyport'
16256 d_getsent='$d_getsent'
16257 d_getservprotos='$d_getservprotos'
16258 d_getspnam='$d_getspnam'
16259 d_gettimeod='$d_gettimeod'
16260 d_gnulibc='$d_gnulibc'
16261 d_grpasswd='$d_grpasswd'
16262 d_hasmntopt='$d_hasmntopt'
16263 d_htonl='$d_htonl'
16264 d_iconv='$d_iconv'
16265 d_index='$d_index'
16266 d_inetaton='$d_inetaton'
16267 d_int64_t='$d_int64_t'
16268 d_isascii='$d_isascii'
16269 d_isnan='$d_isnan'
16270 d_isnanl='$d_isnanl'
16271 d_killpg='$d_killpg'
16272 d_lchown='$d_lchown'
16273 d_ldbl_dig='$d_ldbl_dig'
16274 d_link='$d_link'
16275 d_locconv='$d_locconv'
16276 d_lockf='$d_lockf'
16277 d_longdbl='$d_longdbl'
16278 d_longlong='$d_longlong'
16279 d_lseekproto='$d_lseekproto'
16280 d_lstat='$d_lstat'
16281 d_madvise='$d_madvise'
16282 d_mblen='$d_mblen'
16283 d_mbstowcs='$d_mbstowcs'
16284 d_mbtowc='$d_mbtowc'
16285 d_memchr='$d_memchr'
16286 d_memcmp='$d_memcmp'
16287 d_memcpy='$d_memcpy'
16288 d_memmove='$d_memmove'
16289 d_memset='$d_memset'
16290 d_mkdir='$d_mkdir'
16291 d_mkdtemp='$d_mkdtemp'
16292 d_mkfifo='$d_mkfifo'
16293 d_mkstemp='$d_mkstemp'
16294 d_mkstemps='$d_mkstemps'
16295 d_mktime='$d_mktime'
16296 d_mmap='$d_mmap'
16297 d_modfl='$d_modfl'
16298 d_mprotect='$d_mprotect'
16299 d_msg='$d_msg'
16300 d_msg_ctrunc='$d_msg_ctrunc'
16301 d_msg_dontroute='$d_msg_dontroute'
16302 d_msg_oob='$d_msg_oob'
16303 d_msg_peek='$d_msg_peek'
16304 d_msg_proxy='$d_msg_proxy'
16305 d_msgctl='$d_msgctl'
16306 d_msgget='$d_msgget'
16307 d_msghdr_s='$d_msghdr_s'
16308 d_msgrcv='$d_msgrcv'
16309 d_msgsnd='$d_msgsnd'
16310 d_msync='$d_msync'
16311 d_munmap='$d_munmap'
16312 d_mymalloc='$d_mymalloc'
16313 d_nice='$d_nice'
16314 d_nv_preserves_uv='$d_nv_preserves_uv'
16315 d_nv_preserves_uv_bits='$d_nv_preserves_uv_bits'
16316 d_off64_t='$d_off64_t'
16317 d_old_pthread_create_joinable='$d_old_pthread_create_joinable'
16318 d_oldpthreads='$d_oldpthreads'
16319 d_oldsock='$d_oldsock'
16320 d_open3='$d_open3'
16321 d_pathconf='$d_pathconf'
16322 d_pause='$d_pause'
16323 d_perl_otherlibdirs='$d_perl_otherlibdirs'
16324 d_phostname='$d_phostname'
16325 d_pipe='$d_pipe'
16326 d_poll='$d_poll'
16327 d_portable='$d_portable'
16328 d_pthread_yield='$d_pthread_yield'
16329 d_pwage='$d_pwage'
16330 d_pwchange='$d_pwchange'
16331 d_pwclass='$d_pwclass'
16332 d_pwcomment='$d_pwcomment'
16333 d_pwexpire='$d_pwexpire'
16334 d_pwgecos='$d_pwgecos'
16335 d_pwpasswd='$d_pwpasswd'
16336 d_pwquota='$d_pwquota'
16337 d_qgcvt='$d_qgcvt'
16338 d_quad='$d_quad'
16339 d_readdir='$d_readdir'
16340 d_readlink='$d_readlink'
16341 d_readv='$d_readv'
16342 d_recvmsg='$d_recvmsg'
16343 d_rename='$d_rename'
16344 d_rewinddir='$d_rewinddir'
16345 d_rmdir='$d_rmdir'
16346 d_safebcpy='$d_safebcpy'
16347 d_safemcpy='$d_safemcpy'
16348 d_sanemcmp='$d_sanemcmp'
16349 d_sbrkproto='$d_sbrkproto'
16350 d_sched_yield='$d_sched_yield'
16351 d_scm_rights='$d_scm_rights'
16352 d_seekdir='$d_seekdir'
16353 d_select='$d_select'
16354 d_sem='$d_sem'
16355 d_semctl='$d_semctl'
16356 d_semctl_semid_ds='$d_semctl_semid_ds'
16357 d_semctl_semun='$d_semctl_semun'
16358 d_semget='$d_semget'
16359 d_semop='$d_semop'
16360 d_sendmsg='$d_sendmsg'
16361 d_setegid='$d_setegid'
16362 d_seteuid='$d_seteuid'
16363 d_setgrent='$d_setgrent'
16364 d_setgrps='$d_setgrps'
16365 d_sethent='$d_sethent'
16366 d_setitimer='$d_setitimer'
16367 d_setlinebuf='$d_setlinebuf'
16368 d_setlocale='$d_setlocale'
16369 d_setnent='$d_setnent'
16370 d_setpent='$d_setpent'
16371 d_setpgid='$d_setpgid'
16372 d_setpgrp2='$d_setpgrp2'
16373 d_setpgrp='$d_setpgrp'
16374 d_setprior='$d_setprior'
16375 d_setproctitle='$d_setproctitle'
16376 d_setpwent='$d_setpwent'
16377 d_setregid='$d_setregid'
16378 d_setresgid='$d_setresgid'
16379 d_setresuid='$d_setresuid'
16380 d_setreuid='$d_setreuid'
16381 d_setrgid='$d_setrgid'
16382 d_setruid='$d_setruid'
16383 d_setsent='$d_setsent'
16384 d_setsid='$d_setsid'
16385 d_setvbuf='$d_setvbuf'
16386 d_sfio='$d_sfio'
16387 d_shm='$d_shm'
16388 d_shmat='$d_shmat'
16389 d_shmatprototype='$d_shmatprototype'
16390 d_shmctl='$d_shmctl'
16391 d_shmdt='$d_shmdt'
16392 d_shmget='$d_shmget'
16393 d_sigaction='$d_sigaction'
16394 d_sigprocmask='$d_sigprocmask'
16395 d_sigsetjmp='$d_sigsetjmp'
16396 d_sockatmark='$d_sockatmark'
16397 d_socket='$d_socket'
16398 d_socklen_t='$d_socklen_t'
16399 d_sockpair='$d_sockpair'
16400 d_socks5_init='$d_socks5_init'
16401 d_sqrtl='$d_sqrtl'
16402 d_statblks='$d_statblks'
16403 d_statfs_f_flags='$d_statfs_f_flags'
16404 d_statfs_s='$d_statfs_s'
16405 d_statvfs='$d_statvfs'
16406 d_stdio_cnt_lval='$d_stdio_cnt_lval'
16407 d_stdio_ptr_lval='$d_stdio_ptr_lval'
16408 d_stdio_ptr_lval_nochange_cnt='$d_stdio_ptr_lval_nochange_cnt'
16409 d_stdio_ptr_lval_sets_cnt='$d_stdio_ptr_lval_sets_cnt'
16410 d_stdio_stream_array='$d_stdio_stream_array'
16411 d_stdiobase='$d_stdiobase'
16412 d_stdstdio='$d_stdstdio'
16413 d_strchr='$d_strchr'
16414 d_strcoll='$d_strcoll'
16415 d_strctcpy='$d_strctcpy'
16416 d_strerrm='$d_strerrm'
16417 d_strerror='$d_strerror'
16418 d_strftime='$d_strftime'
16419 d_strtod='$d_strtod'
16420 d_strtol='$d_strtol'
16421 d_strtold='$d_strtold'
16422 d_strtoll='$d_strtoll'
16423 d_strtoq='$d_strtoq'
16424 d_strtoul='$d_strtoul'
16425 d_strtoull='$d_strtoull'
16426 d_strtouq='$d_strtouq'
16427 d_strxfrm='$d_strxfrm'
16428 d_suidsafe='$d_suidsafe'
16429 d_symlink='$d_symlink'
16430 d_syscall='$d_syscall'
16431 d_sysconf='$d_sysconf'
16432 d_sysernlst='$d_sysernlst'
16433 d_syserrlst='$d_syserrlst'
16434 d_system='$d_system'
16435 d_tcgetpgrp='$d_tcgetpgrp'
16436 d_tcsetpgrp='$d_tcsetpgrp'
16437 d_telldir='$d_telldir'
16438 d_telldirproto='$d_telldirproto'
16439 d_time='$d_time'
16440 d_times='$d_times'
16441 d_truncate='$d_truncate'
16442 d_tzname='$d_tzname'
16443 d_u32align='$d_u32align'
16444 d_ualarm='$d_ualarm'
16445 d_umask='$d_umask'
16446 d_uname='$d_uname'
16447 d_union_semun='$d_union_semun'
16448 d_usleep='$d_usleep'
16449 d_ustat='$d_ustat'
16450 d_vendorarch='$d_vendorarch'
16451 d_vendorbin='$d_vendorbin'
16452 d_vendorlib='$d_vendorlib'
16453 d_vfork='$d_vfork'
16454 d_void_closedir='$d_void_closedir'
16455 d_voidsig='$d_voidsig'
16456 d_voidtty='$d_voidtty'
16457 d_volatile='$d_volatile'
16458 d_vprintf='$d_vprintf'
16459 d_wait4='$d_wait4'
16460 d_waitpid='$d_waitpid'
16461 d_wcstombs='$d_wcstombs'
16462 d_wctomb='$d_wctomb'
16463 d_writev='$d_writev'
16464 d_xenix='$d_xenix'
16465 date='$date'
16466 db_hashtype='$db_hashtype'
16467 db_prefixtype='$db_prefixtype'
16468 defvoidused='$defvoidused'
16469 direntrytype='$direntrytype'
16470 dlext='$dlext'
16471 dlsrc='$dlsrc'
16472 doublesize='$doublesize'
16473 drand01='$drand01'
16474 dynamic_ext='$dynamic_ext'
16475 eagain='$eagain'
16476 ebcdic='$ebcdic'
16477 echo='$echo'
16478 egrep='$egrep'
16479 emacs='$emacs'
16480 eunicefix='$eunicefix'
16481 exe_ext='$exe_ext'
16482 expr='$expr'
16483 extensions='$extensions'
16484 fflushNULL='$fflushNULL'
16485 fflushall='$fflushall'
16486 find='$find'
16487 firstmakefile='$firstmakefile'
16488 flex='$flex'
16489 fpossize='$fpossize'
16490 fpostype='$fpostype'
16491 freetype='$freetype'
16492 full_ar='$full_ar'
16493 full_csh='$full_csh'
16494 full_sed='$full_sed'
16495 gccosandvers='$gccosandvers'
16496 gccversion='$gccversion'
16497 gidformat='$gidformat'
16498 gidsign='$gidsign'
16499 gidsize='$gidsize'
16500 gidtype='$gidtype'
16501 glibpth='$glibpth'
16502 grep='$grep'
16503 groupcat='$groupcat'
16504 groupstype='$groupstype'
16505 gzip='$gzip'
16506 h_fcntl='$h_fcntl'
16507 h_sysfile='$h_sysfile'
16508 hint='$hint'
16509 hostcat='$hostcat'
16510 i16size='$i16size'
16511 i16type='$i16type'
16512 i32size='$i32size'
16513 i32type='$i32type'
16514 i64size='$i64size'
16515 i64type='$i64type'
16516 i8size='$i8size'
16517 i8type='$i8type'
16518 i_arpainet='$i_arpainet'
16519 i_bsdioctl='$i_bsdioctl'
16520 i_db='$i_db'
16521 i_dbm='$i_dbm'
16522 i_dirent='$i_dirent'
16523 i_dld='$i_dld'
16524 i_dlfcn='$i_dlfcn'
16525 i_fcntl='$i_fcntl'
16526 i_float='$i_float'
16527 i_gdbm='$i_gdbm'
16528 i_grp='$i_grp'
16529 i_iconv='$i_iconv'
16530 i_ieeefp='$i_ieeefp'
16531 i_inttypes='$i_inttypes'
16532 i_libutil='$i_libutil'
16533 i_limits='$i_limits'
16534 i_locale='$i_locale'
16535 i_machcthr='$i_machcthr'
16536 i_malloc='$i_malloc'
16537 i_math='$i_math'
16538 i_memory='$i_memory'
16539 i_mntent='$i_mntent'
16540 i_ndbm='$i_ndbm'
16541 i_netdb='$i_netdb'
16542 i_neterrno='$i_neterrno'
16543 i_netinettcp='$i_netinettcp'
16544 i_niin='$i_niin'
16545 i_poll='$i_poll'
16546 i_prot='$i_prot'
16547 i_pthread='$i_pthread'
16548 i_pwd='$i_pwd'
16549 i_rpcsvcdbm='$i_rpcsvcdbm'
16550 i_sfio='$i_sfio'
16551 i_sgtty='$i_sgtty'
16552 i_shadow='$i_shadow'
16553 i_socks='$i_socks'
16554 i_stdarg='$i_stdarg'
16555 i_stddef='$i_stddef'
16556 i_stdlib='$i_stdlib'
16557 i_string='$i_string'
16558 i_sunmath='$i_sunmath'
16559 i_sysaccess='$i_sysaccess'
16560 i_sysdir='$i_sysdir'
16561 i_sysfile='$i_sysfile'
16562 i_sysfilio='$i_sysfilio'
16563 i_sysin='$i_sysin'
16564 i_sysioctl='$i_sysioctl'
16565 i_syslog='$i_syslog'
16566 i_sysmman='$i_sysmman'
16567 i_sysmode='$i_sysmode'
16568 i_sysmount='$i_sysmount'
16569 i_sysndir='$i_sysndir'
16570 i_sysparam='$i_sysparam'
16571 i_sysresrc='$i_sysresrc'
16572 i_syssecrt='$i_syssecrt'
16573 i_sysselct='$i_sysselct'
16574 i_syssockio='$i_syssockio'
16575 i_sysstat='$i_sysstat'
16576 i_sysstatfs='$i_sysstatfs'
16577 i_sysstatvfs='$i_sysstatvfs'
16578 i_systime='$i_systime'
16579 i_systimek='$i_systimek'
16580 i_systimes='$i_systimes'
16581 i_systypes='$i_systypes'
16582 i_sysuio='$i_sysuio'
16583 i_sysun='$i_sysun'
16584 i_sysutsname='$i_sysutsname'
16585 i_sysvfs='$i_sysvfs'
16586 i_syswait='$i_syswait'
16587 i_termio='$i_termio'
16588 i_termios='$i_termios'
16589 i_time='$i_time'
16590 i_unistd='$i_unistd'
16591 i_ustat='$i_ustat'
16592 i_utime='$i_utime'
16593 i_values='$i_values'
16594 i_varargs='$i_varargs'
16595 i_varhdr='$i_varhdr'
16596 i_vfork='$i_vfork'
16597 ignore_versioned_solibs='$ignore_versioned_solibs'
16598 inc_version_list='$inc_version_list'
16599 inc_version_list_init='$inc_version_list_init'
16600 incpath='$incpath'
16601 inews='$inews'
16602 installarchlib='$installarchlib'
16603 installbin='$installbin'
16604 installman1dir='$installman1dir'
16605 installman3dir='$installman3dir'
16606 installprefix='$installprefix'
16607 installprefixexp='$installprefixexp'
16608 installprivlib='$installprivlib'
16609 installscript='$installscript'
16610 installsitearch='$installsitearch'
16611 installsitebin='$installsitebin'
16612 installsitelib='$installsitelib'
16613 installstyle='$installstyle'
16614 installusrbinperl='$installusrbinperl'
16615 installvendorarch='$installvendorarch'
16616 installvendorbin='$installvendorbin'
16617 installvendorlib='$installvendorlib'
16618 intsize='$intsize'
16619 issymlink='$issymlink'
16620 ivdformat='$ivdformat'
16621 ivsize='$ivsize'
16622 ivtype='$ivtype'
16623 known_extensions='$known_extensions'
16624 ksh='$ksh'
16625 ld='$ld'
16626 lddlflags='$lddlflags'
16627 ldflags='$ldflags'
16628 ldflags_uselargefiles='$ldflags_uselargefiles'
16629 ldlibpthname='$ldlibpthname'
16630 less='$less'
16631 lib_ext='$lib_ext'
16632 libc='$libc'
16633 libperl='$libperl'
16634 libpth='$libpth'
16635 libs='$libs'
16636 libsdirs='$libsdirs'
16637 libsfiles='$libsfiles'
16638 libsfound='$libsfound'
16639 libspath='$libspath'
16640 libswanted='$libswanted'
16641 libswanted_uselargefiles='$libswanted_uselargefiles'
16642 line='$line'
16643 lint='$lint'
16644 lkflags='$lkflags'
16645 ln='$ln'
16646 lns='$lns'
16647 locincpth='$locincpth'
16648 loclibpth='$loclibpth'
16649 longdblsize='$longdblsize'
16650 longlongsize='$longlongsize'
16651 longsize='$longsize'
16652 lp='$lp'
16653 lpr='$lpr'
16654 ls='$ls'
16655 lseeksize='$lseeksize'
16656 lseektype='$lseektype'
16657 mail='$mail'
16658 mailx='$mailx'
16659 make='$make'
16660 make_set_make='$make_set_make'
16661 mallocobj='$mallocobj'
16662 mallocsrc='$mallocsrc'
16663 malloctype='$malloctype'
16664 man1dir='$man1dir'
16665 man1direxp='$man1direxp'
16666 man1ext='$man1ext'
16667 man3dir='$man3dir'
16668 man3direxp='$man3direxp'
16669 man3ext='$man3ext'
16670 mips_type='$mips_type'
16671 mkdir='$mkdir'
16672 mmaptype='$mmaptype'
16673 modetype='$modetype'
16674 more='$more'
16675 multiarch='$multiarch'
16676 mv='$mv'
16677 myarchname='$myarchname'
16678 mydomain='$mydomain'
16679 myhostname='$myhostname'
16680 myuname='$myuname'
16681 n='$n'
16682 need_va_copy='$need_va_copy'
16683 netdb_hlen_type='$netdb_hlen_type'
16684 netdb_host_type='$netdb_host_type'
16685 netdb_name_type='$netdb_name_type'
16686 netdb_net_type='$netdb_net_type'
16687 nm='$nm'
16688 nm_opt='$nm_opt'
16689 nm_so_opt='$nm_so_opt'
16690 nonxs_ext='$nonxs_ext'
16691 nroff='$nroff'
16692 nvEUformat='$nvEUformat'
16693 nvFUformat='$nvFUformat'
16694 nvGUformat='$nvGUformat'
16695 nveformat='$nveformat'
16696 nvfformat='$nvfformat'
16697 nvgformat='$nvgformat'
16698 nvsize='$nvsize'
16699 nvtype='$nvtype'
16700 o_nonblock='$o_nonblock'
16701 obj_ext='$obj_ext'
16702 old_pthread_create_joinable='$old_pthread_create_joinable'
16703 optimize='$optimize'
16704 orderlib='$orderlib'
16705 osname='$osname'
16706 osvers='$osvers'
16707 otherlibdirs='$otherlibdirs'
16708 package='$package'
16709 pager='$pager'
16710 passcat='$passcat'
16711 patchlevel='$patchlevel'
16712 path_sep='$path_sep'
16713 perl5='$perl5'
16714 perl='$perl'
16715 perladmin='$perladmin'
16716 perllibs='$perllibs'
16717 perlpath='$perlpath'
16718 pg='$pg'
16719 phostname='$phostname'
16720 pidtype='$pidtype'
16721 plibpth='$plibpth'
16722 pm_apiversion='$pm_apiversion'
16723 pmake='$pmake'
16724 pr='$pr'
16725 prefix='$prefix'
16726 prefixexp='$prefixexp'
16727 privlib='$privlib'
16728 privlibexp='$privlibexp'
16729 prototype='$prototype'
16730 ptrsize='$ptrsize'
16731 quadkind='$quadkind'
16732 quadtype='$quadtype'
16733 randbits='$randbits'
16734 randfunc='$randfunc'
16735 randseedtype='$randseedtype'
16736 ranlib='$ranlib'
16737 rd_nodata='$rd_nodata'
16738 revision='$revision'
16739 rm='$rm'
16740 rmail='$rmail'
16741 runnm='$runnm'
16742 sPRIEUldbl='$sPRIEUldbl'
16743 sPRIFUldbl='$sPRIFUldbl'
16744 sPRIGUldbl='$sPRIGUldbl'
16745 sPRIXU64='$sPRIXU64'
16746 sPRId64='$sPRId64'
16747 sPRIeldbl='$sPRIeldbl'
16748 sPRIfldbl='$sPRIfldbl'
16749 sPRIgldbl='$sPRIgldbl'
16750 sPRIi64='$sPRIi64'
16751 sPRIo64='$sPRIo64'
16752 sPRIu64='$sPRIu64'
16753 sPRIx64='$sPRIx64'
16754 sSCNfldbl='$sSCNfldbl'
16755 sched_yield='$sched_yield'
16756 scriptdir='$scriptdir'
16757 scriptdirexp='$scriptdirexp'
16758 sed='$sed'
16759 seedfunc='$seedfunc'
16760 selectminbits='$selectminbits'
16761 selecttype='$selecttype'
16762 sendmail='$sendmail'
16763 sh='$sh'
16764 shar='$shar'
16765 sharpbang='$sharpbang'
16766 shmattype='$shmattype'
16767 shortsize='$shortsize'
16768 shrpenv='$shrpenv'
16769 shsharp='$shsharp'
16770 sig_count='$sig_count'
16771 sig_name='$sig_name'
16772 sig_name_init='$sig_name_init'
16773 sig_num='$sig_num'
16774 sig_num_init='$sig_num_init'
16775 sig_size='$sig_size'
16776 signal_t='$signal_t'
16777 sitearch='$sitearch'
16778 sitearchexp='$sitearchexp'
16779 sitebin='$sitebin'
16780 sitebinexp='$sitebinexp'
16781 sitelib='$sitelib'
16782 sitelib_stem='$sitelib_stem'
16783 sitelibexp='$sitelibexp'
16784 siteprefix='$siteprefix'
16785 siteprefixexp='$siteprefixexp'
16786 sizesize='$sizesize'
16787 sizetype='$sizetype'
16788 sleep='$sleep'
16789 smail='$smail'
16790 so='$so'
16791 sockethdr='$sockethdr'
16792 socketlib='$socketlib'
16793 socksizetype='$socksizetype'
16794 sort='$sort'
16795 spackage='$spackage'
16796 spitshell='$spitshell'
16797 src='$src'
16798 ssizetype='$ssizetype'
16799 startperl='$startperl'
16800 startsh='$startsh'
16801 static_ext='$static_ext'
16802 stdchar='$stdchar'
16803 stdio_base='$stdio_base'
16804 stdio_bufsiz='$stdio_bufsiz'
16805 stdio_cnt='$stdio_cnt'
16806 stdio_filbuf='$stdio_filbuf'
16807 stdio_ptr='$stdio_ptr'
16808 stdio_stream_array='$stdio_stream_array'
16809 strings='$strings'
16810 submit='$submit'
16811 subversion='$subversion'
16812 sysman='$sysman'
16813 tail='$tail'
16814 tar='$tar'
16815 tbl='$tbl'
16816 tee='$tee'
16817 test='$test'
16818 timeincl='$timeincl'
16819 timetype='$timetype'
16820 touch='$touch'
16821 tr='$tr'
16822 trnl='$trnl'
16823 troff='$troff'
16824 u16size='$u16size'
16825 u16type='$u16type'
16826 u32size='$u32size'
16827 u32type='$u32type'
16828 u64size='$u64size'
16829 u64type='$u64type'
16830 u8size='$u8size'
16831 u8type='$u8type'
16832 uidformat='$uidformat'
16833 uidsign='$uidsign'
16834 uidsize='$uidsize'
16835 uidtype='$uidtype'
16836 uname='$uname'
16837 uniq='$uniq'
16838 uquadtype='$uquadtype'
16839 use5005threads='$use5005threads'
16840 use64bitall='$use64bitall'
16841 use64bitint='$use64bitint'
16842 usedl='$usedl'
16843 useithreads='$useithreads'
16844 uselargefiles='$uselargefiles'
16845 uselongdouble='$uselongdouble'
16846 usemorebits='$usemorebits'
16847 usemultiplicity='$usemultiplicity'
16848 usemymalloc='$usemymalloc'
16849 usenm='$usenm'
16850 useopcode='$useopcode'
16851 useperlio='$useperlio'
16852 useposix='$useposix'
16853 usesfio='$usesfio'
16854 useshrplib='$useshrplib'
16855 usesocks='$usesocks'
16856 usethreads='$usethreads'
16857 usevendorprefix='$usevendorprefix'
16858 usevfork='$usevfork'
16859 usrinc='$usrinc'
16860 uuname='$uuname'
16861 uvXUformat='$uvXUformat'
16862 uvoformat='$uvoformat'
16863 uvsize='$uvsize'
16864 uvtype='$uvtype'
16865 uvuformat='$uvuformat'
16866 uvxformat='$uvxformat'
16867 vendorarch='$vendorarch'
16868 vendorarchexp='$vendorarchexp'
16869 vendorbin='$vendorbin'
16870 vendorbinexp='$vendorbinexp'
16871 vendorlib='$vendorlib'
16872 vendorlib_stem='$vendorlib_stem'
16873 vendorlibexp='$vendorlibexp'
16874 vendorprefix='$vendorprefix'
16875 vendorprefixexp='$vendorprefixexp'
16876 version='$version'
16877 versiononly='$versiononly'
16878 vi='$vi'
16879 voidflags='$voidflags'
16880 xlibpth='$xlibpth'
16881 xs_apiversion='$xs_apiversion'
16882 yacc='$yacc'
16883 yaccflags='$yaccflags'
16884 zcat='$zcat'
16885 zip='$zip'
16886 EOT
16887
16888 : Add in command line options if available
16889 $test -f UU/cmdline.opt && $cat UU/cmdline.opt >> config.sh
16890
16891 : add special variables
16892 $test -f $src/patchlevel.h && \
16893 awk '/^#define[         ]+PERL_/ {printf "%s=%s\n",$2,$3}' $src/patchlevel.h >>config.sh
16894 echo "CONFIGDOTSH=true" >>config.sh
16895
16896 : propagate old symbols
16897 if $test -f UU/config.sh; then
16898         <UU/config.sh $sort | $uniq >UU/oldconfig.sh
16899         sed -n 's/^\([a-zA-Z_0-9]*\)=.*/\1/p' config.sh config.sh UU/oldconfig.sh |\
16900         $sort | $uniq -u >UU/oldsyms
16901         set X `cat UU/oldsyms`
16902         shift
16903         case $# in
16904         0) ;;
16905         *)
16906                 cat <<EOM
16907 Hmm...You had some extra variables I don't know about...I'll try to keep 'em...
16908 EOM
16909                 echo "# Variables propagated from previous config.sh file." >>config.sh
16910                 for sym in `cat UU/oldsyms`; do
16911                         echo "    Propagating $hint variable "'$'"$sym..."
16912                         eval 'tmp="$'"${sym}"'"'
16913                         echo "$tmp" | \
16914                                 sed -e "s/'/'\"'\"'/g" -e "s/^/$sym='/" -e "s/$/'/" >>config.sh
16915                 done
16916                 ;;
16917         esac
16918 fi
16919
16920 : Finish up by extracting the .SH files
16921 case "$alldone" in
16922 exit)
16923         $rm -rf UU
16924         echo "Done."
16925         exit 0
16926         ;;
16927 cont)
16928         ;;
16929 '')
16930         dflt=''
16931         nostick=true
16932         $cat <<EOM
16933
16934 If you'd like to make any changes to the config.sh file before I begin
16935 to configure things, do it as a shell escape now (e.g. !vi config.sh).
16936
16937 EOM
16938         rp="Press return or use a shell escape to edit config.sh:"
16939         . UU/myread
16940         nostick=''
16941         case "$ans" in
16942         '') ;;
16943         *) : in case they cannot read
16944                 sh 1>&4 -c "$ans";;
16945         esac
16946         ;;
16947 esac
16948
16949 : if this fails, just run all the .SH files by hand
16950 . ./config.sh
16951
16952 echo " "
16953 exec 1>&4
16954 . ./UU/extract
16955
16956 if $contains '^depend:' [Mm]akefile >/dev/null 2>&1; then
16957         dflt=y
16958         case "$silent" in
16959         true) ;;
16960         *)
16961                 $cat <<EOM
16962
16963 Now you need to generate make dependencies by running "$make depend".
16964 You might prefer to run it in background: "$make depend > makedepend.out &"
16965 It can take a while, so you might not want to run it right now.
16966
16967 EOM
16968                 ;;
16969         esac
16970         rp="Run $make depend now?"
16971         . UU/myread
16972         case "$ans" in
16973         y*)
16974                 $make depend && echo "Now you must run '$make'."
16975                 ;;
16976         *)
16977                 echo "You must run '$make depend' then '$make'."
16978                 ;;
16979         esac
16980 elif test -f [Mm]akefile; then
16981         echo " "
16982         echo "Now you must run a $make."
16983 else
16984         echo "Done."
16985 fi
16986
16987 if $test -f Policy.sh; then
16988     $cat <<EOM
16989
16990 If you compile $package on a different machine or from a different object
16991 directory, copy the Policy.sh file from this object directory to the
16992 new one before you run Configure -- this will help you with most of
16993 the policy defaults.
16994
16995 EOM
16996 fi
16997 if $test -f config.msg; then
16998     echo "Hmm.  I also noted the following information while running:"
16999     echo " "
17000     $cat config.msg >&4
17001     $rm -f config.msg
17002 fi
17003 $rm -f kit*isdone ark*isdone
17004 $rm -rf UU
17005
17006 : End of Configure
17007