Document known failures.
[p5sagit/p5-mst-13.2.git] / Configure
1 #! /bin/sh
2 #
3 # If these # comments don't work, trim them. Don't worry about any other
4 # shell scripts, Configure will trim # comments from them for you.
5 #
6 # (If you are trying to port this package to a machine without sh,
7 # I would suggest you have a look at the prototypical config_h.SH file
8 # and edit it to reflect your system. Some packages may include samples
9 # of config.h for certain machines, so you might look for one of those.)
10 #
11 # Yes, you may rip this off to use in other distribution packages. This
12 # script belongs to the public domain and cannot be copyrighted.
13 #
14 # (Note: this Configure script was generated automatically. Rather than
15 # working with this copy of Configure, you may wish to get metaconfig.
16 # The dist-3.0 package (which contains metaconfig) was posted in
17 # comp.sources.misc and is available on CPAN under authors/id/RAM so
18 # you may fetch it yourself from your nearest archive site.)
19 #
20
21 # $Id: Head.U,v 3.0.1.9 1997/02/28 15:02:09 ram Exp $
22 #
23 # Generated on Thu Aug 31 17:56:37 EET DST 2000 [metaconfig 3.0 PL70]
24 # (with additional metaconfig patches by perlbug@perl.org)
25
26 cat >/tmp/c1$$ <<EOF
27 ARGGGHHHH!!!!!
28
29 SCO csh still thinks true is false.  Write to SCO today and tell them that next
30 year Configure ought to "rm /bin/csh" unless they fix their blasted shell. :-)
31
32 (Actually, Configure ought to just patch csh in place.  Hmm.  Hmmmmm.  All
33 we'd have to do is go in and swap the && and || tokens, wherever they are.)
34
35 [End of diatribe. We now return you to your regularly scheduled programming...]
36 EOF
37 cat >/tmp/c2$$ <<EOF
38
39 OOPS!  You naughty creature!  You didn't run Configure with sh!
40 I will attempt to remedy the situation by running sh for you...
41 EOF
42
43 true || cat /tmp/c1$$ /tmp/c2$$
44 true || exec sh $0 $argv:q
45
46 (exit $?0) || cat /tmp/c2$$
47 (exit $?0) || exec sh $0 $argv:q
48 rm -f /tmp/c1$$ /tmp/c2$$
49
50 : compute my invocation name
51 me=$0
52 case "$0" in
53 */*)
54         me=`echo $0 | sed -e 's!.*/\(.*\)!\1!' 2>/dev/null`
55         test "$me" || me=$0
56         ;;
57 esac
58
59 : Proper separator for the PATH environment variable
60 p_=:
61 : On OS/2 this directory should exist if this is not floppy only system :-]
62 if test -d c:/. ; then
63     if test -n "$OS2_SHELL"; then
64                 p_=\;
65                 PATH=`cmd /c "echo %PATH%" | tr '\\\\' / `
66                 OS2_SHELL=`cmd /c "echo %OS2_SHELL%" | tr '\\\\' / | tr '[A-Z]' '[a-z]'`
67         elif test -n "$DJGPP"; then
68                 p_=\;
69         fi
70 fi
71
72 : Proper PATH setting
73 paths='/bin /usr/bin /usr/local/bin /usr/ucb /usr/local /usr/lbin'
74 paths="$paths /opt/bin /opt/local/bin /opt/local /opt/lbin"
75 paths="$paths /usr/5bin /etc /usr/gnu/bin /usr/new /usr/new/bin /usr/nbin"
76 paths="$paths /opt/gnu/bin /opt/new /opt/new/bin /opt/nbin"
77 paths="$paths /sys5.3/bin /sys5.3/usr/bin /bsd4.3/bin /bsd4.3/usr/ucb"
78 paths="$paths /bsd4.3/usr/bin /usr/bsd /bsd43/bin /usr/ccs/bin"
79 paths="$paths /etc /usr/lib /usr/ucblib /lib /usr/ccs/lib"
80 paths="$paths /sbin /usr/sbin /usr/libexec"
81
82 for p in $paths
83 do
84         case "$p_$PATH$p_" in
85         *$p_$p$p_*) ;;
86         *) test -d $p && PATH=$PATH$p_$p ;;
87         esac
88 done
89
90 PATH=.$p_$PATH
91 export PATH
92
93 : shall we be using ksh?
94 inksh=''
95 needksh=''
96 avoidksh=''
97 newsh=/bin/ksh
98 changesh=''
99 if (PATH=.; alias -x) >/dev/null 2>&1; then
100                 inksh=true
101 fi
102 if test -f /hp-ux -a -f /bin/ksh; then
103         needksh='to avoid sh bug in "here document" expansion'
104 fi
105 if test -d /usr/lpp -a -f /usr/bin/bsh -a -f /usr/bin/uname; then
106         if test X`/usr/bin/uname -v` = X4; then
107                 avoidksh="to avoid AIX 4's /bin/sh"
108                 newsh=/usr/bin/bsh
109         fi
110 fi
111 if test -f /osf_boot -a -f /usr/sbin/setld; then
112         if test X`/usr/bin/uname -s` = XOSF1; then
113                 avoidksh="to avoid Digital UNIX' ksh"
114                 newsh=/bin/sh
115                 unset BIN_SH # if this is 'xpg4' sh will start up ksh
116         fi
117 fi
118 case "$inksh/$needksh" in
119 /[a-z]*)
120                 ENV=''
121                 changesh=true
122                 reason="$needksh"
123         ;;
124 esac
125 case "$inksh/$avoidksh" in
126 true/[a-z]*)
127         changesh=true
128         reason="$avoidksh"
129         ;;
130 esac
131 case "$inksh/$needksh-$avoidksh-" in
132 true/--)
133                 cat <<EOM
134 (I see you are using the Korn shell.  Some ksh's blow up on $me,
135 mainly on older exotic systems.  If yours does, try the Bourne shell instead.)
136 EOM
137         ;;
138 esac
139 case "$changesh" in
140 true)
141         echo "(Feeding myself to $newsh $reason.)"
142         case "$0" in
143         Configure|*/Configure) exec $newsh $0 "$@";;
144         *) exec $newsh Configure "$@";;
145         esac
146         ;;
147 esac
148
149 : if needed set CDPATH to a harmless value that is not chatty
150 : avoid bash 2.02 problems with empty CDPATH.
151 case "$CDPATH" in
152 '')     ;;
153 *)      case "$SHELL" in
154         *bash*) CDPATH='.' ;;
155         *)              CDPATH='' ;;
156         esac
157         ;;
158 esac
159 : Configure runs within the UU subdirectory
160 test -d UU || mkdir UU
161 cd UU && rm -f ./*
162
163 ccsymbols=''
164 cppccsymbols=''
165 cppsymbols=''
166 dynamic_ext=''
167 extensions=''
168 known_extensions=''
169 nonxs_ext=''
170 static_ext=''
171 useopcode=''
172 useposix=''
173 d_bsd=''
174 d_eunice=''
175 d_xenix=''
176 eunicefix=''
177 Mcc=''
178 ar=''
179 awk=''
180 bash=''
181 bison=''
182 byacc=''
183 cat=''
184 chgrp=''
185 chmod=''
186 chown=''
187 comm=''
188 compress=''
189 cp=''
190 cpio=''
191 cpp=''
192 csh=''
193 date=''
194 echo=''
195 egrep=''
196 emacs=''
197 expr=''
198 find=''
199 flex=''
200 grep=''
201 gzip=''
202 inews=''
203 ksh=''
204 less=''
205 line=''
206 lint=''
207 ln=''
208 lp=''
209 lpr=''
210 ls=''
211 mail=''
212 mailx=''
213 make=''
214 mkdir=''
215 more=''
216 mv=''
217 nm=''
218 nroff=''
219 perl=''
220 pg=''
221 pmake=''
222 pr=''
223 rm=''
224 rmail=''
225 sed=''
226 sendmail=''
227 shar=''
228 sleep=''
229 smail=''
230 sort=''
231 submit=''
232 tail=''
233 tar=''
234 tbl=''
235 tee=''
236 test=''
237 touch=''
238 tr=''
239 troff=''
240 uname=''
241 uniq=''
242 uuname=''
243 vi=''
244 zcat=''
245 zip=''
246 full_ar=''
247 full_sed=''
248 libswanted=''
249 hint=''
250 myuname=''
251 osname=''
252 osvers=''
253 Author=''
254 Date=''
255 Header=''
256 Id=''
257 Locker=''
258 Log=''
259 RCSfile=''
260 Revision=''
261 Source=''
262 State=''
263 _a=''
264 _exe=''
265 _o=''
266 archobjs=''
267 exe_ext=''
268 firstmakefile=''
269 lib_ext=''
270 obj_ext=''
271 path_sep=''
272 afs=''
273 alignbytes=''
274 ansi2knr=''
275 archlib=''
276 archlibexp=''
277 d_archlib=''
278 installarchlib=''
279 archname=''
280 myarchname=''
281 d_atolf=''
282 d_atoll=''
283 baserev=''
284 bin=''
285 binexp=''
286 installbin=''
287 bincompat5005=''
288 d_bincompat5005=''
289 byteorder=''
290 cc=''
291 ccflags=''
292 cppflags=''
293 ldflags=''
294 lkflags=''
295 locincpth=''
296 optimize=''
297 cf_email=''
298 cf_by=''
299 cf_time=''
300 charsize=''
301 contains=''
302 cpp_stuff=''
303 cpplast=''
304 cppminus=''
305 cpprun=''
306 cppstdin=''
307 crosscompile=''
308 d_access=''
309 d_accessx=''
310 d_alarm=''
311 d_attribut=''
312 d_bcmp=''
313 d_bcopy=''
314 d_bzero=''
315 d_casti32=''
316 castflags=''
317 d_castneg=''
318 d_chown=''
319 d_chroot=''
320 d_chsize=''
321 d_closedir=''
322 d_void_closedir=''
323 d_const=''
324 cryptlib=''
325 d_crypt=''
326 d_csh=''
327 full_csh=''
328 d_cuserid=''
329 d_dbl_dig=''
330 d_difftime=''
331 d_dlerror=''
332 d_dlopen=''
333 d_dlsymun=''
334 d_dosuid=''
335 d_suidsafe=''
336 d_drand48proto=''
337 d_dup2=''
338 d_eaccess=''
339 d_endgrent=''
340 d_endhent=''
341 d_endnent=''
342 d_endpent=''
343 d_endpwent=''
344 d_endsent=''
345 d_fchmod=''
346 d_fchown=''
347 d_fcntl=''
348 d_fd_macros=''
349 d_fd_set=''
350 d_fds_bits=''
351 d_fgetpos=''
352 d_flexfnam=''
353 d_flock=''
354 d_fork=''
355 d_fpos64_t=''
356 d_frexpl=''
357 d_fs_data_s=''
358 d_fseeko=''
359 d_fsetpos=''
360 d_fstatfs=''
361 d_ftello=''
362 d_ftime=''
363 d_gettimeod=''
364 d_Gconvert=''
365 d_getcwd=''
366 d_getespwnam=''
367 d_getfsstat=''
368 d_getgrent=''
369 d_getgrps=''
370 d_gethbyaddr=''
371 d_gethbyname=''
372 d_gethent=''
373 aphostname=''
374 d_gethname=''
375 d_phostname=''
376 d_uname=''
377 d_gethostprotos=''
378 d_getlogin=''
379 d_getmnt=''
380 d_getmntent=''
381 d_getnbyaddr=''
382 d_getnbyname=''
383 d_getnent=''
384 d_getnetprotos=''
385 d_getpent=''
386 d_getpgid=''
387 d_getpgrp2=''
388 d_bsdgetpgrp=''
389 d_getpgrp=''
390 d_getppid=''
391 d_getprior=''
392 d_getpbyname=''
393 d_getpbynumber=''
394 d_getprotoprotos=''
395 d_getprpwnam=''
396 d_getpwent=''
397 d_getsent=''
398 d_getservprotos=''
399 d_getspnam=''
400 d_getsbyname=''
401 d_getsbyport=''
402 d_gnulibc=''
403 d_hasmntopt=''
404 d_htonl=''
405 d_iconv=''
406 d_inetaton=''
407 d_int64_t=''
408 d_isascii=''
409 d_isnan=''
410 d_isnanl=''
411 d_killpg=''
412 d_lchown=''
413 d_ldbl_dig=''
414 d_link=''
415 d_locconv=''
416 d_lockf=''
417 d_longdbl=''
418 longdblsize=''
419 d_longlong=''
420 longlongsize=''
421 d_lseekproto=''
422 d_lstat=''
423 d_madvise=''
424 d_mblen=''
425 d_mbstowcs=''
426 d_mbtowc=''
427 d_memchr=''
428 d_memcmp=''
429 d_memcpy=''
430 d_memmove=''
431 d_memset=''
432 d_mkdir=''
433 d_mkdtemp=''
434 d_mkfifo=''
435 d_mkstemp=''
436 d_mkstemps=''
437 d_mktime=''
438 d_mmap=''
439 mmaptype=''
440 d_modfl=''
441 d_mprotect=''
442 d_msg=''
443 d_msgctl=''
444 d_msgget=''
445 d_msgrcv=''
446 d_msgsnd=''
447 d_msync=''
448 d_munmap=''
449 d_nice=''
450 d_off64_t=''
451 d_open3=''
452 d_fpathconf=''
453 d_pathconf=''
454 d_pause=''
455 d_pipe=''
456 d_poll=''
457 d_portable=''
458 d_old_pthread_create_joinable=''
459 old_pthread_create_joinable=''
460 d_pthread_yield=''
461 d_sched_yield=''
462 sched_yield=''
463 d_qgcvt=''
464 d_readdir=''
465 d_rewinddir=''
466 d_seekdir=''
467 d_telldir=''
468 d_readlink=''
469 d_rename=''
470 d_rmdir=''
471 d_safebcpy=''
472 d_safemcpy=''
473 d_sanemcmp=''
474 d_select=''
475 d_sem=''
476 d_semctl=''
477 d_semget=''
478 d_semop=''
479 d_setegid=''
480 d_seteuid=''
481 d_setgrent=''
482 d_setgrps=''
483 d_sethent=''
484 d_setlinebuf=''
485 d_setlocale=''
486 d_setnent=''
487 d_setpent=''
488 d_setpgid=''
489 d_setpgrp2=''
490 d_bsdsetpgrp=''
491 d_setpgrp=''
492 d_setprior=''
493 d_setproctitle=''
494 d_setpwent=''
495 d_setregid=''
496 d_setresgid=''
497 d_setresuid=''
498 d_setreuid=''
499 d_setrgid=''
500 d_setruid=''
501 d_setsent=''
502 d_setsid=''
503 d_setvbuf=''
504 d_sfio=''
505 usesfio=''
506 d_shm=''
507 d_shmat=''
508 d_shmatprototype=''
509 shmattype=''
510 d_shmctl=''
511 d_shmdt=''
512 d_shmget=''
513 d_sigaction=''
514 d_sigsetjmp=''
515 d_msg_ctrunc=''
516 d_msg_dontroute=''
517 d_msg_oob=''
518 d_msg_peek=''
519 d_msg_proxy=''
520 d_oldsock=''
521 d_scm_rights=''
522 d_socket=''
523 d_sockpair=''
524 sockethdr=''
525 socketlib=''
526 d_socklen_t=''
527 d_socks5_init=''
528 d_sqrtl=''
529 d_statblks=''
530 d_statfs_f_flags=''
531 d_statfs_s=''
532 d_fstatvfs=''
533 d_statvfs=''
534 d_stdio_cnt_lval=''
535 d_stdio_ptr_lval=''
536 d_stdiobase=''
537 d_stdstdio=''
538 stdio_base=''
539 stdio_bufsiz=''
540 stdio_cnt=''
541 stdio_filbuf=''
542 stdio_ptr=''
543 d_index=''
544 d_strchr=''
545 d_strcoll=''
546 d_strctcpy=''
547 d_strerrm=''
548 d_strerror=''
549 d_sysernlst=''
550 d_syserrlst=''
551 d_strtod=''
552 d_strtol=''
553 d_strtold=''
554 d_strtoll=''
555 d_strtoul=''
556 d_strtoull=''
557 d_strtouq=''
558 d_strxfrm=''
559 d_symlink=''
560 d_syscall=''
561 d_sysconf=''
562 d_system=''
563 d_tcgetpgrp=''
564 d_tcsetpgrp=''
565 d_telldirproto=''
566 d_time=''
567 timetype=''
568 clocktype=''
569 d_times=''
570 d_truncate=''
571 d_tzname=''
572 d_umask=''
573 d_semctl_semid_ds=''
574 d_semctl_semun=''
575 d_union_semun=''
576 d_ustat=''
577 d_vfork=''
578 usevfork=''
579 d_voidsig=''
580 signal_t=''
581 d_volatile=''
582 d_charvspr=''
583 d_vprintf=''
584 d_wait4=''
585 d_waitpid=''
586 d_wcstombs=''
587 d_wctomb=''
588 dlext=''
589 cccdlflags=''
590 ccdlflags=''
591 dlsrc=''
592 ld=''
593 lddlflags=''
594 usedl=''
595 doublesize=''
596 ebcdic=''
597 fflushNULL=''
598 fflushall=''
599 fpossize=''
600 fpostype=''
601 ccname=''
602 gccosandvers=''
603 gccversion=''
604 gidformat=''
605 gidsign=''
606 gidsize=''
607 gidtype=''
608 groupstype=''
609 h_fcntl=''
610 h_sysfile=''
611 i_arpainet=''
612 db_hashtype=''
613 db_prefixtype=''
614 i_db=''
615 i_dbm=''
616 i_rpcsvcdbm=''
617 d_dirnamlen=''
618 direntrytype=''
619 i_dirent=''
620 i_dld=''
621 i_dlfcn=''
622 i_fcntl=''
623 i_float=''
624 i_gdbm=''
625 d_grpasswd=''
626 i_grp=''
627 i_iconv=''
628 i_ieeefp=''
629 i_inttypes=''
630 i_libutil=''
631 i_limits=''
632 i_locale=''
633 i_machcthr=''
634 i_malloc=''
635 i_math=''
636 i_memory=''
637 i_mntent=''
638 i_ndbm=''
639 i_netdb=''
640 i_neterrno=''
641 i_netinettcp=''
642 i_niin=''
643 i_sysin=''
644 i_poll=''
645 i_prot=''
646 i_pthread=''
647 d_pwage=''
648 d_pwchange=''
649 d_pwclass=''
650 d_pwcomment=''
651 d_pwexpire=''
652 d_pwgecos=''
653 d_pwpasswd=''
654 d_pwquota=''
655 i_pwd=''
656 i_sfio=''
657 i_shadow=''
658 i_socks=''
659 i_stddef=''
660 i_stdlib=''
661 i_string=''
662 strings=''
663 i_sunmath=''
664 i_sysaccess=''
665 i_sysdir=''
666 i_sysfile=''
667 d_voidtty=''
668 i_bsdioctl=''
669 i_sysfilio=''
670 i_sysioctl=''
671 i_syssockio=''
672 i_syslog=''
673 i_sysmman=''
674 i_sysmode=''
675 i_sysmount=''
676 i_sysndir=''
677 i_sysparam=''
678 i_sysresrc=''
679 i_syssecrt=''
680 i_sysselct=''
681 i_sysstat=''
682 i_sysstatfs=''
683 i_sysstatvfs=''
684 i_systimes=''
685 i_systypes=''
686 i_sysuio=''
687 i_sysun=''
688 i_sysutsname=''
689 i_sysvfs=''
690 i_syswait=''
691 i_sgtty=''
692 i_termio=''
693 i_termios=''
694 i_systime=''
695 i_systimek=''
696 i_time=''
697 timeincl=''
698 i_unistd=''
699 i_ustat=''
700 i_utime=''
701 i_values=''
702 i_stdarg=''
703 i_varargs=''
704 i_varhdr=''
705 i_vfork=''
706 inc_version_list=''
707 inc_version_list_init=''
708 installprefix=''
709 installprefixexp=''
710 installstyle=''
711 installusrbinperl=''
712 intsize=''
713 longsize=''
714 shortsize=''
715 libc=''
716 ldlibpthname=''
717 libperl=''
718 shrpenv=''
719 useshrplib=''
720 glibpth=''
721 libpth=''
722 loclibpth=''
723 plibpth=''
724 xlibpth=''
725 ignore_versioned_solibs=''
726 libs=''
727 libsdirs=''
728 libsfiles=''
729 libsfound=''
730 libspath=''
731 lns=''
732 d_PRIEldbl=''
733 d_PRIFldbl=''
734 d_PRIGldbl=''
735 d_PRIeldbl=''
736 d_PRIfldbl=''
737 d_PRIgldbl=''
738 d_SCNfldbl=''
739 sPRIEldbl=''
740 sPRIFldbl=''
741 sPRIGldbl=''
742 sPRIeldbl=''
743 sPRIfldbl=''
744 sPRIgldbl=''
745 sSCNfldbl=''
746 lseeksize=''
747 lseektype=''
748 make_set_make=''
749 d_mymalloc=''
750 freetype=''
751 mallocobj=''
752 mallocsrc=''
753 malloctype=''
754 usemymalloc=''
755 installman1dir=''
756 man1dir=''
757 man1direxp=''
758 man1ext=''
759 installman3dir=''
760 man3dir=''
761 man3direxp=''
762 man3ext=''
763 huge=''
764 large=''
765 medium=''
766 models=''
767 small=''
768 split=''
769 modetype=''
770 multiarch=''
771 mydomain=''
772 myhostname=''
773 phostname=''
774 c=''
775 n=''
776 d_eofnblk=''
777 eagain=''
778 o_nonblock=''
779 rd_nodata=''
780 netdb_hlen_type=''
781 netdb_host_type=''
782 netdb_name_type=''
783 netdb_net_type=''
784 groupcat=''
785 hostcat=''
786 passcat=''
787 orderlib=''
788 ranlib=''
789 d_perl_otherlibdirs=''
790 otherlibdirs=''
791 package=''
792 spackage=''
793 pager=''
794 api_revision=''
795 api_subversion=''
796 api_version=''
797 api_versionstring=''
798 patchlevel=''
799 revision=''
800 subversion=''
801 version=''
802 perl5=''
803 perladmin=''
804 perlpath=''
805 d_nv_preserves_uv=''
806 d_nv_preserves_uv_bits=''
807 i16size=''
808 i16type=''
809 i32size=''
810 i32type=''
811 i64size=''
812 i64type=''
813 i8size=''
814 i8type=''
815 ivsize=''
816 ivtype=''
817 nvsize=''
818 nvtype=''
819 u16size=''
820 u16type=''
821 u32size=''
822 u32type=''
823 u64size=''
824 u64type=''
825 u8size=''
826 u8type=''
827 uvsize=''
828 uvtype=''
829 ivdformat=''
830 nvEformat=''
831 nvFformat=''
832 nvGformat=''
833 nveformat=''
834 nvfformat=''
835 nvgformat=''
836 uvXformat=''
837 uvoformat=''
838 uvuformat=''
839 uvxformat=''
840 pidtype=''
841 prefix=''
842 prefixexp=''
843 installprivlib=''
844 privlib=''
845 privlibexp=''
846 prototype=''
847 ptrsize=''
848 d_PRIX64=''
849 d_PRId64=''
850 d_PRIi64=''
851 d_PRIo64=''
852 d_PRIu64=''
853 d_PRIx64=''
854 sPRIX64=''
855 sPRId64=''
856 sPRIi64=''
857 sPRIo64=''
858 sPRIu64=''
859 sPRIx64=''
860 d_quad=''
861 quadkind=''
862 quadtype=''
863 uquadtype=''
864 drand01=''
865 randbits=''
866 randfunc=''
867 randseedtype=''
868 seedfunc=''
869 installscript=''
870 scriptdir=''
871 scriptdirexp=''
872 selectminbits=''
873 selecttype=''
874 sh=''
875 sig_count=''
876 sig_name=''
877 sig_name_init=''
878 sig_num=''
879 sig_num_init=''
880 installsitearch=''
881 sitearch=''
882 sitearchexp=''
883 installsitebin=''
884 sitebin=''
885 sitebinexp=''
886 installsitelib=''
887 sitelib=''
888 sitelib_stem=''
889 sitelibexp=''
890 siteprefix=''
891 siteprefixexp=''
892 sizesize=''
893 sizetype=''
894 so=''
895 socksizetype=''
896 sharpbang=''
897 shsharp=''
898 spitshell=''
899 src=''
900 ssizetype=''
901 startperl=''
902 startsh=''
903 stdchar=''
904 d_stdio_stream_array=''
905 stdio_stream_array=''
906 sysman=''
907 trnl=''
908 uidformat=''
909 uidsign=''
910 uidsize=''
911 uidtype=''
912 archname64=''
913 use64bitall=''
914 use64bitint=''
915 ccflags_uselargefiles=''
916 ldflags_uselargefiles=''
917 libswanted_uselargefiles=''
918 uselargefiles=''
919 uselongdouble=''
920 usemorebits=''
921 usemultiplicity=''
922 nm_opt=''
923 nm_so_opt=''
924 runnm=''
925 usenm=''
926 useperlio=''
927 usesocks=''
928 d_oldpthreads=''
929 use5005threads=''
930 useithreads=''
931 usethreads=''
932 incpath=''
933 mips_type=''
934 usrinc=''
935 d_vendorarch=''
936 installvendorarch=''
937 vendorarch=''
938 vendorarchexp=''
939 d_vendorbin=''
940 installvendorbin=''
941 vendorbin=''
942 vendorbinexp=''
943 d_vendorlib=''
944 installvendorlib=''
945 vendorlib=''
946 vendorlib_stem=''
947 vendorlibexp=''
948 usevendorprefix=''
949 vendorprefix=''
950 vendorprefixexp=''
951 defvoidused=''
952 voidflags=''
953 pm_apiversion=''
954 xs_apiversion=''
955 CONFIG=''
956
957 define='define'
958 undef='undef'
959 smallmach='pdp11 i8086 z8000 i80286 iAPX286'
960 rmlist=''
961
962 : We must find out about Eunice early
963 eunicefix=':'
964 if test -f /etc/unixtovms; then
965         eunicefix=/etc/unixtovms
966 fi
967 if test -f /etc/unixtovms.exe; then
968         eunicefix=/etc/unixtovms.exe
969 fi
970
971 i_whoami=''
972 : set useposix=false in your hint file to disable the POSIX extension.
973 useposix=true
974 : set useopcode=false in your hint file to disable the Opcode extension.
975 useopcode=true
976 : Trailing extension.  Override this in a hint file, if needed.
977 _exe=''
978 : Extra object files, if any, needed on this platform.
979 archobjs=''
980 archname=''
981 : Possible local include directories to search.
982 : Set locincpth to "" in a hint file to defeat local include searches.
983 locincpth="/usr/local/include /opt/local/include /usr/gnu/include"
984 locincpth="$locincpth /opt/gnu/include /usr/GNU/include /opt/GNU/include"
985 :
986 : no include file wanted by default
987 inclwanted=''
988
989 groupstype=''
990 : change the next line if compiling for Xenix/286 on Xenix/386
991 xlibpth='/usr/lib/386 /lib/386'
992 : Possible local library directories to search.
993 loclibpth="/usr/local/lib /opt/local/lib /usr/gnu/lib"
994 loclibpth="$loclibpth /opt/gnu/lib /usr/GNU/lib /opt/GNU/lib"
995
996 : general looking path for locating libraries
997 glibpth="/usr/lib/large /lib /usr/lib $xlibpth"
998 glibpth="$glibpth /lib/large /usr/lib/small /lib/small"
999 glibpth="$glibpth /usr/ccs/lib /usr/ucblib /usr/local/lib"
1000 test -f /usr/shlib/libc.so && glibpth="/usr/shlib $glibpth"
1001 test -f /shlib/libc.so     && glibpth="/shlib $glibpth"
1002
1003 : Private path used by Configure to find libraries.  Its value
1004 : is prepended to libpth. This variable takes care of special
1005 : machines, like the mips.  Usually, it should be empty.
1006 plibpth=''
1007
1008 : default library list
1009 libswanted=''
1010 : some systems want to use only the non-versioned libso:s
1011 ignore_versioned_solibs=''
1012 archname64=''
1013 ccflags_uselargefiles=''
1014 ldflags_uselargefiles=''
1015 libswanted_uselargefiles=''
1016 : set usemultiplicity on the Configure command line to enable multiplicity.
1017 : set usesocks on the Configure command line to enable socks.
1018 : set usethreads on the Configure command line to enable threads.
1019 : full support for void wanted by default
1020 defvoidused=15
1021
1022 : List of libraries we want.
1023 : If anyone needs -lnet, put it in a hint file.
1024 libswanted='sfio socket bind inet nsl nm ndbm gdbm dbm db malloc dl'
1025 libswanted="$libswanted dld ld sun m c cposix posix"
1026 libswanted="$libswanted ndir dir crypt sec"
1027 libswanted="$libswanted ucb bsd BSD PW x iconv util"
1028 : We probably want to search /usr/shlib before most other libraries.
1029 : This is only used by the lib/ExtUtils/MakeMaker.pm routine extliblist.
1030 glibpth=`echo " $glibpth " | sed -e 's! /usr/shlib ! !'`
1031 glibpth="/usr/shlib $glibpth"
1032 : Do not use vfork unless overridden by a hint file.
1033 usevfork=false
1034
1035 : Find the basic shell for Bourne shell scripts
1036 case "$sh" in
1037 '')
1038         case "$SYSTYPE" in
1039         *bsd*|sys5*) xxx="/$SYSTYPE/bin/sh";;
1040         *) xxx='/bin/sh';;
1041         esac
1042         if test -f "$xxx"; then
1043                 sh="$xxx"
1044         else
1045                 : Build up a list and do a single loop so we can 'break' out.
1046                 pth=`echo $PATH | sed -e "s/$p_/ /g"`
1047                 for xxx in sh bash ksh pdksh ash; do
1048                         for p in $pth; do
1049                                 try="$try ${p}/${xxx}"
1050                         done
1051                 done
1052                 for xxx in $try; do
1053                         if test -f "$xxx"; then
1054                                 sh="$xxx";
1055                                 break
1056                         elif test -f "$xxx.exe"; then
1057                                 sh="$xxx";
1058                                 break
1059                         fi
1060                 done
1061         fi
1062         ;;
1063 esac
1064
1065 case "$sh" in
1066 '')     cat <<EOM >&2
1067 $me:  Fatal Error:  I can't find a Bourne Shell anywhere.  
1068
1069 Usually it's in /bin/sh.  How did you even get this far?
1070 Please contact me (Perl Maintainers) at perlbug@perl.org and 
1071 we'll try to straighten this all out.
1072 EOM
1073         exit 1
1074         ;;
1075 esac
1076
1077 : see if sh knows # comments
1078 if `$sh -c '#' >/dev/null 2>&1`; then
1079         shsharp=true
1080         spitshell=cat
1081         xcat=/bin/cat
1082         test -f $xcat || xcat=/usr/bin/cat
1083         echo "#!$xcat" >try
1084         $eunicefix try
1085         chmod +x try
1086         ./try > today
1087         if test -s today; then
1088                 sharpbang='#!'
1089         else
1090                 echo "#! $xcat" > try
1091                 $eunicefix try
1092                 chmod +x try
1093                 ./try > today
1094                 if test -s today; then
1095                         sharpbang='#! '
1096                 else
1097                         sharpbang=': use '
1098                 fi
1099         fi
1100 else
1101         echo " "
1102         echo "Your $sh doesn't grok # comments--I will strip them later on."
1103         shsharp=false
1104         cd ..
1105         echo "exec grep -v '^[  ]*#'" >spitshell
1106         chmod +x spitshell
1107         $eunicefix spitshell
1108         spitshell=`pwd`/spitshell
1109         cd UU
1110         echo "I presume that if # doesn't work, #! won't work either!"
1111         sharpbang=': use '
1112 fi
1113 rm -f try today
1114
1115 : figure out how to guarantee sh startup
1116 case "$startsh" in
1117 '') startsh=${sharpbang}${sh} ;;
1118 *)
1119 esac
1120 cat >try <<EOSS
1121 $startsh
1122 set abc
1123 test "$?abc" != 1
1124 EOSS
1125
1126 chmod +x try
1127 $eunicefix try
1128 if ./try; then
1129         : echo "Yup, it does."
1130 else
1131         echo "Hmm... '$startsh' does not guarantee sh startup..."
1132         echo "You may have to fix up the shell scripts to make sure $sh runs them."
1133 fi
1134 rm -f try
1135
1136
1137 : Save command line options in file UU/cmdline.opt for later use in
1138 : generating config.sh.
1139 cat > cmdline.opt <<EOSH
1140 # Configure command line arguments.
1141 config_arg0='$0'
1142 config_args='$*'
1143 config_argc=$#
1144 EOSH
1145 argn=1
1146 for arg in "$@"; do
1147         cat >>cmdline.opt <<EOSH
1148 config_arg$argn='$arg'
1149 EOSH
1150         argn=`expr $argn + 1`
1151 done
1152
1153 : produce awk script to parse command line options
1154 cat >options.awk <<'EOF'
1155 BEGIN {
1156         optstr = "A:dD:eEf:hKOrsSU:V";  # getopt-style specification
1157
1158         len = length(optstr);
1159         for (i = 1; i <= len; i++) {
1160                 c = substr(optstr, i, 1);
1161                 if (i < len) a = substr(optstr, i + 1, 1); else a = "";
1162                 if (a == ":") {
1163                         arg[c] = 1;
1164                         i++;
1165                 }
1166                 opt[c] = 1;
1167         }
1168 }
1169 {
1170         expect = 0;
1171         str = $0;
1172         if (substr(str, 1, 1) != "-") {
1173                 printf("'%s'\n", str);
1174                 next;
1175         }
1176         len = length($0);
1177         for (i = 2; i <= len; i++) {
1178                 c = substr(str, i, 1);
1179                 if (!opt[c]) {
1180                         printf("-%s\n", substr(str, i));
1181                         next;
1182                 }
1183                 printf("-%s\n", c);
1184                 if (arg[c]) {
1185                         if (i < len)
1186                                 printf("'%s'\n", substr(str, i + 1));
1187                         else
1188                                 expect = 1;
1189                         next;
1190                 }
1191         }
1192 }
1193 END {
1194         if (expect)
1195                 print "?";
1196 }
1197 EOF
1198
1199 : process the command line options
1200 set X `for arg in "$@"; do echo "X$arg"; done |
1201         sed -e s/X// | awk -f options.awk`
1202 eval "set $*"
1203 shift
1204 rm -f options.awk
1205
1206 : set up default values
1207 fastread=''
1208 reuseval=false
1209 config_sh=''
1210 alldone=''
1211 error=''
1212 silent=''
1213 extractsh=''
1214 override=''
1215 knowitall=''
1216 rm -f optdef.sh posthint.sh
1217 cat >optdef.sh <<EOS
1218 $startsh
1219 EOS
1220
1221
1222 : option parsing
1223 while test $# -gt 0; do
1224         case "$1" in
1225         -d) shift; fastread=yes;;
1226         -e) shift; alldone=cont;;
1227         -f)
1228                 shift
1229                 cd ..
1230                 if test -r "$1"; then
1231                         config_sh="$1"
1232                 else
1233                         echo "$me: cannot read config file $1." >&2
1234                         error=true
1235                 fi
1236                 cd UU
1237                 shift;;
1238         -h) shift; error=true;;
1239         -r) shift; reuseval=true;;
1240         -s) shift; silent=true; realsilent=true;;
1241         -E) shift; alldone=exit;;
1242         -K) shift; knowitall=true;;
1243         -O) shift; override=true;;
1244         -S) shift; silent=true; extractsh=true;;
1245         -D)
1246                 shift
1247                 case "$1" in
1248                 *=)
1249                         echo "$me: use '-U symbol=', not '-D symbol='." >&2
1250                         echo "$me: ignoring -D $1" >&2
1251                         ;;
1252                 *=*) echo "$1" | \
1253                                 sed -e "s/'/'\"'\"'/g" -e "s/=\(.*\)/='\1'/" >> optdef.sh;;
1254                 *) echo "$1='define'" >> optdef.sh;;
1255                 esac
1256                 shift
1257                 ;;
1258         -U)
1259                 shift
1260                 case "$1" in
1261                 *=) echo "$1" >> optdef.sh;;
1262                 *=*)
1263                         echo "$me: use '-D symbol=val', not '-U symbol=val'." >&2
1264                         echo "$me: ignoring -U $1" >&2
1265                         ;;
1266                 *) echo "$1='undef'" >> optdef.sh;;
1267                 esac
1268                 shift
1269                 ;;
1270         -A)
1271             shift
1272             xxx=''
1273             yyy="$1"
1274             zzz=''
1275             uuu=undef
1276             case "$yyy" in
1277             *=*) zzz=`echo $yyy|sed 's!=.*!!'`
1278                  case "$zzz" in
1279                  *:*) zzz='' ;;
1280                  *)   xxx=append
1281                       zzz=" "`echo $yyy|sed 's!^[^=]*=!!'` 
1282                       yyy=`echo $yyy|sed 's!=.*!!'` ;;
1283                  esac
1284                  ;;
1285             esac
1286             case "$xxx" in
1287             '')  case "$yyy" in
1288                  *:*) xxx=`echo $yyy|sed 's!:.*!!'`
1289                       yyy=`echo $yyy|sed 's!^[^:]*:!!'`
1290                       zzz=`echo $yyy|sed 's!^[^=]*=!!'`
1291                       yyy=`echo $yyy|sed 's!=.*!!'` ;;
1292                  *)   xxx=`echo $yyy|sed 's!:.*!!'`
1293                       yyy=`echo $yyy|sed 's!^[^:]*:!!'` ;;
1294                  esac
1295                  ;;       
1296             esac
1297             case "$xxx" in
1298             append)
1299                 echo "$yyy=\"\${$yyy}$zzz\""    >> posthint.sh ;;
1300             clear)
1301                 echo "$yyy=''"                  >> posthint.sh ;;
1302             define)
1303                 case "$zzz" in
1304                 '') zzz=define ;;
1305                 esac
1306                 echo "$yyy='$zzz'"              >> posthint.sh ;;
1307             eval)
1308                 echo "eval \"$yyy=$zzz\""       >> posthint.sh ;;
1309             prepend)
1310                 echo "$yyy=\"$zzz\${$yyy}\""    >> posthint.sh ;;
1311             undef)
1312                 case "$zzz" in
1313                 '') zzz="$uuu" ;;
1314                 esac
1315                 echo "$yyy=$zzz"                >> posthint.sh ;;
1316             *)  echo "$me: unknown -A command '$xxx', ignoring -A $1" >&2 ;;
1317             esac
1318             shift
1319             ;;
1320         -V) echo "$me generated by metaconfig 3.0 PL70." >&2
1321             exit 0;;
1322         --) break;;
1323         -*) echo "$me: unknown option $1" >&2; shift; error=true;;
1324         *) break;;
1325         esac
1326 done
1327
1328 case "$error" in
1329 true)
1330         cat >&2 <<EOM
1331 Usage: $me [-dehrsEKOSV] [-f config.sh] [-D symbol] [-D symbol=value]
1332                  [-U symbol] [-U symbol=] [-A command:symbol...]
1333   -d : use defaults for all answers.
1334   -e : go on without questioning past the production of config.sh.
1335   -f : specify an alternate default configuration file.
1336   -h : print this help message and exit (with an error status).
1337   -r : reuse C symbols value if possible (skips costly nm extraction).
1338   -s : silent mode, only echoes questions and essential information.
1339   -D : define symbol to have some value:
1340          -D symbol         symbol gets the value 'define'
1341          -D symbol=value   symbol gets the value 'value'
1342   -E : stop at the end of questions, after having produced config.sh.
1343   -K : do not use unless you know what you are doing.
1344   -O : let -D and -U override definitions from loaded configuration file.
1345   -S : perform variable substitutions on all .SH files (can mix with -f)
1346   -U : undefine symbol:
1347          -U symbol    symbol gets the value 'undef'
1348          -U symbol=   symbol gets completely empty
1349   -A : manipulate symbol after the platform specific hints have been applied:
1350          -A symbol=value                append " "value to symbol
1351          -A append:symbol=value         append value to symbol
1352          -A define:symbol=value         define symbol to have value
1353          -A clear:symbol                define symbol to be ''
1354          -A define:symbol               define symbol to be 'define'
1355          -A eval:symbol=value           define symbol to be eval of value
1356          -A prepend:symbol=value        prepend value to symbol
1357          -A undef:symbol                define symbol to be 'undef'
1358          -A undef:symbol=               define symbol to be ''
1359   -V : print version number and exit (with a zero status).
1360 EOM
1361         exit 1
1362         ;;
1363 esac
1364
1365 : Sanity checks
1366 case "$fastread$alldone" in
1367 yescont|yesexit) ;;
1368 *)
1369         case "$extractsh" in
1370         true) ;;
1371         *)
1372                 if test ! -t 0; then
1373                         echo "Say 'sh Configure', not 'sh <Configure'"
1374                         exit 1
1375                 fi
1376                 ;;
1377         esac
1378         ;;
1379 esac
1380
1381 exec 4>&1
1382 case "$silent" in
1383 true) exec 1>/dev/null;;
1384 esac
1385
1386 : run the defines and the undefines, if any, but leave the file out there...
1387 touch optdef.sh
1388 . ./optdef.sh
1389 : create the posthint manipulation script and leave the file out there...
1390 touch posthint.sh
1391
1392 : set package name
1393 package=perl5
1394 first=`echo $package | sed -e 's/^\(.\).*/\1/'`
1395 last=`echo $package | sed -e 's/^.\(.*\)/\1/'`
1396 case "`echo AbyZ | tr '[:lower:]' '[:upper:]' 2>/dev/null`" in
1397 ABYZ) spackage=`echo $first | tr '[:lower:]' '[:upper:]'`$last;;
1398 *) spackage=`echo $first | tr '[a-z]' '[A-Z]'`$last;;
1399 esac
1400
1401 : Some greps do not return status, grrr.
1402 echo "grimblepritz" >grimble
1403 if grep blurfldyick grimble >/dev/null 2>&1 ; then
1404         contains=contains
1405 elif grep grimblepritz grimble >/dev/null 2>&1 ; then
1406         contains=grep
1407 else
1408         contains=contains
1409 fi
1410 rm -f grimble
1411 : the following should work in any shell
1412 case "$contains" in
1413 contains*)
1414         echo " "
1415         echo "AGH!  Grep doesn't return a status.  Attempting remedial action."
1416         cat >contains <<'EOSS'
1417 grep "$1" "$2" >.greptmp && cat .greptmp && test -s .greptmp
1418 EOSS
1419 chmod +x contains
1420 esac
1421
1422 : Find the path to the source tree
1423 case "$src" in
1424 '') case "$0" in
1425     */*) src=`echo $0 | sed -e 's%/[^/][^/]*$%%'`
1426          case "$src" in
1427          /*)    ;;
1428          *)     src=`cd ../$src && pwd` ;;
1429          esac
1430          ;;
1431     *)   src='.';;
1432     esac;;
1433 esac
1434 case "$src" in
1435 '')     src=/
1436         rsrc=/
1437         ;;
1438 /*) rsrc="$src";;
1439 *) rsrc="../$src";;
1440 esac
1441 if test -f $rsrc/Configure && \
1442         $contains "^package=$package$" $rsrc/Configure >/dev/null 2>&1
1443 then
1444    : found it, so we are ok.
1445 else
1446         rsrc=''
1447         for src in . .. ../.. ../../.. ../../../..; do
1448                 if test -f ../$src/Configure && \
1449                         $contains "^package=$package$" ../$src/Configure >/dev/null 2>&1
1450                 then
1451                         rsrc=../$src
1452                         break
1453                 fi
1454         done
1455 fi
1456 case "$rsrc" in
1457 '')
1458         cat <<EOM >&4
1459
1460 Sorry, I can't seem to locate the source dir for $package.  Please start
1461 Configure with an explicit path -- i.e. /some/path/Configure.
1462
1463 EOM
1464         exit 1
1465         ;;
1466 ../.)   rsrc='..';;
1467 *)
1468         echo " "
1469         echo "Sources for $package found in \"$src\"." >&4
1470         ;;
1471 esac
1472
1473 : script used to extract .SH files with variable substitutions
1474 cat >extract <<'EOS'
1475 CONFIGDOTSH=true
1476 echo "Doing variable substitutions on .SH files..."
1477 if test -f $src/MANIFEST; then
1478         set x `awk '{print $1}' <$src/MANIFEST | grep '\.SH$'`
1479 else
1480         echo "(Looking for .SH files under the source directory.)"
1481         set x `(cd $src; find . -name "*.SH" -print)`
1482 fi
1483 shift
1484 case $# in
1485 0) set x `(cd $src; echo *.SH)`; shift;;
1486 esac
1487 if test ! -f $src/$1; then
1488         shift
1489 fi
1490 mkdir_p='
1491 name=$1;
1492 create="";
1493 while test $name; do
1494         if test ! -d "$name"; then
1495                 create="$name $create";
1496                 name=`echo $name | sed -e "s|^[^/]*$||"`;
1497                 name=`echo $name | sed -e "s|\(.*\)/.*|\1|"`;
1498         else
1499                 name="";
1500         fi;
1501 done;
1502 for file in $create; do
1503         mkdir $file;
1504 done
1505 '
1506 for file in $*; do
1507         case "$src" in
1508         ".")
1509                 case "$file" in
1510                 */*)
1511                         dir=`expr X$file : 'X\(.*\)/'`
1512                         file=`expr X$file : 'X.*/\(.*\)'`
1513                         (cd $dir && . ./$file)
1514                         ;;
1515                 *)
1516                         . ./$file
1517                         ;;
1518                 esac
1519                 ;;
1520         *)
1521                 case "$file" in
1522                 */*)
1523                         dir=`expr X$file : 'X\(.*\)/'`
1524                         file=`expr X$file : 'X.*/\(.*\)'`
1525                         (set x $dir; shift; eval $mkdir_p)
1526                         sh <$src/$dir/$file
1527                         ;;
1528                 *)
1529                         sh <$src/$file
1530                         ;;
1531                 esac
1532                 ;;
1533         esac
1534 done
1535 if test -f $src/config_h.SH; then
1536         if test ! -f config.h; then
1537         : oops, they left it out of MANIFEST, probably, so do it anyway.
1538         . $src/config_h.SH
1539         fi
1540 fi
1541 EOS
1542
1543 : extract files and exit if asked to do so
1544 case "$extractsh" in
1545 true)
1546         case "$realsilent" in
1547         true) ;;
1548         *) exec 1>&4;;
1549         esac
1550         case "$config_sh" in
1551         '') config_sh='config.sh';;
1552         esac
1553         echo " "
1554         echo "Fetching answers from $config_sh..."
1555         cd ..
1556         . $config_sh
1557         test "$override" && . ./optdef.sh
1558         echo " "
1559         . UU/extract
1560         rm -rf UU
1561         echo "Done."
1562         exit 0
1563         ;;
1564 esac
1565
1566 : Eunice requires " " instead of "", can you believe it
1567 echo " "
1568 : Here we go...
1569 echo "Beginning of configuration questions for $package."
1570
1571 trap 'echo " "; test -d ../UU && rm -rf X $rmlist; exit 1' 1 2 3 15
1572
1573 : first determine how to suppress newline on echo command
1574 echo " "
1575 echo "Checking echo to see how to suppress newlines..."
1576 (echo "hi there\c" ; echo " ") >.echotmp
1577 if $contains c .echotmp >/dev/null 2>&1 ; then
1578         echo "...using -n."
1579         n='-n'
1580         c=''
1581 else
1582         cat <<'EOM'
1583 ...using \c
1584 EOM
1585         n=''
1586         c='\c'
1587 fi
1588 echo $n "The star should be here-->$c"
1589 echo '*'
1590 rm -f .echotmp
1591
1592 : Now test for existence of everything in MANIFEST
1593 echo " "
1594 if test -f $rsrc/MANIFEST; then
1595         echo "First let's make sure your kit is complete.  Checking..." >&4
1596         awk '$1 !~ /PACK[A-Z]+/ {print $1}' $rsrc/MANIFEST | split -50
1597         rm -f missing
1598         tmppwd=`pwd`
1599         for filelist in x??; do
1600                 (cd $rsrc; ls `cat $tmppwd/$filelist` >/dev/null 2>>$tmppwd/missing)
1601         done
1602         if test -s missing; then
1603                 cat missing >&4
1604                 cat >&4 <<'EOM'
1605
1606 THIS PACKAGE SEEMS TO BE INCOMPLETE.
1607
1608 You have the option of continuing the configuration process, despite the
1609 distinct possibility that your kit is damaged, by typing 'y'es.  If you
1610 do, don't blame me if something goes wrong.  I advise you to type 'n'o
1611 and contact the author (perlbug@perl.org).
1612
1613 EOM
1614                 echo $n "Continue? [n] $c" >&4
1615                 read ans
1616                 case "$ans" in
1617                 y*)
1618                         echo "Continuing..." >&4
1619                         rm -f missing
1620                         ;;
1621                 *)
1622                         echo "ABORTING..." >&4
1623                         kill $$
1624                         ;;
1625                 esac
1626         else
1627                 echo "Looks good..."
1628         fi
1629 else
1630         echo "There is no MANIFEST file.  I hope your kit is complete !"
1631 fi
1632 rm -f missing x??
1633
1634 echo " "
1635 : Find the appropriate value for a newline for tr
1636 if test -n "$DJGPP"; then
1637        trnl='\012'
1638 fi
1639 if test X"$trnl" = X; then
1640         case "`echo foo|tr '\n' x 2>/dev/null`" in
1641         foox) trnl='\n' ;;
1642         esac
1643 fi
1644 if test X"$trnl" = X; then
1645         case "`echo foo|tr '\012' x 2>/dev/null`" in
1646         foox) trnl='\012' ;;
1647         esac
1648 fi
1649 if test X"$trnl" = X; then
1650         cat <<EOM >&2
1651
1652 $me: Fatal Error: cannot figure out how to translate newlines with 'tr'.
1653
1654 EOM
1655         exit 1
1656 fi
1657
1658 : compute the number of columns on the terminal for proper question formatting
1659 case "$COLUMNS" in
1660 '') COLUMNS='80';;
1661 esac
1662
1663 : set up the echo used in my read
1664 myecho="case \"\$xxxm\" in
1665 '') echo $n \"\$rp $c\" >&4;;
1666 *) case \"\$rp\" in
1667         '') echo $n \"[\$xxxm] $c\";;
1668         *)
1669                 if test \`echo \"\$rp [\$xxxm]  \" | wc -c\` -ge $COLUMNS; then
1670                         echo \"\$rp\" >&4
1671                         echo $n \"[\$xxxm] $c\" >&4
1672                 else
1673                         echo $n \"\$rp [\$xxxm] $c\" >&4
1674                 fi
1675                 ;;
1676         esac;;
1677 esac"
1678
1679 : now set up to do reads with possible shell escape and default assignment
1680 cat <<EOSC >myread
1681 $startsh
1682 xxxm=\$dflt
1683 $myecho
1684 ans='!'
1685 case "\$fastread" in
1686 yes) case "\$dflt" in
1687         '') ;;
1688         *) ans='';
1689                 case "\$silent-\$rp" in
1690                 true-) ;;
1691                 *) echo " " >&4;;
1692                 esac;;
1693         esac;;
1694 *) case "\$silent" in
1695         true) case "\$rp" in
1696                 '') ans='';;
1697                 esac;;
1698         esac;;
1699 esac
1700 while expr "X\$ans" : "X!" >/dev/null; do
1701         read answ
1702         set x \$xxxm
1703         shift
1704         aok=''; eval "ans=\\"\$answ\\"" && aok=y
1705         case  "\$answ" in
1706         "!")
1707                 sh 1>&4
1708                 echo " "
1709                 $myecho
1710                 ;;
1711         !*)
1712                 set x \`expr "X\$ans" : "X!\(.*\)\$"\`
1713                 shift
1714                 sh 1>&4 -c "\$*"
1715                 echo " "
1716                 $myecho
1717                 ;;
1718         "\$ans")
1719                 case "\$ans" in
1720                 \\&*)
1721                         set x \`expr "X\$ans" : "X&\(.*\)\$"\`
1722                         shift
1723                         case "\$1" in
1724                         -d)
1725                                 fastread=yes
1726                                 echo "(OK, I'll run with -d after this question.)" >&4
1727                                 ;;
1728                         -*)
1729                                 echo "*** Sorry, \$1 not supported yet." >&4
1730                                 ;;
1731                         esac
1732                         $myecho
1733                         ans=!
1734                         ;;
1735                 esac;;
1736         *)
1737                 case "\$aok" in
1738                 y)
1739                         echo "*** Substitution done -- please confirm."
1740                         xxxm="\$ans"
1741                         ans=\`echo $n "\$ans$c" | tr '$trnl' ' '\`
1742                         xxxm="\$ans"
1743                         ans=!
1744                         ;;
1745                 *)
1746                         echo "*** Error -- try again."
1747                         ans=!
1748                         ;;
1749                 esac
1750                 $myecho
1751                 ;;
1752         esac
1753         case "\$ans\$xxxm\$nostick" in
1754         '')
1755                 ans=!
1756                 $myecho
1757                 ;;
1758         esac
1759 done
1760 case "\$ans" in
1761 '') ans="\$xxxm";;
1762 esac
1763 EOSC
1764
1765 : create .config dir to save info across Configure sessions
1766 test -d ../.config || mkdir ../.config
1767 cat >../.config/README <<EOF
1768 This directory created by Configure to save information that should
1769 persist across sessions for $package.
1770
1771 You may safely delete it if you wish.
1772 EOF
1773
1774 xversion=`awk '/define[         ]+PERL_VERSION/ {print $3}' $rsrc/patchlevel.h`
1775 case "$usedevel" in
1776 $define|true|[yY]*) ;;
1777 *) case "$xversion" in
1778    *[13579])
1779         cat >&4 <<EOH
1780 *** WHOA THERE!!! ***
1781
1782     This is an UNSTABLE DEVELOPMENT release.
1783     The version of this $package distribution is $xversion, that is, odd,
1784     (as opposed to even) and that signifies a development release.
1785     If you want a maintenance release, you want an even-numbered version.)
1786
1787     Do ***NOT*** install this into production use.
1788     Data corruption and crashes are possible.
1789
1790     It is most seriously suggested that you do not continue any further
1791     unless you want to help in developing and debugging Perl.
1792
1793 EOH
1794         rp='Do you really want to continue?'
1795         dflt='n'
1796         . ./myread
1797         case "$ans" in
1798         [yY]) echo >&4 "Okay, continuing." ;;
1799         *) echo >&4 "Okay, bye."
1800            exit 1
1801            ;;
1802         esac
1803         ;;
1804     esac
1805     ;;
1806 esac
1807
1808 : general instructions
1809 needman=true
1810 firsttime=true
1811 user=`(logname) 2>/dev/null`
1812 case "$user" in
1813 '') user=`whoami 2>&1`;;
1814 esac
1815 if $contains "^$user\$" ../.config/instruct >/dev/null 2>&1; then
1816         firsttime=false
1817         echo " "
1818         rp='Would you like to see the instructions?'
1819         dflt=n
1820         . ./myread
1821         case "$ans" in
1822         [yY]*) ;;
1823         *) needman=false;;
1824         esac
1825 fi
1826 if $needman; then
1827         cat <<EOH
1828
1829 This installation shell script will examine your system and ask you questions
1830 to determine how the perl5 package should be installed. If you get
1831 stuck on a question, you may use a ! shell escape to start a subshell or
1832 execute a command.  Many of the questions will have default answers in square
1833 brackets; typing carriage return will give you the default.
1834
1835 On some of the questions which ask for file or directory names you are allowed
1836 to use the ~name construct to specify the login directory belonging to "name",
1837 even if you don't have a shell which knows about that.  Questions where this is
1838 allowed will be marked "(~name ok)".
1839
1840 EOH
1841         rp=''
1842         dflt='Type carriage return to continue'
1843         . ./myread
1844         cat <<'EOH'
1845
1846 The prompter used in this script allows you to use shell variables and
1847 backticks in your answers.  You may use $1, $2, etc...  to refer to the words
1848 in the default answer, as if the default line was a set of arguments given to a
1849 script shell.  This means you may also use $* to repeat the whole default line,
1850 so you do not have to re-type everything to add something to the default.
1851
1852 Everytime there is a substitution, you will have to confirm.  If there is an
1853 error (e.g. an unmatched backtick), the default answer will remain unchanged
1854 and you will be prompted again.
1855
1856 If you are in a hurry, you may run 'Configure -d'.  This will bypass nearly all
1857 the questions and use the computed defaults (or the previous answers if there
1858 was already a config.sh file). Type 'Configure -h' for a list of options.
1859 You may also start interactively and then answer '& -d' at any prompt to turn
1860 on the non-interactive behaviour for the remainder of the execution.
1861
1862 EOH
1863         . ./myread
1864         cat <<EOH
1865
1866 Much effort has been expended to ensure that this shell script will run on any
1867 Unix system.  If despite that it blows up on yours, your best bet is to edit
1868 Configure and run it again.  If you can't run Configure for some reason,
1869 you'll have to generate a config.sh file by hand.  Whatever problems you
1870 have, let me (perlbug@perl.org) know how I blew it.
1871
1872 This installation script affects things in two ways:
1873
1874 1) it may do direct variable substitutions on some of the files included
1875    in this kit.
1876 2) it builds a config.h file for inclusion in C programs.  You may edit
1877    any of these files as the need arises after running this script.
1878
1879 If you make a mistake on a question, there is no easy way to back up to it
1880 currently.  The easiest thing to do is to edit config.sh and rerun all the SH
1881 files.  Configure will offer to let you do this before it runs the SH files.
1882
1883 EOH
1884         dflt='Type carriage return to continue'
1885         . ./myread
1886         case "$firsttime" in
1887         true) echo $user >>../.config/instruct;;
1888         esac
1889 fi
1890
1891 : find out where common programs are
1892 echo " "
1893 echo "Locating common programs..." >&4
1894 cat <<EOSC >loc
1895 $startsh
1896 case \$# in
1897 0) exit 1;;
1898 esac
1899 thing=\$1
1900 shift
1901 dflt=\$1
1902 shift
1903 for dir in \$*; do
1904         case "\$thing" in
1905         .)
1906         if test -d \$dir/\$thing; then
1907                 echo \$dir
1908                 exit 0
1909         fi
1910         ;;
1911         *)
1912         for thisthing in \$dir/\$thing; do
1913                 : just loop through to pick last item
1914         done
1915         if test -f \$thisthing; then
1916                 echo \$thisthing
1917                 exit 0
1918         elif test -f \$dir/\$thing.exe; then
1919                 if test -n "$DJGPP"; then
1920                         echo \$dir/\$thing.exe
1921                 else
1922                         : on Eunice apparently
1923                         echo \$dir/\$thing
1924                 fi
1925                 exit 0
1926         fi
1927         ;;
1928         esac
1929 done
1930 echo \$dflt
1931 exit 1
1932 EOSC
1933 chmod +x loc
1934 $eunicefix loc
1935 loclist="
1936 awk
1937 cat
1938 comm
1939 cp
1940 echo
1941 expr
1942 grep
1943 ls
1944 make
1945 mkdir
1946 rm
1947 sed
1948 sort
1949 touch
1950 tr
1951 uniq
1952 "
1953 trylist="
1954 Mcc
1955 ar
1956 byacc
1957 cpp
1958 csh
1959 date
1960 egrep
1961 gzip
1962 less
1963 ln
1964 more
1965 nm
1966 nroff
1967 pg
1968 test
1969 uname
1970 zip
1971 "
1972 pth=`echo $PATH | sed -e "s/$p_/ /g"`
1973 pth="$pth /lib /usr/lib"
1974 for file in $loclist; do
1975         eval xxx=\$$file
1976         case "$xxx" in
1977         /*|?:[\\/]*)
1978                 if test -f "$xxx"; then
1979                         : ok
1980                 else
1981                         echo "WARNING: no $xxx -- ignoring your setting for $file." >&4
1982                         xxx=`./loc $file $file $pth`
1983                 fi
1984                 ;;
1985         '') xxx=`./loc $file $file $pth`;;
1986         *) xxx=`./loc $xxx $xxx $pth`;;
1987         esac
1988         eval $file=$xxx
1989         eval _$file=$xxx
1990         case "$xxx" in
1991         /*)
1992                 echo $file is in $xxx.
1993                 ;;
1994         ?:[\\/]*)
1995                 echo $file is in $xxx.
1996                 ;;
1997         *)
1998                 echo "I don't know where '$file' is, and my life depends on it." >&4
1999                 echo "Go find a public domain implementation or fix your PATH setting!" >&4
2000                 exit 1
2001                 ;;
2002         esac
2003 done
2004 echo " "
2005 echo "Don't worry if any of the following aren't found..."
2006 say=offhand
2007 for file in $trylist; do
2008         eval xxx=\$$file
2009         case "$xxx" in
2010         /*|?:[\\/]*)
2011                 if test -f "$xxx"; then
2012                         : ok
2013                 else
2014                         echo "WARNING: no $xxx -- ignoring your setting for $file." >&4
2015                         xxx=`./loc $file $file $pth`
2016                 fi
2017                 ;;
2018         '') xxx=`./loc $file $file $pth`;;
2019         *) xxx=`./loc $xxx $xxx $pth`;;
2020         esac
2021         eval $file=$xxx
2022         eval _$file=$xxx
2023         case "$xxx" in
2024         /*)
2025                 echo $file is in $xxx.
2026                 ;;
2027         ?:[\\/]*)
2028                 echo $file is in $xxx.
2029                 ;;
2030         *)
2031                 echo "I don't see $file out there, $say."
2032                 say=either
2033                 ;;
2034         esac
2035 done
2036 case "$egrep" in
2037 egrep)
2038         echo "Substituting grep for egrep."
2039         egrep=$grep
2040         ;;
2041 esac
2042 case "$ln" in
2043 ln)
2044         echo "Substituting cp for ln."
2045         ln=$cp
2046         ;;
2047 esac
2048 case "$test" in
2049 test)
2050         echo "Hopefully test is built into your sh."
2051         ;;
2052 *)
2053         if `sh -c "PATH= test true" >/dev/null 2>&1`; then
2054                 echo "Using the test built into your sh."
2055                 test=test
2056                 _test=test
2057         fi
2058         ;;
2059 esac
2060 case "$echo" in
2061 echo)
2062         echo "Hopefully echo is built into your sh."
2063         ;;
2064 '') ;;
2065 *)
2066         echo " "
2067 echo "Checking compatibility between $echo and builtin echo (if any)..." >&4
2068         $echo $n "hi there$c" >foo1
2069         echo $n "hi there$c" >foo2
2070         if cmp foo1 foo2 >/dev/null 2>&1; then
2071                 echo "They are compatible.  In fact, they may be identical."
2072         else
2073                 case "$n" in
2074                 '-n') n='' c='\c';;
2075                 *) n='-n' c='';;
2076                 esac
2077                 cat <<FOO
2078 They are not compatible!  You are probably running ksh on a non-USG system.
2079 I'll have to use $echo instead of the builtin, since Bourne shell doesn't
2080 have echo built in and we may have to run some Bourne shell scripts.  That
2081 means I'll have to use '$n$c' to suppress newlines now.  Life is ridiculous.
2082
2083 FOO
2084                 $echo $n "The star should be here-->$c"
2085                 $echo "*"
2086         fi
2087         $rm -f foo1 foo2
2088         ;;
2089 esac
2090
2091 cat <<EOS >checkcc
2092 $startsh
2093 EOS
2094 cat <<'EOSC' >>checkcc
2095 case "$cc" in
2096 '') ;;
2097 *)  $rm -f try try.*
2098     $cat >try.c <<EOM
2099 int main(int argc, char *argv[]) {
2100   return 0;
2101 }
2102 EOM
2103     if $cc -o try try.c; then
2104        :
2105     else
2106         echo "Uh-oh, the C compiler '$cc' doesn't seem to be working." >&4
2107         despair=yes
2108         trygcc=yes
2109         case "$cc" in
2110         *gcc*) trygcc=no ;;
2111         esac
2112         case "`$cc -v -c try.c 2>&1`" in
2113         *gcc*) trygcc=no ;;
2114         esac
2115         if $test X"$trygcc" = Xyes; then
2116             if gcc -o try -c try.c; then
2117                 echo " "
2118                 echo "You seem to have a working gcc, though." >&4
2119                 rp="Would you like to use it?"
2120                 dflt=y
2121                 if $test -f myread; then
2122                     . ./myread
2123                 else
2124                     if $test -f UU/myread; then
2125                         . ./UU/myread
2126                     else
2127                         echo "Cannot find myread, sorry.  Aborting." >&2
2128                         exit 1
2129                     fi
2130                 fi  
2131                 case "$ans" in
2132                 [yY]*) cc=gcc; ccname=gcc; ccflags=''; despair=no ;;
2133                 esac
2134             fi
2135         fi
2136         if $test X"$despair" = Xyes; then
2137             echo "You need to find a working C compiler." >&4
2138             echo "I cannot continue any further, aborting." >&4
2139             exit 1
2140         fi
2141     fi
2142     $rm -f try try.*
2143     ;;
2144 esac
2145 EOSC
2146
2147 : determine whether symbolic links are supported
2148 echo " "
2149 $touch blurfl
2150 if $ln -s blurfl sym > /dev/null 2>&1 ; then
2151         echo "Symbolic links are supported." >&4
2152         lns="$ln -s"
2153 else
2154         echo "Symbolic links are NOT supported." >&4
2155         lns="$ln"
2156 fi
2157 $rm -f blurfl sym
2158
2159 : see whether [:lower:] and [:upper:] are supported character classes
2160 echo " "
2161 case "`echo AbyZ | $tr '[:lower:]' '[:upper:]' 2>/dev/null`" in
2162 ABYZ)
2163         echo "Good, your tr supports [:lower:] and [:upper:] to convert case." >&4
2164         up='[:upper:]'
2165         low='[:lower:]'
2166         ;;
2167 *)      # There is a discontinuity in EBCDIC between 'I' and 'J'
2168         # (0xc9 and 0xd1), therefore that is a nice testing point.
2169         if test "X$up" = X -o "X$low" = X; then
2170             case "`echo IJ | $tr '[I-J]' '[i-j]' 2>/dev/null`" in
2171             ij) up='[A-Z]'
2172                 low='[a-z]'
2173                 ;;
2174             esac
2175         fi
2176         if test "X$up" = X -o "X$low" = X; then
2177             case "`echo IJ | $tr I-J i-j 2>/dev/null`" in
2178             ij) up='A-Z'
2179                 low='a-z'
2180                 ;;
2181             esac
2182         fi
2183         if test "X$up" = X -o "X$low" = X; then
2184             case "`echo IJ | od -x 2>/dev/null`" in
2185             *C9D1*|*c9d1*)
2186                 echo "Hey, this might be EBCDIC." >&4
2187                 if test "X$up" = X -o "X$low" = X; then
2188                     case "`echo IJ | $tr '[A-IJ-RS-Z]' '[a-ij-rs-z]' 2>/dev/null`" in
2189                     ij) up='[A-IJ-RS-Z]'
2190                         low='[a-ij-rs-z]'
2191                         ;;
2192                     esac
2193                 fi
2194                 if test "X$up" = X -o "X$low" = X; then
2195                     case "`echo IJ | $tr A-IJ-RS-Z a-ij-rs-z 2>/dev/null`" in
2196                     ij) up='A-IJ-RS-Z'
2197                         low='a-ij-rs-z'
2198                         ;;
2199                     esac
2200                 fi
2201                 ;;
2202             esac
2203         fi
2204 esac
2205 case "`echo IJ | $tr \"$up\" \"$low\" 2>/dev/null`" in
2206 ij)
2207     echo "Using $up and $low to convert case." >&4
2208     ;;
2209 *)
2210     echo "I don't know how to translate letters from upper to lower case." >&4
2211     echo "Your tr is not acting any way I know of." >&4
2212     exit 1
2213     ;;
2214 esac
2215 : set up the translation script tr, must be called with ./tr of course
2216 cat >tr <<EOSC
2217 $startsh
2218 case "\$1\$2" in
2219 '[A-Z][a-z]') exec $tr '$up' '$low';;
2220 '[a-z][A-Z]') exec $tr '$low' '$up';;
2221 esac
2222 exec $tr "\$@"
2223 EOSC
2224 chmod +x tr
2225 $eunicefix tr
2226
2227 : Try to determine whether config.sh was made on this system
2228 case "$config_sh" in
2229 '')
2230 myuname=`$uname -a 2>/dev/null`
2231 $test -z "$myuname" && myuname=`hostname 2>/dev/null`
2232 # tr '[A-Z]' '[a-z]' would not work in EBCDIC
2233 # because the A-Z/a-z are not consecutive.
2234 myuname=`echo $myuname | $sed -e 's/^[^=]*=//' -e 's/\///g' | \
2235         ./tr '[A-Z]' '[a-z]' | $tr $trnl ' '`
2236 newmyuname="$myuname"
2237 dflt=n
2238 case "$knowitall" in
2239 '')
2240         if test -f ../config.sh; then
2241                 if $contains myuname= ../config.sh >/dev/null 2>&1; then
2242                         eval "`grep myuname= ../config.sh`"
2243                 fi
2244                 if test "X$myuname" = "X$newmyuname"; then
2245                         dflt=y
2246                 fi
2247         fi
2248         ;;
2249 *) dflt=y;;
2250 esac
2251
2252 : Get old answers from old config file if Configure was run on the
2253 : same system, otherwise use the hints.
2254 hint=default
2255 cd ..
2256 if test -f config.sh; then
2257         echo " "
2258         rp="I see a config.sh file.  Shall I use it to set the defaults?"
2259         . UU/myread
2260         case "$ans" in
2261         n*|N*) echo "OK, I'll ignore it."; mv config.sh config.sh.old;;
2262         *)  echo "Fetching default answers from your old config.sh file..." >&4
2263                 tmp_n="$n"
2264                 tmp_c="$c"
2265                 tmp_sh="$sh"
2266                 . ./config.sh
2267                 cp config.sh UU
2268                 n="$tmp_n"
2269                 c="$tmp_c"
2270                 : Older versions did not always set $sh.  Catch re-use of such
2271                 : an old config.sh.
2272                 case "$sh" in
2273                 '') sh="$tmp_sh" ;;
2274                 esac
2275                 hint=previous
2276                 ;;
2277         esac
2278 fi
2279 . ./UU/checkcc
2280 if test ! -f config.sh; then
2281         $cat <<EOM
2282
2283 First time through, eh?  I have some defaults handy for some systems
2284 that need some extra help getting the Configure answers right:
2285
2286 EOM
2287         (cd $src/hints; ls -C *.sh) | $sed 's/\.sh/   /g' >&4
2288         dflt=''
2289         : Half the following guesses are probably wrong... If you have better
2290         : tests or hints, please send them to perlbug@perl.org
2291         : The metaconfig authors would also appreciate a copy...
2292         $test -f /irix && osname=irix
2293         $test -f /xenix && osname=sco_xenix
2294         $test -f /dynix && osname=dynix
2295         $test -f /dnix && osname=dnix
2296         $test -f /lynx.os && osname=lynxos
2297         $test -f /unicos && osname=unicos && osvers=`$uname -r`
2298         $test -f /unicosmk && osname=unicosmk && osvers=`$uname -r`
2299         $test -f /unicosmk.ar && osname=unicosmk && osvers=`$uname -r`
2300         $test -f /bin/mips && /bin/mips && osname=mips
2301         $test -d /NextApps && set X `hostinfo | grep 'NeXT Mach.*:' | \
2302                 $sed -e 's/://' -e 's/\./_/'` && osname=next && osvers=$4
2303         $test -d /usr/apollo/bin && osname=apollo
2304         $test -f /etc/saf/_sactab && osname=svr4
2305         $test -d /usr/include/minix && osname=minix
2306         if $test -d /MachTen -o -d /MachTen_Folder; then
2307                 osname=machten
2308                 if $test -x /sbin/version; then
2309                         osvers=`/sbin/version | $awk '{print $2}' |
2310                         $sed -e 's/[A-Za-z]$//'`
2311                 elif $test -x /usr/etc/version; then
2312                         osvers=`/usr/etc/version | $awk '{print $2}' |
2313                         $sed -e 's/[A-Za-z]$//'`
2314                 else
2315                         osvers="$2.$3"
2316                 fi
2317         fi
2318
2319         $test -f /sys/posix.dll &&
2320                 $test -f /usr/bin/what &&
2321                 set X `/usr/bin/what /sys/posix.dll` &&
2322                 $test "$3" = UWIN &&
2323                 osname=uwin &&
2324                 osvers="$5"
2325
2326         if $test -f $uname; then
2327                 set X $myuname
2328                 shift
2329
2330                 case "$5" in
2331                 fps*) osname=fps ;;
2332                 mips*)
2333                         case "$4" in
2334                         umips) osname=umips ;;
2335                         *) osname=mips ;;
2336                         esac;;
2337                 [23]100) osname=mips ;;
2338                 next*) osname=next ;;
2339                 i386*)
2340                         tmp=`/bin/uname -X 2>/dev/null|awk '/3\.2v[45]/{ print $(NF) }'`
2341                         if $test "$tmp" != "" -a "$3" = "3.2" -a -f '/etc/systemid'; then
2342                                 osname='sco'
2343                                 osvers=$tmp
2344                         elif $test -f /etc/kconfig; then
2345                                 osname=isc
2346                                 if test "$lns" = "$ln -s"; then
2347                                         osvers=4
2348                                 elif $contains _SYSV3 /usr/include/stdio.h > /dev/null 2>&1 ; then
2349                                         osvers=3
2350                                 elif $contains _POSIX_SOURCE /usr/include/stdio.h > /dev/null 2>&1 ; then
2351                                         osvers=2
2352                                 fi
2353                         fi
2354                         tmp=''
2355                         ;;
2356                 pc*)
2357                         if test -n "$DJGPP"; then
2358                                 osname=dos
2359                                 osvers=djgpp
2360                         fi
2361                         ;;
2362                 esac
2363
2364                 case "$1" in
2365                 aix) osname=aix
2366                         tmp=`( (oslevel) 2>/dev/null || echo "not found") 2>&1`
2367                         case "$tmp" in
2368                         'not found') osvers="$4"."$3" ;;
2369                         '<3240'|'<>3240') osvers=3.2.0 ;;
2370                         '=3240'|'>3240'|'<3250'|'<>3250') osvers=3.2.4 ;;
2371                         '=3250'|'>3250') osvers=3.2.5 ;;
2372                         *) osvers=$tmp;;
2373                         esac
2374                         ;;
2375                 bsd386) osname=bsd386
2376                         osvers=`$uname -r`
2377                         ;;
2378                 cygwin*) osname=cygwin
2379                         osvers="$3"
2380                         ;;
2381                 *dc.osx) osname=dcosx
2382                         osvers="$3"
2383                         ;;
2384                 dnix) osname=dnix
2385                         osvers="$3"
2386                         ;;
2387                 domainos) osname=apollo
2388                         osvers="$3"
2389                         ;;
2390                 dgux) osname=dgux 
2391                         osvers="$3"
2392                         ;;
2393                 dynixptx*) osname=dynixptx
2394                         osvers=`echo "$4"|sed 's/^v//'`
2395                         ;;
2396                 freebsd) osname=freebsd 
2397                         osvers="$3" ;;
2398                 genix) osname=genix ;;
2399                 hp*) osname=hpux 
2400                         osvers=`echo "$3" | $sed 's,.*\.\([0-9]*\.[0-9]*\),\1,'`
2401                         ;;
2402                 irix*) osname=irix
2403                         case "$3" in
2404                         4*) osvers=4 ;;
2405                         5*) osvers=5 ;;
2406                         *)      osvers="$3" ;;
2407                         esac
2408                         ;;
2409                 linux) osname=linux
2410                         case "$3" in
2411                         *)      osvers="$3" ;;
2412                         esac
2413                         ;;
2414                 MiNT) osname=mint
2415                         ;;
2416                 netbsd*) osname=netbsd
2417                         osvers="$3"
2418                         ;;
2419                 news-os) osvers="$3"
2420                         case "$3" in
2421                         4*) osname=newsos4 ;;
2422                         *) osname=newsos ;;
2423                         esac
2424                         ;;
2425                 next*) osname=next ;;
2426                 POSIX-BC | posix-bc ) osname=posix-bc
2427                         osvers="$3"
2428                         ;;
2429                 powerux | power_ux | powermax_os | powermaxos | \
2430                 powerunix | power_unix) osname=powerux
2431                         osvers="$3"
2432                         ;;
2433                 qnx) osname=qnx
2434                         osvers="$4"
2435                         ;;
2436                 solaris) osname=solaris
2437                         case "$3" in
2438                         5*) osvers=`echo $3 | $sed 's/^5/2/g'` ;;
2439                         *)      osvers="$3" ;;
2440                         esac
2441                         ;;
2442                 sunos) osname=sunos
2443                         case "$3" in
2444                         5*) osname=solaris
2445                                 osvers=`echo $3 | $sed 's/^5/2/g'` ;;
2446                         *)      osvers="$3" ;;
2447                         esac
2448                         ;;
2449                 titanos) osname=titanos
2450                         case "$3" in
2451                         1*) osvers=1 ;;
2452                         2*) osvers=2 ;;
2453                         3*) osvers=3 ;;
2454                         4*) osvers=4 ;;
2455                         *)      osvers="$3" ;;
2456                         esac
2457                         ;;
2458                 ultrix) osname=ultrix
2459                         osvers="$3"
2460                         ;;
2461                 osf1|mls+)      case "$5" in
2462                                 alpha)
2463                                         osname=dec_osf
2464                                         osvers=`sizer -v | awk '{print $3}' |  tr '[A-Z]' '[a-z]' | sed 's/^[xvt]//'`
2465                                         case "$osvers" in
2466                                         [1-9].[0-9]*) ;;
2467                                         *) osvers=`echo "$3" | sed 's/^[xvt]//'` ;;
2468                                         esac
2469                                         ;;
2470                         hp*)    osname=hp_osf1  ;;
2471                         mips)   osname=mips_osf1 ;;
2472                         esac
2473                         ;;
2474                 unixware) osname=svr5
2475                         osvers="$4"
2476                         ;;
2477                 uts) osname=uts
2478                         osvers="$3"
2479                         ;;
2480                 $2) case "$osname" in
2481                         *isc*) ;;
2482                         *freebsd*) ;;
2483                         svr*)
2484                                 : svr4.x or possibly later
2485                                 case "svr$3" in 
2486                                 ${osname}*)
2487                                         osname=svr$3
2488                                         osvers=$4
2489                                         ;;
2490                                 esac
2491                                 case "$osname" in
2492                                 svr4.0)
2493                                         : Check for ESIX
2494                                         if test -f /stand/boot ; then
2495                                                 eval `grep '^INITPROG=[a-z/0-9]*$' /stand/boot`
2496                                                 if test -n "$INITPROG" -a -f "$INITPROG"; then
2497                         isesix=`strings -a $INITPROG|grep 'ESIX SYSTEM V/386 Release 4.0'`
2498                                                         if test -n "$isesix"; then
2499                                                                 osname=esix4
2500                                                         fi
2501                                                 fi
2502                                         fi
2503                                         ;;
2504                                 esac
2505                                 ;;
2506                         *)      if test -f /etc/systemid; then
2507                                         osname=sco
2508                                         set `echo $3 | $sed 's/\./ /g'` $4
2509                                         if $test -f $src/hints/sco_$1_$2_$3.sh; then
2510                                                 osvers=$1.$2.$3
2511                                         elif $test -f $src/hints/sco_$1_$2.sh; then
2512                                                 osvers=$1.$2
2513                                         elif $test -f $src/hints/sco_$1.sh; then
2514                                                 osvers=$1
2515                                         fi
2516                                 else
2517                                         case "$osname" in
2518                                         '') : Still unknown.  Probably a generic Sys V.
2519                                                 osname="sysv"
2520                                                 osvers="$3"
2521                                                 ;;
2522                                         esac
2523                                 fi
2524                                 ;;
2525                         esac
2526                         ;;
2527                 *)      case "$osname" in
2528                         '') : Still unknown.  Probably a generic BSD.
2529                                 osname="$1"
2530                                 osvers="$3"
2531                                 ;;
2532                         esac
2533                         ;;
2534                 esac
2535         else
2536                 if test -f /vmunix -a -f $src/hints/news_os.sh; then
2537                         (what /vmunix | UU/tr '[A-Z]' '[a-z]') > UU/kernel.what 2>&1
2538                         if $contains news-os UU/kernel.what >/dev/null 2>&1; then
2539                                 osname=news_os
2540                         fi
2541                         $rm -f UU/kernel.what
2542                 elif test -d c:/.; then
2543                         set X $myuname
2544                         osname=os2
2545                         osvers="$5"
2546                 fi
2547         fi
2548         
2549         : Now look for a hint file osname_osvers, unless one has been
2550         : specified already.
2551         case "$hintfile" in
2552         ''|' ')
2553                 file=`echo "${osname}_${osvers}" | $sed -e 's%\.%_%g' -e 's%_$%%'`
2554                 : Also try without trailing minor version numbers.
2555                 xfile=`echo $file | $sed -e 's%_[^_]*$%%'`
2556                 xxfile=`echo $xfile | $sed -e 's%_[^_]*$%%'`
2557                 xxxfile=`echo $xxfile | $sed -e 's%_[^_]*$%%'`
2558                 xxxxfile=`echo $xxxfile | $sed -e 's%_[^_]*$%%'`
2559                 case "$file" in
2560                 '') dflt=none ;;
2561                 *)  case "$osvers" in
2562                         '') dflt=$file
2563                                 ;;
2564                         *)  if $test -f $src/hints/$file.sh ; then
2565                                         dflt=$file
2566                                 elif $test -f $src/hints/$xfile.sh ; then
2567                                         dflt=$xfile
2568                                 elif $test -f $src/hints/$xxfile.sh ; then
2569                                         dflt=$xxfile
2570                                 elif $test -f $src/hints/$xxxfile.sh ; then
2571                                         dflt=$xxxfile
2572                                 elif $test -f $src/hints/$xxxxfile.sh ; then
2573                                         dflt=$xxxxfile
2574                                 elif $test -f "$src/hints/${osname}.sh" ; then
2575                                         dflt="${osname}"
2576                                 else
2577                                         dflt=none
2578                                 fi
2579                                 ;;
2580                         esac
2581                         ;;
2582                 esac
2583                 if $test -f Policy.sh ; then
2584                         case "$dflt" in
2585                         *Policy*) ;;
2586                         none) dflt="Policy" ;;
2587                         *) dflt="Policy $dflt" ;;
2588                         esac
2589                 fi
2590                 ;;
2591         *)
2592                 dflt=`echo $hintfile | $sed 's/\.sh$//'`
2593                 ;;
2594         esac
2595
2596         if $test -f Policy.sh ; then
2597                 $cat <<EOM
2598
2599 There's also a Policy hint file available, which should make the
2600 site-specific (policy) questions easier to answer.
2601 EOM
2602
2603         fi
2604
2605         $cat <<EOM
2606
2607 You may give one or more space-separated answers, or "none" if appropriate.
2608 A well-behaved OS will have no hints, so answering "none" or just "Policy"
2609 is a good thing.  DO NOT give a wrong version or a wrong OS.
2610
2611 EOM
2612
2613         rp="Which of these apply, if any?"
2614         . UU/myread
2615         tans=$ans
2616         for file in $tans; do
2617                 if $test X$file = XPolicy -a -f Policy.sh; then
2618                         . Policy.sh
2619                         $cat Policy.sh >> UU/config.sh
2620                 elif $test -f $src/hints/$file.sh; then
2621                         . $src/hints/$file.sh
2622                         $cat $src/hints/$file.sh >> UU/config.sh
2623                 elif $test X$tans = X -o X$tans = Xnone ; then
2624                         : nothing
2625                 else
2626                         : Give one chance to correct a possible typo.
2627                         echo "$file.sh does not exist"
2628                         dflt=$file
2629                         rp="hint to use instead?"
2630                         . UU/myread
2631                         for file in $ans; do
2632                                 if $test -f "$src/hints/$file.sh"; then
2633                                         . $src/hints/$file.sh
2634                                         $cat $src/hints/$file.sh >> UU/config.sh
2635                                 elif $test X$ans = X -o X$ans = Xnone ; then
2636                                         : nothing
2637                                 else
2638                                         echo "$file.sh does not exist -- ignored."
2639                                 fi
2640                         done
2641                 fi
2642         done
2643
2644         hint=recommended
2645         : Remember our hint file for later.
2646         if $test -f "$src/hints/$file.sh" ; then
2647                 hintfile="$file"
2648         else
2649                 hintfile=''
2650         fi
2651 fi
2652 cd UU
2653 ;;
2654 *)
2655         echo " "
2656         echo "Fetching default answers from $config_sh..." >&4
2657         tmp_n="$n"
2658         tmp_c="$c"
2659         cd ..
2660         cp $config_sh config.sh 2>/dev/null
2661         chmod +w config.sh
2662         . ./config.sh
2663         cd UU
2664         cp ../config.sh .
2665         n="$tmp_n"
2666         c="$tmp_c"
2667         hint=previous
2668         ;;
2669 esac
2670 test "$override" && . ./optdef.sh
2671 myuname="$newmyuname"
2672
2673 : Restore computed paths
2674 for file in $loclist $trylist; do
2675         eval $file="\$_$file"
2676 done
2677
2678 cat << EOM
2679
2680 Configure uses the operating system name and version to set some defaults.
2681 The default value is probably right if the name rings a bell. Otherwise,
2682 since spelling matters for me, either accept the default or answer "none"
2683 to leave it blank.
2684
2685 EOM
2686 case "$osname" in
2687         ''|' ')
2688                 case "$hintfile" in
2689                 ''|' '|none) dflt=none ;;
2690                 *)  dflt=`echo $hintfile | $sed -e 's/\.sh$//' -e 's/_.*$//'` ;;
2691                 esac
2692                 ;;
2693         *) dflt="$osname" ;;
2694 esac
2695 rp="Operating system name?"
2696 . ./myread
2697 case "$ans" in
2698 none)  osname='' ;;
2699 *) osname=`echo "$ans" | $sed -e 's/[   ][      ]*/_/g' | ./tr '[A-Z]' '[a-z]'`;;
2700 esac
2701 echo " "
2702 case "$osvers" in
2703         ''|' ')
2704                 case "$hintfile" in
2705                 ''|' '|none) dflt=none ;;
2706                 *)      dflt=`echo $hintfile | $sed -e 's/\.sh$//' -e 's/^[^_]*//'`
2707                         dflt=`echo $dflt | $sed -e 's/^_//' -e 's/_/./g'`
2708                         case "$dflt" in
2709                         ''|' ') dflt=none ;;
2710                         esac
2711                         ;;
2712                 esac
2713                 ;;
2714         *) dflt="$osvers" ;;
2715 esac
2716 rp="Operating system version?"
2717 . ./myread
2718 case "$ans" in
2719 none)  osvers='' ;;
2720 *) osvers="$ans" ;;
2721 esac
2722
2723
2724 . ./posthint.sh
2725
2726 : who configured the system
2727 cf_time=`LC_ALL=C; LANGUAGE=C; export LC_ALL; export LANGUAGE; $date 2>&1`
2728 cf_by=`(logname) 2>/dev/null`
2729 case "$cf_by" in
2730 "")
2731         cf_by=`(whoami) 2>/dev/null`
2732         case "$cf_by" in
2733         "") cf_by=unknown ;;
2734         esac ;;
2735 esac
2736
2737 : set up the script used to warn in case of inconsistency
2738 cat <<EOS >whoa
2739 $startsh
2740 EOS
2741 cat <<'EOSC' >>whoa
2742 dflt=y
2743 echo " "
2744 echo "*** WHOA THERE!!! ***" >&4
2745 echo "    The $hint value for \$$var on this machine was \"$was\"!" >&4
2746 rp="    Keep the $hint value?"
2747 . ./myread
2748 case "$ans" in
2749 y) td=$was; tu=$was;;
2750 esac
2751 EOSC
2752
2753 : function used to set $1 to $val
2754 setvar='var=$1; eval "was=\$$1"; td=$define; tu=$undef;
2755 case "$val$was" in
2756 $define$undef) . ./whoa; eval "$var=\$td";;
2757 $undef$define) . ./whoa; eval "$var=\$tu";;
2758 *) eval "$var=$val";;
2759 esac'
2760
2761 case "$usethreads" in
2762 $define|true|[yY]*)     dflt='y';;
2763 *) dflt='n';;
2764 esac
2765 cat <<EOM
2766
2767 Perl can be built to take advantage of threads on some systems.
2768 To do so, Configure can be run with -Dusethreads.
2769
2770 Note that threading is a highly experimental feature, and
2771 some known race conditions still remain.  If you choose to try
2772 it, be very sure to not actually deploy it for production
2773 purposes.  README.threads has more details, and is required
2774 reading if you enable threads.
2775
2776 If this doesn't make any sense to you, just accept the default '$dflt'.
2777 EOM
2778 rp='Build a threading Perl?'
2779 . ./myread
2780 case "$ans" in
2781 y|Y)    val="$define" ;;
2782 *)      val="$undef" ;;
2783 esac
2784 set usethreads
2785 eval $setvar
2786
2787 case "$usethreads" in
2788 $define)
2789         $cat <<EOM
2790
2791 As of 5.5.640, Perl has two different internal threading implementations,
2792 the 5.005 version (5005threads) and an interpreter-based version
2793 (ithreads) that has one interpreter per thread.  Both are very 
2794 experimental.  This arrangement exists to help developers work out
2795 which one is better.
2796
2797 If you're a casual user, you probably don't want interpreter-threads
2798 at this time.  There doesn't yet exist a way to create threads from
2799 within Perl in this model, i.e., "use Thread;" will NOT work.
2800 EOM
2801         : Default to ithreads unless overridden on command line or with
2802         : old config.sh
2803         dflt='y'
2804         case "$use5005threads" in
2805                 $define|true|[yY]*) dflt='n';;
2806         esac
2807         case "$useithreads" in
2808                 $undef|false|[nN]*) dflt='n';;
2809         esac
2810         rp='Use interpreter-based ithreads?'
2811         . ./myread
2812         case "$ans" in
2813         y|Y)    val="$define" ;;
2814         *)      val="$undef" ;;
2815         esac
2816         set useithreads
2817         eval $setvar
2818         : Now set use5005threads to the opposite value.
2819         case "$useithreads" in
2820         $define) val="$undef" ;;
2821         *) val="$define" ;;
2822         esac
2823         set use5005threads
2824         eval $setvar
2825         ;;
2826 *)
2827         useithreads="$undef"
2828         use5005threads="$undef"
2829         ;;
2830 esac
2831
2832 case "$d_oldpthreads" in
2833 '')     : Configure tests would be welcome here.  For now, assume undef.
2834         val="$undef" ;;
2835 *)      val="$d_oldpthreads" ;;
2836 esac
2837 set d_oldpthreads
2838 eval $setvar
2839
2840
2841 case "$usethreads" in
2842 "$define"|true|[yY]*)
2843 : Look for a hint-file generated 'call-back-unit'.  If the
2844 : user has specified that a threading perl is to be built,
2845 : we may need to set or change some other defaults.
2846         if $test -f usethreads.cbu; then
2847                 echo "Your platform has some specific hints for threaded builds, using them..."
2848                 . ./usethreads.cbu
2849         else
2850                 $cat <<EOM
2851 (Your platform doesn't have any specific hints for threaded builds.
2852  Assuming POSIX threads, then.)
2853 EOM
2854         fi
2855         ;;
2856 esac
2857
2858 cat <<EOM
2859
2860 Perl can be built so that multiple Perl interpreters can coexist
2861 within the same Perl executable.
2862 EOM
2863
2864 case "$useithreads" in
2865 $define)
2866         cat <<EOM
2867 This multiple interpreter support is required for interpreter-based threads.
2868 EOM
2869         val="$define"
2870         ;;
2871 *)      case "$usemultiplicity" in
2872         $define|true|[yY]*)     dflt='y';;
2873         *) dflt='n';;
2874         esac
2875         echo " "
2876         echo "If this doesn't make any sense to you, just accept the default '$dflt'."
2877         rp='Build Perl for multiplicity?'
2878         . ./myread
2879         case "$ans" in
2880         y|Y)    val="$define" ;;
2881         *)      val="$undef" ;;
2882         esac
2883         ;;
2884 esac
2885 set usemultiplicity
2886 eval $setvar
2887
2888 : determine where manual pages are on this system
2889 echo " "
2890 case "$sysman" in
2891 '') 
2892         syspath='/usr/man/man1 /usr/man/mann /usr/man/manl /usr/man/local/man1'
2893         syspath="$syspath /usr/man/u_man/man1 /usr/share/man/man1"
2894         syspath="$syspath /usr/catman/u_man/man1 /usr/man/l_man/man1"
2895         syspath="$syspath /usr/local/man/u_man/man1 /usr/local/man/l_man/man1"
2896         syspath="$syspath /usr/man/man.L /local/man/man1 /usr/local/man/man1"
2897         sysman=`./loc . /usr/man/man1 $syspath`
2898         ;;
2899 esac
2900 if $test -d "$sysman"; then
2901         echo "System manual is in $sysman." >&4
2902 else
2903         echo "Could not find manual pages in source form." >&4
2904 fi
2905
2906 : see what memory models we can support
2907 case "$models" in
2908 '')
2909         $cat >pdp11.c <<'EOP'
2910 int main() {
2911 #ifdef pdp11
2912         exit(0);
2913 #else
2914         exit(1);
2915 #endif
2916 }
2917 EOP
2918         case "$cc" in
2919         '') modelcc="$cc" ;;
2920         *) modelcc="cc" ;;
2921         esac
2922         ( $modelcc -o pdp11 pdp11.c ) >/dev/null 2>&1
2923         if $test -f pdp11 && ./pdp11 2>/dev/null; then
2924                 dflt='unsplit split'
2925         else
2926                 tans=`./loc . X /lib/small /lib/large /usr/lib/small /usr/lib/large /lib/medium /usr/lib/medium /lib/huge`
2927                 case "$tans" in
2928                 X) dflt='none';;
2929                 *) if $test -d /lib/small || $test -d /usr/lib/small; then
2930                                 dflt='small'
2931                         else
2932                                 dflt=''
2933                         fi
2934                         if $test -d /lib/medium || $test -d /usr/lib/medium; then
2935                                 dflt="$dflt medium"
2936                         fi
2937                         if $test -d /lib/large || $test -d /usr/lib/large; then
2938                                 dflt="$dflt large"
2939                         fi
2940                         if $test -d /lib/huge || $test -d /usr/lib/huge; then
2941                                 dflt="$dflt huge"
2942                         fi
2943                 esac
2944         fi;;
2945 *) dflt="$models";;
2946 esac
2947 $cat <<EOM
2948  
2949 Some systems have different model sizes.  On most systems they are called
2950 small, medium, large, and huge.  On the PDP11 they are called unsplit and
2951 split.  If your system doesn't support different memory models, say "none".
2952 If you wish to force everything to one memory model, say "none" here and
2953 put the appropriate flags later when it asks you for other cc and ld flags.
2954 Venix systems may wish to put "none" and let the compiler figure things out.
2955 (In the following question multiple model names should be space separated.)
2956
2957 The default for most systems is "none".
2958
2959 EOM
2960 rp="Which memory models are supported?"
2961 . ./myread
2962 models="$ans"
2963
2964 case "$models" in
2965 none)
2966         small=''
2967         medium=''
2968         large=''
2969         huge=''
2970         unsplit=''
2971         split=''
2972         ;;
2973 *split)
2974         case "$split" in
2975         '') if $contains '\-i' $sysman/ld.1 >/dev/null 2>&1 || \
2976                          $contains '\-i' $sysman/cc.1 >/dev/null 2>&1; then
2977                         dflt='-i'
2978                 else
2979                         dflt='none'
2980                 fi;;
2981         *) dflt="$split";;
2982         esac
2983         rp="What flag indicates separate I and D space?"
2984         . ./myread
2985         tans="$ans"
2986         case "$tans" in
2987         none) tans='';;
2988         esac
2989         split="$tans"
2990         unsplit='';;
2991 *large*|*small*|*medium*|*huge*)
2992         case "$models" in
2993         *large*)
2994                 case "$large" in
2995                 '') dflt='-Ml';;
2996                 *) dflt="$large";;
2997                 esac
2998         rp="What flag indicates large model?"
2999         . ./myread
3000         tans="$ans"
3001         case "$tans" in
3002         none) tans='';
3003         esac
3004         large="$tans";;
3005         *) large='';;
3006         esac
3007         case "$models" in
3008         *huge*) case "$huge" in
3009                 '') dflt='-Mh';;
3010                 *) dflt="$huge";;
3011                 esac
3012                 rp="What flag indicates huge model?"
3013                 . ./myread
3014                 tans="$ans"
3015                 case "$tans" in
3016                 none) tans='';
3017                 esac
3018                 huge="$tans";;
3019         *) huge="$large";;
3020         esac
3021         case "$models" in
3022         *medium*) case "$medium" in
3023                 '') dflt='-Mm';;
3024                 *) dflt="$medium";;
3025                 esac
3026                 rp="What flag indicates medium model?"
3027                 . ./myread
3028                 tans="$ans"
3029                 case "$tans" in
3030                 none) tans='';
3031                 esac
3032                 medium="$tans";;
3033         *) medium="$large";;
3034         esac
3035         case "$models" in
3036         *small*) case "$small" in
3037                 '') dflt='none';;
3038                 *) dflt="$small";;
3039                 esac
3040                 rp="What flag indicates small model?"
3041                 . ./myread
3042                 tans="$ans"
3043                 case "$tans" in
3044                 none) tans='';
3045                 esac
3046                 small="$tans";;
3047         *) small='';;
3048         esac
3049         ;;
3050 *)
3051         echo "Unrecognized memory models--you may have to edit Makefile.SH" >&4
3052         ;;
3053 esac
3054 $rm -f pdp11.* pdp11
3055
3056 : make some quick guesses about what we are up against
3057 echo " "
3058 $echo $n "Hmm...  $c"
3059 echo exit 1 >bsd
3060 echo exit 1 >usg
3061 echo exit 1 >v7
3062 echo exit 1 >osf1
3063 echo exit 1 >eunice
3064 echo exit 1 >xenix
3065 echo exit 1 >venix
3066 echo exit 1 >os2
3067 d_bsd="$undef"
3068 $cat /usr/include/signal.h /usr/include/sys/signal.h >foo 2>/dev/null
3069 if test -f /osf_boot || $contains 'OSF/1' /usr/include/ctype.h >/dev/null 2>&1
3070 then
3071         echo "Looks kind of like an OSF/1 system, but we'll see..."
3072         echo exit 0 >osf1
3073 elif test `echo abc | tr a-z A-Z` = Abc ; then
3074         xxx=`./loc addbib blurfl $pth`
3075         if $test -f $xxx; then
3076         echo "Looks kind of like a USG system with BSD features, but we'll see..."
3077                 echo exit 0 >bsd
3078                 echo exit 0 >usg
3079         else
3080                 if $contains SIGTSTP foo >/dev/null 2>&1 ; then
3081                         echo "Looks kind of like an extended USG system, but we'll see..."
3082                 else
3083                         echo "Looks kind of like a USG system, but we'll see..."
3084                 fi
3085                 echo exit 0 >usg
3086         fi
3087 elif $contains SIGTSTP foo >/dev/null 2>&1 ; then
3088         echo "Looks kind of like a BSD system, but we'll see..."
3089         d_bsd="$define"
3090         echo exit 0 >bsd
3091 else
3092         echo "Looks kind of like a Version 7 system, but we'll see..."
3093         echo exit 0 >v7
3094 fi
3095 case "$eunicefix" in
3096 *unixtovms*)
3097         $cat <<'EOI'
3098 There is, however, a strange, musty smell in the air that reminds me of
3099 something...hmm...yes...I've got it...there's a VMS nearby, or I'm a Blit.
3100 EOI
3101         echo exit 0 >eunice
3102         d_eunice="$define"
3103 : it so happens the Eunice I know will not run shell scripts in Unix format
3104         ;;
3105 *)
3106         echo " "
3107         echo "Congratulations.  You aren't running Eunice."
3108         d_eunice="$undef"
3109         ;;
3110 esac
3111 : Detect OS2.  The p_ variable is set above in the Head.U unit.
3112 case "$p_" in
3113 :) ;;
3114 *)
3115         $cat <<'EOI'
3116 I have the feeling something is not exactly right, however...don't tell me...
3117 lemme think...does HAL ring a bell?...no, of course, you're only running OS/2!
3118 EOI
3119         echo exit 0 >os2
3120         ;;
3121 esac
3122 if test -f /xenix; then
3123         echo "Actually, this looks more like a XENIX system..."
3124         echo exit 0 >xenix
3125         d_xenix="$define"
3126 else
3127         echo " "
3128         echo "It's not Xenix..."
3129         d_xenix="$undef"
3130 fi
3131 chmod +x xenix
3132 $eunicefix xenix
3133 if test -f /venix; then
3134         echo "Actually, this looks more like a VENIX system..."
3135         echo exit 0 >venix
3136 else
3137         echo " "
3138         if ./xenix; then
3139                 : null
3140         else
3141                 echo "Nor is it Venix..."
3142         fi
3143 fi
3144 chmod +x bsd usg v7 osf1 eunice xenix venix os2
3145 $eunicefix bsd usg v7 osf1 eunice xenix venix os2
3146 $rm -f foo
3147
3148 : see if we need a special compiler
3149 echo " "
3150 if ./usg; then
3151         case "$cc" in
3152         '') case "$Mcc" in
3153                 /*) dflt='Mcc';;
3154                 *) case "$large" in
3155                         -M*) dflt='cc';;
3156                         *)      if $contains '\-M' $sysman/cc.1 >/dev/null 2>&1 ; then
3157                                         if $contains '\-M' $sysman/cpp.1 >/dev/null 2>&1; then
3158                                                 dflt='cc'
3159                                         else
3160                                                 dflt='cc -M'
3161                                         fi
3162                                 else
3163                                         dflt='cc'
3164                                 fi;;
3165                         esac;;
3166                 esac;;
3167         *)  dflt="$cc";;
3168         esac
3169         case "$dflt" in
3170         *M*)    $cat <<'EOM'
3171 On some older systems the default C compiler will not resolve multiple global
3172 references that happen to have the same name.  On some such systems the "Mcc"
3173 command may be used to force these to be resolved.  On other systems a "cc -M"
3174 command is required.  (Note that the -M flag on other systems indicates a
3175 memory model to use!) If you have the Gnu C compiler, you might wish to use
3176 that instead.
3177
3178 EOM
3179         ;;
3180         esac
3181         rp="Use which C compiler?"
3182         . ./myread
3183         cc="$ans"
3184 else
3185         case "$cc" in
3186         '') dflt=cc;;
3187         *) dflt="$cc";;
3188         esac
3189         rp="Use which C compiler?"
3190         . ./myread
3191         cc="$ans"
3192 fi
3193 : Look for a hint-file generated 'call-back-unit'.  Now that the
3194 : user has specified the compiler, we may need to set or change some
3195 : other defaults.
3196 if $test -f cc.cbu; then
3197     . ./cc.cbu
3198 fi
3199 . ./checkcc
3200
3201 echo " "
3202 echo "Checking for GNU cc in disguise and/or its version number..." >&4
3203 $cat >gccvers.c <<EOM
3204 #include <stdio.h>
3205 int main() {
3206 #ifdef __GNUC__
3207 #ifdef __VERSION__
3208         printf("%s\n", __VERSION__);
3209 #else
3210         printf("%s\n", "1");
3211 #endif
3212 #endif
3213         exit(0);
3214 }
3215 EOM
3216 if $cc $ldflags -o gccvers gccvers.c; then
3217         gccversion=`./gccvers`
3218         case "$gccversion" in
3219         '') echo "You are not using GNU cc." ;;
3220         *)  echo "You are using GNU cc $gccversion."
3221             ccname=gcc  
3222             ;;
3223         esac
3224 else
3225         echo " "
3226         echo "*** WHOA THERE!!! ***" >&4
3227         echo "    Your C compiler \"$cc\" doesn't seem to be working!" >&4
3228         case "$knowitall" in
3229         '')
3230         echo "    You'd better start hunting for one and let me know about it." >&4
3231                 exit 1
3232                 ;;
3233         esac
3234 fi
3235 $rm -f gccvers*
3236 case "$gccversion" in
3237 1*) cpp=`./loc gcc-cpp $cpp $pth` ;;
3238 esac
3239 case "$gccversion" in
3240 '') gccosandvers='' ;;
3241 *) gccshortvers=`echo "$gccversion"|sed 's/ .*//'`
3242    gccosandvers=`$cc -v 2>&1|grep '/specs$'|sed "s!.*/[^-/]*-[^-/]*-\([^-/]*\)/$gccshortvers/specs!\1!"`
3243    gccshortvers=''
3244    case "$gccosandvers" in
3245    $osname) gccosandvers='' ;; # linux gccs seem to have no linux osvers, grr
3246    $osname$osvers) ;; # looking good
3247    $osname*) cat <<EOM >&4
3248
3249 *** WHOA THERE!!! ***
3250
3251     Your gcc has not been compiled for the exact release of
3252     your operating system ($gccosandvers versus $osname$osvers).
3253
3254     In general it is a good idea to keep gcc synchronized with
3255     the operating system because otherwise serious problems
3256     may ensue when trying to compile software, like Perl.
3257
3258     I'm trying to be optimistic here, though, and will continue.
3259     If later during the configuration and build icky compilation
3260     problems appear (headerfile conflicts being the most common
3261     manifestation), I suggest reinstalling the gcc to match
3262     your operating system release.
3263
3264 EOM
3265       ;;
3266    *) gccosandvers='' ;; # failed to parse, better be silent
3267    esac
3268    ;;
3269 esac
3270 case "$ccname" in
3271 '') ccname="$cc" ;;
3272 esac
3273
3274 : see how we invoke the C preprocessor
3275 echo " "
3276 echo "Now, how can we feed standard input to your C preprocessor..." >&4
3277 cat <<'EOT' >testcpp.c
3278 #define ABC abc
3279 #define XYZ xyz
3280 ABC.XYZ
3281 EOT
3282 cd ..
3283 if test ! -f cppstdin; then
3284         if test "X$osname" = "Xaix" -a "X$gccversion" = X; then
3285                 # AIX cc -E doesn't show the absolute headerfile
3286                 # locations but we'll cheat by using the -M flag.
3287                 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
3288         else
3289                 echo 'cat >.$$.c; '"$cc"' -E ${1+"$@"} .$$.c; rm .$$.c' >cppstdin
3290         fi
3291 else
3292         echo "Keeping your $hint cppstdin wrapper."
3293 fi
3294 chmod 755 cppstdin
3295 wrapper=`pwd`/cppstdin
3296 ok='false'
3297 cd UU
3298
3299 if $test "X$cppstdin" != "X" && \
3300         $cppstdin $cppminus <testcpp.c >testcpp.out 2>&1 && \
3301         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
3302 then
3303         echo "You used to use $cppstdin $cppminus so we'll use that again."
3304         case "$cpprun" in
3305         '') echo "But let's see if we can live without a wrapper..." ;;
3306         *)
3307                 if $cpprun $cpplast <testcpp.c >testcpp.out 2>&1 && \
3308                         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
3309                 then
3310                         echo "(And we'll use $cpprun $cpplast to preprocess directly.)"
3311                         ok='true'
3312                 else
3313                         echo "(However, $cpprun $cpplast does not work, let's see...)"
3314                 fi
3315                 ;;
3316         esac
3317 else
3318         case "$cppstdin" in
3319         '') ;;
3320         *)
3321                 echo "Good old $cppstdin $cppminus does not seem to be of any help..."
3322                 ;;
3323         esac
3324 fi
3325
3326 if $ok; then
3327         : nothing
3328 elif echo 'Maybe "'"$cc"' -E" will work...'; \
3329         $cc -E <testcpp.c >testcpp.out 2>&1; \
3330         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3331         echo "Yup, it does."
3332         x_cpp="$cc -E"
3333         x_minus='';
3334 elif echo 'Nope...maybe "'"$cc"' -E -" will work...'; \
3335         $cc -E - <testcpp.c >testcpp.out 2>&1; \
3336         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3337         echo "Yup, it does."
3338         x_cpp="$cc -E"
3339         x_minus='-';
3340 elif echo 'Nope...maybe "'"$cc"' -P" will work...'; \
3341         $cc -P <testcpp.c >testcpp.out 2>&1; \
3342         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3343         echo "Yipee, that works!"
3344         x_cpp="$cc -P"
3345         x_minus='';
3346 elif echo 'Nope...maybe "'"$cc"' -P -" will work...'; \
3347         $cc -P - <testcpp.c >testcpp.out 2>&1; \
3348         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3349         echo "At long last!"
3350         x_cpp="$cc -P"
3351         x_minus='-';
3352 elif echo 'No such luck, maybe "'$cpp'" will work...'; \
3353         $cpp <testcpp.c >testcpp.out 2>&1; \
3354         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3355         echo "It works!"
3356         x_cpp="$cpp"
3357         x_minus='';
3358 elif echo 'Nixed again...maybe "'$cpp' -" will work...'; \
3359         $cpp - <testcpp.c >testcpp.out 2>&1; \
3360         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3361         echo "Hooray, it works!  I was beginning to wonder."
3362         x_cpp="$cpp"
3363         x_minus='-';
3364 elif echo 'Uh-uh.  Time to get fancy.  Trying a wrapper...'; \
3365         $wrapper <testcpp.c >testcpp.out 2>&1; \
3366         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3367         x_cpp="$wrapper"
3368         x_minus=''
3369         echo "Eureka!"
3370 else
3371         dflt=''
3372         rp="No dice.  I can't find a C preprocessor.  Name one:"
3373         . ./myread
3374         x_cpp="$ans"
3375         x_minus=''
3376         $x_cpp <testcpp.c >testcpp.out 2>&1
3377         if $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3378                 echo "OK, that will do." >&4
3379         else
3380 echo "Sorry, I can't get that to work.  Go find one and rerun Configure." >&4
3381                 exit 1
3382         fi
3383 fi
3384
3385 case "$ok" in
3386 false)
3387         cppstdin="$x_cpp"
3388         cppminus="$x_minus"
3389         cpprun="$x_cpp"
3390         cpplast="$x_minus"
3391         set X $x_cpp
3392         shift
3393         case "$1" in
3394         "$cpp")
3395                 echo "Perhaps can we force $cc -E using a wrapper..."
3396                 if $wrapper <testcpp.c >testcpp.out 2>&1; \
3397                         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
3398                 then
3399                         echo "Yup, we can."
3400                         cppstdin="$wrapper"
3401                         cppminus='';
3402                 else
3403                         echo "Nope, we'll have to live without it..."
3404                 fi
3405                 ;;
3406         esac
3407         case "$cpprun" in
3408         "$wrapper")
3409                 cpprun=''
3410                 cpplast=''
3411                 ;;
3412         esac
3413         ;;
3414 esac
3415
3416 case "$cppstdin" in
3417 "$wrapper"|'cppstdin') ;;
3418 *) $rm -f $wrapper;;
3419 esac
3420 $rm -f testcpp.c testcpp.out
3421
3422 : decide how portable to be.  Allow command line overrides.
3423 case "$d_portable" in
3424 "$undef") ;;
3425 *)      d_portable="$define" ;;
3426 esac
3427
3428 : set up shell script to do ~ expansion
3429 cat >filexp <<EOSS
3430 $startsh
3431 : expand filename
3432 case "\$1" in
3433  ~/*|~)
3434         echo \$1 | $sed "s|~|\${HOME-\$LOGDIR}|"
3435         ;;
3436  ~*)
3437         if $test -f /bin/csh; then
3438                 /bin/csh -f -c "glob \$1"
3439                 failed=\$?
3440                 echo ""
3441                 exit \$failed
3442         else
3443                 name=\`$expr x\$1 : '..\([^/]*\)'\`
3444                 dir=\`$sed -n -e "/^\${name}:/{s/^[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:\([^:]*\).*"'\$'"/\1/" -e p -e q -e '}' </etc/passwd\`
3445                 if $test ! -d "\$dir"; then
3446                         me=\`basename \$0\`
3447                         echo "\$me: can't locate home directory for: \$name" >&2
3448                         exit 1
3449                 fi
3450                 case "\$1" in
3451                 */*)
3452                         echo \$dir/\`$expr x\$1 : '..[^/]*/\(.*\)'\`
3453                         ;;
3454                 *)
3455                         echo \$dir
3456                         ;;
3457                 esac
3458         fi
3459         ;;
3460 *)
3461         echo \$1
3462         ;;
3463 esac
3464 EOSS
3465 chmod +x filexp
3466 $eunicefix filexp
3467
3468 : now set up to get a file name
3469 cat <<EOS >getfile
3470 $startsh
3471 EOS
3472 cat <<'EOSC' >>getfile
3473 tilde=''
3474 fullpath=''
3475 already=''
3476 skip=''
3477 none_ok=''
3478 exp_file=''
3479 nopath_ok=''
3480 orig_rp="$rp"
3481 orig_dflt="$dflt"
3482 case "$gfpth" in
3483 '') gfpth='.' ;;
3484 esac
3485
3486 case "$fn" in
3487 *\(*)
3488         expr $fn : '.*(\(.*\)).*' | tr ',' $trnl >getfile.ok
3489         fn=`echo $fn | sed 's/(.*)//'`
3490         ;;
3491 esac
3492
3493 case "$fn" in
3494 *:*)
3495         loc_file=`expr $fn : '.*:\(.*\)'`
3496         fn=`expr $fn : '\(.*\):.*'`
3497         ;;
3498 esac
3499
3500 case "$fn" in
3501 *~*) tilde=true;;
3502 esac
3503 case "$fn" in
3504 */*) fullpath=true;;
3505 esac
3506 case "$fn" in
3507 *+*) skip=true;;
3508 esac
3509 case "$fn" in
3510 *n*) none_ok=true;;
3511 esac
3512 case "$fn" in
3513 *e*) exp_file=true;;
3514 esac
3515 case "$fn" in
3516 *p*) nopath_ok=true;;
3517 esac
3518
3519 case "$fn" in
3520 *f*) type='File';;
3521 *d*) type='Directory';;
3522 *l*) type='Locate';;
3523 esac
3524
3525 what="$type"
3526 case "$what" in
3527 Locate) what='File';;
3528 esac
3529
3530 case "$exp_file" in
3531 '')
3532         case "$d_portable" in
3533         "$define") ;;
3534         *) exp_file=true;;
3535         esac
3536         ;;
3537 esac
3538
3539 cd ..
3540 while test "$type"; do
3541         redo=''
3542         rp="$orig_rp"
3543         dflt="$orig_dflt"
3544         case "$tilde" in
3545         true) rp="$rp (~name ok)";;
3546         esac
3547         . UU/myread
3548         if test -f UU/getfile.ok && \
3549                 $contains "^$ans\$" UU/getfile.ok >/dev/null 2>&1
3550         then
3551                 value="$ans"
3552                 ansexp="$ans"
3553                 break
3554         fi
3555         case "$ans" in
3556         none)
3557                 value=''
3558                 ansexp=''
3559                 case "$none_ok" in
3560                 true) type='';;
3561                 esac
3562                 ;;
3563         *)
3564                 case "$tilde" in
3565                 '') value="$ans"
3566                         ansexp="$ans";;
3567                 *)
3568                         value=`UU/filexp $ans`
3569                         case $? in
3570                         0)
3571                                 if test "$ans" != "$value"; then
3572                                         echo "(That expands to $value on this system.)"
3573                                 fi
3574                                 ;;
3575                         *) value="$ans";;
3576                         esac
3577                         ansexp="$value"
3578                         case "$exp_file" in
3579                         '') value="$ans";;
3580                         esac
3581                         ;;
3582                 esac
3583                 case "$fullpath" in
3584                 true)
3585                         case "$ansexp" in
3586                         /*) value="$ansexp" ;;
3587                         [a-zA-Z]:/*) value="$ansexp" ;;
3588                         *)
3589                                 redo=true
3590                                 case "$already" in
3591                                 true)
3592                                 echo "I shall only accept a full path name, as in /bin/ls." >&4
3593                                 echo "Use a ! shell escape if you wish to check pathnames." >&4
3594                                         ;;
3595                                 *)
3596                                 echo "Please give a full path name, starting with slash." >&4
3597                                         case "$tilde" in
3598                                         true)
3599                                 echo "Note that using ~name is ok provided it expands well." >&4
3600                                                 already=true
3601                                                 ;;
3602                                         esac
3603                                 esac
3604                                 ;;
3605                         esac
3606                         ;;
3607                 esac
3608                 case "$redo" in
3609                 '')
3610                         case "$type" in
3611                         File)
3612                                 for fp in $gfpth; do
3613                                         if test "X$fp" = X.; then
3614                                             pf="$ansexp"
3615                                         else    
3616                                             pf="$fp/$ansexp"
3617                                         fi
3618                                         if test -f "$pf"; then
3619                                                 type=''
3620                                         elif test -r "$pf" || (test -h "$pf") >/dev/null 2>&1
3621                                         then
3622                                                 echo "($value is not a plain file, but that's ok.)"
3623                                                 type=''
3624                                         fi
3625                                         if test X"$type" = X; then
3626                                             value="$pf"
3627                                             break
3628                                         fi
3629                                 done
3630                                 ;;
3631                         Directory)
3632                                 for fp in $gfpth; do
3633                                         if test "X$fp" = X.; then
3634                                             dir="$ans"
3635                                             direxp="$ansexp"
3636                                         else    
3637                                             dir="$fp/$ansexp"
3638                                             direxp="$fp/$ansexp"
3639                                         fi
3640                                         if test -d "$direxp"; then
3641                                                 type=''
3642                                                 value="$dir"
3643                                                 break
3644                                         fi
3645                                 done
3646                                 ;;
3647                         Locate)
3648                                 if test -d "$ansexp"; then
3649                                         echo "(Looking for $loc_file in directory $value.)"
3650                                         value="$value/$loc_file"
3651                                         ansexp="$ansexp/$loc_file"
3652                                 fi
3653                                 if test -f "$ansexp"; then
3654                                         type=''
3655                                 fi
3656                                 case "$nopath_ok" in
3657                                 true)   case "$value" in
3658                                         */*) ;;
3659                                         *)      echo "Assuming $value will be in people's path."
3660                                                 type=''
3661                                                 ;;
3662                                         esac
3663                                         ;;
3664                                 esac
3665                                 ;;
3666                         esac
3667
3668                         case "$skip" in
3669                         true) type='';
3670                         esac
3671
3672                         case "$type" in
3673                         '') ;;
3674                         *)
3675                                 if test "$fastread" = yes; then
3676                                         dflt=y
3677                                 else
3678                                         dflt=n
3679                                 fi
3680                                 rp="$what $value doesn't exist.  Use that name anyway?"
3681                                 . UU/myread
3682                                 dflt=''
3683                                 case "$ans" in
3684                                 y*) type='';;
3685                                 *) echo " ";;
3686                                 esac
3687                                 ;;
3688                         esac
3689                         ;;
3690                 esac
3691                 ;;
3692         esac
3693 done
3694 cd UU
3695 ans="$value"
3696 rp="$orig_rp"
3697 dflt="$orig_dflt"
3698 rm -f getfile.ok
3699 test "X$gfpthkeep" != Xy && gfpth=""
3700 EOSC
3701
3702 : What should the include directory be ?
3703 echo " "
3704 $echo $n "Hmm...  $c"
3705 dflt='/usr/include'
3706 incpath=''
3707 mips_type=''
3708 if $test -f /bin/mips && /bin/mips; then
3709         echo "Looks like a MIPS system..."
3710         $cat >usr.c <<'EOCP'
3711 #ifdef SYSTYPE_BSD43
3712 /bsd43
3713 #endif
3714 EOCP
3715         if cc -E usr.c > usr.out && $contains / usr.out >/dev/null 2>&1; then
3716                 dflt='/bsd43/usr/include'
3717                 incpath='/bsd43'
3718                 mips_type='BSD 4.3'
3719         else
3720                 mips_type='System V'
3721         fi
3722         $rm -f usr.c usr.out
3723         echo "and you're compiling with the $mips_type compiler and libraries."
3724         xxx_prompt=y
3725         echo "exit 0" >mips
3726 else
3727         echo "Doesn't look like a MIPS system."
3728         xxx_prompt=n
3729         echo "exit 1" >mips
3730 fi
3731 chmod +x mips
3732 $eunicefix mips
3733 case "$usrinc" in
3734 '') ;;
3735 *) dflt="$usrinc";;
3736 esac
3737 case "$xxx_prompt" in
3738 y)      fn=d/
3739         echo " "
3740         rp='Where are the include files you want to use?'
3741         . ./getfile
3742         usrinc="$ans"
3743         ;;
3744 *)      usrinc="$dflt"
3745         ;;
3746 esac
3747
3748 : Set private lib path
3749 case "$plibpth" in
3750 '') if ./mips; then
3751                 plibpth="$incpath/usr/lib /usr/local/lib /usr/ccs/lib"
3752         fi;;
3753 esac
3754 case "$libpth" in
3755 ' ') dlist='';;
3756 '') dlist="$loclibpth $plibpth $glibpth";;
3757 *) dlist="$libpth";;
3758 esac
3759
3760 : Now check and see which directories actually exist, avoiding duplicates
3761 libpth=''
3762 for xxx in $dlist
3763 do
3764     if $test -d $xxx; then
3765                 case " $libpth " in
3766                 *" $xxx "*) ;;
3767                 *) libpth="$libpth $xxx";;
3768                 esac
3769     fi
3770 done
3771 $cat <<'EOM'
3772
3773 Some systems have incompatible or broken versions of libraries.  Among
3774 the directories listed in the question below, please remove any you
3775 know not to be holding relevant libraries, and add any that are needed.
3776 Say "none" for none.
3777
3778 EOM
3779 case "$libpth" in
3780 '') dflt='none';;
3781 *)
3782         set X $libpth
3783         shift
3784         dflt=${1+"$@"}
3785         ;;
3786 esac
3787 rp="Directories to use for library searches?"
3788 . ./myread
3789 case "$ans" in
3790 none) libpth=' ';;
3791 *) libpth="$ans";;
3792 esac
3793
3794 : compute shared library extension
3795 case "$so" in
3796 '')
3797         if xxx=`./loc libc.sl X $libpth`; $test -f "$xxx"; then
3798                 dflt='sl'
3799         else
3800                 dflt='so'
3801         fi
3802         ;;
3803 *) dflt="$so";;
3804 esac
3805 $cat <<EOM
3806
3807 On some systems, shared libraries may be available.  Answer 'none' if
3808 you want to suppress searching of shared libraries for the remainder
3809 of this configuration.
3810
3811 EOM
3812 rp='What is the file extension used for shared libraries?'
3813 . ./myread
3814 so="$ans"
3815
3816 : Define several unixisms.
3817 : Hints files or command line option can be used to override them.
3818 : The convoluted testing is in case hints files set either the old
3819 : or the new name.
3820 case "$_exe" in
3821 '')     case "$exe_ext" in
3822     '') ;;
3823         *)      _exe="$exe_ext" ;;
3824         esac
3825         ;;
3826 esac
3827 case "$_a" in
3828 '')     case "$lib_ext" in
3829     '') _a='.a';;
3830         *)      _a="$lib_ext" ;;
3831         esac
3832         ;;
3833 esac
3834 case "$_o" in
3835 '') case "$obj_ext" in
3836         '')     _o='.o';;
3837         *)      _o="$obj_ext";;
3838         esac
3839         ;;
3840 esac
3841 case "$p_" in
3842 '') case "$path_sep" in
3843         '')     p_=':';;
3844         *)      p_="$path_sep";;
3845         esac
3846         ;;
3847 esac
3848 exe_ext=$_exe
3849 lib_ext=$_a
3850 obj_ext=$_o
3851 path_sep=$p_
3852
3853 : Which makefile gets called first.  This is used by make depend.
3854 case "$firstmakefile" in
3855 '') firstmakefile='makefile';;
3856 esac
3857
3858 case "$usesocks" in
3859 $define|true|[yY]*)     dflt='y';;
3860 *) dflt='n';;
3861 esac
3862 cat <<EOM
3863
3864 Perl can be built to use the SOCKS proxy protocol library.  To do so,
3865 Configure must be run with -Dusesocks.
3866
3867 If this doesn't make any sense to you, just accept the default '$dflt'.
3868 EOM
3869 rp='Build Perl for SOCKS?'
3870 . ./myread
3871 case "$ans" in
3872 y|Y)    val="$define" ;;     
3873 *)      val="$undef" ;;
3874 esac
3875 set usesocks
3876 eval $setvar
3877
3878 : Looking for optional libraries
3879 echo " "
3880 echo "Checking for optional libraries..." >&4
3881 case "$libs" in
3882 ' '|'') dflt='';;
3883 *) dflt="$libs";;
3884 esac
3885 case "$libswanted" in
3886 '') libswanted='c_s';;
3887 esac
3888 case "$usesocks" in
3889 "$define") libswanted="$libswanted socks5 socks5_sh" ;;
3890 esac
3891 libsfound=''
3892 libsfiles=''
3893 libsdirs=''
3894 libspath=''
3895 for thisdir in $libpth $xlibpth; do
3896   test -d $thisdir && libspath="$libspath $thisdir"
3897 done
3898 for thislib in $libswanted; do
3899         for thisdir in $libspath; do
3900             xxx=''
3901             if $test ! -f "$xxx" -a "X$ignore_versioned_solibs" = "X"; then
3902                 xxx=`ls $thisdir/lib$thislib.$so.[0-9] 2>/dev/null|tail -1`
3903                 $test -f "$xxx" && eval $libscheck
3904                 $test -f "$xxx" && libstyle=shared
3905             fi
3906             if test ! -f "$xxx"; then
3907                 xxx=$thisdir/lib$thislib.$so
3908                 $test -f "$xxx" && eval $libscheck
3909                 $test -f "$xxx" && libstyle=shared
3910             fi  
3911             if test ! -f "$xxx"; then
3912                 xxx=$thisdir/lib$thislib$_a
3913                 $test -f "$xxx" && eval $libscheck
3914                 $test -f "$xxx" && libstyle=static
3915             fi
3916             if test ! -f "$xxx"; then
3917                 xxx=$thisdir/$thislib$_a
3918                 $test -f "$xxx" && eval $libscheck
3919                 $test -f "$xxx" && libstyle=static
3920             fi
3921             if test ! -f "$xxx"; then
3922                 xxx=$thisdir/lib${thislib}_s$_a
3923                 $test -f "$xxx" && eval $libscheck
3924                 $test -f "$xxx" && libstyle=static
3925                 $test -f "$xxx" && thislib=${thislib}_s
3926             fi
3927             if test ! -f "$xxx"; then
3928                 xxx=$thisdir/Slib$thislib$_a
3929                 $test -f "$xxx" && eval $libscheck
3930                 $test -f "$xxx" && libstyle=static
3931             fi
3932             if $test -f "$xxx"; then
3933                 case "$libstyle" in
3934                 shared) echo "Found -l$thislib (shared)." ;;
3935                 static) echo "Found -l$thislib." ;;
3936                 *)      echo "Found -l$thislib ($libstyle)." ;;
3937                 esac
3938                 case " $dflt " in
3939                 *"-l$thislib "*);;
3940                 *) dflt="$dflt -l$thislib"
3941                    libsfound="$libsfound $xxx"
3942                    yyy=`basename $xxx`
3943                    libsfiles="$libsfiles $yyy"
3944                    yyy=`echo $xxx|$sed -e "s%/$yyy\\$%%"`
3945                    case " $libsdirs " in
3946                    *" $yyy "*) ;;
3947                    *) libsdirs="$libsdirs $yyy" ;;
3948                    esac
3949                    ;;
3950                 esac
3951                 break
3952             fi  
3953         done
3954         if $test ! -f "$xxx"; then
3955             echo "No -l$thislib."
3956         fi
3957 done
3958 set X $dflt
3959 shift
3960 dflt="$*"
3961 case "$libs" in
3962 '') dflt="$dflt";;
3963 *) dflt="$libs";;
3964 esac
3965 case "$dflt" in
3966 ' '|'') dflt='none';;
3967 esac
3968
3969 $cat <<EOM
3970
3971 In order to compile $package on your machine, a number of libraries
3972 are usually needed.  Include any other special libraries here as well.
3973 Say "none" for none.  The default list is almost always right.
3974 EOM
3975
3976 echo " "
3977 rp="What libraries to use?"
3978 . ./myread
3979 case "$ans" in
3980 none) libs=' ';;
3981 *) libs="$ans";;
3982 esac
3983
3984 : determine optimization, if desired, or use for debug flag also
3985 case "$optimize" in
3986 ' '|$undef) dflt='none';;
3987 '') dflt='-O';;
3988 *) dflt="$optimize";;
3989 esac
3990 $cat <<EOH
3991
3992 By default, $package compiles with the -O flag to use the optimizer.
3993 Alternately, you might want to use the symbolic debugger, which uses
3994 the -g flag (on traditional Unix systems).  Either flag can be
3995 specified here.  To use neither flag, specify the word "none".
3996
3997 EOH
3998 rp="What optimizer/debugger flag should be used?"
3999 . ./myread
4000 optimize="$ans"
4001 case "$optimize" in
4002 'none') optimize=" ";;
4003 esac
4004
4005 dflt=''
4006 : We will not override a previous value, but we might want to
4007 : augment a hint file
4008 case "$hint" in
4009 default|recommended)
4010         case "$gccversion" in
4011         1*) dflt='-fpcc-struct-return' ;;
4012         esac
4013         case "$optimize" in
4014         *-g*) dflt="$dflt -DDEBUGGING";;
4015         esac
4016         case "$gccversion" in
4017         2*) if test -d /etc/conf/kconfig.d &&
4018                         $contains _POSIX_VERSION $usrinc/sys/unistd.h >/dev/null 2>&1
4019                 then
4020                         dflt="$dflt -posix"
4021                 fi
4022                 ;;
4023         esac
4024         case "$gccversion" in
4025         1*) ;;
4026         2.[0-8]*) ;;
4027         ?*)     echo " "
4028                 echo "Checking if your compiler accepts -fno-strict-aliasing" 2>&1
4029                 echo 'int main(void) { return 0; }' > gcctest.c
4030                 if $cc -O2 -fno-strict-aliasing -o gcctest gcctest.c; then
4031                         echo "Yes, it does." 2>&1
4032                         case "$ccflags" in
4033                         *strict-aliasing*) 
4034                                 echo "Leaving current flags $ccflags alone." 2>&1
4035                                 ;;
4036                         *) dflt="$dflt -fno-strict-aliasing" ;;
4037                         esac
4038                 else
4039                         echo "Nope, it doesn't, but that's ok." 2>&1
4040                 fi
4041                 ;;
4042         esac
4043         ;;
4044 esac
4045
4046 case "$mips_type" in
4047 *BSD*|'') inclwanted="$locincpth $usrinc";;
4048 *) inclwanted="$locincpth $inclwanted $usrinc/bsd";;
4049 esac
4050 for thisincl in $inclwanted; do
4051         if $test -d $thisincl; then
4052                 if $test x$thisincl != x$usrinc; then
4053                         case "$dflt" in
4054                         *$thisincl*);;
4055                         *) dflt="$dflt -I$thisincl";;
4056                         esac
4057                 fi
4058         fi
4059 done
4060
4061 inctest='if $contains $2 $usrinc/$1 >/dev/null 2>&1; then
4062         xxx=true;
4063 elif $contains $2 $usrinc/sys/$1 >/dev/null 2>&1; then
4064         xxx=true;
4065 else
4066         xxx=false;
4067 fi;
4068 if $xxx; then
4069         case "$dflt" in
4070         *$2*);;
4071         *) dflt="$dflt -D$2";;
4072         esac;
4073 fi'
4074
4075 set signal.h LANGUAGE_C; eval $inctest
4076
4077 case "$usesocks" in
4078 $define)
4079         ccflags="$ccflags -DSOCKS"
4080         ;;
4081 esac
4082
4083 case "$hint" in
4084 default|recommended) dflt="$ccflags $dflt" ;;
4085 *) dflt="$ccflags";;
4086 esac
4087
4088 case "$dflt" in
4089 ''|' ') dflt=none;;
4090 esac
4091 $cat <<EOH
4092
4093 Your C compiler may want other flags.  For this question you should include
4094 -I/whatever and -DWHATEVER flags and any other flags used by the C compiler,
4095 but you should NOT include libraries or ld flags like -lwhatever.  If you
4096 want $package to honor its debug switch, you should include -DDEBUGGING here.
4097 Your C compiler might also need additional flags, such as -D_POSIX_SOURCE.
4098
4099 To use no flags, specify the word "none".
4100
4101 EOH
4102 set X $dflt
4103 shift
4104 dflt=${1+"$@"}
4105 rp="Any additional cc flags?"
4106 . ./myread
4107 case "$ans" in
4108 none) ccflags='';;
4109 *) ccflags="$ans";;
4110 esac
4111
4112 : the following weeds options from ccflags that are of no interest to cpp
4113 cppflags="$ccflags"
4114 case "$gccversion" in
4115 1*) cppflags="$cppflags -D__GNUC__"
4116 esac
4117 case "$mips_type" in
4118 '');;
4119 *BSD*) cppflags="$cppflags -DSYSTYPE_BSD43";;
4120 esac
4121 case "$cppflags" in
4122 '');;
4123 *)
4124         echo " "
4125         echo "Let me guess what the preprocessor flags are..." >&4
4126         set X $cppflags
4127         shift
4128         cppflags=''
4129         $cat >cpp.c <<'EOM'
4130 #define BLURFL foo
4131
4132 BLURFL xx LFRULB
4133 EOM
4134         previous=''
4135         for flag in $*
4136         do
4137                 case "$flag" in
4138                 -*) ftry="$flag";;
4139                 *) ftry="$previous $flag";;
4140                 esac
4141                 if $cppstdin -DLFRULB=bar $cppflags $ftry $cppminus <cpp.c \
4142                         >cpp1.out 2>/dev/null && \
4143                         $cpprun -DLFRULB=bar $cppflags $ftry $cpplast <cpp.c \
4144                         >cpp2.out 2>/dev/null && \
4145                         $contains 'foo.*xx.*bar' cpp1.out >/dev/null 2>&1 && \
4146                         $contains 'foo.*xx.*bar' cpp2.out >/dev/null 2>&1
4147                 then
4148                         cppflags="$cppflags $ftry"
4149                         previous=''
4150                 else
4151                         previous="$flag"
4152                 fi
4153         done
4154         set X $cppflags
4155         shift
4156         cppflags=${1+"$@"}
4157         case "$cppflags" in
4158         *-*)  echo "They appear to be: $cppflags";;
4159         esac
4160         $rm -f cpp.c cpp?.out
4161         ;;
4162 esac
4163
4164 : flags used in final linking phase
4165 case "$ldflags" in
4166 '') if ./venix; then
4167                 dflt='-i -z'
4168         else
4169                 dflt=''
4170         fi
4171         case "$ccflags" in
4172         *-posix*) dflt="$dflt -posix" ;;
4173         esac
4174         ;;
4175 *) dflt="$ldflags";;
4176 esac
4177
4178 : Try to guess additional flags to pick up local libraries.
4179 for thislibdir in $libpth; do
4180         case " $loclibpth " in
4181         *" $thislibdir "*)
4182                 case "$dflt " in 
4183                 *"-L$thislibdir "*) ;;
4184                 *)  dflt="$dflt -L$thislibdir" ;;
4185                 esac
4186                 ;;
4187         esac
4188 done
4189
4190 case "$dflt" in
4191 '') dflt='none' ;;
4192 esac
4193
4194 $cat <<EOH
4195
4196 Your C linker may need flags.  For this question you should
4197 include -L/whatever and any other flags used by the C linker, but you
4198 should NOT include libraries like -lwhatever.
4199
4200 Make sure you include the appropriate -L/path flags if your C linker
4201 does not normally search all of the directories you specified above,
4202 namely
4203         $libpth
4204 To use no flags, specify the word "none".
4205
4206 EOH
4207
4208 rp="Any additional ld flags (NOT including libraries)?"
4209 . ./myread
4210 case "$ans" in
4211 none) ldflags='';;
4212 *) ldflags="$ans";;
4213 esac
4214 rmlist="$rmlist pdp11"
4215
4216 : coherency check
4217 echo " "
4218 echo "Checking your choice of C compiler and flags for coherency..." >&4
4219 $cat > try.c <<'EOF'
4220 #include <stdio.h>
4221 int main() { printf("Ok\n"); exit(0); }
4222 EOF
4223 set X $cc $optimize $ccflags -o try $ldflags try.c $libs
4224 shift
4225 $cat >try.msg <<'EOM'
4226 I've tried to compile and run the following simple program:
4227
4228 EOM
4229 $cat try.c >> try.msg
4230
4231 $cat >> try.msg <<EOM
4232
4233 I used the command:
4234
4235         $*
4236         ./try
4237
4238 and I got the following output:
4239
4240 EOM
4241 dflt=y
4242 if sh -c "$cc $optimize $ccflags -o try $ldflags try.c $libs" >>try.msg 2>&1; then
4243         if sh -c './try' >>try.msg 2>&1; then
4244                 xxx=`./try`
4245                 case "$xxx" in
4246                 "Ok") dflt=n ;;
4247                 *)      echo 'The program compiled OK, but produced no output.' >> try.msg
4248                         case " $libs " in
4249                         *" -lsfio "*)
4250                                 cat >> try.msg <<'EOQS'
4251 If $libs contains -lsfio, and sfio is mis-configured, then it
4252 sometimes (apparently) runs and exits with a 0 status, but with no
4253 output!  It may have to do with sfio's use of _exit vs. exit.
4254
4255 EOQS
4256                                 rp="You have a big problem.  Shall I abort Configure"
4257                                 dflt=y
4258                                 ;;
4259                         esac
4260                         ;;
4261                 esac
4262         else
4263                 echo "The program compiled OK, but exited with status $?." >>try.msg
4264                 rp="You have a problem.  Shall I abort Configure"
4265                 dflt=y
4266         fi
4267 else
4268         echo "I can't compile the test program." >>try.msg
4269         rp="You have a BIG problem.  Shall I abort Configure"
4270         dflt=y
4271 fi
4272 case "$dflt" in
4273 y)
4274         $cat try.msg >&4
4275         case "$knowitall" in
4276         '')
4277                 echo "(The supplied flags or libraries might be incorrect.)"
4278                 ;;
4279         *) dflt=n;;
4280         esac
4281         echo " "
4282         . ./myread
4283         case "$ans" in
4284         n*|N*) ;;
4285         *)      echo "Ok.  Stopping Configure." >&4
4286                 exit 1
4287                 ;;
4288         esac
4289         ;;
4290 n) echo "OK, that should do.";;
4291 esac
4292 $rm -f try try.* core
4293
4294 : define an is-a-typedef? function
4295 typedef='type=$1; var=$2; def=$3; shift; shift; shift; inclist=$@;
4296 case "$inclist" in
4297 "") inclist="sys/types.h";;
4298 esac;
4299 eval "varval=\$$var";
4300 case "$varval" in
4301 "")
4302         $rm -f temp.c;
4303         for inc in $inclist; do
4304                 echo "#include <$inc>" >>temp.c;
4305         done;
4306         echo "#ifdef $type" >> temp.c;
4307         echo "printf(\"We have $type\");" >> temp.c;
4308         echo "#endif" >> temp.c;
4309         $cppstdin $cppflags $cppminus < temp.c >temp.E 2>/dev/null;
4310         if $contains $type temp.E >/dev/null 2>&1; then
4311                 eval "$var=\$type";
4312         else
4313                 eval "$var=\$def";
4314         fi;
4315         $rm -f temp.?;;
4316 *) eval "$var=\$varval";;
4317 esac'
4318
4319 : define an is-a-typedef? function that prompts if the type is not available.
4320 typedef_ask='type=$1; var=$2; def=$3; shift; shift; shift; inclist=$@;
4321 case "$inclist" in
4322 "") inclist="sys/types.h";;
4323 esac;
4324 eval "varval=\$$var";
4325 case "$varval" in
4326 "")
4327         $rm -f temp.c;
4328         for inc in $inclist; do
4329                 echo "#include <$inc>" >>temp.c;
4330         done;
4331         echo "#ifdef $type" >> temp.c;
4332         echo "printf(\"We have $type\");" >> temp.c;
4333         echo "#endif" >> temp.c;
4334         $cppstdin $cppflags $cppminus < temp.c >temp.E 2>/dev/null;
4335         echo " " ;
4336         echo "$rp" | $sed -e "s/What is/Looking for/" -e "s/?/./";
4337         if $contains $type temp.E >/dev/null 2>&1; then
4338                 echo "$type found." >&4;
4339                 eval "$var=\$type";
4340         else
4341                 echo "$type NOT found." >&4;
4342                 dflt="$def";
4343                 . ./myread ;
4344                 eval "$var=\$ans";
4345         fi;
4346         $rm -f temp.?;;
4347 *) eval "$var=\$varval";;
4348 esac'
4349
4350 : define a shorthand compile call
4351 compile='
4352 mc_file=$1;
4353 shift;
4354 $cc $optimize $ccflags $ldflags -o ${mc_file} $* ${mc_file}.c $libs > /dev/null 2>&1;'
4355 : define a shorthand compile call for compilations that should be ok.
4356 compile_ok='
4357 mc_file=$1;
4358 shift;
4359 $cc $optimize $ccflags $ldflags -o ${mc_file} $* ${mc_file}.c $libs;'
4360
4361 : check for lengths of integral types
4362 echo " "
4363 case "$intsize" in
4364 '')
4365         echo "Checking to see how big your integers are..." >&4
4366         $cat >intsize.c <<'EOCP'
4367 #include <stdio.h>
4368 int main()
4369 {
4370         printf("intsize=%d;\n", (int)sizeof(int));
4371         printf("longsize=%d;\n", (int)sizeof(long));
4372         printf("shortsize=%d;\n", (int)sizeof(short));
4373         exit(0);
4374 }
4375 EOCP
4376         set intsize
4377         if eval $compile_ok && ./intsize > /dev/null; then
4378                 eval `./intsize`
4379                 echo "Your integers are $intsize bytes long."
4380                 echo "Your long integers are $longsize bytes long."
4381                 echo "Your short integers are $shortsize bytes long."
4382         else
4383                 $cat >&4 <<EOM
4384 !
4385 Help! I can't compile and run the intsize test program: please enlighten me!
4386 (This is probably a misconfiguration in your system or libraries, and
4387 you really ought to fix it.  Still, I'll try anyway.)
4388 !
4389 EOM
4390                 dflt=4
4391                 rp="What is the size of an integer (in bytes)?"
4392                 . ./myread
4393                 intsize="$ans"
4394                 dflt=$intsize
4395                 rp="What is the size of a long integer (in bytes)?"
4396                 . ./myread
4397                 longsize="$ans"
4398                 dflt=2
4399                 rp="What is the size of a short integer (in bytes)?"
4400                 . ./myread
4401                 shortsize="$ans"
4402         fi
4403         ;;
4404 esac
4405 $rm -f intsize intsize.*
4406
4407 : see what type lseek is declared as in the kernel
4408 rp="What is the type used for lseek's offset on this system?"
4409 set off_t lseektype long stdio.h sys/types.h
4410 eval $typedef_ask
4411
4412 echo " "
4413 echo "Checking to see how big your file offsets are..." >&4
4414 $cat >try.c <<EOCP
4415 #include <sys/types.h>
4416 #include <stdio.h>
4417 int main()
4418 {
4419     printf("%d\n", (int)sizeof($lseektype));
4420     return(0); 
4421 }
4422 EOCP
4423 set try
4424 if eval $compile_ok; then
4425         lseeksize=`./try`
4426         echo "Your file offsets are $lseeksize bytes long."
4427 else
4428         dflt=$longsize
4429         echo " "
4430         echo "(I can't seem to compile the test program.  Guessing...)"
4431         rp="What is the size of your file offsets (in bytes)?"
4432         . ./myread
4433         lseeksize="$ans"
4434 fi
4435 $rm -f try.c try
4436
4437 : see what type file positions are declared as in the library
4438 rp="What is the type for file position used by fsetpos()?"
4439 set fpos_t fpostype long stdio.h sys/types.h
4440 eval $typedef_ask
4441
4442 echo " "
4443 case "$fpostype" in
4444 *_t) zzz="$fpostype"    ;;
4445 *)   zzz="fpos_t"       ;;
4446 esac
4447 echo "Checking the size of $zzz..." >&4 
4448 cat > try.c <<EOCP
4449 #include <sys/types.h>
4450 #include <stdio.h>
4451 int main() {
4452     printf("%d\n", (int)sizeof($fpostype));
4453     exit(0);
4454 }
4455 EOCP
4456 set try
4457 if eval $compile_ok; then
4458         yyy=`./try`
4459         case "$yyy" in
4460         '')     fpossize=4
4461                 echo "(I can't execute the test program--guessing $fpossize.)" >&4
4462                 ;;
4463         *)      fpossize=$yyy
4464                 echo "Your $zzz is $fpossize bytes long."
4465                 ;;
4466         esac
4467 else
4468         dflt="$longsize"
4469         echo " " >&4
4470         echo "(I can't compile the test program.  Guessing...)" >&4
4471         rp="What is the size of your file positions (in bytes)?"
4472         . ./myread
4473         fpossize="$ans"
4474 fi
4475
4476
4477
4478 # Backward compatibility (uselfs is deprecated).
4479 case "$uselfs" in
4480 "$define"|true|[yY]*)
4481         cat <<EOM >&4
4482
4483 *** Configure -Duselfs is deprecated, using -Duselargefiles instead.
4484 EOM
4485         uselargefiles="$define"
4486         ;;
4487 esac                          
4488
4489 case "$lseeksize:$fpossize" in
4490 8:8) cat <<EOM
4491
4492 You can have files larger than 2 gigabytes.
4493 EOM
4494    val="$define" ;;
4495 *)    case "$uselargefiles" in
4496    "$undef"|false|[nN]*) dflt='n' ;;
4497    *)   dflt='y' ;;
4498    esac
4499    cat <<EOM
4500
4501 Perl can be built to understand large files (files larger than 2 gigabytes)
4502 on some systems.  To do so, Configure can be run with -Duselargefiles.
4503
4504 If this doesn't make any sense to you, just accept the default '$dflt'.
4505 EOM
4506    rp='Try to understand large files, if available?'
4507    . ./myread
4508    case "$ans" in
4509    y|Y)         val="$define" ;;
4510    *)           val="$undef"  ;;
4511    esac
4512    ;;
4513 esac
4514 set uselargefiles
4515 eval $setvar
4516 case "$uselargefiles" in
4517 "$define")
4518 : Look for a hint-file generated 'call-back-unit'.  If the
4519 : user has specified that a large files perl is to be built,
4520 : we may need to set or change some other defaults.
4521         if $test -f uselargefiles.cbu; then
4522                 echo "Your platform has some specific hints for large file builds, using them..."
4523                 . ./uselargefiles.cbu
4524                 echo " "
4525                 echo "Rechecking to see how big your file offsets are..." >&4
4526                 $cat >try.c <<EOCP
4527 #include <sys/types.h>
4528 #include <stdio.h>
4529 int main()
4530 {
4531     printf("%d\n", (int)sizeof($lseektype));
4532     return(0); 
4533 }
4534 EOCP
4535                 set try
4536                 if eval $compile_ok; then
4537                         lseeksize=`./try`
4538                         $echo "Your file offsets are now $lseeksize bytes long."
4539                 else
4540                         dflt="$lseeksize"
4541                         echo " "
4542                         echo "(I can't seem to compile the test program.  Guessing...)"
4543                         rp="What is the size of your file offsets (in bytes)?"
4544                         . ./myread
4545                         lseeksize="$ans"
4546                 fi
4547                 case "$fpostype" in
4548                 *_t) zzz="$fpostype"    ;;
4549                 *)   zzz="fpos_t"       ;;
4550                 esac
4551                 $echo $n "Rechecking the size of $zzz...$c" >&4 
4552                 $cat > try.c <<EOCP
4553 #include <sys/types.h>
4554 #include <stdio.h>
4555 int main() {
4556     printf("%d\n", (int)sizeof($fpostype));
4557     exit(0);
4558 }
4559 EOCP
4560                 set try
4561                 if eval $compile_ok; then
4562                         yyy=`./try`
4563                         dflt="$lseeksize"
4564                         case "$yyy" in
4565                         '')     echo " "
4566                                 echo "(I can't execute the test program--guessing $fpossize.)" >&4
4567                                 ;;
4568                         *)      fpossize=$yyy
4569                                 echo " $fpossize bytes." >&4
4570                                 ;;
4571                         esac
4572                 else
4573                         dflt="$fpossize"
4574                         echo " "
4575                         echo "(I can't compile the test program.  Guessing...)" >&4
4576                         rp="What is the size of your file positions (in bytes)?"
4577                         . ./myread
4578                         fpossize="$ans"
4579                 fi
4580                 $rm -f try.c try
4581         fi
4582         ;;
4583 esac
4584
4585
4586 case "$usemorebits" in
4587 "$define"|true|[yY]*)
4588         use64bitint="$define"
4589         uselongdouble="$define"
4590         usemorebits="$define"
4591         ;;
4592 *)      usemorebits="$undef"
4593         ;;
4594 esac
4595
4596
4597 case "$uselonglong" in
4598 "$define"|true|[yY]*)
4599         cat <<EOM >&4
4600
4601 *** Configure -Duselonglong is deprecated, using -Duse64bitint instead.
4602 EOM
4603         use64bitint="$define"
4604         ;;
4605 esac                          
4606 case "$use64bits" in
4607 "$define"|true|[yY]*)
4608         cat <<EOM >&4
4609
4610 *** Configure -Duse64bits is deprecated, using -Duse64bitint instead.
4611 EOM
4612         use64bitint="$define"
4613         ;;
4614 esac                          
4615 case "$use64bitints" in
4616 "$define"|true|[yY]*)
4617         cat <<EOM >&4
4618
4619 *** There is no Configure -Duse64bitints, using -Duse64bitint instead.
4620 EOM
4621         use64bitint="$define"
4622         ;;
4623 esac                          
4624 case "$use64bitsint" in
4625 "$define"|true|[yY]*)
4626         cat <<EOM >&4
4627
4628 *** There is no Configure -Duse64bitsint, using -Duse64bitint instead.
4629 EOM
4630         use64bitint="$define"
4631         ;;
4632 esac                          
4633 case "$uselonglongs" in
4634 "$define"|true|[yY]*)
4635         cat <<EOM >&4
4636
4637 *** There is no Configure -Duselonglongs, using -Duse64bitint instead.
4638 EOM
4639         use64bitint="$define"
4640         ;;
4641 esac                          
4642 case "$use64bitsall" in
4643 "$define"|true|[yY]*)
4644         cat <<EOM >&4
4645
4646 *** There is no Configure -Duse64bitsall, using -Duse64bitall instead.
4647 EOM
4648         use64bitall="$define"
4649         ;;
4650 esac                          
4651
4652 case "$ccflags" in
4653 *-DUSE_LONG_LONG*|*-DUSE_64_BIT_INT*|*-DUSE_64_BIT_ALL*) use64bitint="$define";;
4654 esac
4655 case "$use64bitall" in
4656 "$define"|true|[yY]*) use64bitint="$define" ;;
4657 esac
4658
4659 case "$longsize" in
4660 8) cat <<EOM
4661
4662 You have natively 64-bit long integers.
4663 EOM
4664    val="$define"
4665    ;;
4666 *) case "$use64bitint" in
4667    "$define"|true|[yY]*) dflt='y';;
4668    *) dflt='n';;
4669    esac
4670    cat <<EOM
4671
4672 Perl can be built to take advantage of 64-bit integer types
4673 on some systems.  To do so, Configure can be run with -Duse64bitint.
4674 Choosing this option will most probably introduce binary incompatibilities.
4675
4676 If this doesn't make any sense to you, just accept the default '$dflt'.
4677 EOM
4678    rp='Try to use 64-bit integers, if available?'
4679    . ./myread
4680    case "$ans" in
4681    [yY]*) val="$define" ;;
4682    *)     val="$undef"  ;;
4683    esac
4684    ;;
4685 esac
4686 set use64bitint
4687 eval $setvar
4688
4689 case "$use64bitall" in
4690 "$define"|true|[yY]*) dflt='y' ;;
4691 *) case "$longsize" in
4692    8) dflt='y' ;;
4693    *) dflt='n' ;;
4694    esac
4695    ;;
4696 esac    
4697 cat <<EOM
4698
4699 You may also choose to try maximal 64-bitness.  It means using as much
4700 64-bitness as possible on the platform.  This in turn means even more
4701 binary incompatibilities.  On the other hand, your platform may not
4702 have any more 64-bitness available than what you already have chosen.
4703
4704 If this doesn't make any sense to you, just accept the default '$dflt'.
4705 EOM
4706 rp='Try to use maximal 64-bit support, if available?'
4707 . ./myread
4708 case "$ans" in
4709 [yY]*) val="$define" ;;
4710 *)     val="$undef"  ;;
4711 esac
4712 set use64bitall
4713 eval $setvar
4714 case "$use64bitall" in
4715 "$define")
4716         case "$use64bitint" in
4717         "$undef")
4718                 cat <<EOM
4719
4720 Since you have chosen a maximally 64-bit build, I'm also turning on
4721 the use of 64-bit integers.
4722 EOM
4723                 use64bitint="$define" ;;
4724         esac
4725         ;;
4726 esac
4727
4728 case "$use64bitint" in
4729 "$define"|true|[yY]*)
4730 : Look for a hint-file generated 'call-back-unit'.  If the
4731 : user has specified that a 64-bit perl is to be built,
4732 : we may need to set or change some other defaults.
4733         if $test -f use64bitint.cbu; then
4734                 echo "Your platform has some specific hints for 64-bit integers, using them..."
4735                 . ./use64bitint.cbu
4736         fi
4737         case "$longsize" in
4738         4) case "$archname64" in
4739            '') archname64=64int ;;
4740            esac
4741            ;;
4742         esac
4743         ;;
4744 esac
4745
4746 case "$use64bitall" in
4747 "$define"|true|[yY]*)
4748 : Look for a hint-file generated 'call-back-unit'.  If the
4749 : user has specified that a maximally 64-bit perl is to be built,
4750 : we may need to set or change some other defaults.
4751         if $test -f use64bitall.cbu; then
4752                 echo "Your platform has some specific hints for 64-bit builds, using them..."
4753                 . ./use64bitall.cbu
4754         fi
4755         case "$longsize" in
4756         4) case "$archname64" in
4757            ''|64int) archname64=64all ;;
4758            esac
4759            ;;
4760         esac
4761         ;;
4762 esac
4763
4764 echo " "
4765 echo "Checking for GNU C Library..." >&4
4766 cat >gnulibc.c <<EOM
4767 #include <stdio.h>
4768 int main()
4769 {
4770 #ifdef __GLIBC__
4771     exit(0);
4772 #else
4773     exit(1);
4774 #endif
4775 }
4776 EOM
4777 set gnulibc
4778 if eval $compile_ok && ./gnulibc; then
4779         val="$define"
4780         echo "You are using the GNU C Library"
4781 else
4782         val="$undef"
4783         echo "You are not using the GNU C Library"
4784 fi
4785 $rm -f gnulibc*
4786 set d_gnulibc
4787 eval $setvar
4788
4789 : see if nm is to be used to determine whether a symbol is defined or not
4790 case "$usenm" in
4791 '')
4792         dflt=''
4793         case "$d_gnulibc" in
4794         "$define")
4795                 echo " "
4796                 echo "nm probably won't work on the GNU C Library." >&4
4797                 dflt=n
4798                 ;;
4799         esac
4800         case "$dflt" in
4801         '') 
4802                 if $test "$osname" = aix -a ! -f /lib/syscalls.exp; then
4803                         echo " "
4804                         echo "Whoops!  This is an AIX system without /lib/syscalls.exp!" >&4
4805                         echo "'nm' won't be sufficient on this sytem." >&4
4806                         dflt=n
4807                 fi
4808                 ;;
4809         esac
4810         case "$dflt" in
4811         '') dflt=`$egrep 'inlibc|csym' $rsrc/Configure | wc -l 2>/dev/null`
4812                 if $test $dflt -gt 20; then
4813                         dflt=y
4814                 else
4815                         dflt=n
4816                 fi
4817                 ;;
4818         esac
4819         ;;
4820 *)
4821         case "$usenm" in
4822         true|$define) dflt=y;;
4823         *) dflt=n;;
4824         esac
4825         ;;
4826 esac
4827 $cat <<EOM
4828
4829 I can use $nm to extract the symbols from your C libraries. This
4830 is a time consuming task which may generate huge output on the disk (up
4831 to 3 megabytes) but that should make the symbols extraction faster. The
4832 alternative is to skip the 'nm' extraction part and to compile a small
4833 test program instead to determine whether each symbol is present. If
4834 you have a fast C compiler and/or if your 'nm' output cannot be parsed,
4835 this may be the best solution.
4836
4837 You probably shouldn't let me use 'nm' if you are using the GNU C Library.
4838
4839 EOM
4840 rp="Shall I use $nm to extract C symbols from the libraries?"
4841 . ./myread
4842 case "$ans" in
4843 [Nn]*) usenm=false;;
4844 *) usenm=true;;
4845 esac
4846
4847 runnm=$usenm
4848 case "$reuseval" in
4849 true) runnm=false;;
4850 esac
4851
4852 : nm options which may be necessary
4853 case "$nm_opt" in
4854 '') if $test -f /mach_boot; then
4855                 nm_opt=''       # Mach
4856         elif $test -d /usr/ccs/lib; then
4857                 nm_opt='-p'     # Solaris (and SunOS?)
4858         elif $test -f /dgux; then
4859                 nm_opt='-p'     # DG-UX
4860         elif $test -f /lib64/rld; then
4861                 nm_opt='-p'     # 64-bit Irix
4862         else
4863                 nm_opt=''
4864         fi;;
4865 esac
4866
4867 : nm options which may be necessary for shared libraries but illegal
4868 : for archive libraries.  Thank you, Linux.
4869 case "$nm_so_opt" in
4870 '')     case "$myuname" in
4871         *linux*)
4872                 if $nm --help | $grep 'dynamic' > /dev/null 2>&1; then
4873                         nm_so_opt='--dynamic'
4874                 fi
4875                 ;;
4876         esac
4877         ;;
4878 esac
4879
4880 case "$runnm" in
4881 true)
4882 : get list of predefined functions in a handy place
4883 echo " "
4884 case "$libc" in
4885 '') libc=unknown
4886         case "$libs" in
4887         *-lc_s*) libc=`./loc libc_s$_a $libc $libpth`
4888         esac
4889         ;;
4890 esac
4891 libnames='';
4892 case "$libs" in
4893 '') ;;
4894 *)  for thislib in $libs; do
4895         case "$thislib" in
4896         -lc|-lc_s)
4897                 : Handle C library specially below.
4898                 ;;
4899         -l*)
4900                 thislib=`echo $thislib | $sed -e 's/^-l//'`
4901                 if try=`./loc lib$thislib.$so.'*' X $libpth`; $test -f "$try"; then
4902                         :
4903                 elif try=`./loc lib$thislib.$so X $libpth`; $test -f "$try"; then
4904                         :
4905                 elif try=`./loc lib$thislib$_a X $libpth`; $test -f "$try"; then
4906                         :
4907                 elif try=`./loc $thislib$_a X $libpth`; $test -f "$try"; then
4908                         :
4909                 elif try=`./loc lib$thislib X $libpth`; $test -f "$try"; then
4910                         :
4911                 elif try=`./loc $thislib X $libpth`; $test -f "$try"; then
4912                         :
4913                 elif try=`./loc Slib$thislib$_a X $xlibpth`; $test -f "$try"; then
4914                         :
4915                 else
4916                         try=''
4917                 fi
4918                 libnames="$libnames $try"
4919                 ;;
4920         *) libnames="$libnames $thislib" ;;
4921         esac
4922         done
4923         ;;
4924 esac
4925 xxx=normal
4926 case "$libc" in
4927 unknown)
4928         set /lib/libc.$so
4929         for xxx in $libpth; do
4930                 $test -r $1 || set $xxx/libc.$so
4931                 : The messy sed command sorts on library version numbers.
4932                 $test -r $1 || \
4933                         set `echo blurfl; echo $xxx/libc.$so.[0-9]* | \
4934                         tr ' ' $trnl | egrep -v '\.[A-Za-z]*$' | $sed -e '
4935                                 h
4936                                 s/[0-9][0-9]*/0000&/g
4937                                 s/0*\([0-9][0-9][0-9][0-9][0-9]\)/\1/g
4938                                 G
4939                                 s/\n/ /' | \
4940                          sort | $sed -e 's/^.* //'`
4941                 eval set \$$#
4942         done
4943         $test -r $1 || set /usr/ccs/lib/libc.$so
4944         $test -r $1 || set /lib/libsys_s$_a
4945         ;;
4946 *)
4947         set blurfl
4948         ;;
4949 esac
4950 if $test -r "$1"; then
4951         echo "Your (shared) C library seems to be in $1."
4952         libc="$1"
4953 elif $test -r /lib/libc && $test -r /lib/clib; then
4954         echo "Your C library seems to be in both /lib/clib and /lib/libc."
4955         xxx=apollo
4956         libc='/lib/clib /lib/libc'
4957         if $test -r /lib/syslib; then
4958                 echo "(Your math library is in /lib/syslib.)"
4959                 libc="$libc /lib/syslib"
4960         fi
4961 elif $test -r "$libc" || (test -h "$libc") >/dev/null 2>&1; then
4962         echo "Your C library seems to be in $libc, as you said before."
4963 elif $test -r $incpath/usr/lib/libc$_a; then
4964         libc=$incpath/usr/lib/libc$_a;
4965         echo "Your C library seems to be in $libc.  That's fine."
4966 elif $test -r /lib/libc$_a; then
4967         libc=/lib/libc$_a;
4968         echo "Your C library seems to be in $libc.  You're normal."
4969 else
4970         if tans=`./loc libc$_a blurfl/dyick $libpth`; $test -r "$tans"; then
4971                 :
4972         elif tans=`./loc libc blurfl/dyick $libpth`; $test -r "$tans"; then
4973                 libnames="$libnames "`./loc clib blurfl/dyick $libpth`
4974         elif tans=`./loc clib blurfl/dyick $libpth`; $test -r "$tans"; then
4975                 :
4976         elif tans=`./loc Slibc$_a blurfl/dyick $xlibpth`; $test -r "$tans"; then
4977                 :
4978         elif tans=`./loc Mlibc$_a blurfl/dyick $xlibpth`; $test -r "$tans"; then
4979                 :
4980         else
4981                 tans=`./loc Llibc$_a blurfl/dyick $xlibpth`
4982         fi
4983         if $test -r "$tans"; then
4984                 echo "Your C library seems to be in $tans, of all places."
4985                 libc=$tans
4986         else
4987                 libc='blurfl'
4988         fi
4989 fi
4990 if $test $xxx = apollo -o -r "$libc" || (test -h "$libc") >/dev/null 2>&1; then
4991         dflt="$libc"
4992         cat <<EOM
4993
4994 If the guess above is wrong (which it might be if you're using a strange
4995 compiler, or your machine supports multiple models), you can override it here.
4996
4997 EOM
4998 else
4999         dflt=''
5000         echo $libpth | tr ' ' $trnl | sort | uniq > libpath
5001         cat >&4 <<EOM
5002 I can't seem to find your C library.  I've looked in the following places:
5003
5004 EOM
5005         $sed 's/^/      /' libpath
5006         cat <<EOM
5007
5008 None of these seems to contain your C library. I need to get its name...
5009
5010 EOM
5011 fi
5012 fn=f
5013 rp='Where is your C library?'
5014 . ./getfile
5015 libc="$ans"
5016
5017 echo " "
5018 echo $libc $libnames | tr ' ' $trnl | sort | uniq > libnames
5019 set X `cat libnames`
5020 shift
5021 xxx=files
5022 case $# in 1) xxx=file; esac
5023 echo "Extracting names from the following $xxx for later perusal:" >&4
5024 echo " "
5025 $sed 's/^/      /' libnames >&4
5026 echo " "
5027 $echo $n "This may take a while...$c" >&4
5028
5029 for file in $*; do
5030         case $file in
5031         *$so*) $nm $nm_so_opt $nm_opt $file 2>/dev/null;;
5032         *) $nm $nm_opt $file 2>/dev/null;;
5033         esac
5034 done >libc.tmp
5035
5036 $echo $n ".$c"
5037 $grep fprintf libc.tmp > libc.ptf
5038 xscan='eval "<libc.ptf $com >libc.list"; $echo $n ".$c" >&4'
5039 xrun='eval "<libc.tmp $com >libc.list"; echo "done" >&4'
5040 xxx='[ADTSIW]'
5041 if com="$sed -n -e 's/__IO//' -e 's/^.* $xxx  *_[_.]*//p' -e 's/^.* $xxx  *//p'";\
5042         eval $xscan;\
5043         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5044                 eval $xrun
5045 elif com="$sed -n -e 's/^__*//' -e 's/^\([a-zA-Z_0-9$]*\).*xtern.*/\1/p'";\
5046         eval $xscan;\
5047         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5048                 eval $xrun
5049 elif com="$sed -n -e '/|UNDEF/d' -e '/FUNC..GL/s/^.*|__*//p'";\
5050         eval $xscan;\
5051         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5052                 eval $xrun
5053 elif com="$sed -n -e 's/^.* D __*//p' -e 's/^.* D //p'";\
5054         eval $xscan;\
5055         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5056                 eval $xrun
5057 elif com="$sed -n -e 's/^_//' -e 's/^\([a-zA-Z_0-9]*\).*xtern.*text.*/\1/p'";\
5058         eval $xscan;\
5059         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5060                 eval $xrun
5061 elif com="$sed -n -e 's/^.*|FUNC |GLOB .*|//p'";\
5062         eval $xscan;\
5063         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5064                 eval $xrun
5065 elif com="$grep '|' | $sed -n -e '/|COMMON/d' -e '/|DATA/d' \
5066                                 -e '/ file/d' -e 's/^\([^       ]*\).*/\1/p'";\
5067         eval $xscan;\
5068         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5069                 eval $xrun
5070 elif com="$sed -n -e 's/^.*|FUNC |GLOB .*|//p' -e 's/^.*|FUNC |WEAK .*|//p'";\
5071         eval $xscan;\
5072         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5073                 eval $xrun
5074 elif com="$sed -n -e 's/^__//' -e '/|Undef/d' -e '/|Proc/s/ .*//p'";\
5075         eval $xscan;\
5076         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5077                 eval $xrun
5078 elif com="$sed -n -e 's/^.*|Proc .*|Text *| *//p'";\
5079         eval $xscan;\
5080         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5081                 eval $xrun
5082 elif com="$sed -n -e '/Def. Text/s/.* \([^ ]*\)\$/\1/p'";\
5083         eval $xscan;\
5084         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5085                 eval $xrun
5086 elif com="$sed -n -e 's/^[-0-9a-f ]*_\(.*\)=.*/\1/p'";\
5087         eval $xscan;\
5088         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5089                 eval $xrun
5090 elif com="$sed -n -e 's/.*\.text n\ \ \ \.//p'";\
5091         eval $xscan;\
5092         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5093                 eval $xrun
5094 elif com="sed -n -e 's/^__.*//' -e 's/[       ]*D[    ]*[0-9]*.*//p'";\
5095         eval $xscan;\
5096         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5097                 eval $xrun
5098 else
5099         $nm -p $* 2>/dev/null >libc.tmp
5100         $grep fprintf libc.tmp > libc.ptf
5101         if com="$sed -n -e 's/^.* [ADTSIW]  *_[_.]*//p' -e 's/^.* [ADTSIW] //p'";\
5102                 eval $xscan; $contains '^fprintf$' libc.list >/dev/null 2>&1
5103         then
5104                 nm_opt='-p'
5105                 eval $xrun
5106         else
5107                 echo " "
5108                 echo "$nm didn't seem to work right. Trying $ar instead..." >&4
5109                 com=''
5110                 if $ar t $libc > libc.tmp && $contains '^fprintf$' libc.tmp >/dev/null 2>&1; then
5111                         for thisname in $libnames $libc; do
5112                                 $ar t $thisname >>libc.tmp
5113                         done
5114                         $sed -e "s/\\$_o\$//" < libc.tmp > libc.list
5115                         echo "Ok." >&4
5116                 elif test "X$osname" = "Xos2" && $ar tv $libc > libc.tmp; then
5117                         # Repeat libc to extract forwarders to DLL entries too
5118                         for thisname in $libnames $libc; do
5119                                 $ar tv $thisname >>libc.tmp
5120                                 # Revision 50 of EMX has bug in $ar.
5121                                 # it will not extract forwarders to DLL entries
5122                                 # Use emximp which will extract exactly them.
5123                                 emximp -o tmp.imp $thisname \
5124                                     2>/dev/null && \
5125                                     $sed -e 's/^\([_a-zA-Z0-9]*\) .*$/\1/p' \
5126                                     < tmp.imp >>libc.tmp
5127                                 $rm tmp.imp
5128                         done
5129                         $sed -e "s/\\$_o\$//" -e 's/^ \+//' < libc.tmp > libc.list
5130                         echo "Ok." >&4
5131                 else
5132                         echo "$ar didn't seem to work right." >&4
5133                         echo "Maybe this is a Cray...trying bld instead..." >&4
5134                         if bld t $libc | $sed -e 's/.*\///' -e "s/\\$_o:.*\$//" > libc.list
5135                         then
5136                                 for thisname in $libnames; do
5137                                         bld t $libnames | \
5138                                         $sed -e 's/.*\///' -e "s/\\$_o:.*\$//" >>libc.list
5139                                         $ar t $thisname >>libc.tmp
5140                                 done
5141                                 echo "Ok." >&4
5142                         else
5143                                 echo "That didn't work either.  Giving up." >&4
5144                                 exit 1
5145                         fi
5146                 fi
5147         fi
5148 fi
5149 nm_extract="$com"
5150 if $test -f /lib/syscalls.exp; then
5151         echo " "
5152         echo "Also extracting names from /lib/syscalls.exp for good ole AIX..." >&4
5153         $sed -n 's/^\([^        ]*\)[   ]*syscall[0-9]*$/\1/p' /lib/syscalls.exp >>libc.list
5154 fi
5155 ;;
5156 esac
5157 $rm -f libnames libpath
5158
5159 : is a C symbol defined?
5160 csym='tlook=$1;
5161 case "$3" in
5162 -v) tf=libc.tmp; tc=""; tdc="";;
5163 -a) tf=libc.tmp; tc="[0]"; tdc="[]";;
5164 *) tlook="^$1\$"; tf=libc.list; tc="()"; tdc="()";;
5165 esac;
5166 tx=yes;
5167 case "$reuseval-$4" in
5168 true-) ;;
5169 true-*) tx=no; eval "tval=\$$4"; case "$tval" in "") tx=yes;; esac;;
5170 esac;
5171 case "$tx" in
5172 yes)
5173         case "$runnm" in
5174         true)
5175                 if $contains $tlook $tf >/dev/null 2>&1;
5176                 then tval=true;
5177                 else tval=false;
5178                 fi;;
5179         *)
5180                 echo "int main() { extern short $1$tdc; printf(\"%hd\", $1$tc); }" > t.c;
5181                 if $cc $optimize $ccflags $ldflags -o t t.c $libs >/dev/null 2>&1;
5182                 then tval=true;
5183                 else tval=false;
5184                 fi;
5185                 $rm -f t t.c;;
5186         esac;;
5187 *)
5188         case "$tval" in
5189         $define) tval=true;;
5190         *) tval=false;;
5191         esac;;
5192 esac;
5193 eval "$2=$tval"'
5194
5195 : define an is-in-libc? function
5196 inlibc='echo " "; td=$define; tu=$undef;
5197 sym=$1; var=$2; eval "was=\$$2";
5198 tx=yes;
5199 case "$reuseval$was" in
5200 true) ;;
5201 true*) tx=no;;
5202 esac;
5203 case "$tx" in
5204 yes)
5205         set $sym tres -f;
5206         eval $csym;
5207         case "$tres" in
5208         true)
5209                 echo "$sym() found." >&4;
5210                 case "$was" in $undef) . ./whoa; esac; eval "$var=\$td";;
5211         *)
5212                 echo "$sym() NOT found." >&4;
5213                 case "$was" in $define) . ./whoa; esac; eval "$var=\$tu";;
5214         esac;;
5215 *)
5216         case "$was" in
5217         $define) echo "$sym() found." >&4;;
5218         *) echo "$sym() NOT found." >&4;;
5219         esac;;
5220 esac'
5221
5222 : see if sqrtl exists
5223 set sqrtl d_sqrtl
5224 eval $inlibc
5225
5226 case "$ccflags" in
5227 *-DUSE_LONG_DOUBLE*|*-DUSE_MORE_BITS*) uselongdouble="$define" ;;
5228 esac
5229
5230 case "$uselongdouble" in
5231 $define|true|[yY]*)     dflt='y';;
5232 *) dflt='n';;
5233 esac
5234 cat <<EOM
5235
5236 Perl can be built to take advantage of long doubles which
5237 (if available) may give more accuracy and range for floating point numbers.
5238
5239 If this doesn't make any sense to you, just accept the default '$dflt'.
5240 EOM
5241 rp='Try to use long doubles if available?'
5242 . ./myread
5243 case "$ans" in
5244 y|Y)    val="$define"   ;;
5245 *)      val="$undef"    ;;
5246 esac
5247 set uselongdouble
5248 eval $setvar
5249
5250 case "$uselongdouble" in
5251 true|[yY]*) uselongdouble="$define" ;;
5252 esac
5253
5254 case "$uselongdouble" in
5255 $define)
5256 : Look for a hint-file generated 'call-back-unit'.  If the
5257 : user has specified that long doubles should be used,
5258 : we may need to set or change some other defaults.
5259         if $test -f uselongdouble.cbu; then
5260                 echo "Your platform has some specific hints for long doubles, using them..."
5261                 . ./uselongdouble.cbu
5262         else
5263                 $cat <<EOM
5264 (Your platform doesn't have any specific hints for long doubles.)
5265 EOM
5266         fi
5267         ;;
5268 esac
5269
5270 case "$uselongdouble:$d_sqrtl" in
5271 $define:$undef)
5272                 $cat <<EOM >&4
5273
5274 *** You requested the use of long doubles but you do not seem to have
5275 *** the mathematic functions for long doubles.  I'm disabling the use
5276 *** of long doubles.
5277
5278 EOM
5279         uselongdouble=$undef
5280         ;;
5281 esac
5282
5283 : check for length of double
5284 echo " "
5285 case "$doublesize" in
5286 '')
5287         echo "Checking to see how big your double precision numbers are..." >&4
5288         $cat >try.c <<'EOCP'
5289 #include <stdio.h>
5290 int main()
5291 {
5292     printf("%d\n", (int)sizeof(double));
5293     exit(0);
5294 }
5295 EOCP
5296         set try
5297         if eval $compile_ok; then
5298                 doublesize=`./try`
5299                 echo "Your double is $doublesize bytes long."
5300         else
5301                 dflt='8'
5302                 echo "(I can't seem to compile the test program.  Guessing...)"
5303                 rp="What is the size of a double precision number (in bytes)?"
5304                 . ./myread
5305                 doublesize="$ans"
5306         fi
5307         ;;
5308 esac
5309 $rm -f try.c try
5310
5311 : check for long doubles
5312 echo " "
5313 echo "Checking to see if you have long double..." >&4
5314 echo 'int main() { long double x = 7.0; }' > try.c
5315 set try
5316 if eval $compile; then
5317         val="$define"
5318         echo "You have long double."
5319 else
5320         val="$undef"
5321         echo "You do not have long double."
5322 fi
5323 $rm try.*
5324 set d_longdbl
5325 eval $setvar
5326
5327 : check for length of long double
5328 case "${d_longdbl}${longdblsize}" in
5329 $define)
5330         echo " "
5331         echo "Checking to see how big your long doubles are..." >&4
5332         $cat >try.c <<'EOCP'
5333 #include <stdio.h>
5334 int main()
5335 {
5336         printf("%d\n", sizeof(long double));
5337 }
5338 EOCP
5339         set try
5340         set try
5341         if eval $compile; then
5342                 longdblsize=`./try$exe_ext`
5343                 echo "Your long doubles are $longdblsize bytes long."
5344         else
5345                 dflt='8'
5346                 echo " "
5347                 echo "(I can't seem to compile the test program.  Guessing...)" >&4
5348                 rp="What is the size of a long double (in bytes)?"
5349                 . ./myread
5350                 longdblsize="$ans"
5351         fi
5352         if $test "X$doublesize" = "X$longdblsize"; then
5353                 echo "(That isn't any different from an ordinary double.)"
5354         fi      
5355         ;;
5356 esac
5357 $rm -f try.* try
5358
5359 : determine the architecture name
5360 echo " "
5361 if xxx=`./loc arch blurfl $pth`; $test -f "$xxx"; then
5362         tarch=`arch`"-$osname"
5363 elif xxx=`./loc uname blurfl $pth`; $test -f "$xxx" ; then
5364         if uname -m > tmparch 2>&1 ; then
5365                 tarch=`$sed -e 's/ *$//' -e 's/ /_/g' \
5366                         -e 's/$/'"-$osname/" tmparch`
5367         else
5368                 tarch="$osname"
5369         fi
5370         $rm -f tmparch
5371 else
5372         tarch="$osname"
5373 fi
5374 case "$myarchname" in
5375 ''|"$tarch") ;;
5376 *)
5377         echo "(Your architecture name used to be $myarchname.)"
5378         archname=''
5379         ;;
5380 esac
5381 myarchname="$tarch"
5382 case "$archname" in
5383 '') dflt="$tarch";;
5384 *) dflt="$archname";;
5385 esac
5386 rp='What is your architecture name'
5387 . ./myread
5388 archname="$ans"
5389 case "$usethreads" in
5390 $define)
5391         echo "Threads selected." >&4
5392         case "$archname" in
5393         *-thread*) echo "...and architecture name already has -thread." >&4
5394                 ;;
5395         *)      archname="$archname-thread"
5396                 echo "...setting architecture name to $archname." >&4
5397                 ;;
5398         esac
5399         ;;
5400 esac
5401 case "$usemultiplicity" in
5402 $define)
5403         echo "Multiplicity selected." >&4
5404         case "$archname" in
5405         *-multi*) echo "...and architecture name already has -multi." >&4
5406                 ;;
5407         *)      archname="$archname-multi"
5408                 echo "...setting architecture name to $archname." >&4
5409                 ;;
5410         esac
5411         ;;
5412 esac
5413 case "$use64bitint$use64bitall" in
5414 *"$define"*)
5415         case "$archname64" in
5416         '')
5417                 "This architecture is naturally 64-bit, not changing architecture name." >&4
5418                 ;;
5419         *)
5420                 case "$use64bitint" in
5421                 "$define") echo "64 bit integers selected." >&4 ;;
5422                 esac
5423                 case "$use64bitall" in
5424                 "$define") echo "Maximal 64 bitness selected." >&4 ;;
5425                 esac
5426                 case "$archname" in
5427                 *-$archname64*) echo "...and architecture name already has $archname64." >&4
5428                         ;;
5429                 *)      archname="$archname-$archname64"
5430                         echo "...setting architecture name to $archname." >&4
5431                         ;;
5432                 esac
5433                 ;;
5434         esac
5435 esac
5436 case "$uselongdouble" in
5437 $define)
5438         echo "Long doubles selected." >&4
5439         case "$longdblsize" in
5440         $doublesize)
5441                 "...but long doubles are equal to doubles, not changing architecture name." >&4
5442                 ;;
5443         *)
5444                 case "$archname" in
5445                 *-ld*) echo "...and architecture name already has -ld." >&4
5446                         ;;
5447                 *)      archname="$archname-ld"
5448                         echo "...setting architecture name to $archname." >&4
5449                         ;;
5450                 esac
5451                 ;;
5452         esac
5453         ;;
5454 esac
5455
5456 : determine root of directory hierarchy where package will be installed.
5457 case "$prefix" in
5458 '')
5459         dflt=`./loc . /usr/local /usr/local /local /opt /usr`
5460         ;;
5461 *)
5462         dflt="$prefix"
5463         ;;
5464 esac
5465 $cat <<EOM
5466
5467 By default, $package will be installed in $dflt/bin, manual pages
5468 under $dflt/man, etc..., i.e. with $dflt as prefix for all
5469 installation directories. Typically this is something like /usr/local.
5470 If you wish to have binaries under /usr/bin but other parts of the
5471 installation under /usr/local, that's ok: you will be prompted
5472 separately for each of the installation directories, the prefix being
5473 only used to set the defaults.
5474
5475 EOM
5476 fn=d~
5477 rp='Installation prefix to use?'
5478 . ./getfile
5479 oldprefix=''
5480 case "$prefix" in
5481 '') ;;
5482 *)
5483         case "$ans" in
5484         "$prefix") ;;
5485         *) oldprefix="$prefix";;
5486         esac
5487         ;;
5488 esac
5489 prefix="$ans"
5490 prefixexp="$ansexp"
5491
5492 : is AFS running?
5493 echo " "
5494 case "$afs" in
5495 $define|true)   afs=true ;;
5496 $undef|false)   afs=false ;;
5497 *)      if test -d /afs; then
5498                 afs=true
5499         else
5500                 afs=false
5501         fi
5502         ;;
5503 esac
5504 if $afs; then
5505         echo "AFS may be running... I'll be extra cautious then..." >&4
5506 else
5507         echo "AFS does not seem to be running..." >&4
5508 fi
5509
5510 : determine installation prefix for where package is to be installed.
5511 if $afs; then 
5512 $cat <<EOM
5513
5514 Since you are running AFS, I need to distinguish the directory in which
5515 files will reside from the directory in which they are installed (and from
5516 which they are presumably copied to the former directory by occult means).
5517
5518 EOM
5519         case "$installprefix" in
5520         '') dflt=`echo $prefix | sed 's#^/afs/#/afs/.#'`;;
5521         *) dflt="$installprefix";;
5522         esac
5523 else
5524 $cat <<EOM
5525
5526 In some special cases, particularly when building $package for distribution,
5527 it is convenient to distinguish between the directory in which files should 
5528 be installed from the directory ($prefix) in which they 
5529 will eventually reside.  For most users, these two directories are the same.
5530
5531 EOM
5532         case "$installprefix" in
5533         '') dflt=$prefix ;;
5534         *) dflt=$installprefix;;
5535         esac
5536 fi
5537 fn=d~
5538 rp='What installation prefix should I use for installing files?'
5539 . ./getfile
5540 installprefix="$ans"
5541 installprefixexp="$ansexp"
5542
5543 : set the prefixit variable, to compute a suitable default value
5544 prefixit='case "$3" in
5545 ""|none)
5546         case "$oldprefix" in
5547         "") eval "$1=\"\$$2\"";;
5548         *)
5549                 case "$3" in
5550                 "") eval "$1=";;
5551                 none)
5552                         eval "tp=\"\$$2\"";
5553                         case "$tp" in
5554                         ""|" ") eval "$1=\"\$$2\"";;
5555                         *) eval "$1=";;
5556                         esac;;
5557                 esac;;
5558         esac;;
5559 *)
5560         eval "tp=\"$oldprefix-\$$2-\""; eval "tp=\"$tp\"";
5561         case "$tp" in
5562         --|/*--|\~*--) eval "$1=\"$prefix/$3\"";;
5563         /*-$oldprefix/*|\~*-$oldprefix/*)
5564                 eval "$1=\`echo \$$2 | sed \"s,^$oldprefix,$prefix,\"\`";;
5565         *) eval "$1=\"\$$2\"";;
5566         esac;;
5567 esac'
5568
5569
5570 : get the patchlevel
5571 echo " "
5572 echo "Getting the current patchlevel..." >&4
5573 if $test -r $rsrc/patchlevel.h;then
5574         revision=`awk '/define[         ]+PERL_REVISION/ {print $3}' $rsrc/patchlevel.h`
5575         patchlevel=`awk '/define[       ]+PERL_VERSION/ {print $3}' $rsrc/patchlevel.h`
5576         subversion=`awk '/define[       ]+PERL_SUBVERSION/ {print $3}' $rsrc/patchlevel.h`
5577         api_revision=`awk '/define[     ]+PERL_API_REVISION/ {print $3}' $rsrc/patchlevel.h`
5578         api_version=`awk '/define[      ]+PERL_API_VERSION/ {print $3}' $rsrc/patchlevel.h`
5579         api_subversion=`awk '/define[   ]+PERL_API_SUBVERSION/ {print $3}' $rsrc/patchlevel.h`
5580 else
5581         revision=0
5582         patchlevel=0
5583         subversion=0
5584         api_revision=0
5585         api_version=0
5586         api_subversion=0
5587 fi
5588 $echo "(You have $package version $patchlevel subversion $subversion.)"
5589 case "$osname" in
5590 dos|vms)
5591         : XXX Should be a Configure test for double-dots in filenames.
5592         version=`echo $revision $patchlevel $subversion | \
5593                  $awk '{ printf "%d_%d_%d\n", $1, $2, $3 }'`
5594         api_versionstring=`echo $api_revision $api_version $api_subversion | \
5595                  $awk '{ printf "%d_%d_%d\n", $1, $2, $3 }'`
5596         ;;
5597 *)
5598         version=`echo $revision $patchlevel $subversion | \
5599                  $awk '{ printf "%d.%d.%d\n", $1, $2, $3 }'`
5600         api_versionstring=`echo $api_revision $api_version $api_subversion | \
5601                  $awk '{ printf "%d.%d.%d\n", $1, $2, $3 }'`
5602         ;;
5603 esac
5604 : Special case the 5.005_xx maintenance series, which used 5.005
5605 : without any subversion label as a subdirectory in $sitelib
5606 if test "${api_revision}${api_version}${api_subversion}" = "550"; then
5607         api_versionstring='5.005'
5608 fi
5609
5610 : determine installation style
5611 : For now, try to deduce it from prefix unless it is already set.
5612 : Reproduce behavior of 5.005 and earlier, maybe drop that in 5.7.
5613 case "$installstyle" in
5614 '')     case "$prefix" in
5615                 *perl*) dflt='lib';;
5616                 *) dflt='lib/perl5' ;;
5617         esac
5618         ;;
5619 *)      dflt="$installstyle" ;;
5620 esac
5621 : Probably not worth prompting for this since we prompt for all
5622 : the directories individually, and the prompt would be too long and
5623 : confusing anyway.
5624 installstyle=$dflt
5625
5626 : determine where private library files go
5627 : Usual default is /usr/local/lib/perl5/$version.
5628 : Also allow things like /opt/perl/lib/$version, since 
5629 : /opt/perl/lib/perl5... would be redundant.
5630 : The default "style" setting is made in installstyle.U
5631 case "$installstyle" in
5632 *lib/perl5*) set dflt privlib lib/$package/$version ;;
5633 *)       set dflt privlib lib/$version ;;
5634 esac
5635 eval $prefixit
5636 $cat <<EOM
5637
5638 There are some auxiliary files for $package that need to be put into a
5639 private library directory that is accessible by everyone.
5640
5641 EOM
5642 fn=d~+
5643 rp='Pathname where the private library files will reside?'
5644 . ./getfile
5645 privlib="$ans"
5646 privlibexp="$ansexp"
5647 : Change installation prefix, if necessary.
5648 if $test X"$prefix" != X"$installprefix"; then
5649         installprivlib=`echo $privlibexp | sed "s#^$prefix#$installprefix#"`
5650 else
5651         installprivlib="$privlibexp"
5652 fi
5653
5654 : set the prefixup variable, to restore leading tilda escape
5655 prefixup='case "$prefixexp" in
5656 "$prefix") ;;
5657 *) eval "$1=\`echo \$$1 | sed \"s,^$prefixexp,$prefix,\"\`";;
5658 esac'
5659
5660 : determine where public architecture dependent libraries go
5661 set archlib archlib
5662 eval $prefixit
5663 : privlib default is /usr/local/lib/$package/$version
5664 : archlib default is /usr/local/lib/$package/$version/$archname
5665 : privlib may have an optional trailing /share.
5666 tdflt=`echo $privlib | $sed 's,/share$,,'`
5667 tdflt=$tdflt/$archname
5668 case "$archlib" in
5669 '')     dflt=$tdflt
5670         ;;
5671 *)      dflt="$archlib"
5672     ;;
5673 esac
5674 $cat <<EOM
5675
5676 $spackage contains architecture-dependent library files.  If you are
5677 sharing libraries in a heterogeneous environment, you might store
5678 these files in a separate location.  Otherwise, you can just include
5679 them with the rest of the public library files.
5680
5681 EOM
5682 fn=d+~
5683 rp='Where do you want to put the public architecture-dependent libraries?'
5684 . ./getfile
5685 archlib="$ans"
5686 archlibexp="$ansexp"
5687 if $test X"$archlib" = X"$privlib"; then
5688         d_archlib="$undef"
5689 else
5690         d_archlib="$define"
5691 fi
5692 : Change installation prefix, if necessary.
5693 if $test X"$prefix" != X"$installprefix"; then
5694         installarchlib=`echo $archlibexp | sed "s#^$prefix#$installprefix#"`
5695 else
5696         installarchlib="$archlibexp"
5697 fi
5698
5699
5700 : Binary compatibility with 5.005 is not possible for builds
5701 : with advanced features
5702 case "$usethreads$usemultiplicity" in
5703 *define*)
5704         bincompat5005="$undef"
5705         d_bincompat5005="$undef"
5706         ;;
5707 *)      $cat <<EOM
5708
5709 This version of Perl can be compiled for binary compatibility with 5.005.
5710 If you decide to do so, you will be able to continue using most of the
5711 extensions that were compiled for Perl 5.005.
5712
5713 EOM
5714         case "$bincompat5005$d_bincompat5005" in
5715         *"$undef"*) dflt=n ;;
5716         *) dflt=y ;;
5717         esac
5718         rp='Binary compatibility with Perl 5.005?'
5719         . ./myread
5720         case "$ans" in
5721         y*) val="$define" ;;
5722         *)  val="$undef" ;;
5723         esac
5724         set d_bincompat5005
5725         eval $setvar
5726         case "$d_bincompat5005" in
5727         "$define")
5728                 bincompat5005="$define"
5729                 ;;
5730         *)      bincompat5005="$undef"
5731                 d_bincompat5005="$undef"
5732                 ;;
5733         esac
5734         ;;
5735 esac
5736
5737
5738 : see if setuid scripts can be secure
5739 $cat <<EOM
5740
5741 Some kernels have a bug that prevents setuid #! scripts from being
5742 secure.  Some sites have disabled setuid #! scripts because of this.
5743
5744 First let's decide if your kernel supports secure setuid #! scripts.
5745 (If setuid #! scripts would be secure but have been disabled anyway,
5746 don't say that they are secure if asked.)
5747
5748 EOM
5749
5750 val="$undef"
5751 if $test -d /dev/fd; then
5752         echo "#!$ls" >reflect
5753         chmod +x,u+s reflect
5754         ./reflect >flect 2>&1
5755         if $contains "/dev/fd" flect >/dev/null; then
5756                 echo "Congratulations, your kernel has secure setuid scripts!" >&4
5757                 val="$define"
5758         else
5759                 $cat <<EOM
5760 If you are not sure if they are secure, I can check but I'll need a
5761 username and password different from the one you are using right now.
5762 If you don't have such a username or don't want me to test, simply
5763 enter 'none'.
5764
5765 EOM
5766                 rp='Other username to test security of setuid scripts with?'
5767                 dflt='none'
5768                 . ./myread
5769                 case "$ans" in
5770                 n|none)
5771                         case "$d_suidsafe" in
5772                         '')     echo "I'll assume setuid scripts are *not* secure." >&4
5773                                 dflt=n;;
5774                         "$undef")
5775                                 echo "Well, the $hint value is *not* secure." >&4
5776                                 dflt=n;;
5777                         *)      echo "Well, the $hint value *is* secure." >&4
5778                                 dflt=y;;
5779                         esac
5780                         ;;
5781                 *)
5782                         $rm -f reflect flect
5783                         echo "#!$ls" >reflect
5784                         chmod +x,u+s reflect
5785                         echo >flect
5786                         chmod a+w flect
5787                         echo '"su" will (probably) prompt you for '"$ans's password."
5788                         su $ans -c './reflect >flect'
5789                         if $contains "/dev/fd" flect >/dev/null; then
5790                                 echo "Okay, it looks like setuid scripts are secure." >&4
5791                                 dflt=y
5792                         else
5793                                 echo "I don't think setuid scripts are secure." >&4
5794                                 dflt=n
5795                         fi
5796                         ;;
5797                 esac
5798                 rp='Does your kernel have *secure* setuid scripts?'
5799                 . ./myread
5800                 case "$ans" in
5801                 [yY]*)  val="$define";;
5802                 *)      val="$undef";;
5803                 esac
5804         fi
5805 else
5806         echo "I don't think setuid scripts are secure (no /dev/fd directory)." >&4
5807         echo "(That's for file descriptors, not floppy disks.)"
5808         val="$undef"
5809 fi
5810 set d_suidsafe
5811 eval $setvar
5812
5813 $rm -f reflect flect
5814
5815 : now see if they want to do setuid emulation
5816 echo " "
5817 val="$undef"
5818 case "$d_suidsafe" in
5819 "$define")
5820         val="$undef"
5821         echo "No need to emulate SUID scripts since they are secure here." >& 4
5822         ;;
5823 *)
5824         $cat <<EOM
5825 Some systems have disabled setuid scripts, especially systems where
5826 setuid scripts cannot be secure.  On systems where setuid scripts have
5827 been disabled, the setuid/setgid bits on scripts are currently
5828 useless.  It is possible for $package to detect those bits and emulate
5829 setuid/setgid in a secure fashion.  This emulation will only work if
5830 setuid scripts have been disabled in your kernel.
5831
5832 EOM
5833         case "$d_dosuid" in
5834         "$define") dflt=y ;;
5835         *) dflt=n ;;
5836         esac
5837         rp="Do you want to do setuid/setgid emulation?"
5838         . ./myread
5839         case "$ans" in
5840         [yY]*)  val="$define";;
5841         *)      val="$undef";;
5842         esac
5843         ;;
5844 esac
5845 set d_dosuid
5846 eval $setvar
5847
5848 : determine filename position in cpp output
5849 echo " "
5850 echo "Computing filename position in cpp output for #include directives..." >&4
5851 echo '#include <stdio.h>' > foo.c
5852 $cat >fieldn <<EOF
5853 $startsh
5854 $cppstdin $cppflags $cppminus <foo.c 2>/dev/null | \
5855 $grep '^[       ]*#.*stdio\.h' | \
5856 while read cline; do
5857         pos=1
5858         set \$cline
5859         while $test \$# -gt 0; do
5860                 if $test -r \`echo \$1 | $tr -d '"'\`; then
5861                         echo "\$pos"
5862                         exit 0
5863                 fi
5864                 shift
5865                 pos=\`expr \$pos + 1\`
5866         done
5867 done
5868 EOF
5869 chmod +x fieldn
5870 fieldn=`./fieldn`
5871 $rm -f foo.c fieldn
5872 case $fieldn in
5873 '') pos='???';;
5874 1) pos=first;;
5875 2) pos=second;;
5876 3) pos=third;;
5877 *) pos="${fieldn}th";;
5878 esac
5879 echo "Your cpp writes the filename in the $pos field of the line."
5880
5881 : locate header file
5882 $cat >findhdr <<EOF
5883 $startsh
5884 wanted=\$1
5885 name=''
5886 for usrincdir in $usrinc
5887 do
5888         if test -f \$usrincdir/\$wanted; then
5889                 echo "\$usrincdir/\$wanted"
5890                 exit 0
5891         fi
5892 done
5893 awkprg='{ print \$$fieldn }'
5894 echo "#include <\$wanted>" > foo\$\$.c
5895 $cppstdin $cppminus $cppflags < foo\$\$.c 2>/dev/null | \
5896 $grep "^[       ]*#.*\$wanted" | \
5897 while read cline; do
5898         name=\`echo \$cline | $awk "\$awkprg" | $tr -d '"'\`
5899         case "\$name" in
5900         *[/\\\\]\$wanted) echo "\$name"; exit 1;;
5901         *[\\\\/]\$wanted) echo "\$name"; exit 1;;
5902         *) exit 2;;
5903         esac;
5904 done;
5905 #
5906 # status = 0: grep returned 0 lines, case statement not executed
5907 # status = 1: headerfile found
5908 # status = 2: while loop executed, no headerfile found
5909 #
5910 status=\$?
5911 $rm -f foo\$\$.c;
5912 if test \$status -eq 1; then
5913         exit 0;
5914 fi
5915 exit 1
5916 EOF
5917 chmod +x findhdr
5918
5919 : define an alternate in-header-list? function
5920 inhdr='echo " "; td=$define; tu=$undef; yyy=$@;
5921 cont=true; xxf="echo \"<\$1> found.\" >&4";
5922 case $# in 2) xxnf="echo \"<\$1> NOT found.\" >&4";;
5923 *) xxnf="echo \"<\$1> NOT found, ...\" >&4";;
5924 esac;
5925 case $# in 4) instead=instead;; *) instead="at last";; esac;
5926 while $test "$cont"; do
5927         xxx=`./findhdr $1`
5928         var=$2; eval "was=\$$2";
5929         if $test "$xxx" && $test -r "$xxx";
5930         then eval $xxf;
5931         eval "case \"\$$var\" in $undef) . ./whoa; esac"; eval "$var=\$td";
5932                 cont="";
5933         else eval $xxnf;
5934         eval "case \"\$$var\" in $define) . ./whoa; esac"; eval "$var=\$tu"; fi;
5935         set $yyy; shift; shift; yyy=$@;
5936         case $# in 0) cont="";;
5937         2) xxf="echo \"but I found <\$1> $instead.\" >&4";
5938                 xxnf="echo \"and I did not find <\$1> either.\" >&4";;
5939         *) xxf="echo \"but I found <\$1\> instead.\" >&4";
5940                 xxnf="echo \"there is no <\$1>, ...\" >&4";;
5941         esac;
5942 done;
5943 while $test "$yyy";
5944 do set $yyy; var=$2; eval "was=\$$2";
5945         eval "case \"\$$var\" in $define) . ./whoa; esac"; eval "$var=\$tu";
5946         set $yyy; shift; shift; yyy=$@;
5947 done'
5948
5949 : see if this is a malloc.h system
5950 set malloc.h i_malloc
5951 eval $inhdr
5952
5953 : see if stdlib is available
5954 set stdlib.h i_stdlib
5955 eval $inhdr
5956
5957 : determine which malloc to compile in
5958 echo " "
5959 case "$usemymalloc" in
5960 ''|[yY]*|true|$define)  dflt='y' ;;
5961 *)      dflt='n' ;;
5962 esac
5963 rp="Do you wish to attempt to use the malloc that comes with $package?"
5964 . ./myread
5965 usemymalloc="$ans"
5966 case "$ans" in
5967 y*|true)
5968         usemymalloc='y'
5969         mallocsrc='malloc.c'
5970         mallocobj="malloc$_o"
5971         d_mymalloc="$define"
5972         case "$libs" in
5973         *-lmalloc*)
5974                 : Remove malloc from list of libraries to use
5975                 echo "Removing unneeded -lmalloc from library list" >&4
5976                 set `echo X $libs | $sed -e 's/-lmalloc / /' -e 's/-lmalloc$//'`
5977                 shift
5978                 libs="$*"
5979                 echo "libs = $libs" >&4
5980                 ;;
5981         esac
5982         ;;
5983 *)
5984         usemymalloc='n'
5985         mallocsrc=''
5986         mallocobj=''
5987         d_mymalloc="$undef"
5988         ;;
5989 esac
5990
5991 : compute the return types of malloc and free
5992 echo " "
5993 $cat >malloc.c <<END
5994 #$i_malloc I_MALLOC
5995 #$i_stdlib I_STDLIB
5996 #include <stdio.h>
5997 #include <sys/types.h>
5998 #ifdef I_MALLOC
5999 #include <malloc.h>
6000 #endif
6001 #ifdef I_STDLIB
6002 #include <stdlib.h>
6003 #endif
6004 #ifdef TRY_MALLOC
6005 void *malloc();
6006 #endif
6007 #ifdef TRY_FREE
6008 void free();
6009 #endif
6010 END
6011 case "$malloctype" in
6012 '')
6013         if $cc $ccflags -c -DTRY_MALLOC malloc.c >/dev/null 2>&1; then
6014                 malloctype='void *'
6015         else
6016                 malloctype='char *'
6017         fi
6018         ;;
6019 esac
6020 echo "Your system wants malloc to return '$malloctype', it would seem." >&4
6021
6022 case "$freetype" in
6023 '')
6024         if $cc $ccflags -c -DTRY_FREE malloc.c >/dev/null 2>&1; then
6025                 freetype='void'
6026         else
6027                 freetype='int'
6028         fi
6029         ;;
6030 esac
6031 echo "Your system uses $freetype free(), it would seem." >&4
6032 $rm -f malloc.[co]
6033 $cat <<EOM
6034
6035 After $package is installed, you may wish to install various
6036 add-on modules and utilities.  Typically, these add-ons will
6037 be installed under $prefix with the rest
6038 of this package.  However, you may wish to install such add-ons
6039 elsewhere under a different prefix.
6040
6041 If you do not wish to put everything under a single prefix, that's
6042 ok.  You will be prompted for the individual locations; this siteprefix
6043 is only used to suggest the defaults.
6044
6045 The default should be fine for most people.
6046
6047 EOM
6048 fn=d~+
6049 rp='Installation prefix to use for add-on modules and utilities?'
6050 : XXX Here might be another good place for an installstyle setting.
6051 case "$siteprefix" in
6052 '') dflt=$prefix ;;
6053 *)  dflt=$siteprefix ;;
6054 esac
6055 . ./getfile
6056 : XXX Prefixit unit does not yet support siteprefix and vendorprefix
6057 oldsiteprefix=''
6058 case "$siteprefix" in
6059 '') ;;
6060 *)      case "$ans" in
6061         "$prefix") ;;
6062         *) oldsiteprefix="$prefix";;
6063         esac
6064         ;;
6065 esac
6066 siteprefix="$ans"
6067 siteprefixexp="$ansexp"
6068
6069 : determine where site specific libraries go.
6070 : Usual default is /usr/local/lib/perl5/site_perl/$version
6071 : The default "style" setting is made in installstyle.U
6072 : XXX No longer works with Prefixit stuff.
6073 prog=`echo $package | $sed 's/-*[0-9.]*$//'`
6074 case "$sitelib" in
6075 '') case "$installstyle" in
6076         *lib/perl5*) dflt=$siteprefix/lib/$package/site_$prog/$version ;;
6077         *)       dflt=$siteprefix/lib/site_$prog/$version ;;
6078         esac
6079         ;;
6080 *)      dflt="$sitelib"
6081         ;;
6082 esac
6083 $cat <<EOM
6084
6085 The installation process will create a directory for
6086 site-specific extensions and modules.  Most users find it convenient
6087 to place all site-specific files in this directory rather than in the
6088 main distribution directory.
6089
6090 EOM
6091 fn=d~+
6092 rp='Pathname for the site-specific library files?'
6093 . ./getfile
6094 sitelib="$ans"
6095 sitelibexp="$ansexp"
6096 sitelib_stem=`echo "$sitelibexp" | sed "s,/$version$,,"`
6097 : Change installation prefix, if necessary.
6098 if $test X"$prefix" != X"$installprefix"; then
6099         installsitelib=`echo $sitelibexp | $sed "s#^$prefix#$installprefix#"`
6100 else
6101         installsitelib="$sitelibexp"
6102 fi
6103
6104 : determine where site specific architecture-dependent libraries go.
6105 : sitelib  default is /usr/local/lib/perl5/site_perl/$version
6106 : sitearch default is /usr/local/lib/perl5/site_perl/$version/$archname
6107 : sitelib may have an optional trailing /share.
6108 case "$sitearch" in
6109 '')     dflt=`echo $sitelib | $sed 's,/share$,,'`
6110         dflt="$dflt/$archname"
6111         ;;
6112 *)      dflt="$sitearch"
6113         ;;
6114 esac
6115 set sitearch sitearch none
6116 eval $prefixit
6117 $cat <<EOM
6118
6119 The installation process will also create a directory for
6120 architecture-dependent site-specific extensions and modules.
6121
6122 EOM
6123 fn=d~+
6124 rp='Pathname for the site-specific architecture-dependent library files?'
6125 . ./getfile
6126 sitearch="$ans"
6127 sitearchexp="$ansexp"
6128 : Change installation prefix, if necessary.
6129 if $test X"$prefix" != X"$installprefix"; then
6130         installsitearch=`echo $sitearchexp | sed "s#^$prefix#$installprefix#"`
6131 else
6132         installsitearch="$sitearchexp"
6133 fi
6134
6135 $cat <<EOM
6136
6137 The installation process will also create a directory for
6138 vendor-supplied add-ons.  Vendors who supply perl with their system
6139 may find it convenient to place all vendor-supplied files in this
6140 directory rather than in the main distribution directory.  This will
6141 ease upgrades between binary-compatible maintenance versions of perl.
6142
6143 Of course you may also use these directories in whatever way you see
6144 fit.  For example, you might use them to access modules shared over a
6145 company-wide network.
6146
6147 The default answer should be fine for most people.
6148 This causes further questions about vendor add-ons to be skipped
6149 and no vendor-specific directories will be configured for perl.
6150
6151 EOM
6152 rp='Do you want to configure vendor-specific add-on directories?'
6153 case "$usevendorprefix" in
6154 define|true|[yY]*) dflt=y ;;
6155 *)      : User may have set vendorprefix directly on Configure command line.
6156         case "$vendorprefix" in
6157         ''|' ') dflt=n ;;
6158         *)      dflt=y ;;
6159         esac
6160         ;;
6161 esac
6162 . ./myread
6163 case "$ans" in
6164 [yY]*)  fn=d~+
6165         rp='Installation prefix to use for vendor-supplied add-ons?'
6166         case "$vendorprefix" in
6167         '') dflt='' ;;
6168         *)  dflt=$vendorprefix ;;
6169         esac
6170         . ./getfile
6171         : XXX Prefixit unit does not yet support siteprefix and vendorprefix
6172         oldvendorprefix=''
6173         case "$vendorprefix" in
6174         '') ;;
6175         *)      case "$ans" in
6176                 "$prefix") ;;
6177                 *) oldvendorprefix="$prefix";;
6178                 esac
6179                 ;;
6180         esac
6181         usevendorprefix="$define"
6182         vendorprefix="$ans"
6183         vendorprefixexp="$ansexp"
6184         ;;
6185 *)      usevendorprefix="$undef"
6186         vendorprefix=''
6187         vendorprefixexp=''
6188         ;;
6189 esac
6190
6191 case "$vendorprefix" in
6192 '')     d_vendorlib="$undef"
6193         vendorlib=''
6194         vendorlibexp=''
6195         ;;
6196 *)      d_vendorlib="$define"
6197         : determine where vendor-supplied modules go.
6198         : Usual default is /usr/local/lib/perl5/vendor_perl/$version
6199         case "$vendorlib" in
6200         '')
6201                 prog=`echo $package | $sed 's/-*[0-9.]*$//'`
6202                 case "$installstyle" in
6203                 *lib/perl5*) dflt=$vendorprefix/lib/$package/vendor_$prog/$version ;;
6204                 *)           dflt=$vendorprefix/lib/vendor_$prog/$version ;;
6205                 esac
6206                 ;;
6207         *)      dflt="$vendorlib"
6208                 ;;
6209         esac
6210         fn=d~+
6211         rp='Pathname for the vendor-supplied library files?'
6212         . ./getfile
6213         vendorlib="$ans"
6214         vendorlibexp="$ansexp"
6215         ;;
6216 esac
6217 vendorlib_stem=`echo "$vendorlibexp" | sed "s,/$version$,,"`
6218 : Change installation prefix, if necessary.
6219 if $test X"$prefix" != X"$installprefix"; then
6220         installvendorlib=`echo $vendorlibexp | $sed "s#^$prefix#$installprefix#"`
6221 else
6222         installvendorlib="$vendorlibexp"
6223 fi
6224
6225 case "$vendorprefix" in
6226 '')     d_vendorarch="$undef"
6227         vendorarch=''
6228         vendorarchexp=''
6229         ;;
6230 *)      d_vendorarch="$define"
6231         : determine where vendor-supplied architecture-dependent libraries go.
6232         : vendorlib  default is /usr/local/lib/perl5/vendor_perl/$version
6233         : vendorarch default is /usr/local/lib/perl5/vendor_perl/$version/$archname
6234         : vendorlib may have an optional trailing /share.
6235         case "$vendorarch" in
6236         '')     dflt=`echo $vendorlib | $sed 's,/share$,,'`
6237                 dflt="$dflt/$archname"
6238                 ;;
6239         *)      dflt="$vendorarch" ;;
6240         esac
6241         fn=d~+
6242         rp='Pathname for vendor-supplied architecture-dependent files?'
6243         . ./getfile
6244         vendorarch="$ans"
6245         vendorarchexp="$ansexp"
6246         ;;
6247 esac
6248 : Change installation prefix, if necessary.
6249 if $test X"$prefix" != X"$installprefix"; then
6250         installvendorarch=`echo $vendorarchexp | sed "s#^$prefix#$installprefix#"`
6251 else
6252         installvendorarch="$vendorarchexp"
6253 fi
6254
6255 : Final catch-all directories to search
6256 $cat <<EOM
6257
6258 Lastly, you can have perl look in other directories for extensions and
6259 modules in addition to those already specified.
6260 These directories will be searched after 
6261         $sitearch 
6262         $sitelib 
6263 EOM
6264 test X"$vendorlib" != "X" && echo '     ' $vendorlib
6265 test X"$vendorarch" != "X" && echo '    ' $vendorarch
6266 echo ' '
6267 case "$otherlibdirs" in
6268 ''|' ') dflt='none' ;;
6269 *)      dflt="$otherlibdirs" ;;
6270 esac
6271 $cat <<EOM
6272 Enter a colon-separated set of extra paths to include in perl's @INC
6273 search path, or enter 'none' for no extra paths.
6274
6275 EOM
6276
6277 rp='Colon-separated list of additional directories for perl to search?'
6278 . ./myread
6279 case "$ans" in
6280 ' '|''|none)    otherlibdirs=' ' ;;     
6281 *)      otherlibdirs="$ans" ;;
6282 esac
6283 case "$otherlibdirs" in
6284 ' ') val=$undef ;;
6285 *)      val=$define ;;
6286 esac
6287 set d_perl_otherlibdirs
6288 eval $setvar
6289
6290 : Cruising for prototypes
6291 echo " "
6292 echo "Checking out function prototypes..." >&4
6293 $cat >prototype.c <<'EOCP'
6294 int main(int argc, char *argv[]) {
6295         exit(0);}
6296 EOCP
6297 if $cc $ccflags -c prototype.c >prototype.out 2>&1 ; then
6298         echo "Your C compiler appears to support function prototypes."
6299         val="$define"
6300 else
6301         echo "Your C compiler doesn't seem to understand function prototypes."
6302         val="$undef"
6303 fi
6304 set prototype
6305 eval $setvar
6306 $rm -f prototype*
6307
6308 case "$prototype" in
6309 "$define") ;;
6310 *)      ansi2knr='ansi2knr'
6311         echo " "
6312         cat <<EOM >&4
6313
6314 $me:  FATAL ERROR:
6315 This version of $package can only be compiled by a compiler that 
6316 understands function prototypes.  Unfortunately, your C compiler 
6317         $cc $ccflags
6318 doesn't seem to understand them.  Sorry about that.
6319
6320 If GNU cc is available for your system, perhaps you could try that instead.  
6321
6322 Eventually, we hope to support building Perl with pre-ANSI compilers.
6323 If you would like to help in that effort, please contact <perlbug@perl.org>.
6324
6325 Aborting Configure now.
6326 EOM
6327         exit 2
6328         ;;
6329 esac
6330
6331 : determine where public executables go
6332 echo " "
6333 set dflt bin bin
6334 eval $prefixit
6335 fn=d~
6336 rp='Pathname where the public executables will reside?'
6337 . ./getfile
6338 if $test "X$ansexp" != "X$binexp"; then
6339         installbin=''
6340 fi
6341 bin="$ans"
6342 binexp="$ansexp"
6343 : Change installation prefix, if necessary.
6344 : XXX Bug? -- ignores Configure -Dinstallprefix setting.
6345 if $test X"$prefix" != X"$installprefix"; then
6346         installbin=`echo $binexp | sed "s#^$prefix#$installprefix#"`
6347 else
6348         installbin="$binexp"
6349 fi
6350
6351 : Find perl5.005 or later.
6352 echo "Looking for a previously installed perl5.005 or later... "
6353 case "$perl5" in
6354 '')     for tdir in `echo "$binexp:$PATH" | $sed "s/$path_sep/ /g"`; do
6355                 : Check if this perl is recent and can load a simple module
6356                 if $test -x $tdir/perl && $tdir/perl -Mless -e 'use 5.005;' >/dev/null 2>&1; then
6357                         perl5=$tdir/perl
6358                         break;
6359                 elif $test -x $tdir/perl5 && $tdir/perl5 -Mless -e 'use 5.005;' >/dev/null 2>&1; then
6360                         perl5=$tdir/perl
6361                         break;
6362                 fi
6363         done
6364         ;;
6365 *)      perl5="$perl5"
6366         ;;
6367 esac
6368 case "$perl5" in
6369 '')     echo "None found.  That's ok.";;
6370 *)      echo "Using $perl5." ;;
6371 esac
6372
6373 : Determine list of previous versions to include in @INC
6374 $cat > getverlist <<EOPL
6375 #!$perl5 -w
6376 use File::Basename;
6377 \$api_versionstring = "$api_versionstring";
6378 \$version = "$version";
6379 \$stem = "$sitelib_stem";
6380 \$archname = "$archname";
6381 EOPL
6382         $cat >> getverlist <<'EOPL'
6383 # Can't have leading @ because metaconfig interprets it as a command!
6384 ;@inc_version_list=();
6385 # XXX Redo to do opendir/readdir? 
6386 if (-d $stem) {
6387     chdir($stem);
6388     ;@candidates = glob("5.*");
6389 }
6390 else {
6391     ;@candidates = ();
6392 }
6393
6394 # XXX ToDo:  These comparisons must be reworked when two-digit
6395 # subversions come along, so that 5.7.10 compares as greater than
6396 # 5.7.3!  By that time, hope that 5.6.x is sufficiently
6397 # widespread that we can use the built-in version vectors rather
6398 # than reinventing them here.  For 5.6.0, however, we must
6399 # assume this script will likely be run by 5.005_0x.  --AD 1/2000.
6400 foreach $d (@candidates) {
6401     if ($d lt $version) {
6402         if ($d ge $api_versionstring) {
6403             unshift(@inc_version_list, grep { -d } "$d/$archname", $d);
6404         }
6405         elsif ($d ge "5.005") {
6406             unshift(@inc_version_list, grep { -d } $d);
6407         }
6408     }
6409     else {
6410         # Skip newer version.  I.e. don't look in
6411         # 5.7.0 if we're installing 5.6.1.
6412     }
6413 }
6414
6415 if (@inc_version_list) {
6416     print join(' ', @inc_version_list);
6417 }
6418 else {
6419     # Blank space to preserve value for next Configure run.
6420     print " ";
6421 }
6422 EOPL
6423 chmod +x getverlist
6424 case "$inc_version_list" in
6425 '')     if test -x "$perl5"; then
6426                 dflt=`$perl5 getverlist`
6427         else
6428                 dflt='none'
6429         fi
6430         ;;
6431 $undef) dflt='none' ;;
6432 *)  dflt="$inc_version_list" ;;
6433 esac
6434 case "$dflt" in
6435 ''|' ') dflt=none ;;
6436 esac
6437 case "$dflt" in
6438 5.005) case "$bincompat5005" in
6439        $define|true|[yY]*) ;;
6440        *) dflt=none ;;
6441        esac
6442        ;;
6443 esac
6444 $cat <<'EOM'
6445
6446 In order to ease the process of upgrading, this version of perl 
6447 can be configured to use modules built and installed with earlier 
6448 versions of perl that were installed under $prefix.  Specify here
6449 the list of earlier versions that this version of perl should check.
6450 If Configure detected no earlier versions of perl installed under
6451 $prefix, then the list will be empty.  Answer 'none' to tell perl
6452 to not search earlier versions.
6453
6454 The default should almost always be sensible, so if you're not sure,
6455 just accept the default.
6456 EOM
6457
6458 rp='List of earlier versions to include in @INC?'
6459 . ./myread
6460 case "$ans" in
6461 [Nn]one|''|' ') inc_version_list=' ' ;;
6462 *) inc_version_list="$ans" ;;
6463 esac
6464 case "$inc_version_list" in
6465 ''|' ') 
6466         inc_version_list_init='0';;
6467 *)      inc_version_list_init=`echo $inc_version_list |
6468                 $sed -e 's/^/"/' -e 's/ /","/g' -e 's/$/",0/'`
6469         ;;
6470 esac
6471 $rm -f getverlist
6472
6473 : determine whether to install perl also as /usr/bin/perl
6474
6475 echo " "
6476 if $test -d /usr/bin -a "X$installbin" != X/usr/bin; then
6477         $cat <<EOM
6478 Many scripts expect perl to be installed as /usr/bin/perl.
6479 I can install the perl you are about to compile also as /usr/bin/perl
6480 (in addition to $installbin/perl).
6481 EOM
6482         case "$installusrbinperl" in
6483         "$undef"|[nN]*) dflt='n';;
6484         *)              dflt='y';;
6485         esac
6486         rp="Do you want to install perl as /usr/bin/perl?"
6487         . ./myread
6488         case "$ans" in
6489         [yY]*)  val="$define";;
6490         *)      val="$undef" ;;
6491         esac
6492 else
6493         val="$undef"
6494 fi
6495 set installusrbinperl
6496 eval $setvar
6497
6498 : see if dld is available
6499 set dld.h i_dld
6500 eval $inhdr
6501
6502 : see if dlopen exists
6503 xxx_runnm="$runnm"
6504 runnm=false
6505 set dlopen d_dlopen
6506 eval $inlibc
6507 runnm="$xxx_runnm"
6508
6509 : determine which dynamic loading, if any, to compile in
6510 echo " "
6511 dldir="ext/DynaLoader"
6512 case "$usedl" in
6513 $define|y|true)
6514         dflt='y'
6515         usedl="$define"
6516         ;;
6517 $undef|n|false)
6518         dflt='n'
6519         usedl="$undef"
6520         ;;
6521 *) 
6522         dflt='n'
6523         case "$d_dlopen" in
6524             $define) dflt='y' ;;
6525         esac
6526         case "$i_dld" in
6527             $define) dflt='y' ;;
6528         esac
6529         : Does a dl_xxx.xs file exist for this operating system
6530         $test -f $rsrc/$dldir/dl_${osname}.xs && dflt='y'
6531         ;;
6532 esac
6533 rp="Do you wish to use dynamic loading?"
6534 . ./myread
6535 usedl="$ans"
6536 case "$ans" in
6537 y*) usedl="$define"
6538         case "$dlsrc" in
6539         '')
6540                 if $test -f $rsrc/$dldir/dl_${osname}.xs ; then
6541                         dflt="$dldir/dl_${osname}.xs"
6542                 elif $test "$d_dlopen" = "$define" ; then
6543                         dflt="$dldir/dl_dlopen.xs"
6544                 elif $test "$i_dld" = "$define" ; then
6545                         dflt="$dldir/dl_dld.xs"
6546                 else
6547                         dflt=''
6548                 fi
6549                 ;;
6550         *)      dflt="$dldir/$dlsrc"
6551                 ;;
6552         esac
6553     echo "The following dynamic loading files are available:"
6554         : Can not go over to $dldir because getfile has path hard-coded in.
6555         tdir=`pwd`; cd $rsrc; $ls -C $dldir/dl*.xs; cd $tdir
6556         rp="Source file to use for dynamic loading"
6557         fn="fne"
6558         gfpth="$src"
6559         . ./getfile
6560         usedl="$define"
6561         : emulate basename
6562         dlsrc=`echo $ans | $sed -e 's%.*/\([^/]*\)$%\1%'`
6563
6564         $cat << EOM
6565
6566 Some systems may require passing special flags to $cc -c to
6567 compile modules that will be used to create a shared library.
6568 To use no flags, say "none".
6569
6570 EOM
6571     case "$cccdlflags" in
6572     '') case "$gccversion" in
6573                 '') case "$osname" in
6574                         hpux)   dflt='+z' ;;
6575                         next)   dflt='none' ;;
6576                         irix*)  dflt='-KPIC' ;;
6577                         svr4*|esix*|solaris) dflt='-KPIC' ;;
6578                         sunos)  dflt='-pic' ;;
6579                         *)      dflt='none' ;;
6580                     esac
6581                         ;;
6582                 *)  case "$osname" in
6583                         svr4*|esix*|solaris) dflt='-fPIC' ;;
6584                         *)      dflt='-fpic' ;;
6585                     esac ;;
6586             esac ;;
6587         ' ') dflt='none' ;;
6588     *)  dflt="$cccdlflags" ;;
6589     esac
6590     rp="Any special flags to pass to $cc -c to compile shared library modules?"
6591     . ./myread
6592     case "$ans" in
6593     none) cccdlflags=' ' ;;
6594     *) cccdlflags="$ans" ;;
6595     esac
6596
6597     cat << EOM
6598
6599 Some systems use ld to create libraries that can be dynamically loaded,
6600 while other systems (such as those using ELF) use $cc.
6601
6602 EOM
6603         case "$ld" in
6604         '')     $cat >try.c <<'EOM'
6605 /* Test for whether ELF binaries are produced */
6606 #include <fcntl.h>
6607 #include <stdlib.h>
6608 int main() {
6609         char b[4];
6610         int i = open("a.out",O_RDONLY);
6611         if(i == -1) 
6612                 exit(1); /* fail */
6613         if(read(i,b,4)==4 && b[0]==127 && b[1]=='E' && b[2]=='L' && b[3]=='F')
6614                 exit(0); /* succeed (yes, it's ELF) */
6615         else
6616                 exit(1); /* fail */
6617 }
6618 EOM
6619                 if $cc $ccflags try.c >/dev/null 2>&1 && ./a.out; then
6620                         cat <<EOM
6621 You appear to have ELF support.  I'll use $cc to build dynamic libraries.
6622 EOM
6623                         dflt="$cc"
6624                 else
6625                         echo "I'll use ld to build dynamic libraries."
6626                         dflt='ld'
6627                 fi
6628                 rm -f try.c a.out
6629                 ;;
6630         *)      dflt="$ld"
6631                 ;;
6632         esac
6633
6634     rp="What command should be used to create dynamic libraries?"
6635     . ./myread
6636         ld="$ans"
6637
6638     cat << EOM
6639
6640 Some systems may require passing special flags to $ld to create a
6641 library that can be dynamically loaded.  If your ld flags include
6642 -L/other/path options to locate libraries outside your loader's normal
6643 search path, you may need to specify those -L options here as well.  To
6644 use no flags, say "none".
6645
6646 EOM
6647     case "$lddlflags" in
6648     '') case "$osname" in
6649                         beos) dflt='-nostart' ;;
6650                         hpux) dflt='-b';
6651                               case "$gccversion" in
6652                               '') dflt="$dflt +vnocompatwarnings" ;;
6653                               esac
6654                               ;;        
6655                         linux|irix*)    dflt='-shared' ;;
6656                         next)  dflt='none' ;;
6657                         solaris) dflt='-G' ;;
6658                         sunos) dflt='-assert nodefinitions' ;;
6659                         svr4*|esix*) dflt="-G $ldflags" ;;
6660                 *)     dflt='none' ;;
6661                         esac
6662                         ;;
6663     *) dflt="$lddlflags" ;;
6664     esac
6665
6666         : Try to guess additional flags to pick up local libraries.
6667         : Be careful not to append to a plain 'none'
6668         case "$dflt" in
6669         none) dflt='' ;;
6670         esac
6671         for thisflag in $ldflags; do
6672                 case "$thisflag" in
6673                 -L*|-R*)
6674                         case " $dflt " in
6675                         *" $thisflag "*) ;;
6676                         *) dflt="$dflt $thisflag" ;;
6677                         esac
6678                         ;;
6679                 esac
6680         done
6681
6682         case "$dflt" in
6683         ''|' ') dflt='none' ;;
6684         esac
6685
6686     rp="Any special flags to pass to $ld to create a dynamically loaded library?"
6687     . ./myread
6688     case "$ans" in
6689     none) lddlflags=' ' ;;
6690     *) lddlflags="$ans" ;;
6691     esac
6692
6693         cat <<EOM
6694
6695 Some systems may require passing special flags to $cc to indicate that
6696 the resulting executable will use dynamic linking.  To use no flags,
6697 say "none".
6698
6699 EOM
6700     case "$ccdlflags" in
6701     '') case "$osname" in
6702                 hpux)   dflt='-Wl,-E' ;;
6703                 linux)  dflt='-rdynamic' ;;
6704                 next)   dflt='none' ;;
6705                 sunos)  dflt='none' ;;
6706                 *)      dflt='none' ;;
6707             esac ;;
6708     ' ')  dflt='none' ;;
6709     *)  dflt="$ccdlflags" ;;
6710     esac
6711     rp="Any special flags to pass to $cc to use dynamic linking?"
6712     . ./myread
6713     case "$ans" in
6714     none) ccdlflags=' ' ;;
6715     *) ccdlflags="$ans" ;;
6716     esac
6717     ;;
6718 *)  usedl="$undef"
6719         ld='ld'
6720     dlsrc='dl_none.xs'
6721     lddlflags=''
6722     ccdlflags=''
6723     ;;
6724 esac
6725
6726 also=''
6727 case "$usedl" in
6728 $undef)
6729         # No dynamic loading being used, so don't bother even to prompt.
6730         useshrplib='false'
6731         ;;
6732 *)      case "$useshrplib" in
6733         '')     case "$osname" in
6734                 svr4*|dgux|dynixptx|esix|powerux|beos|cygwin*)
6735                         dflt=y
6736                         also='Building a shared libperl is required for dynamic loading to work on your system.'
6737                         ;;
6738                 next*)
6739                         case "$osvers" in
6740                         4*)     dflt=y
6741                                 also='Building a shared libperl is needed for MAB support.'
6742                                 ;;
6743                         *)      dflt=n
6744                                 ;;
6745                         esac
6746                         ;;
6747                 *)      dflt=n
6748                         ;;
6749                 esac
6750                 ;;
6751         $define|true|[Yy]*)
6752                 dflt=y
6753                 ;;
6754         *)      dflt=n
6755                 ;;
6756         esac
6757         $cat << EOM
6758
6759 The perl executable is normally obtained by linking perlmain.c with
6760 libperl${_a}, any static extensions (usually just DynaLoader), and
6761 any other libraries needed on this system (such as -lm, etc.).  Since
6762 your system supports dynamic loading, it is probably possible to build
6763 a shared libperl.$so.  If you will have more than one executable linked
6764 to libperl.$so, this will significantly reduce the size of each
6765 executable, but it may have a noticeable affect on performance.  The
6766 default is probably sensible for your system.
6767 $also
6768
6769 EOM
6770         rp="Build a shared libperl.$so (y/n)"
6771         . ./myread
6772         case "$ans" in
6773         true|$define|[Yy]*)
6774                 useshrplib='true'  ;;
6775         *)      useshrplib='false' ;;
6776         esac
6777         ;;
6778 esac
6779
6780 case "$useshrplib" in
6781 true)
6782         case "$libperl" in
6783         '')
6784                 # Figure out a good name for libperl.so.  Since it gets stored in
6785                 # a version-specific architecture-dependent library, the version
6786                 # number isn't really that important, except for making cc/ld happy.
6787                 #
6788                 # A name such as libperl.so.3.1
6789                 majmin="libperl.$so.$patchlevel.$subversion"
6790                 # A name such as libperl.so.301
6791                 majonly=`echo $patchlevel $subversion |
6792                         $awk '{printf "%d%02d", $1, $2}'`
6793                 majonly=libperl.$so.$majonly
6794                 # I'd prefer to keep the os-specific stuff here to a minimum, and
6795                 # rely on figuring it out from the naming of libc.
6796                 case "${osname}${osvers}" in
6797                 next4*)
6798                         dflt=libperl.5.$so
6799                         # XXX How handle the --version stuff for MAB?
6800                         ;;
6801                 linux*)  # ld won't link with a bare -lperl otherwise.
6802                         dflt=libperl.$so
6803                         ;;
6804                 cygwin*) # include version
6805                         dflt=`echo libperl$version | sed -e 's/\./_/g'`$lib_ext
6806                         ;;
6807                 *)      # Try to guess based on whether libc has major.minor.
6808                         case "$libc" in
6809                         *libc.$so.[0-9]*.[0-9]*) dflt=$majmin ;;
6810                         *libc.$so.[0-9]*) dflt=$majonly ;;
6811                         *)      dflt=libperl.$so ;;
6812                         esac
6813                         ;;
6814                 esac
6815                 ;;
6816         *)      dflt=$libperl
6817                 ;;
6818         esac
6819         cat << EOM
6820
6821 I need to select a good name for the shared libperl.  If your system uses
6822 library names with major and minor numbers, then you might want something
6823 like $majmin.  Alternatively, if your system uses a single version
6824 number for shared libraries, then you might want to use $majonly.
6825 Or, your system might be quite happy with a simple libperl.$so.
6826
6827 Since the shared libperl will get installed into a version-specific
6828 architecture-dependent directory, the version number of the shared perl
6829 library probably isn't important, so the default should be o.k.
6830
6831 EOM
6832         rp='What name do you want to give to the shared libperl?'
6833         . ./myread
6834         libperl=$ans
6835         echo "Ok, I'll use $libperl"
6836         ;;
6837 *)
6838         libperl="libperl${_a}"
6839         ;;
6840 esac
6841
6842 # Detect old use of shrpdir via undocumented Configure -Dshrpdir
6843 case "$shrpdir" in
6844 '') ;;
6845 *)      $cat >&4 <<EOM
6846 WARNING:  Use of the shrpdir variable for the installation location of
6847 the shared $libperl is not supported.  It was never documented and
6848 will not work in this version.  Let me (perlbug@perl.org)
6849 know of any problems this may cause.
6850
6851 EOM
6852         case "$shrpdir" in
6853         "$archlibexp/CORE")
6854                 $cat >&4 <<EOM
6855 But your current setting of $shrpdir is
6856 the default anyway, so it's harmless.
6857 EOM
6858                 ;;
6859         *)
6860                 $cat >&4 <<EOM
6861 Further, your current attempted setting of $shrpdir
6862 conflicts with the value of $archlibexp/CORE
6863 that installperl will use.
6864 EOM
6865                 ;;
6866         esac
6867         ;;
6868 esac
6869
6870 # How will the perl executable find the installed shared $libperl?
6871 # Add $xxx to ccdlflags.
6872 # If we can't figure out a command-line option, use $shrpenv to
6873 # set env LD_RUN_PATH.  The main perl makefile uses this.
6874 shrpdir=$archlibexp/CORE
6875 xxx=''
6876 tmp_shrpenv=''
6877 if "$useshrplib"; then
6878     case "$osname" in 
6879         aix)
6880                 # We'll set it in Makefile.SH...
6881                 ;;
6882         solaris|netbsd)
6883                 xxx="-R $shrpdir"
6884                 ;;
6885         freebsd)
6886                 xxx="-Wl,-R$shrpdir"
6887                 ;;
6888         linux|irix*|dec_osf)
6889                 xxx="-Wl,-rpath,$shrpdir"
6890                 ;;
6891         next)
6892                 # next doesn't like the default...
6893                 ;;
6894         beos)
6895                 # beos doesn't like the default, either.
6896                 ;;
6897         hpux*)
6898                 # hpux doesn't like the default, either.
6899                 tmp_shrpenv="env LDOPTS=\"+s +b${shrpdir}\""
6900                 ;;
6901         *)
6902                 tmp_shrpenv="env LD_RUN_PATH=$shrpdir"
6903                 ;;
6904         esac
6905         case "$xxx" in
6906         '') ;;
6907         *)      
6908                 # Only add $xxx if it isn't already in ccdlflags.
6909                 case " $ccdlflags " in
6910                 *" $xxx "*)     ;;
6911                 *)      ccdlflags="$ccdlflags $xxx"
6912                         cat <<EOM >&4
6913
6914 Adding $xxx to the flags
6915 passed to $ld so that the perl executable will find the 
6916 installed shared $libperl.
6917
6918 EOM
6919                         ;;
6920                 esac
6921                 ;;
6922         esac
6923 fi
6924 # Fix ccdlflags in AIX for building external extensions.
6925 # (For building Perl itself bare -bE:perl.exp is needed,
6926 #  Makefile.SH takes care of this.)
6927 case "$osname" in
6928 aix) ccdlflags="$ccdlflags -bE:$installarchlib/CORE/perl.exp" ;;
6929 esac
6930 # Respect a hint or command-line value.
6931 case "$shrpenv" in
6932 '') shrpenv="$tmp_shrpenv" ;;
6933 esac
6934 case "$ldlibpthname" in
6935 '')     ldlibpthname=LD_LIBRARY_PATH ;;
6936 none)   ldlibpthname='' ;;
6937 esac
6938
6939 : determine where manual pages go
6940 set man1dir man1dir none
6941 eval $prefixit
6942 $cat <<EOM
6943
6944 $spackage has manual pages available in source form.
6945 EOM
6946 case "$nroff" in
6947 nroff)
6948         echo "However, you don't have nroff, so they're probably useless to you."
6949         case "$man1dir" in
6950         '') man1dir="none";;
6951         esac;;
6952 esac
6953 echo "If you don't want the manual sources installed, answer 'none'."
6954 case "$man1dir" in
6955 ' ') dflt=none
6956         ;;
6957 '')
6958         lookpath="$prefixexp/man/man1 $prefixexp/man/l_man/man1"
6959         lookpath="$lookpath $prefixexp/man/p_man/man1"
6960         lookpath="$lookpath $prefixexp/man/u_man/man1"
6961         lookpath="$lookpath $prefixexp/man/man.1"
6962         case "$sysman" in
6963         */?_man*)       dflt=`./loc . $prefixexp/l_man/man1 $lookpath` ;;
6964         *)      dflt=`./loc . $prefixexp/man/man1 $lookpath` ;;
6965         esac
6966         set dflt
6967         eval $prefixup
6968         ;;
6969 *)  dflt="$man1dir"
6970         ;;
6971 esac
6972 echo " "
6973 fn=dn+~
6974 rp="Where do the main $spackage manual pages (source) go?"
6975 . ./getfile
6976 if $test "X$man1direxp" != "X$ansexp"; then
6977         installman1dir=''
6978 fi
6979 man1dir="$ans"
6980 man1direxp="$ansexp"
6981 case "$man1dir" in
6982 '')     man1dir=' '
6983         installman1dir='';;
6984 esac
6985
6986 : Change installation prefix, if necessary.
6987 if $test X"$prefix" != X"$installprefix"; then
6988         installman1dir=`echo $man1direxp | $sed "s#^$prefix#$installprefix#"`
6989 else
6990         installman1dir="$man1direxp"
6991 fi
6992
6993 : What suffix to use on installed man pages
6994
6995 case "$man1dir" in
6996 ' ')
6997         man1ext='0'
6998         ;;
6999 *)
7000         rp="What suffix should be used for the main $spackage man pages?"
7001         case "$man1ext" in
7002         '')     case "$man1dir" in
7003                 *1)  dflt=1 ;;
7004                 *1p) dflt=1p ;;
7005                 *1pm) dflt=1pm ;;
7006                 *l) dflt=l;;
7007                 *n) dflt=n;;
7008                 *o) dflt=o;;
7009                 *p) dflt=p;;
7010                 *C) dflt=C;;
7011                 *L) dflt=L;;
7012                 *L1) dflt=L1;;
7013                 *) dflt=1;;
7014                 esac
7015                 ;;
7016         *)      dflt="$man1ext";;
7017         esac
7018         . ./myread
7019         man1ext="$ans"
7020         ;;
7021 esac
7022
7023 : see if we can have long filenames
7024 echo " "
7025 first=123456789abcdef
7026 $rm -f $first
7027 if (echo hi >$first) 2>/dev/null; then
7028         if $test -f 123456789abcde; then
7029                 echo 'You cannot have filenames longer than 14 characters.  Sigh.' >&4
7030                 val="$undef"
7031         else
7032                 echo 'You can have filenames longer than 14 characters.'>&4
7033                 val="$define"
7034         fi
7035 else
7036         $cat <<'EOM'
7037 You can't have filenames longer than 14 chars.
7038 You can't even think about them!
7039 EOM
7040         val="$undef"
7041 fi 
7042 set d_flexfnam
7043 eval $setvar
7044 $rm -rf 123456789abcde*
7045
7046 : determine where library module manual pages go
7047 set man3dir man3dir none
7048 eval $prefixit
7049 $cat <<EOM
7050
7051 $spackage has manual pages for many of the library modules.
7052 EOM
7053
7054 case "$nroff" in
7055 nroff)
7056         $cat <<'EOM'
7057 However, you don't have nroff, so they're probably useless to you.
7058 EOM
7059         case "$man3dir" in
7060         '') man3dir="none";;
7061         esac;;
7062 esac
7063
7064 case "$d_flexfnam" in
7065 undef)
7066         $cat <<'EOM'
7067 However, your system can't handle the long file names like File::Basename.3. 
7068 EOM
7069         case "$man3dir" in
7070         '') man3dir="none";;
7071         esac;;
7072 esac
7073
7074 echo "If you don't want the manual sources installed, answer 'none'."
7075 prog=`echo $package | $sed 's/-*[0-9.]*$//'`
7076 case "$man3dir" in
7077 '')     dflt=`echo "$man1dir" | $sed -e 's/man1/man3/g' -e 's/man\.1/man\.3/g'`
7078         if $test -d "$privlib/man/man3"; then
7079                 cat <<EOM >&4
7080
7081 WARNING:  Previous versions of perl installed man3 pages into
7082 $privlib/man/man3.  This version will suggest a 
7083 new default of $dflt.  
7084 EOM
7085                 tdflt=$dflt
7086                 dflt='n'
7087                 rp='Do you wish to preserve the old behavior?(y/n)'
7088                 . ./myread
7089                 case "$ans" in
7090                 y*) dflt="$privlib/man/man3" ;;
7091                 *)  dflt=$tdflt ;;
7092                 esac
7093     fi
7094         ;;
7095 *)      dflt="$man3dir" ;;
7096 esac
7097 case "$dflt" in
7098 ' ') dflt=none ;;
7099 esac
7100 echo " "
7101 fn=dn+~
7102 rp="Where do the $package library man pages (source) go?"
7103 . ./getfile
7104 man3dir="$ans"
7105 man3direxp="$ansexp"
7106 case "$man3dir" in
7107 '')     man3dir=' '
7108         installman3dir='';;
7109 esac
7110
7111 : Change installation prefix, if necessary.
7112 if $test X"$prefix" != X"$installprefix"; then
7113         installman3dir=`echo $man3direxp | $sed "s#^$prefix#$installprefix#"`
7114 else
7115         installman3dir="$man3direxp"
7116 fi
7117
7118 : What suffix to use on installed man pages
7119 case "$man3dir" in
7120 ' ')
7121         man3ext='0'
7122         ;;
7123 *)
7124         rp="What suffix should be used for the $package library man pages?"
7125         case "$man3ext" in
7126         '')     case "$man3dir" in
7127                 *3)  dflt=3 ;;
7128                 *3p) dflt=3p ;;
7129                 *3pm) dflt=3pm ;;
7130                 *l) dflt=l;;
7131                 *n) dflt=n;;
7132                 *o) dflt=o;;
7133                 *p) dflt=p;;
7134                 *C) dflt=C;;
7135                 *L) dflt=L;;
7136                 *L3) dflt=L3;;
7137                 *) dflt=3;;
7138                 esac
7139                 ;;
7140         *)      dflt="$man3ext";;
7141         esac
7142         . ./myread
7143         man3ext="$ans"
7144         ;;
7145 esac
7146
7147 : see if we have to deal with yellow pages, now NIS.
7148 if $test -d /usr/etc/yp || $test -d /etc/yp; then
7149         if $test -f /usr/etc/nibindd; then
7150                 echo " "
7151                 echo "I'm fairly confident you're on a NeXT."
7152                 echo " "
7153                 rp='Do you get the hosts file via NetInfo?'
7154                 dflt=y
7155                 case "$hostcat" in
7156                 nidump*) ;;
7157                 '') ;;
7158                 *) dflt=n;;
7159                 esac
7160                 . ./myread
7161                 case "$ans" in
7162                 y*) hostcat='nidump hosts .';;
7163                 *)      case "$hostcat" in
7164                         nidump*) hostcat='';;
7165                         esac
7166                         ;;
7167                 esac
7168         fi
7169         case "$hostcat" in
7170         nidump*) ;;
7171         *)
7172                 case "$hostcat" in
7173                 *ypcat*) dflt=y;;
7174                 '') if $contains '^\+' /etc/passwd >/dev/null 2>&1; then
7175                                 dflt=y
7176                         else
7177                                 dflt=n
7178                         fi;;
7179                 *) dflt=n;;
7180                 esac
7181                 echo " "
7182                 rp='Are you getting the hosts file via yellow pages?'
7183                 . ./myread
7184                 case "$ans" in
7185                 y*) hostcat='ypcat hosts';;
7186                 *) hostcat='cat /etc/hosts';;
7187                 esac
7188                 ;;
7189         esac
7190 fi
7191 case "$hostcat" in
7192 '') test -f /etc/hosts && hostcat='cat /etc/hosts';;
7193 esac
7194 case "$groupcat" in
7195 '') test -f /etc/group && groupcat='cat /etc/group';;
7196 esac
7197 case "$passcat" in
7198 '') test -f /etc/passwd && passcat='cat /etc/passwd';;
7199 esac
7200
7201 : now get the host name
7202 echo " "
7203 echo "Figuring out host name..." >&4
7204 case "$myhostname" in
7205 '') cont=true
7206         echo 'Maybe "hostname" will work...'
7207         if tans=`sh -c hostname 2>&1` ; then
7208                 myhostname=$tans
7209                 phostname=hostname
7210                 cont=''
7211         fi
7212         ;;
7213 *) cont='';;
7214 esac
7215 if $test "$cont"; then
7216         if ./xenix; then
7217                 echo 'Oh, dear.  Maybe "/etc/systemid" is the key...'
7218                 if tans=`cat /etc/systemid 2>&1` ; then
7219                         myhostname=$tans
7220                         phostname='cat /etc/systemid'
7221                         echo "Whadyaknow.  Xenix always was a bit strange..."
7222                         cont=''
7223                 fi
7224         elif $test -r /etc/systemid; then
7225                 echo "(What is a non-Xenix system doing with /etc/systemid?)"
7226         fi
7227 fi
7228 if $test "$cont"; then
7229         echo 'No, maybe "uuname -l" will work...'
7230         if tans=`sh -c 'uuname -l' 2>&1` ; then
7231                 myhostname=$tans
7232                 phostname='uuname -l'
7233         else
7234                 echo 'Strange.  Maybe "uname -n" will work...'
7235                 if tans=`sh -c 'uname -n' 2>&1` ; then
7236                         myhostname=$tans
7237                         phostname='uname -n'
7238                 else
7239                         echo 'Oh well, maybe I can mine it out of whoami.h...'
7240                         if tans=`sh -c $contains' sysname $usrinc/whoami.h' 2>&1` ; then
7241                                 myhostname=`echo "$tans" | $sed 's/^.*"\(.*\)"/\1/'`
7242                                 phostname="sed -n -e '"'/sysname/s/^.*\"\\(.*\\)\"/\1/{'"' -e p -e q -e '}' <$usrinc/whoami.h"
7243                         else
7244                                 case "$myhostname" in
7245                                 '') echo "Does this machine have an identity crisis or something?"
7246                                         phostname='';;
7247                                 *)
7248                                         echo "Well, you said $myhostname before..."
7249                                         phostname='echo $myhostname';;
7250                                 esac
7251                         fi
7252                 fi
7253         fi
7254 fi
7255 : you do not want to know about this
7256 set $myhostname
7257 myhostname=$1
7258
7259 : verify guess
7260 if $test "$myhostname" ; then
7261         dflt=y
7262         rp='Your host name appears to be "'$myhostname'".'" Right?"
7263         . ./myread
7264         case "$ans" in
7265         y*) ;;
7266         *) myhostname='';;
7267         esac
7268 fi
7269
7270 : bad guess or no guess
7271 while $test "X$myhostname" = X ; do
7272         dflt=''
7273         rp="Please type the (one word) name of your host:"
7274         . ./myread
7275         myhostname="$ans"
7276 done
7277
7278 : translate upper to lower if necessary
7279 case "$myhostname" in
7280 *[A-Z]*)
7281         echo "(Normalizing case in your host name)"
7282         myhostname=`echo $myhostname | ./tr '[A-Z]' '[a-z]'`
7283         ;;
7284 esac
7285
7286 case "$myhostname" in
7287 *.*)
7288         dflt=`expr "X$myhostname" : "X[^.]*\(\..*\)"`
7289         myhostname=`expr "X$myhostname" : "X\([^.]*\)\."`
7290         echo "(Trimming domain name from host name--host name is now $myhostname)"
7291         ;;
7292 *) case "$mydomain" in
7293         '')
7294                 {
7295                         test "X$hostcat" = "Xypcat hosts" &&
7296                         ypmatch "$myhostname" hosts 2>/dev/null |\
7297                                 $sed -e 's/[     ]*#.*//; s/$/ /' > hosts && \
7298                         $test -s hosts
7299                 } || {
7300                         test "X$hostcat" != "X" &&
7301                         $hostcat | $sed -n -e "s/[       ]*#.*//; s/\$/ /
7302                                         /[       ]$myhostname[  . ]/p" > hosts
7303                 }
7304                 tmp_re="[       . ]"
7305                 $test x`$awk "/[0-9].*[  ]$myhostname$tmp_re/ { sum++ }
7306                              END { print sum }" hosts` = x1 || tmp_re="[         ]"
7307                 dflt=.`$awk "/[0-9].*[   ]$myhostname$tmp_re/ {for(i=2; i<=NF;i++) print \\\$i}" \
7308                         hosts | $sort | $uniq | \
7309                         $sed -n -e "s/$myhostname\.\([-a-zA-Z0-9_.]\)/\1/p"`
7310                 case `$echo X$dflt` in
7311                 X*\ *)  echo "(Several hosts in /etc/hosts matched hostname)"
7312                         dflt=.
7313                         ;;
7314                 X.) echo "(You do not have fully-qualified names in /etc/hosts)"
7315                         ;;
7316                 esac
7317                 case "$dflt" in
7318                 .)
7319                         tans=`./loc resolv.conf X /etc /usr/etc`
7320                         if $test -f "$tans"; then
7321                                 echo "(Attempting domain name extraction from $tans)"
7322                                 dflt=.`$sed -n -e 's/   / /g' \
7323                                   -e 's/^search  *\([^ ]*\).*/\1/p' $tans \
7324                                   | ./tr '[A-Z]' '[a-z]' 2>/dev/null`
7325                                 case "$dflt" in
7326                                 .) dflt=.`$sed -n -e 's/        / /g' \
7327                                      -e 's/^domain  *\([^ ]*\).*/\1/p' $tans \
7328                                      | ./tr '[A-Z]' '[a-z]' 2>/dev/null`
7329                                         ;;
7330                                 esac
7331                         fi
7332                         ;;
7333                 esac
7334                 case "$dflt" in
7335                 .) echo "(No help from resolv.conf either -- attempting clever guess)"
7336                         dflt=.`sh -c domainname 2>/dev/null`
7337                         case "$dflt" in
7338                         '') dflt='.';;
7339                         .nis.*|.yp.*|.main.*) dflt=`echo $dflt | $sed -e 's/^\.[^.]*//'`;;
7340                         esac
7341                         ;;
7342                 esac
7343                 case "$dflt" in
7344                 .) echo "(Lost all hope -- silly guess then)"
7345                         dflt='.uucp'
7346                         ;;
7347                 esac
7348                 $rm -f hosts
7349                 ;;
7350         *) dflt="$mydomain";;
7351         esac;;
7352 esac
7353 echo " "
7354 rp="What is your domain name?"
7355 . ./myread
7356 tans="$ans"
7357 case "$ans" in
7358 '') ;;
7359 .*) ;;
7360 *) tans=".$tans";;
7361 esac
7362 mydomain="$tans"
7363
7364 : translate upper to lower if necessary
7365 case "$mydomain" in
7366 *[A-Z]*)
7367         echo "(Normalizing case in your domain name)"
7368         mydomain=`echo $mydomain | ./tr '[A-Z]' '[a-z]'`
7369         ;;
7370 esac
7371
7372 : a little sanity check here
7373 case "$phostname" in
7374 '') ;;
7375 *)
7376         case `$phostname | ./tr '[A-Z]' '[a-z]'` in
7377         $myhostname$mydomain|$myhostname) ;;
7378         *)
7379                 case "$phostname" in
7380                 sed*)
7381                         echo "(That doesn't agree with your whoami.h file, by the way.)"
7382                         ;;
7383                 *)
7384                         echo "(That doesn't agree with your $phostname command, by the way.)"
7385                         ;;
7386                 esac
7387         ;;
7388         esac
7389         ;;
7390 esac
7391
7392 $cat <<EOM
7393
7394 I need to get your e-mail address in Internet format if possible, i.e.
7395 something like user@host.domain. Please answer accurately since I have
7396 no easy means to double check it. The default value provided below
7397 is most probably close to reality but may not be valid from outside
7398 your organization...
7399
7400 EOM
7401 cont=x
7402 while test "$cont"; do
7403         case "$cf_email" in
7404         '') dflt="$cf_by@$myhostname$mydomain";;
7405         *) dflt="$cf_email";;
7406         esac
7407         rp='What is your e-mail address?'
7408         . ./myread
7409         cf_email="$ans"
7410         case "$cf_email" in
7411         *@*.*) cont='' ;;
7412         *)
7413                 rp='Address does not look like an Internet one.  Use it anyway?'
7414                 case "$fastread" in
7415                 yes) dflt=y ;;
7416                 *) dflt=n ;;
7417                 esac
7418                 . ./myread
7419                 case "$ans" in
7420                 y*) cont='' ;;
7421                 *) echo " " ;;
7422                 esac
7423                 ;;
7424         esac
7425 done
7426
7427 $cat <<EOM
7428
7429 If you or somebody else will be maintaining perl at your site, please
7430 fill in the correct e-mail address here so that they may be contacted
7431 if necessary. Currently, the "perlbug" program included with perl
7432 will send mail to this address in addition to perlbug@perl.org. You may
7433 enter "none" for no administrator.
7434
7435 EOM
7436 case "$perladmin" in
7437 '') dflt="$cf_email";;
7438 *) dflt="$perladmin";;
7439 esac
7440 rp='Perl administrator e-mail address'
7441 . ./myread
7442 perladmin="$ans"
7443
7444 : figure out how to guarantee perl startup
7445 case "$startperl" in
7446 '')
7447         case "$sharpbang" in
7448         *!)
7449                 $cat <<EOH
7450
7451 I can use the #! construct to start perl on your system. This will
7452 make startup of perl scripts faster, but may cause problems if you
7453 want to share those scripts and perl is not in a standard place
7454 ($binexp/perl) on all your platforms. The alternative is to force
7455 a shell by starting the script with a single ':' character.
7456
7457 EOH
7458                 dflt="$binexp/perl"
7459                 rp='What shall I put after the #! to start up perl ("none" to not use #!)?'
7460                 . ./myread
7461                 case "$ans" in
7462                 none)   startperl=": # use perl";;
7463                 *)      startperl="#!$ans"
7464                         if $test 30 -lt `echo "$ans" | wc -c`; then
7465                                 $cat >&4 <<EOM
7466
7467 WARNING:  Some systems limit the #! command to 32 characters.
7468 If you experience difficulty running Perl scripts with #!, try
7469 installing Perl in a directory with a shorter pathname.
7470
7471 EOM
7472                         fi ;;
7473                 esac
7474                 ;;
7475         *) startperl=": # use perl"
7476                 ;;
7477         esac
7478         ;;
7479 esac
7480 echo "I'll use $startperl to start perl scripts."
7481
7482 : figure best path for perl in scripts
7483 case "$perlpath" in
7484 '')
7485         perlpath="$binexp/perl"
7486         case "$startperl" in
7487         *!*) ;;
7488         *)
7489                 $cat <<EOH
7490
7491 I will use the "eval 'exec'" idiom to start Perl on your system.
7492 I can use the full path of your Perl binary for this purpose, but
7493 doing so may cause problems if you want to share those scripts and
7494 Perl is not always in a standard place ($binexp/perl).
7495
7496 EOH
7497                 dflt="$binexp/perl"
7498                 rp="What path shall I use in \"eval 'exec'\"?"
7499                 . ./myread
7500                 perlpath="$ans"
7501                 ;;
7502         esac
7503         ;;
7504 esac
7505 case "$startperl" in
7506 *!*)    ;;
7507 *)      echo "I'll use $perlpath in \"eval 'exec'\"" ;;
7508 esac
7509
7510 : determine where public executable scripts go
7511 set scriptdir scriptdir
7512 eval $prefixit
7513 case "$scriptdir" in
7514 '')
7515         dflt="$bin"
7516         : guess some guesses
7517         $test -d /usr/share/scripts && dflt=/usr/share/scripts
7518         $test -d /usr/share/bin     && dflt=/usr/share/bin
7519         $test -d /usr/local/script  && dflt=/usr/local/script
7520         $test -d /usr/local/scripts && dflt=/usr/local/scripts
7521         $test -d $prefixexp/script  && dflt=$prefixexp/script
7522         set dflt
7523         eval $prefixup
7524         ;;
7525 *)  dflt="$scriptdir"
7526         ;;
7527 esac
7528 $cat <<EOM
7529  
7530 Some installations have a separate directory just for executable scripts so
7531 that they can mount it across multiple architectures but keep the scripts in
7532 one spot.  You might, for example, have a subdirectory of /usr/share for this.
7533 Or you might just lump your scripts in with all your other executables.
7534  
7535 EOM
7536 fn=d~
7537 rp='Where do you keep publicly executable scripts?'
7538 . ./getfile
7539 if $test "X$ansexp" != "X$scriptdirexp"; then
7540         installscript=''
7541 fi
7542 scriptdir="$ans"
7543 scriptdirexp="$ansexp"
7544 : Change installation prefix, if necessary.
7545 if $test X"$prefix" != X"$installprefix"; then
7546         installscript=`echo $scriptdirexp | sed "s#^$prefix#$installprefix#"`
7547 else
7548         installscript="$scriptdirexp"
7549 fi
7550
7551 : determine where add-on public executables go
7552 case "$sitebin" in
7553 '')     dflt=$siteprefix/bin ;;
7554 *)      dflt=$sitebin ;;
7555 esac
7556 fn=d~
7557 rp='Pathname where the add-on public executables should be installed?'
7558 . ./getfile
7559 sitebin="$ans"
7560 sitebinexp="$ansexp"
7561 : Change installation prefix, if necessary.
7562 if $test X"$prefix" != X"$installprefix"; then
7563         installsitebin=`echo $sitebinexp | sed "s#^$prefix#$installprefix#"`
7564 else
7565         installsitebin="$sitebinexp"
7566 fi
7567
7568 case "$useperlio" in
7569 $define|true|[yY]*)     dflt='y';;
7570 *) dflt='n';;
7571 esac
7572 cat <<EOM
7573
7574 Previous version of $package used the standard IO mechanisms as defined
7575 in <stdio.h>.  Versions 5.003_02 and later of perl allow alternate IO
7576 mechanisms via a "PerlIO" abstraction, but the stdio mechanism is still
7577 the default.  This abstraction layer can use AT&T's sfio (if you already
7578 have sfio installed) or regular stdio.  Using PerlIO with sfio may cause
7579 problems with some extension modules.  Using PerlIO with stdio is safe,
7580 but it is slower than plain stdio and therefore is not the default.
7581
7582 If this doesn't make any sense to you, just accept the default '$dflt'.
7583 EOM
7584 rp='Use the experimental PerlIO abstraction layer?'
7585 . ./myread
7586 case "$ans" in
7587 y|Y) 
7588         val="$define"
7589         ;;     
7590 *)      
7591         echo "Ok, doing things the stdio way"
7592         val="$undef"
7593         ;;
7594 esac
7595 set useperlio
7596 eval $setvar 
7597
7598 case "$vendorprefix" in
7599 '')     d_vendorbin="$undef"
7600         vendorbin=''
7601         vendorbinexp=''
7602         ;;
7603 *)      d_vendorbin="$define"
7604         : determine where vendor-supplied executables go.
7605         case "$vendorbin" in
7606         '') dflt=$vendorprefix/bin ;;
7607         *)      dflt="$vendorbin" ;;
7608         esac
7609         fn=d~+
7610         rp='Pathname for the vendor-supplied executables directory?'
7611         . ./getfile
7612         vendorbin="$ans"
7613         vendorbinexp="$ansexp"
7614         ;;
7615 esac
7616 : Change installation prefix, if necessary.
7617 if $test X"$prefix" != X"$installprefix"; then
7618         installvendorbin=`echo $vendorbinexp | $sed "s#^$prefix#$installprefix#"`
7619 else
7620         installvendorbin="$vendorbinexp"
7621 fi
7622
7623 : see if qgcvt exists
7624 set qgcvt d_qgcvt
7625 eval $inlibc
7626
7627 echo " "
7628
7629 if $test X"$d_longdbl" = X"$define"; then
7630
7631 echo "Checking how to print long doubles..." >&4
7632
7633 if $test X"$sPRIfldbl" = X -a X"$doublesize" = X"$longdblsize"; then
7634         $cat >try.c <<'EOCP'
7635 #include <sys/types.h>
7636 #include <stdio.h>
7637 int main() {
7638   double d = 123.456;
7639   printf("%.3f\n", d);
7640 }
7641 EOCP
7642         set try
7643         if eval $compile; then
7644                 yyy=`./try$exe_ext`
7645                 case "$yyy" in
7646                 123.456)
7647                         sPRIfldbl='"f"'; sPRIgldbl='"g"'; sPRIeldbl='"e"';
7648                         sPRIFldbl='"F"'; sPRIGldbl='"G"'; sPRIEldbl='"E"';
7649                         echo "We will use %f."
7650                         ;;
7651                 esac
7652         fi
7653 fi
7654
7655 if $test X"$sPRIfldbl" = X; then
7656         $cat >try.c <<'EOCP'
7657 #include <sys/types.h>
7658 #include <stdio.h>
7659 int main() {
7660   long double d = 123.456;
7661   printf("%.3llf\n", d);
7662 }
7663 EOCP
7664         set try
7665         if eval $compile; then
7666                 yyy=`./try$exe_ext`
7667                 case "$yyy" in
7668                 123.456)
7669                         sPRIfldbl='"llf"'; sPRIgldbl='"llg"'; sPRIeldbl='"lle"';
7670                         sPRIFldbl='"llF"'; sPRIGldbl='"llG"'; sPRIEldbl='"llE"';
7671                         echo "We will use %llf."
7672                         ;;
7673                 esac
7674         fi
7675 fi
7676
7677 if $test X"$sPRIfldbl" = X; then
7678         $cat >try.c <<'EOCP'
7679 #include <sys/types.h>
7680 #include <stdio.h>
7681 int main() {
7682   long double d = 123.456;
7683   printf("%.3Lf\n", d);
7684 }
7685 EOCP
7686         set try
7687         if eval $compile; then
7688                 yyy=`./try$exe_ext`
7689                 case "$yyy" in
7690                 123.456)
7691                         sPRIfldbl='"Lf"'; sPRIgldbl='"Lg"'; sPRIeldbl='"Le"';
7692                         sPRIFldbl='"LF"'; sPRIGldbl='"LG"'; sPRIEldbl='"LE"';
7693                         echo "We will use %Lf."
7694                         ;;
7695                 esac
7696         fi
7697 fi
7698
7699 if $test X"$sPRIfldbl" = X; then
7700         $cat >try.c <<'EOCP'
7701 #include <sys/types.h>
7702 #include <stdio.h>
7703 int main() {
7704   long double d = 123.456;
7705   printf("%.3lf\n", d);
7706 }
7707 EOCP
7708         set try
7709         if eval $compile; then
7710                 yyy=`./try$exe_ext`
7711                 case "$yyy" in
7712                 123.456)
7713                         sPRIfldbl='"lf"'; sPRIgldbl='"lg"'; sPRIeldbl='"le"';
7714                         sPRIFldbl='"lF"'; sPRIGldbl='"lG"'; sPRIEldbl='"lE"';
7715                         echo "We will use %lf."
7716                         ;;
7717                 esac
7718         fi
7719 fi
7720
7721 if $test X"$sPRIfldbl" = X; then
7722         echo "Cannot figure out how to print long doubles." >&4
7723 else
7724         sSCNfldbl=$sPRIfldbl    # expect consistency
7725 fi
7726
7727 $rm -f try try.*
7728
7729 fi # d_longdbl
7730
7731 case "$sPRIfldbl" in
7732 '')     d_PRIfldbl="$undef"; d_PRIgldbl="$undef"; d_PRIeldbl="$undef"; 
7733         d_PRIFldbl="$undef"; d_PRIGldbl="$undef"; d_PRIEldbl="$undef"; 
7734         d_SCNfldbl="$undef";
7735         ;;
7736 *)      d_PRIfldbl="$define"; d_PRIgldbl="$define"; d_PRIeldbl="$define"; 
7737         d_PRIFldbl="$define"; d_PRIGldbl="$define"; d_PRIEldbl="$define"; 
7738         d_SCNfldbl="$define";
7739         ;;
7740 esac
7741
7742 : Check how to convert floats to strings.
7743 echo " "
7744 echo "Checking for an efficient way to convert floats to strings."
7745 echo " " > try.c
7746 case "$uselongdouble" in
7747 "$define") echo "#define USE_LONG_DOUBLE" >>try.c ;;
7748 esac
7749 case "$d_longdbl" in
7750 "$define") echo "#define HAS_LONG_DOUBLE" >>try.c ;;
7751 esac
7752 case "$d_PRIgldbl" in
7753 "$define") echo "#define HAS_PRIgldbl"    >>try.c ;;
7754 esac
7755 $cat >>try.c <<EOP
7756 #ifdef TRY_gconvert
7757 #define Gconvert(x,n,t,b) gconvert((x),(n),(t),(b))
7758 char *myname = "gconvert";
7759 #endif
7760 #ifdef TRY_gcvt
7761 #define Gconvert(x,n,t,b) gcvt((x),(n),(b))
7762 char *myname = "gcvt";
7763 #endif
7764 #ifdef TRY_qgcvt
7765 #define Gconvert(x,n,t,b) qgcvt((x),(n),(b))
7766 char *myname = "qgcvt";
7767 #define DOUBLETYPE long double
7768 #endif
7769 #ifdef TRY_sprintf
7770 #if defined(USE_LONG_DOUBLE) && defined(HAS_LONG_DOUBLE) && defined(HAS_PRIgldbl)
7771 #define Gconvert(x,n,t,b) sprintf((b),"%.*"$sPRIgldbl,(n),(x))
7772 #else
7773 #define Gconvert(x,n,t,b) sprintf((b),"%.*g",(n),(x))
7774 #endif
7775 char *myname = "sprintf";
7776 #endif
7777
7778 #ifndef DOUBLETYPE
7779 #if defined(USE_LONG_DOUBLE) && defined(HAS_LONG_DOUBLE)
7780 #define DOUBLETYPE long double
7781 #else
7782 #define DOUBLETYPE double
7783 #endif
7784 #endif
7785
7786 #include <stdio.h>
7787
7788 #define I_STDLIB $i_stdlib
7789 #ifdef I_STDLIB
7790 #include <stdlib.h>
7791 #endif
7792
7793 int
7794 checkit(expect, got)
7795 char *expect;
7796 char *got;
7797 {
7798     if (strcmp(expect, got)) {
7799                 printf("%s oddity:  Expected %s, got %s\n",
7800                         myname, expect, got);
7801                 exit(1);
7802         }
7803 }
7804
7805 int main()
7806
7807         char buf[64]; 
7808         buf[63] = '\0';
7809
7810         /* This must be 1st test on (which?) platform */
7811         /* Alan Burlison <AlanBurlsin@unn.unisys.com> */
7812         Gconvert((DOUBLETYPE)0.1, 8, 0, buf);
7813         checkit("0.1", buf);
7814
7815         Gconvert((DOUBLETYPE)1.0, 8, 0, buf); 
7816         checkit("1", buf);
7817
7818         Gconvert((DOUBLETYPE)1.1, 8, 0, buf); 
7819         checkit("1.1", buf);
7820
7821         Gconvert((DOUBLETYPE)1.01, 8, 0, buf); 
7822         checkit("1.01", buf);
7823
7824         Gconvert((DOUBLETYPE)1.001, 8, 0, buf); 
7825         checkit("1.001", buf);
7826
7827         Gconvert((DOUBLETYPE)1.0001, 8, 0, buf); 
7828         checkit("1.0001", buf);
7829
7830         Gconvert((DOUBLETYPE)1.00001, 8, 0, buf); 
7831         checkit("1.00001", buf);
7832
7833         Gconvert((DOUBLETYPE)1.000001, 8, 0, buf); 
7834         checkit("1.000001", buf);
7835
7836         Gconvert((DOUBLETYPE)0.0, 8, 0, buf); 
7837         checkit("0", buf);
7838
7839         Gconvert((DOUBLETYPE)-1.0, 8, 0, buf); 
7840         checkit("-1", buf);
7841
7842         /* Some Linux gcvt's give 1.e+5 here. */
7843         Gconvert((DOUBLETYPE)100000.0, 8, 0, buf); 
7844         checkit("100000", buf);
7845         
7846         /* Some Linux gcvt's give -1.e+5 here. */
7847         Gconvert((DOUBLETYPE)-100000.0, 8, 0, buf); 
7848         checkit("-100000", buf);
7849
7850         exit(0);
7851 }
7852 EOP
7853 case "$d_Gconvert" in
7854 gconvert*) xxx_list='gconvert gcvt sprintf' ;;
7855 gcvt*) xxx_list='gcvt gconvert sprintf' ;;
7856 *) xxx_list='sprintf gconvert gcvt' ;;
7857 esac
7858
7859 case "$d_longdbl$uselongdouble$d_PRIgldbl" in
7860 "$define$define$define")
7861     xxx_list="`echo $xxx_list|sed s/sprintf//`" 
7862     xxx_list="sprintf $xxx_list"
7863     case "$d_qgcvt" in
7864     "$define") xxx_list="qgcvt $xxx_list" ;;
7865     esac
7866     ;;
7867 esac
7868
7869 for xxx_convert in $xxx_list; do
7870         echo "Trying $xxx_convert..."
7871         $rm -f try try$_o
7872         set try -DTRY_$xxx_convert
7873         if eval $compile; then
7874                 echo "$xxx_convert() found." >&4
7875                 if ./try; then
7876                         echo "I'll use $xxx_convert to convert floats into a string." >&4
7877                         break;
7878                 else
7879                         echo "...But $xxx_convert didn't work as I expected."
7880                 fi
7881         else
7882                 echo "$xxx_convert NOT found." >&4
7883         fi
7884 done
7885         
7886 case "$xxx_convert" in
7887 gconvert) d_Gconvert='gconvert((x),(n),(t),(b))' ;;
7888 gcvt) d_Gconvert='gcvt((x),(n),(b))' ;;
7889 qgcvt) d_Gconvert='qgcvt((x),(n),(b))' ;;
7890 *) case "$uselongdouble$d_longdbl$d_PRIgldbl" in
7891    "$define$define$define")
7892       d_Gconvert="sprintf((b),\"%.*\"$sPRIgldbl,(n),(x))" ;;
7893    *) d_Gconvert='sprintf((b),"%.*g",(n),(x))' ;;
7894    esac
7895    ;;  
7896 esac
7897
7898 : Initialize h_fcntl
7899 h_fcntl=false
7900
7901 : Initialize h_sysfile
7902 h_sysfile=false
7903
7904 : access call always available on UNIX
7905 set access d_access
7906 eval $inlibc
7907
7908 : locate the flags for 'access()'
7909 case "$d_access" in
7910 "$define")
7911         echo " "
7912         $cat >access.c <<'EOCP'
7913 #include <sys/types.h>
7914 #ifdef I_FCNTL
7915 #include <fcntl.h>
7916 #endif
7917 #ifdef I_SYS_FILE
7918 #include <sys/file.h>
7919 #endif
7920 #ifdef I_UNISTD
7921 #include <unistd.h>
7922 #endif
7923 int main() {
7924         exit(R_OK);
7925 }
7926 EOCP
7927         : check sys/file.h first, no particular reason here
7928         if $test `./findhdr sys/file.h` && \
7929                 $cc $cppflags -DI_SYS_FILE -o access access.c >/dev/null 2>&1 ; then
7930                 h_sysfile=true;
7931                 echo "<sys/file.h> defines the *_OK access constants." >&4
7932         elif $test `./findhdr fcntl.h` && \
7933                 $cc $cppflags -DI_FCNTL -o access access.c >/dev/null 2>&1 ; then
7934                 h_fcntl=true;
7935                 echo "<fcntl.h> defines the *_OK access constants." >&4
7936         elif $test `./findhdr unistd.h` && \
7937                 $cc $cppflags -DI_UNISTD -o access access.c >/dev/null 2>&1 ; then
7938                 echo "<unistd.h> defines the *_OK access constants." >&4
7939         else
7940                 echo "I can't find the four *_OK access constants--I'll use mine." >&4
7941         fi
7942         ;;
7943 esac
7944 $rm -f access*
7945
7946 : see if accessx exists
7947 set accessx d_accessx
7948 eval $inlibc
7949
7950 : see if alarm exists
7951 set alarm d_alarm
7952 eval $inlibc
7953
7954 : see if atolf exists
7955 set atolf d_atolf
7956 eval $inlibc
7957
7958 : see if atoll exists
7959 set atoll d_atoll
7960 eval $inlibc
7961
7962 : Look for GNU-cc style attribute checking
7963 echo " "
7964 echo "Checking whether your compiler can handle __attribute__ ..." >&4
7965 $cat >attrib.c <<'EOCP'
7966 #include <stdio.h>
7967 void croak (char* pat,...) __attribute__((format(printf,1,2),noreturn));
7968 EOCP
7969 if $cc $ccflags -c attrib.c >attrib.out 2>&1 ; then
7970         if $contains 'warning' attrib.out >/dev/null 2>&1; then
7971                 echo "Your C compiler doesn't fully support __attribute__."
7972                 val="$undef"
7973         else
7974                 echo "Your C compiler supports __attribute__."
7975                 val="$define"
7976         fi
7977 else
7978         echo "Your C compiler doesn't seem to understand __attribute__ at all."
7979         val="$undef"
7980 fi
7981 set d_attribut
7982 eval $setvar
7983 $rm -f attrib*
7984
7985 : see if bcmp exists
7986 set bcmp d_bcmp
7987 eval $inlibc
7988
7989 : see if bcopy exists
7990 set bcopy d_bcopy
7991 eval $inlibc
7992
7993 : see if this is a unistd.h system
7994 set unistd.h i_unistd
7995 eval $inhdr
7996
7997 : see if getpgrp exists
7998 set getpgrp d_getpgrp
7999 eval $inlibc
8000
8001 case "$d_getpgrp" in
8002 "$define")
8003         echo " "
8004         echo "Checking to see which flavor of getpgrp is in use..."
8005         $cat >set.c <<EOP
8006 #$i_unistd I_UNISTD
8007 #include <sys/types.h>
8008 #ifdef I_UNISTD
8009 #  include <unistd.h>
8010 #endif
8011 int main()
8012 {
8013         if (getuid() == 0) {
8014                 printf("(I see you are running Configure as super-user...)\n");
8015                 setuid(1);
8016         }
8017 #ifdef TRY_BSD_PGRP
8018         if (getpgrp(1) == 0)
8019                 exit(0);
8020 #else
8021         if (getpgrp() > 0)
8022                 exit(0);
8023 #endif
8024         exit(1);
8025 }
8026 EOP
8027         if $cc -DTRY_BSD_PGRP $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1 && ./set; then
8028                 echo "You have to use getpgrp(pid) instead of getpgrp()." >&4
8029                 val="$define"
8030         elif $cc $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1 && ./set; then
8031                 echo "You have to use getpgrp() instead of getpgrp(pid)." >&4
8032                 val="$undef"
8033         else
8034                 echo "I can't seem to compile and run the test program."
8035                 if ./usg; then
8036                         xxx="a USG one, i.e. you use getpgrp()."
8037                 else
8038                         # SVR4 systems can appear rather BSD-ish.
8039                         case "$i_unistd" in
8040                         $undef)
8041                                 xxx="a BSD one, i.e. you use getpgrp(pid)."
8042                                 val="$define"
8043                                 ;;
8044                         $define)
8045                                 xxx="probably a USG one, i.e. you use getpgrp()."
8046                                 val="$undef"
8047                                 ;;
8048                         esac
8049                 fi
8050                 echo "Assuming your getpgrp is $xxx" >&4
8051         fi
8052         ;;
8053 *) val="$undef";;
8054 esac
8055 set d_bsdgetpgrp
8056 eval $setvar
8057 $rm -f set set.c
8058
8059 : see if setpgrp exists
8060 set setpgrp d_setpgrp
8061 eval $inlibc
8062
8063 case "$d_setpgrp" in
8064 "$define")
8065         echo " "
8066         echo "Checking to see which flavor of setpgrp is in use..."
8067         $cat >set.c <<EOP
8068 #$i_unistd I_UNISTD
8069 #include <sys/types.h>
8070 #ifdef I_UNISTD
8071 #  include <unistd.h>
8072 #endif
8073 int main()
8074 {
8075         if (getuid() == 0) {
8076                 printf("(I see you are running Configure as super-user...)\n");
8077                 setuid(1);
8078         }
8079 #ifdef TRY_BSD_PGRP
8080         if (-1 == setpgrp(1, 1))
8081                 exit(0);
8082 #else
8083         if (setpgrp() != -1)
8084                 exit(0);
8085 #endif
8086         exit(1);
8087 }
8088 EOP
8089         if $cc -DTRY_BSD_PGRP $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1 && ./set; then
8090                 echo 'You have to use setpgrp(pid,pgrp) instead of setpgrp().' >&4
8091                 val="$define"
8092         elif $cc $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1 && ./set; then
8093                 echo 'You have to use setpgrp() instead of setpgrp(pid,pgrp).' >&4
8094                 val="$undef"
8095         else
8096                 echo "(I can't seem to compile and run the test program.)"
8097                 if ./usg; then
8098                         xxx="a USG one, i.e. you use setpgrp()."
8099                 else
8100                         # SVR4 systems can appear rather BSD-ish.
8101                         case "$i_unistd" in
8102                         $undef)
8103                                 xxx="a BSD one, i.e. you use setpgrp(pid,pgrp)."
8104                                 val="$define"
8105                                 ;;
8106                         $define)
8107                                 xxx="probably a USG one, i.e. you use setpgrp()."
8108                                 val="$undef"
8109                                 ;;
8110                         esac
8111                 fi
8112                 echo "Assuming your setpgrp is $xxx" >&4
8113         fi
8114         ;;
8115 *) val="$undef";;
8116 esac
8117 set d_bsdsetpgrp
8118 eval $setvar
8119 $rm -f set set.c
8120 : see if bzero exists
8121 set bzero d_bzero
8122 eval $inlibc
8123
8124 : see if signal is declared as pointer to function returning int or void
8125 echo " "
8126 xxx=`./findhdr signal.h`
8127 $test "$xxx" && $cppstdin $cppminus $cppflags < $xxx >$$.tmp 2>/dev/null
8128 if $contains 'int.*\*[  ]*signal' $$.tmp >/dev/null 2>&1 ; then
8129         echo "You have int (*signal())() instead of void." >&4
8130         val="$undef"
8131 elif $contains 'void.*\*[       ]*signal' $$.tmp >/dev/null 2>&1 ; then
8132         echo "You have void (*signal())()." >&4
8133         val="$define"
8134 elif $contains 'extern[         ]*[(\*]*signal' $$.tmp >/dev/null 2>&1 ; then
8135         echo "You have int (*signal())() instead of void." >&4
8136         val="$undef"
8137 elif $contains 'void.*\*.*sig' $$.tmp >/dev/null 2>&1 ; then
8138         echo "You have void (*signal())()." >&4
8139         val="$define"
8140 else
8141         case "$d_voidsig" in
8142         '')
8143         echo "I can't determine whether signal handler returns void or int..." >&4
8144                 dflt=void
8145                 rp="What type does your signal handler return?"
8146                 . ./myread
8147                 case "$ans" in
8148                 v*) val="$define";;
8149                 *) val="$undef";;
8150                 esac;;
8151         "$define")
8152                 echo "As you already told me, signal handler returns void." >&4
8153                 val="$define"
8154                 ;;
8155         *)      echo "As you already told me, signal handler returns int." >&4
8156                 val="$undef"
8157                 ;;
8158         esac
8159 fi
8160 set d_voidsig
8161 eval $setvar
8162 case "$d_voidsig" in
8163 "$define") signal_t="void";;
8164 *) signal_t="int";;
8165 esac
8166 $rm -f $$.tmp
8167
8168 : check for ability to cast large floats to 32-bit ints.
8169 echo " "
8170 echo 'Checking whether your C compiler can cast large floats to int32.' >&4
8171 if $test "$intsize" -ge 4; then
8172         xxx=int
8173 else
8174         xxx=long
8175 fi
8176 $cat >try.c <<EOCP
8177 #include <stdio.h>
8178 #include <sys/types.h>
8179 #include <signal.h>
8180 $signal_t blech(s) int s; { exit(3); }
8181 int main()
8182 {
8183         $xxx i32;
8184         double f, g;
8185         int result = 0;
8186         char str[16];
8187         signal(SIGFPE, blech);
8188
8189         /* Don't let compiler optimize the test away.  Store the number 
8190            in a writable string for gcc to pass to sscanf under HP/UX.
8191         */
8192         sprintf(str, "2147483647");
8193         sscanf(str, "%lf", &f); /* f = (double) 0x7fffffff; */
8194         g = 10 * f;
8195         i32  = ($xxx) g;
8196
8197         /* x86 processors will probably give 0x8000 0000, which is a
8198        sign change.  We don't want that.  We want to mimic SPARC
8199            behavior here, which is to preserve the sign and give
8200            back 0x7fff ffff.
8201         */
8202         if (i32 != ($xxx) f)
8203                 result |= 1;
8204         exit(result);
8205 }
8206 EOCP
8207 set try
8208 if eval $compile_ok; then
8209         ./try
8210         yyy=$?
8211 else
8212         echo "(I can't seem to compile the test program--assuming it can't)"
8213         yyy=1
8214 fi
8215 case "$yyy" in
8216 0)      val="$define"
8217         echo "Yup, it can."
8218         ;;
8219 *)      val="$undef"
8220         echo "Nope, it can't."
8221         ;;
8222 esac
8223 set d_casti32
8224 eval $setvar
8225 $rm -f try try.*
8226
8227 : check for ability to cast negative floats to unsigned
8228 echo " "
8229 echo 'Checking whether your C compiler can cast negative float to unsigned.' >&4
8230 $cat >try.c <<EOCP
8231 #include <stdio.h>
8232 #include <sys/types.h>
8233 #include <signal.h>
8234 $signal_t blech(s) int s; { exit(7); }
8235 $signal_t blech_in_list(s) int s; { exit(4); }
8236 unsigned long dummy_long(p) unsigned long p; { return p; }
8237 unsigned int dummy_int(p) unsigned int p; { return p; }
8238 unsigned short dummy_short(p) unsigned short p; { return p; }
8239 int main()
8240 {
8241         double f;
8242         unsigned long along;
8243         unsigned int aint;
8244         unsigned short ashort;
8245         int result = 0;
8246         char str[16];
8247         
8248         /* Frustrate gcc-2.7.2's optimizer which failed this test with
8249            a direct f = -123. assignment.  gcc-2.8.0 reportedly
8250            optimized the whole file away
8251         */
8252         /* Store the number in a writable string for gcc to pass to 
8253            sscanf under HP/UX.
8254         */
8255         sprintf(str, "-123");
8256         sscanf(str, "%lf", &f);  /* f = -123.; */
8257
8258         signal(SIGFPE, blech);
8259         along = (unsigned long)f;
8260         aint = (unsigned int)f;
8261         ashort = (unsigned short)f;
8262         if (along != (unsigned long)-123)
8263                 result |= 1;
8264         if (aint != (unsigned int)-123)
8265                 result |= 1;
8266         if (ashort != (unsigned short)-123)
8267                 result |= 1;
8268         sprintf(str, "1073741824.");
8269         sscanf(str, "%lf", &f); /* f = (double)0x40000000; */
8270         f = f + f;
8271         along = 0;
8272         along = (unsigned long)f;
8273         if (along != 0x80000000)
8274                 result |= 2;
8275         f -= 1.;
8276         along = 0;
8277         along = (unsigned long)f;
8278         if (along != 0x7fffffff)
8279                 result |= 1;
8280         f += 2.;
8281         along = 0;
8282         along = (unsigned long)f;
8283         if (along != 0x80000001)
8284                 result |= 2;
8285         if (result)
8286                 exit(result);
8287         signal(SIGFPE, blech_in_list);
8288         sprintf(str, "123.");
8289         sscanf(str, "%lf", &f);  /* f = 123.; */
8290         along = dummy_long((unsigned long)f);
8291         aint = dummy_int((unsigned int)f);
8292         ashort = dummy_short((unsigned short)f);
8293         if (along != (unsigned long)123)
8294                 result |= 4;
8295         if (aint != (unsigned int)123)
8296                 result |= 4;
8297         if (ashort != (unsigned short)123)
8298                 result |= 4;
8299         exit(result);
8300
8301 }
8302 EOCP
8303 set try
8304 if eval $compile_ok; then
8305         ./try
8306         castflags=$?
8307 else
8308         echo "(I can't seem to compile the test program--assuming it can't)"
8309         castflags=7
8310 fi
8311 case "$castflags" in
8312 0)      val="$define"
8313         echo "Yup, it can."
8314         ;;
8315 *)      val="$undef"
8316         echo "Nope, it can't."
8317         ;;
8318 esac
8319 set d_castneg
8320 eval $setvar
8321 $rm -f try.*
8322
8323 : see if vprintf exists
8324 echo " "
8325 if set vprintf val -f d_vprintf; eval $csym; $val; then
8326         echo 'vprintf() found.' >&4
8327         val="$define"
8328         $cat >vprintf.c <<'EOF'
8329 #include <varargs.h>
8330
8331 int main() { xxx("foo"); }
8332
8333 xxx(va_alist)
8334 va_dcl
8335 {
8336         va_list args;
8337         char buf[10];
8338
8339         va_start(args);
8340         exit((unsigned long)vsprintf(buf,"%s",args) > 10L);
8341 }
8342 EOF
8343         set vprintf
8344         if eval $compile && ./vprintf; then
8345                 echo "Your vsprintf() returns (int)." >&4
8346                 val2="$undef"
8347         else
8348                 echo "Your vsprintf() returns (char*)." >&4
8349                 val2="$define"
8350         fi
8351 else
8352         echo 'vprintf() NOT found.' >&4
8353                 val="$undef"
8354                 val2="$undef"
8355 fi
8356 set d_vprintf
8357 eval $setvar
8358 val=$val2
8359 set d_charvspr
8360 eval $setvar
8361
8362 : see if chown exists
8363 set chown d_chown
8364 eval $inlibc
8365
8366 : see if chroot exists
8367 set chroot d_chroot
8368 eval $inlibc
8369
8370 : see if chsize exists
8371 set chsize d_chsize
8372 eval $inlibc
8373
8374 : check for const keyword
8375 echo " "
8376 echo 'Checking to see if your C compiler knows about "const"...' >&4
8377 $cat >const.c <<'EOCP'
8378 typedef struct spug { int drokk; } spug;
8379 int main()
8380 {
8381         const char *foo;
8382         const spug y;
8383 }
8384 EOCP
8385 if $cc -c $ccflags const.c >/dev/null 2>&1 ; then
8386         val="$define"
8387         echo "Yup, it does."
8388 else
8389         val="$undef"
8390         echo "Nope, it doesn't."
8391 fi
8392 set d_const
8393 eval $setvar
8394
8395 : see if crypt exists
8396 echo " "
8397 if set crypt val -f d_crypt; eval $csym; $val; then
8398         echo 'crypt() found.' >&4
8399         val="$define"
8400         cryptlib=''
8401 else
8402         cryptlib=`./loc Slibcrypt$_a "" $xlibpth`
8403         if $test -z "$cryptlib"; then
8404                 cryptlib=`./loc Mlibcrypt$_a "" $xlibpth`
8405         else
8406                 cryptlib=-lcrypt
8407         fi
8408         if $test -z "$cryptlib"; then
8409                 cryptlib=`./loc Llibcrypt$_a "" $xlibpth`
8410         else
8411                 cryptlib=-lcrypt
8412         fi
8413         if $test -z "$cryptlib"; then
8414                 cryptlib=`./loc libcrypt$_a "" $libpth`
8415         else
8416                 cryptlib=-lcrypt
8417         fi
8418         if $test -z "$cryptlib"; then
8419                 echo 'crypt() NOT found.' >&4
8420                 val="$undef"
8421         else
8422                 val="$define"
8423         fi
8424 fi
8425 set d_crypt
8426 eval $setvar
8427
8428 : get csh whereabouts
8429 case "$csh" in
8430 'csh') val="$undef" ;;
8431 *) val="$define" ;;
8432 esac
8433 set d_csh
8434 eval $setvar
8435 : Respect a hint or command line value for full_csh.
8436 case "$full_csh" in
8437 '') full_csh=$csh ;;
8438 esac
8439
8440 : see if cuserid exists
8441 set cuserid d_cuserid
8442 eval $inlibc
8443
8444 : see if this is a limits.h system
8445 set limits.h i_limits
8446 eval $inhdr
8447
8448 : see if this is a float.h system
8449 set float.h i_float
8450 eval $inhdr
8451
8452 : See if number of significant digits in a double precision number is known
8453 echo " "
8454 $cat >dbl_dig.c <<EOM
8455 #$i_limits I_LIMITS
8456 #$i_float I_FLOAT
8457 #ifdef I_LIMITS
8458 #include <limits.h>
8459 #endif
8460 #ifdef I_FLOAT
8461 #include <float.h>
8462 #endif
8463 #ifdef DBL_DIG
8464 printf("Contains DBL_DIG");
8465 #endif
8466 EOM
8467 $cppstdin $cppflags $cppminus < dbl_dig.c >dbl_dig.E 2>/dev/null
8468 if $contains 'DBL_DIG' dbl_dig.E >/dev/null 2>&1; then
8469         echo "DBL_DIG found." >&4
8470         val="$define"
8471 else
8472         echo "DBL_DIG NOT found." >&4
8473         val="$undef"
8474 fi
8475 $rm -f dbl_dig.?
8476 set d_dbl_dig
8477 eval $setvar
8478
8479 : see if difftime exists
8480 set difftime d_difftime
8481 eval $inlibc
8482
8483 : see if this is a dirent system
8484 echo " "
8485 if xinc=`./findhdr dirent.h`; $test "$xinc"; then
8486         val="$define"
8487         echo "<dirent.h> found." >&4
8488 else
8489         val="$undef"
8490         if xinc=`./findhdr sys/dir.h`; $test "$xinc"; then
8491                 echo "<sys/dir.h> found." >&4
8492                 echo " "
8493         else
8494                 xinc=`./findhdr sys/ndir.h`
8495         fi
8496         echo "<dirent.h> NOT found." >&4
8497 fi
8498 set i_dirent
8499 eval $setvar
8500
8501 : Look for type of directory structure.
8502 echo " "
8503 $cppstdin $cppflags $cppminus < "$xinc" > try.c
8504
8505 case "$direntrytype" in
8506 ''|' ')
8507         case "$i_dirent" in
8508         $define) guess1='struct dirent' ;;
8509         *) guess1='struct direct'  ;;
8510         esac
8511         ;;
8512 *)      guess1="$direntrytype"
8513         ;;
8514 esac
8515
8516 case "$guess1" in
8517 'struct dirent') guess2='struct direct' ;;
8518 *) guess2='struct dirent' ;;
8519 esac
8520                 
8521 if $contains "$guess1" try.c >/dev/null 2>&1; then
8522         direntrytype="$guess1"
8523         echo "Your directory entries are $direntrytype." >&4
8524 elif $contains "$guess2" try.c >/dev/null 2>&1; then
8525         direntrytype="$guess2"
8526         echo "Your directory entries seem to be $direntrytype." >&4
8527 else
8528         echo "I don't recognize your system's directory entries." >&4
8529         rp="What type is used for directory entries on this system?"
8530         dflt="$guess1"
8531         . ./myread
8532         direntrytype="$ans"
8533 fi
8534 $rm -f try.c
8535
8536
8537 : see if the directory entry stores field length
8538 echo " "
8539 $cppstdin $cppflags $cppminus < "$xinc" > try.c
8540 if $contains 'd_namlen' try.c >/dev/null 2>&1; then
8541         echo "Good, your directory entry keeps length information in d_namlen." >&4
8542         val="$define"
8543 else
8544         echo "Your directory entry does not know about the d_namlen field." >&4
8545         val="$undef"
8546 fi
8547 set d_dirnamlen
8548 eval $setvar
8549 $rm -f try.c
8550
8551 : see if dlerror exists
8552 xxx_runnm="$runnm"
8553 runnm=false
8554 set dlerror d_dlerror
8555 eval $inlibc
8556 runnm="$xxx_runnm"
8557
8558 : see if dlfcn is available
8559 set dlfcn.h i_dlfcn
8560 eval $inhdr
8561
8562 case "$usedl" in
8563 $define|y|true)
8564         $cat << EOM
8565
8566 On a few systems, the dynamically loaded modules that perl generates and uses
8567 will need a different extension than shared libs. The default will probably
8568 be appropriate.
8569
8570 EOM
8571         case "$dlext" in
8572         '')     dflt="$so" ;;
8573         *)      dflt="$dlext" ;;
8574         esac
8575         rp='What is the extension of dynamically loaded modules'
8576         . ./myread
8577         dlext="$ans"
8578         ;;
8579 *)
8580         dlext="none"
8581         ;;
8582 esac
8583
8584 : Check if dlsym need a leading underscore
8585 echo " "
8586 val="$undef"
8587
8588 case "$dlsrc" in
8589 dl_dlopen.xs)
8590         echo "Checking whether your dlsym() needs a leading underscore ..." >&4
8591         $cat >dyna.c <<'EOM'
8592 fred () { }
8593 EOM
8594
8595 $cat >fred.c<<EOM
8596
8597 #include <stdio.h>
8598 #$i_dlfcn I_DLFCN
8599 #ifdef I_DLFCN
8600 #include <dlfcn.h>      /* the dynamic linker include file for Sunos/Solaris */
8601 #else
8602 #include <sys/types.h>
8603 #include <nlist.h>
8604 #include <link.h>
8605 #endif
8606
8607 extern int fred() ;
8608
8609 int main()
8610 {
8611     void * handle ;
8612     void * symbol ;
8613 #ifndef RTLD_LAZY
8614     int mode = 1 ;
8615 #else
8616     int mode = RTLD_LAZY ;
8617 #endif
8618     handle = dlopen("./dyna.$dlext", mode) ;
8619     if (handle == NULL) {
8620         printf ("1\n") ;
8621         fflush (stdout) ;
8622         exit(0);
8623     }
8624     symbol = dlsym(handle, "fred") ;
8625     if (symbol == NULL) {
8626         /* try putting a leading underscore */
8627         symbol = dlsym(handle, "_fred") ;
8628         if (symbol == NULL) {
8629             printf ("2\n") ;
8630             fflush (stdout) ;
8631             exit(0);
8632         }
8633         printf ("3\n") ;
8634     }
8635     else
8636         printf ("4\n") ;
8637     fflush (stdout) ;
8638     exit(0);
8639 }
8640 EOM
8641         : Call the object file tmp-dyna.o in case dlext=o.
8642         if $cc $ccflags $cccdlflags -c dyna.c > /dev/null 2>&1 && 
8643                 mv dyna${_o} tmp-dyna${_o} > /dev/null 2>&1 && 
8644                 $ld $lddlflags -o dyna.$dlext tmp-dyna${_o} > /dev/null 2>&1 && 
8645                 $cc $ccflags -o fred $ldflags $cccdlflags $ccdlflags fred.c $libs > /dev/null 2>&1; then
8646                 xxx=`./fred`
8647                 case $xxx in
8648                 1)      echo "Test program failed using dlopen." >&4
8649                         echo "Perhaps you should not use dynamic loading." >&4;;
8650                 2)      echo "Test program failed using dlsym." >&4
8651                         echo "Perhaps you should not use dynamic loading." >&4;;
8652                 3)      echo "dlsym needs a leading underscore" >&4
8653                         val="$define" ;;
8654                 4)      echo "dlsym doesn't need a leading underscore." >&4;;
8655                 esac
8656         else
8657                 echo "I can't compile and run the test program." >&4
8658                 echo "I'm guessing that dlsym doesn't need a leading underscore." >&4
8659         fi
8660         ;;
8661 esac
8662                 
8663 $rm -f fred fred.? dyna.$dlext dyna.? tmp-dyna.?
8664
8665 set d_dlsymun
8666 eval $setvar
8667
8668 hasproto='varname=$1; func=$2; shift; shift;
8669 while $test $# -ge 2; do
8670         case "$1" in
8671         $define) echo "#include <$2>";;
8672         esac ;
8673     shift 2;
8674 done > try.c;
8675 $cppstdin $cppflags $cppminus < try.c > tryout.c 2>/dev/null;
8676 if $contains "$func.*(" tryout.c >/dev/null 2>&1; then
8677         echo "$func() prototype found.";
8678         val="$define";
8679 else
8680         echo "$func() prototype NOT found.";
8681         val="$undef";
8682 fi;
8683 set $varname;
8684 eval $setvar;
8685 $rm -f try.c tryout.c'
8686
8687 : see if prototype for drand48 is available
8688 echo " "
8689 set d_drand48proto drand48 $i_stdlib stdlib.h $i_unistd unistd.h
8690 eval $hasproto
8691
8692 : see if dup2 exists
8693 set dup2 d_dup2
8694 eval $inlibc
8695
8696 : see if eaccess exists
8697 set eaccess d_eaccess
8698 eval $inlibc
8699
8700 : see if endgrent exists
8701 set endgrent d_endgrent
8702 eval $inlibc
8703
8704 : see if endhostent exists
8705 set endhostent d_endhent
8706 eval $inlibc
8707
8708 : see if endnetent exists
8709 set endnetent d_endnent
8710 eval $inlibc
8711
8712 : see if endprotoent exists
8713 set endprotoent d_endpent
8714 eval $inlibc
8715
8716 : see if endpwent exists
8717 set endpwent d_endpwent
8718 eval $inlibc
8719
8720 : see if endservent exists
8721 set endservent d_endsent
8722 eval $inlibc
8723
8724 : Locate the flags for 'open()'
8725 echo " "
8726 $cat >open3.c <<'EOCP'
8727 #include <sys/types.h>
8728 #ifdef I_FCNTL
8729 #include <fcntl.h>
8730 #endif
8731 #ifdef I_SYS_FILE
8732 #include <sys/file.h>
8733 #endif
8734 int main() {
8735         if(O_RDONLY);
8736 #ifdef O_TRUNC
8737         exit(0);
8738 #else
8739         exit(1);
8740 #endif
8741 }
8742 EOCP
8743 : check sys/file.h first to get FREAD on Sun
8744 if $test `./findhdr sys/file.h` && \
8745                 set open3 -DI_SYS_FILE && eval $compile; then
8746         h_sysfile=true;
8747         echo "<sys/file.h> defines the O_* constants..." >&4
8748         if ./open3; then
8749                 echo "and you have the 3 argument form of open()." >&4
8750                 val="$define"
8751         else
8752                 echo "but not the 3 argument form of open().  Oh, well." >&4
8753                 val="$undef"
8754         fi
8755 elif $test `./findhdr fcntl.h` && \
8756                 set open3 -DI_FCNTL && eval $compile; then
8757         h_fcntl=true;
8758         echo "<fcntl.h> defines the O_* constants..." >&4
8759         if ./open3; then
8760                 echo "and you have the 3 argument form of open()." >&4
8761                 val="$define"
8762         else
8763                 echo "but not the 3 argument form of open().  Oh, well." >&4
8764                 val="$undef"
8765         fi
8766 else
8767         val="$undef"
8768         echo "I can't find the O_* constant definitions!  You got problems." >&4
8769 fi
8770 set d_open3
8771 eval $setvar
8772 $rm -f open3*
8773
8774 : see which of string.h or strings.h is needed
8775 echo " "
8776 strings=`./findhdr string.h`
8777 if $test "$strings" && $test -r "$strings"; then
8778         echo "Using <string.h> instead of <strings.h>." >&4
8779         val="$define"
8780 else
8781         val="$undef"
8782         strings=`./findhdr strings.h`
8783         if $test "$strings" && $test -r "$strings"; then
8784                 echo "Using <strings.h> instead of <string.h>." >&4
8785         else
8786                 echo "No string header found -- You'll surely have problems." >&4
8787         fi
8788 fi
8789 set i_string
8790 eval $setvar
8791 case "$i_string" in
8792 "$undef") strings=`./findhdr strings.h`;;
8793 *)        strings=`./findhdr string.h`;;
8794 esac
8795
8796 : check for non-blocking I/O stuff
8797 case "$h_sysfile" in
8798 true) echo "#include <sys/file.h>" > head.c;;
8799 *)
8800         case "$h_fcntl" in
8801         true) echo "#include <fcntl.h>" > head.c;;
8802         *) echo "#include <sys/fcntl.h>" > head.c;;
8803         esac
8804         ;;
8805 esac
8806 echo " "
8807 echo "Figuring out the flag used by open() for non-blocking I/O..." >&4
8808 case "$o_nonblock" in
8809 '')
8810         $cat head.c > try.c
8811         $cat >>try.c <<'EOCP'
8812 #include <stdio.h>
8813 int main() {
8814 #ifdef O_NONBLOCK
8815         printf("O_NONBLOCK\n");
8816         exit(0);
8817 #endif
8818 #ifdef O_NDELAY
8819         printf("O_NDELAY\n");
8820         exit(0);
8821 #endif
8822 #ifdef FNDELAY
8823         printf("FNDELAY\n");
8824         exit(0);
8825 #endif
8826         exit(0);
8827 }
8828 EOCP
8829         set try
8830         if eval $compile_ok; then
8831                 o_nonblock=`./try`
8832                 case "$o_nonblock" in
8833                 '') echo "I can't figure it out, assuming O_NONBLOCK will do.";;
8834                 *) echo "Seems like we can use $o_nonblock.";;
8835                 esac
8836         else
8837                 echo "(I can't compile the test program; pray O_NONBLOCK is right!)"
8838         fi
8839         ;;
8840 *) echo "Using $hint value $o_nonblock.";;
8841 esac
8842 $rm -f try try.* .out core
8843
8844 echo " "
8845 echo "Let's see what value errno gets from read() on a $o_nonblock file..." >&4
8846 case "$eagain" in
8847 '')
8848         $cat head.c > try.c
8849         $cat >>try.c <<EOCP
8850 #include <errno.h>
8851 #include <sys/types.h>
8852 #include <signal.h>
8853 #include <stdio.h> 
8854 #define MY_O_NONBLOCK $o_nonblock
8855 #ifndef errno  /* XXX need better Configure test */
8856 extern int errno;
8857 #endif
8858 #$i_unistd I_UNISTD
8859 #ifdef I_UNISTD
8860 #include <unistd.h>
8861 #endif
8862 #$i_string I_STRING
8863 #ifdef I_STRING
8864 #include <string.h>
8865 #else
8866 #include <strings.h>
8867 #endif
8868 $signal_t blech(x) int x; { exit(3); }
8869 EOCP
8870         $cat >> try.c <<'EOCP'
8871 int main()
8872 {
8873         int pd[2];
8874         int pu[2];
8875         char buf[1];
8876         char string[100];
8877
8878         pipe(pd);       /* Down: child -> parent */
8879         pipe(pu);       /* Up: parent -> child */
8880         if (0 != fork()) {
8881                 int ret;
8882                 close(pd[1]);   /* Parent reads from pd[0] */
8883                 close(pu[0]);   /* Parent writes (blocking) to pu[1] */
8884                 if (-1 == fcntl(pd[0], F_SETFL, MY_O_NONBLOCK))
8885                         exit(1);
8886                 signal(SIGALRM, blech);
8887                 alarm(5);
8888                 if ((ret = read(pd[0], buf, 1)) > 0)    /* Nothing to read! */
8889                         exit(2);
8890                 sprintf(string, "%d\n", ret);
8891                 write(2, string, strlen(string));
8892                 alarm(0);
8893 #ifdef EAGAIN
8894                 if (errno == EAGAIN) {
8895                         printf("EAGAIN\n");
8896                         goto ok;
8897                 }
8898 #endif
8899 #ifdef EWOULDBLOCK
8900                 if (errno == EWOULDBLOCK)
8901                         printf("EWOULDBLOCK\n");
8902 #endif
8903         ok:
8904                 write(pu[1], buf, 1);   /* Unblocks child, tell it to close our pipe */
8905                 sleep(2);                               /* Give it time to close our pipe */
8906                 alarm(5);
8907                 ret = read(pd[0], buf, 1);      /* Should read EOF */
8908                 alarm(0);
8909                 sprintf(string, "%d\n", ret);
8910                 write(3, string, strlen(string));
8911                 exit(0);
8912         }
8913
8914         close(pd[0]);                   /* We write to pd[1] */
8915         close(pu[1]);                   /* We read from pu[0] */
8916         read(pu[0], buf, 1);    /* Wait for parent to signal us we may continue */
8917         close(pd[1]);                   /* Pipe pd is now fully closed! */
8918         exit(0);                                /* Bye bye, thank you for playing! */
8919 }
8920 EOCP
8921         set try
8922         if eval $compile_ok; then
8923                 echo "$startsh" >mtry
8924                 echo "./try >try.out 2>try.ret 3>try.err || exit 4" >>mtry
8925                 chmod +x mtry
8926                 ./mtry >/dev/null 2>&1
8927                 case $? in
8928                 0) eagain=`$cat try.out`;;
8929                 1) echo "Could not perform non-blocking setting!";;
8930                 2) echo "I did a successful read() for something that was not there!";;
8931                 3) echo "Hmm... non-blocking I/O does not seem to be working!";;
8932                 *) echo "Something terribly wrong happened during testing.";;
8933                 esac
8934                 rd_nodata=`$cat try.ret`
8935                 echo "A read() system call with no data present returns $rd_nodata."
8936                 case "$rd_nodata" in
8937                 0|-1) ;;
8938                 *)
8939                         echo "(That's peculiar, fixing that to be -1.)"
8940                         rd_nodata=-1
8941                         ;;
8942                 esac
8943                 case "$eagain" in
8944                 '')
8945                         echo "Forcing errno EAGAIN on read() with no data available."
8946                         eagain=EAGAIN
8947                         ;;
8948                 *)
8949                         echo "Your read() sets errno to $eagain when no data is available."
8950                         ;;
8951                 esac
8952                 status=`$cat try.err`
8953                 case "$status" in
8954                 0) echo "And it correctly returns 0 to signal EOF.";;
8955                 -1) echo "But it also returns -1 to signal EOF, so be careful!";;
8956                 *) echo "However, your read() returns '$status' on EOF??";;
8957                 esac
8958                 val="$define"
8959                 if test "$status" = "$rd_nodata"; then
8960                         echo "WARNING: you can't distinguish between EOF and no data!"
8961                         val="$undef"
8962                 fi
8963         else
8964                 echo "I can't compile the test program--assuming errno EAGAIN will do."
8965                 eagain=EAGAIN
8966         fi
8967         set d_eofnblk
8968         eval $setvar
8969         ;;
8970 *)
8971         echo "Using $hint value $eagain."
8972         echo "Your read() returns $rd_nodata when no data is present."
8973         case "$d_eofnblk" in
8974         "$define") echo "And you can see EOF because read() returns 0.";;
8975         "$undef") echo "But you can't see EOF status from read() returned value.";;
8976         *)
8977                 echo "(Assuming you can't see EOF status from read anyway.)"
8978                 d_eofnblk=$undef
8979                 ;;
8980         esac
8981         ;;
8982 esac
8983 $rm -f try try.* .out core head.c mtry
8984
8985 : see if fchmod exists
8986 set fchmod d_fchmod
8987 eval $inlibc
8988
8989 : see if fchown exists
8990 set fchown d_fchown
8991 eval $inlibc
8992
8993 : see if this is an fcntl system
8994 set fcntl d_fcntl
8995 eval $inlibc
8996
8997 hasfield='varname=$1; struct=$2; field=$3; shift; shift; shift;
8998 while $test $# -ge 2; do
8999         case "$1" in
9000         $define) echo "#include <$2>";;
9001         esac ;
9002     shift 2;
9003 done > try.c;
9004 echo "int main () { struct $struct foo; char* bar; bar = (char*)foo.$field; }" >> try.c;
9005 set try;
9006 if eval $compile; then
9007         val="$define";
9008 else
9009         val="$undef";
9010 fi;
9011 set $varname;
9012 eval $setvar;
9013 $rm -f try.c try.o'
9014
9015 socketlib=''
9016 sockethdr=''
9017 : see whether socket exists
9018 echo " "
9019 $echo $n "Hmm... $c" >&4
9020 if set socket val -f d_socket; eval $csym; $val; then
9021         echo "Looks like you have Berkeley networking support." >&4
9022         d_socket="$define"
9023         if set setsockopt val -f; eval $csym; $val; then
9024                 d_oldsock="$undef"
9025         else
9026                 echo "...but it uses the old BSD 4.1c interface, rather than 4.2." >&4
9027                 d_oldsock="$define"
9028         fi
9029 else
9030         if $contains socklib libc.list >/dev/null 2>&1; then
9031                 echo "Looks like you have Berkeley networking support." >&4
9032                 d_socket="$define"
9033                 : we will have to assume that it supports the 4.2 BSD interface
9034                 d_oldsock="$undef"
9035         else
9036                 echo "You don't have Berkeley networking in libc$_a..." >&4
9037                 if test "X$d_socket" = "X$define"; then
9038                    echo "...but you seem to believe that you have sockets." >&4
9039                 else
9040                         for net in net socket
9041                         do
9042                                 if test -f /usr/lib/lib$net$_a; then
9043                                         ( ($nm $nm_opt /usr/lib/lib$net$_a | eval $nm_extract) ||  \
9044                                         $ar t /usr/lib/lib$net$_a) 2>/dev/null >> libc.list
9045                                         if $contains socket libc.list >/dev/null 2>&1; then
9046                                                 d_socket="$define"
9047                                                 socketlib="-l$net"
9048                                                 case "$net" in
9049                                                 net)
9050                                                         echo "...but the Wollongong group seems to have hacked it in." >&4
9051                                                         sockethdr="-I/usr/netinclude"
9052                                                         ;;
9053                                                 esac
9054                                                 echo "Found Berkeley sockets interface in lib$net." >& 4 
9055                                                 if $contains setsockopt libc.list >/dev/null 2>&1; then
9056                                                         d_oldsock="$undef"
9057                                                 else
9058                                                         echo "...using the old BSD 4.1c interface, rather than 4.2." >&4
9059                                                         d_oldsock="$define"
9060                                                 fi
9061                                                 break
9062                                         fi
9063                                 fi
9064                         done
9065                         if test "X$d_socket" != "X$define"; then
9066                            echo "or anywhere else I see." >&4
9067                            d_socket="$undef"
9068                            d_oldsock="$undef"
9069                         fi
9070                 fi
9071         fi
9072 fi
9073
9074 : see if socketpair exists
9075 set socketpair d_sockpair
9076 eval $inlibc
9077
9078
9079 echo " "
9080 echo "Checking the availability of certain socket constants..." >& 4
9081 for ENUM in MSG_CTRUNC MSG_DONTROUTE MSG_OOB MSG_PEEK MSG_PROXY SCM_RIGHTS; do
9082         enum=`$echo $ENUM|./tr '[A-Z]' '[a-z]'`
9083         $cat >try.c <<EOF
9084 #include <sys/types.h>
9085 #include <sys/socket.h>
9086 int main() {
9087     int i = $ENUM;
9088 }
9089 EOF
9090         val="$undef"
9091         set try; if eval $compile; then
9092                 val="$define"
9093         fi
9094         set d_${enum}; eval $setvar
9095         $rm -f try.c try
9096 done
9097
9098 : see if sys/select.h has to be included
9099 set sys/select.h i_sysselct
9100 eval $inhdr
9101
9102 : see if we should include time.h, sys/time.h, or both
9103 echo " "
9104 if test "X$timeincl" = X; then
9105         echo "Testing to see if we should include <time.h>, <sys/time.h> or both." >&4
9106         $echo $n "I'm now running the test program...$c"
9107         $cat >try.c <<'EOCP'
9108 #include <sys/types.h>
9109 #ifdef I_TIME
9110 #include <time.h>
9111 #endif
9112 #ifdef I_SYSTIME
9113 #ifdef SYSTIMEKERNEL
9114 #define KERNEL
9115 #endif
9116 #include <sys/time.h>
9117 #endif
9118 #ifdef I_SYSSELECT
9119 #include <sys/select.h>
9120 #endif
9121 int main()
9122 {
9123         struct tm foo;
9124 #ifdef S_TIMEVAL
9125         struct timeval bar;
9126 #endif
9127 #ifdef S_TIMEZONE
9128         struct timezone tzp;
9129 #endif
9130         if (foo.tm_sec == foo.tm_sec)
9131                 exit(0);
9132 #ifdef S_TIMEVAL
9133         if (bar.tv_sec == bar.tv_sec)
9134                 exit(0);
9135 #endif
9136         exit(1);
9137 }
9138 EOCP
9139         flags=''
9140         for s_timezone in '-DS_TIMEZONE' ''; do
9141         sysselect=''
9142         for s_timeval in '-DS_TIMEVAL' ''; do
9143         for i_systimek in '' '-DSYSTIMEKERNEL'; do
9144         for i_time in '' '-DI_TIME'; do
9145         for i_systime in '-DI_SYSTIME' ''; do
9146                 case "$flags" in
9147                 '') $echo $n ".$c"
9148                         set try $i_time $i_systime $i_systimek $sysselect $s_timeval $s_timezone
9149                         if eval $compile; then
9150                                 set X $i_time $i_systime $i_systimek $sysselect $s_timeval
9151                                 shift
9152                                 flags="$*"
9153                                 echo " "
9154                                 $echo $n "Succeeded with $flags$c"
9155                         fi
9156                         ;;
9157                 esac
9158         done
9159         done
9160         done
9161         done
9162         done
9163         timeincl=''
9164         echo " "
9165         case "$flags" in
9166         *SYSTIMEKERNEL*) i_systimek="$define"
9167                 timeincl=`./findhdr sys/time.h`
9168                 echo "We'll include <sys/time.h> with KERNEL defined." >&4;;
9169         *) i_systimek="$undef";;
9170         esac
9171         case "$flags" in
9172         *I_TIME*) i_time="$define"
9173                 timeincl=`./findhdr time.h`" $timeincl"
9174                 echo "We'll include <time.h>." >&4;;
9175         *) i_time="$undef";;
9176         esac
9177         case "$flags" in
9178         *I_SYSTIME*) i_systime="$define"
9179                 timeincl=`./findhdr sys/time.h`" $timeincl"
9180                 echo "We'll include <sys/time.h>." >&4;;
9181         *) i_systime="$undef";;
9182         esac
9183         $rm -f try.c try
9184 fi
9185
9186 : check for fd_set items
9187 $cat <<EOM
9188
9189 Checking to see how well your C compiler handles fd_set and friends ...
9190 EOM
9191 $cat >fd_set.c <<EOCP
9192 #$i_systime I_SYS_TIME
9193 #$i_sysselct I_SYS_SELECT
9194 #$d_socket HAS_SOCKET
9195 #include <sys/types.h>
9196 #ifdef HAS_SOCKET
9197 #include <sys/socket.h> /* Might include <sys/bsdtypes.h> */
9198 #endif
9199 #ifdef I_SYS_TIME
9200 #include <sys/time.h>
9201 #endif
9202 #ifdef I_SYS_SELECT
9203 #include <sys/select.h>
9204 #endif
9205 int main() {
9206         fd_set fds;
9207
9208 #ifdef TRYBITS
9209         if(fds.fds_bits);
9210 #endif
9211
9212 #if defined(FD_SET) && defined(FD_CLR) && defined(FD_ISSET) && defined(FD_ZERO)
9213         exit(0);
9214 #else
9215         exit(1);
9216 #endif
9217 }
9218 EOCP
9219 set fd_set -DTRYBITS
9220 if eval $compile; then
9221         d_fds_bits="$define"
9222         d_fd_set="$define"
9223         echo "Well, your system knows about the normal fd_set typedef..." >&4
9224         if ./fd_set; then
9225                 echo "and you have the normal fd_set macros (just as I'd expect)." >&4
9226                 d_fd_macros="$define"
9227         else
9228                 $cat >&4 <<'EOM'
9229 but not the normal fd_set macros!  Gaaack!  I'll have to cover for you.
9230 EOM
9231                 d_fd_macros="$undef"
9232         fi
9233 else
9234         $cat <<'EOM'
9235 Hmm, your compiler has some difficulty with fd_set.  Checking further...
9236 EOM
9237         set fd_set
9238         if eval $compile; then
9239                 d_fds_bits="$undef"
9240                 d_fd_set="$define"
9241                 echo "Well, your system has some sort of fd_set available..." >&4
9242                 if ./fd_set; then
9243                         echo "and you have the normal fd_set macros." >&4
9244                         d_fd_macros="$define"
9245                 else
9246                         $cat <<'EOM'
9247 but not the normal fd_set macros!  Gross!  More work for me...
9248 EOM
9249                         d_fd_macros="$undef"
9250                 fi
9251         else
9252         echo "Well, you got zip.  That's OK, I can roll my own fd_set stuff." >&4
9253                 d_fd_set="$undef"
9254                 d_fds_bits="$undef"
9255                 d_fd_macros="$undef"
9256         fi
9257 fi
9258 $rm -f fd_set*
9259
9260 : see if fgetpos exists
9261 set fgetpos d_fgetpos
9262 eval $inlibc
9263
9264 : see if flock exists
9265 set flock d_flock
9266 eval $inlibc
9267
9268 : see if fork exists
9269 set fork d_fork
9270 eval $inlibc
9271
9272 : see if pathconf exists
9273 set pathconf d_pathconf
9274 eval $inlibc
9275
9276 : see if fpathconf exists
9277 set fpathconf d_fpathconf
9278 eval $inlibc
9279
9280
9281 : check for fpos64_t
9282 echo " "
9283 echo "Checking to see if you have fpos64_t..." >&4
9284 $cat >try.c <<EOCP
9285 #include <stdio.h>
9286 int main() { fpos64_t x = 7; }
9287 EOCP
9288 set try
9289 if eval $compile; then
9290         val="$define"
9291         echo "You have fpos64_t."
9292 else
9293         val="$undef"
9294         echo "You do not have fpos64_t."
9295         case "$fpossize" in
9296         8) echo "(Your fpos_t is 64 bits, so you could use that.)" ;;
9297         esac
9298 fi
9299 $rm -f try.* try
9300 set d_fpos64_t
9301 eval $setvar
9302
9303 : see if frexpl exists
9304 set frexpl d_frexpl
9305 eval $inlibc
9306
9307 hasstruct='varname=$1; struct=$2; shift; shift;
9308 while $test $# -ge 2; do
9309         case "$1" in
9310         $define) echo "#include <$2>";;
9311         esac ;
9312     shift 2;
9313 done > try.c;
9314 echo "int main () { struct $struct foo; }" >> try.c;
9315 set try;
9316 if eval $compile; then
9317         val="$define";
9318 else
9319         val="$undef";
9320 fi;
9321 set $varname;
9322 eval $setvar;
9323 $rm -f try.c try.o'
9324
9325 : see if this is a sys/param system
9326 set sys/param.h i_sysparam
9327 eval $inhdr
9328
9329 : see if this is a sys/mount.h system
9330 set sys/mount.h i_sysmount
9331 eval $inhdr
9332
9333 : see if sys/types.h has to be included
9334 set sys/types.h i_systypes
9335 eval $inhdr
9336
9337
9338 echo " "
9339 echo "Checking to see if your system supports struct fs_data..." >&4
9340 set d_fs_data_s fs_data $i_systypes sys/types.h $i_sysparam sys/param.h $i_sysmount sys/mount.h
9341 eval $hasstruct
9342 case "$d_fs_data_s" in
9343 "$define")      echo "Yes, it does."   ;;
9344 *)              echo "No, it doesn't." ;;
9345 esac
9346
9347 : see if fseeko exists
9348 set fseeko d_fseeko
9349 eval $inlibc
9350 case "$longsize" in
9351 8) echo "(Your long is 64 bits, so you could use fseek.)" ;;
9352 esac
9353
9354 : see if fsetpos exists
9355 set fsetpos d_fsetpos
9356 eval $inlibc
9357
9358
9359 : see if fstatfs exists
9360 set fstatfs d_fstatfs
9361 eval $inlibc
9362
9363
9364 : see if statvfs exists
9365 set statvfs d_statvfs
9366 eval $inlibc
9367
9368 : see if fstatvfs exists
9369 set fstatvfs d_fstatvfs
9370 eval $inlibc
9371
9372
9373 : see if ftello exists
9374 set ftello d_ftello
9375 eval $inlibc
9376 case "$longsize" in
9377 8) echo "(Your long is 64 bits, so you could use ftell.)" ;;
9378 esac
9379
9380 : see if getcwd exists
9381 set getcwd d_getcwd
9382 eval $inlibc
9383
9384 : see if getespwnam exists
9385 set getespwnam d_getespwnam
9386 eval $inlibc
9387
9388
9389 : see if getfsstat exists
9390 set getfsstat d_getfsstat
9391 eval $inlibc
9392
9393 : see if getgrent exists
9394 set getgrent d_getgrent
9395 eval $inlibc
9396
9397 : see if gethostbyaddr exists
9398 set gethostbyaddr d_gethbyaddr
9399 eval $inlibc
9400
9401 : see if gethostbyname exists
9402 set gethostbyname d_gethbyname
9403 eval $inlibc
9404
9405 : see if gethostent exists
9406 set gethostent d_gethent
9407 eval $inlibc
9408
9409 : see how we will look up host name
9410 echo " "
9411 call=''
9412 if set gethostname val -f d_gethname; eval $csym; $val; then
9413         echo 'gethostname() found.' >&4
9414         d_gethname="$define"
9415         call=gethostname
9416 fi
9417 if set uname val -f d_uname; eval $csym; $val; then
9418         if ./xenix; then
9419                 $cat <<'EOM'
9420 uname() was found, but you're running xenix, and older versions of xenix
9421 have a broken uname(). If you don't really know whether your xenix is old
9422 enough to have a broken system call, use the default answer.
9423
9424 EOM
9425                 dflt=y
9426                 case "$d_uname" in
9427                 "$define") dflt=n;;
9428                 esac
9429                 rp='Is your uname() broken?'
9430                 . ./myread
9431                 case "$ans" in
9432                 n*) d_uname="$define"; call=uname;;
9433                 esac
9434         else
9435                 echo 'uname() found.' >&4
9436                 d_uname="$define"
9437                 case "$call" in
9438                 '') call=uname ;;
9439                 esac
9440         fi
9441 fi
9442 case "$d_gethname" in
9443 '') d_gethname="$undef";;
9444 esac
9445 case "$d_uname" in
9446 '') d_uname="$undef";;
9447 esac
9448 case "$d_uname$d_gethname" in
9449 *define*)
9450         dflt=n
9451         cat <<EOM
9452  
9453 Every now and then someone has a $call() that lies about the hostname
9454 but can't be fixed for political or economic reasons.  If you wish, I can
9455 pretend $call() isn't there and maybe compute hostname at run-time
9456 thanks to the '$phostname' command.
9457
9458 EOM
9459         rp="Shall I ignore $call() from now on?"
9460         . ./myread
9461         case "$ans" in
9462         y*) d_uname="$undef" d_gethname="$undef"; $echo $n "Okay...$c";;
9463         esac;;
9464 esac
9465 case "$phostname" in
9466 '') aphostname='';;
9467 *) case "$aphostname" in
9468         /*) ;;
9469         *) set X $phostname
9470                 shift
9471                 file=$1
9472                 shift
9473                 file=`./loc $file $file $pth`
9474                 aphostname=`echo $file $*`
9475                 ;;
9476         esac
9477         ;;
9478 esac
9479 case "$d_uname$d_gethname" in
9480 *define*) ;;
9481 *)
9482         case "$phostname" in
9483         '')
9484                 echo "There will be no way for $package to get your hostname." >&4;;
9485         *)
9486         echo "I'll use 'popen("'"'$aphostname'", "r")'"' to get your hostname." >&4
9487                 ;;
9488         esac;;
9489 esac
9490 case "$d_phostname" in
9491 '') d_phostname="$undef";;
9492 esac
9493
9494 : see if this is a netdb.h system
9495 set netdb.h i_netdb
9496 eval $inhdr
9497
9498 : see if prototypes for various gethostxxx netdb.h functions are available
9499 echo " "
9500 set d_gethostprotos gethostent $i_netdb netdb.h
9501 eval $hasproto
9502
9503 : see if getlogin exists
9504 set getlogin d_getlogin
9505 eval $inlibc
9506
9507 : see if getmnt exists
9508 set getmnt d_getmnt
9509 eval $inlibc
9510
9511 : see if getmntent exists
9512 set getmntent d_getmntent
9513 eval $inlibc
9514
9515 : see if getnetbyaddr exists
9516 set getnetbyaddr d_getnbyaddr
9517 eval $inlibc
9518
9519 : see if getnetbyname exists
9520 set getnetbyname d_getnbyname
9521 eval $inlibc
9522
9523 : see if getnetent exists
9524 set getnetent d_getnent
9525 eval $inlibc
9526
9527 : see if prototypes for various getnetxxx netdb.h functions are available
9528 echo " "
9529 set d_getnetprotos getnetent $i_netdb netdb.h
9530 eval $hasproto
9531
9532
9533 : see if getprotobyname exists
9534 set getprotobyname d_getpbyname
9535 eval $inlibc
9536
9537 : see if getprotobynumber exists
9538 set getprotobynumber d_getpbynumber
9539 eval $inlibc
9540
9541 : see if getprotoent exists
9542 set getprotoent d_getpent
9543 eval $inlibc
9544
9545 : see if getpgid exists
9546 set getpgid d_getpgid
9547 eval $inlibc
9548
9549 : see if getpgrp2 exists
9550 set getpgrp2 d_getpgrp2
9551 eval $inlibc
9552
9553 : see if getppid exists
9554 set getppid d_getppid
9555 eval $inlibc
9556
9557 : see if getpriority exists
9558 set getpriority d_getprior
9559 eval $inlibc
9560
9561 : see if prototypes for various getprotoxxx netdb.h functions are available
9562 echo " "
9563 set d_getprotoprotos getprotoent $i_netdb netdb.h
9564 eval $hasproto
9565
9566 : see if getprpwnam exists
9567 set getprpwnam d_getprpwnam
9568 eval $inlibc
9569
9570 : see if getpwent exists
9571 set getpwent d_getpwent
9572 eval $inlibc
9573
9574
9575 : see if getservbyname exists
9576 set getservbyname d_getsbyname
9577 eval $inlibc
9578
9579 : see if getservbyport exists
9580 set getservbyport d_getsbyport
9581 eval $inlibc
9582
9583 : see if getservent exists
9584 set getservent d_getsent
9585 eval $inlibc
9586
9587 : see if prototypes for various getservxxx netdb.h functions are available
9588 echo " "
9589 set d_getservprotos getservent $i_netdb netdb.h
9590 eval $hasproto
9591
9592 : see if getspnam exists
9593 set getspnam d_getspnam
9594 eval $inlibc
9595
9596 : see if gettimeofday or ftime exists
9597 set gettimeofday d_gettimeod
9598 eval $inlibc
9599 case "$d_gettimeod" in
9600 "$undef")
9601         set ftime d_ftime 
9602         eval $inlibc
9603         ;;
9604 *)
9605         val="$undef"; set d_ftime; eval $setvar
9606         ;;
9607 esac
9608 case "$d_gettimeod$d_ftime" in
9609 "$undef$undef")
9610         echo " "
9611         echo 'No ftime() nor gettimeofday() -- timing may be less accurate.' >&4
9612         ;;
9613 esac
9614
9615 : see if this is an grp system
9616 set grp.h i_grp
9617 eval $inhdr
9618
9619 case "$i_grp" in
9620 $define)
9621         xxx=`./findhdr grp.h`
9622         $cppstdin $cppflags $cppminus < $xxx >$$.h
9623
9624         if $contains 'gr_passwd' $$.h >/dev/null 2>&1; then
9625                 val="$define"
9626         else
9627                 val="$undef"
9628         fi
9629         set d_grpasswd
9630         eval $setvar
9631
9632         $rm -f $$.h
9633         ;;
9634 *)
9635         val="$undef";
9636         set d_grpasswd; eval $setvar
9637         ;;
9638 esac
9639
9640 : see if hasmntopt exists
9641 set hasmntopt d_hasmntopt
9642 eval $inlibc
9643
9644 : see if this is a netinet/in.h or sys/in.h system
9645 set netinet/in.h i_niin sys/in.h i_sysin
9646 eval $inhdr
9647
9648 : see if arpa/inet.h has to be included
9649 set arpa/inet.h i_arpainet
9650 eval $inhdr
9651
9652 : see if htonl --and friends-- exists
9653 val=''
9654 set htonl val
9655 eval $inlibc
9656
9657 : Maybe they are macros.
9658 case "$val" in
9659 $undef)
9660         $cat >htonl.c <<EOM
9661 #include <stdio.h>
9662 #include <sys/types.h>
9663 #$i_niin I_NETINET_IN
9664 #$i_sysin I_SYS_IN
9665 #$i_arpainet I_ARPA_INET
9666 #ifdef I_NETINET_IN
9667 #include <netinet/in.h>
9668 #endif
9669 #ifdef I_SYS_IN
9670 #include <sys/in.h>
9671 #endif
9672 #ifdef I_ARPA_INET
9673 #include <arpa/inet.h>
9674 #endif
9675 #ifdef htonl
9676 printf("Defined as a macro.");
9677 #endif
9678 EOM
9679         $cppstdin $cppflags $cppminus < htonl.c >htonl.E 2>/dev/null
9680         if $contains 'Defined as a macro' htonl.E >/dev/null 2>&1; then
9681                 val="$define"
9682                 echo "But it seems to be defined as a macro." >&4
9683         fi
9684         $rm -f htonl.?
9685         ;;
9686 esac
9687 set d_htonl
9688 eval $setvar
9689
9690 : see if iconv exists
9691 set iconv d_iconv
9692 eval $inlibc
9693
9694 : index or strchr
9695 echo " "
9696 if set index val -f; eval $csym; $val; then
9697         if set strchr val -f d_strchr; eval $csym; $val; then
9698                 if $contains strchr "$strings" >/dev/null 2>&1 ; then
9699                         val="$define"
9700                         vali="$undef"
9701                         echo "strchr() found." >&4
9702                 else
9703                         val="$undef"
9704                         vali="$define"
9705                         echo "index() found." >&4
9706                 fi
9707         else
9708                 val="$undef"
9709                 vali="$define"
9710                 echo "index() found." >&4
9711         fi
9712 else
9713         if set strchr val -f d_strchr; eval $csym; $val; then
9714                 val="$define"
9715                 vali="$undef"
9716                 echo "strchr() found." >&4
9717         else
9718                 echo "No index() or strchr() found!" >&4
9719                 val="$undef"
9720                 vali="$undef"
9721         fi
9722 fi
9723 set d_strchr; eval $setvar
9724 val="$vali"
9725 set d_index; eval $setvar
9726
9727 : check whether inet_aton exists
9728 set inet_aton d_inetaton
9729 eval $inlibc
9730
9731 : see if inttypes.h is available
9732 : we want a real compile instead of Inhdr because some systems
9733 : have an inttypes.h which includes non-existent headers
9734 echo " "
9735 $cat >try.c <<EOCP
9736 #include <inttypes.h>
9737 int main() {
9738         static int32_t foo32 = 0x12345678;
9739 }
9740 EOCP
9741 set try
9742 if eval $compile; then
9743         echo "<inttypes.h> found." >&4
9744         val="$define"
9745 else
9746         echo "<inttypes.h> NOT found." >&4
9747         val="$undef"
9748 fi
9749 $rm -f try.c try
9750 set i_inttypes
9751 eval $setvar
9752
9753 : check for int64_t
9754 echo " "
9755 echo "Checking to see if you have int64_t..." >&4
9756 $cat >try.c <<EOCP
9757 #include <sys/types.h>
9758 #$i_inttypes I_INTTYPES
9759 #ifdef I_INTTYPES
9760 #include <inttypes.h>
9761 #endif
9762 int main() { int64_t x = 7; }
9763 EOCP
9764 set try
9765 if eval $compile; then
9766         val="$define"
9767         echo "You have int64_t."
9768 else
9769         val="$undef"
9770         echo "You do not have int64_t."
9771 fi
9772 $rm -f try try.*
9773 set d_int64_t
9774 eval $setvar
9775
9776 : Look for isascii
9777 echo " "
9778 $cat >isascii.c <<'EOCP'
9779 #include <stdio.h>
9780 #include <ctype.h>
9781 int main() {
9782         int c = 'A';
9783         if (isascii(c))
9784                 exit(0);
9785         else
9786                 exit(1);
9787 }
9788 EOCP
9789 set isascii
9790 if eval $compile; then
9791         echo "isascii() found." >&4
9792         val="$define"
9793 else
9794         echo "isascii() NOT found." >&4
9795         val="$undef"
9796 fi
9797 set d_isascii
9798 eval $setvar
9799 $rm -f isascii*
9800
9801 : see if isnan exists
9802 set isnan d_isnan
9803 eval $inlibc
9804
9805 : see if isnanl exists
9806 set isnanl d_isnanl
9807 eval $inlibc
9808
9809 : see if killpg exists
9810 set killpg d_killpg
9811 eval $inlibc
9812
9813 : see if lchown exists
9814 echo " "
9815 $cat > try.c <<'EOCP'
9816 /* System header to define __stub macros and hopefully few prototypes,
9817     which can conflict with char lchown(); below.  */
9818 #include <assert.h>
9819 /* Override any gcc2 internal prototype to avoid an error.  */
9820 /* We use char because int might match the return type of a gcc2
9821    builtin and then its argument prototype would still apply.  */
9822 char lchown();
9823 int main() {
9824     /*  The GNU C library defines this for functions which it implements
9825         to always fail with ENOSYS.  Some functions are actually named
9826         something starting with __ and the normal name is an alias.  */
9827 #if defined (__stub_lchown) || defined (__stub___lchown)
9828 choke me
9829 #else
9830 lchown();
9831 #endif
9832 ; return 0; }
9833 EOCP
9834 set try
9835 if eval $compile; then
9836     $echo "lchown() found." >&4
9837     val="$define"
9838 else
9839     $echo "lchown() NOT found." >&4
9840     val="$undef"
9841 fi
9842 set d_lchown
9843 eval $setvar
9844
9845 : See if number of significant digits in a double precision number is known
9846 echo " "
9847 $cat >ldbl_dig.c <<EOM
9848 #$i_limits I_LIMITS
9849 #$i_float I_FLOAT
9850 #ifdef I_LIMITS
9851 #include <limits.h>
9852 #endif
9853 #ifdef I_FLOAT
9854 #include <float.h>
9855 #endif
9856 #ifdef LDBL_DIG
9857 printf("Contains LDBL_DIG");
9858 #endif
9859 EOM
9860 $cppstdin $cppflags $cppminus < ldbl_dig.c >ldbl_dig.E 2>/dev/null
9861 if $contains 'LDBL_DIG' ldbl_dig.E >/dev/null 2>&1; then
9862         echo "LDBL_DIG found." >&4
9863         val="$define"
9864 else
9865         echo "LDBL_DIG NOT found." >&4
9866         val="$undef"
9867 fi
9868 $rm -f ldbl_dig.?
9869 set d_ldbl_dig
9870 eval $setvar
9871
9872 : see if link exists
9873 set link d_link
9874 eval $inlibc
9875
9876 : see if localeconv exists
9877 set localeconv d_locconv
9878 eval $inlibc
9879
9880 : see if lockf exists
9881 set lockf d_lockf
9882 eval $inlibc
9883
9884 : check for long long
9885 echo " "
9886 echo "Checking to see if you have long long..." >&4
9887 echo 'int main() { long long x = 7; return 0; }' > try.c
9888 set try
9889 if eval $compile; then
9890         val="$define"
9891         echo "You have long long."
9892 else
9893         val="$undef"
9894         echo "You do not have long long."
9895 fi
9896 $rm try.*
9897 set d_longlong
9898 eval $setvar
9899
9900 : check for length of long long
9901 case "${d_longlong}${longlongsize}" in
9902 $define)
9903         echo " "
9904         echo "Checking to see how big your long longs are..." >&4
9905         $cat >try.c <<'EOCP'
9906 #include <stdio.h>
9907 int main()
9908 {
9909     printf("%d\n", (int)sizeof(long long));
9910     return(0);
9911 }
9912 EOCP
9913         set try
9914         if eval $compile_ok; then
9915                 longlongsize=`./try$exe_ext`
9916                 echo "Your long longs are $longlongsize bytes long."
9917         else
9918                 dflt='8'
9919                 echo " "
9920                 echo "(I can't seem to compile the test program.  Guessing...)"
9921                 rp="What is the size of a long long (in bytes)?"
9922                 . ./myread
9923                 longlongsize="$ans"
9924         fi
9925         if $test "X$longsize" = "X$longlongsize"; then
9926                 echo "(That isn't any different from an ordinary long.)"
9927         fi      
9928         ;;
9929 esac
9930 $rm -f try.* try
9931
9932 : see if prototype for lseek is available
9933 echo " "
9934 set d_lseekproto lseek $i_systypes sys/types.h $i_unistd unistd.h
9935 eval $hasproto
9936
9937 : see if lstat exists
9938 set lstat d_lstat
9939 eval $inlibc
9940
9941 : see if madvise exists
9942 set madvise d_madvise
9943 eval $inlibc
9944
9945 : see if mblen exists
9946 set mblen d_mblen
9947 eval $inlibc
9948
9949 : see if mbstowcs exists
9950 set mbstowcs d_mbstowcs
9951 eval $inlibc
9952
9953 : see if mbtowc exists
9954 set mbtowc d_mbtowc
9955 eval $inlibc
9956
9957 : see if memchr exists
9958 set memchr d_memchr
9959 eval $inlibc
9960
9961 : see if memcmp exists
9962 set memcmp d_memcmp
9963 eval $inlibc
9964
9965 : see if memcpy exists
9966 set memcpy d_memcpy
9967 eval $inlibc
9968
9969 : see if memmove exists
9970 set memmove d_memmove
9971 eval $inlibc
9972
9973 : see if memset exists
9974 set memset d_memset
9975 eval $inlibc
9976
9977 : see if mkdir exists
9978 set mkdir d_mkdir
9979 eval $inlibc
9980
9981 : see if mkdtemp exists
9982 set mkdtemp d_mkdtemp
9983 eval $inlibc
9984
9985 : see if mkfifo exists
9986 set mkfifo d_mkfifo
9987 eval $inlibc
9988
9989 : see if mkstemp exists
9990 set mkstemp d_mkstemp
9991 eval $inlibc
9992
9993 : see if mkstemps exists
9994 set mkstemps d_mkstemps
9995 eval $inlibc
9996
9997 : see if mktime exists
9998 set mktime d_mktime
9999 eval $inlibc
10000
10001 : see if this is a sys/mman.h system
10002 set sys/mman.h i_sysmman
10003 eval $inhdr
10004
10005 : see if mmap exists
10006 set mmap d_mmap
10007 eval $inlibc
10008 : see what shmat returns
10009 : default to something harmless
10010 mmaptype='void *'
10011 case "$i_sysmman$d_mmap" in
10012 "$define$define")
10013         $cat >mmap.c <<'END'
10014 #include <sys/mman.h>
10015 void *mmap();
10016 END
10017         if $cc $ccflags -c mmap.c >/dev/null 2>&1; then
10018                 mmaptype='void *'
10019         else
10020                 mmaptype='caddr_t'
10021         fi
10022         echo "and it returns ($mmaptype)." >&4
10023         ;;
10024 esac
10025
10026
10027
10028 : see if modfl exists
10029 set modfl d_modfl
10030 eval $inlibc
10031
10032 : see if mprotect exists
10033 set mprotect d_mprotect
10034 eval $inlibc
10035
10036 : see if msgctl exists
10037 set msgctl d_msgctl
10038 eval $inlibc
10039
10040 : see if msgget exists
10041 set msgget d_msgget
10042 eval $inlibc
10043
10044 : see if msgsnd exists
10045 set msgsnd d_msgsnd
10046 eval $inlibc
10047
10048 : see if msgrcv exists
10049 set msgrcv d_msgrcv
10050 eval $inlibc
10051
10052 : see how much of the 'msg*(2)' library is present.
10053 h_msg=true
10054 echo " "
10055 case "$d_msgctl$d_msgget$d_msgsnd$d_msgrcv" in
10056 *"$undef"*) h_msg=false;;
10057 esac
10058 case "$osname" in
10059 freebsd)
10060     case "`ipcs 2>&1`" in
10061     "SVID messages"*"not configured"*)
10062         echo "Your $osname does not have the msg*(2) configured." >&4
10063         h_msg=false
10064         val="$undef"
10065         set msgctl d_msgctl
10066         eval $setvar
10067         set msgget d_msgget
10068         eval $setvar
10069         set msgsnd d_msgsnd
10070         eval $setvar
10071         set msgrcv d_msgrcv
10072         eval $setvar
10073         ;;
10074     esac
10075     ;;
10076 esac
10077 : we could also check for sys/ipc.h ...
10078 if $h_msg && $test `./findhdr sys/msg.h`; then
10079         echo "You have the full msg*(2) library." >&4
10080         val="$define"
10081 else
10082         echo "You don't have the full msg*(2) library." >&4
10083         val="$undef"
10084 fi
10085 set d_msg
10086 eval $setvar
10087
10088 : see if msync exists
10089 set msync d_msync
10090 eval $inlibc
10091
10092 : see if munmap exists
10093 set munmap d_munmap
10094 eval $inlibc
10095
10096 : see if nice exists
10097 set nice d_nice
10098 eval $inlibc
10099
10100
10101 echo " "
10102 echo "Checking which 64-bit integer type we could use..." >&4
10103
10104 case "$intsize" in
10105 8) val=int
10106    set quadtype
10107    eval $setvar
10108    val='"unsigned int"'
10109    set uquadtype
10110    eval $setvar
10111    quadkind=1
10112    ;;
10113 *) case "$longsize" in
10114    8) val=long
10115       set quadtype
10116       eval $setvar
10117       val='"unsigned long"'
10118       set uquadtype
10119       eval $setvar
10120       quadkind=2
10121       ;;
10122    *) case "$d_longlong:$longlongsize" in
10123       define:8)
10124         val='"long long"'
10125         set quadtype
10126         eval $setvar
10127         val='"unsigned long long"'
10128         set uquadtype
10129         eval $setvar
10130         quadkind=3
10131         ;;
10132       *) case "$d_int64_t" in
10133          define)
10134            val=int64_t
10135            set quadtype
10136            eval $setvar
10137            val=uint64_t
10138            set uquadtype
10139            eval $setvar
10140            quadkind=4
10141            ;;
10142          esac
10143          ;;
10144       esac
10145       ;;
10146    esac
10147    ;;
10148 esac
10149
10150 case "$quadtype" in
10151 '')     echo "Alas, no 64-bit integer types in sight." >&4
10152         d_quad="$undef"
10153         ;;
10154 *)      if test X"$use64bitint" = Xdefine -o X"$longsize" = X8; then
10155             verb="will"
10156         else
10157             verb="could"
10158         fi
10159         echo "We $verb use '$quadtype' for 64-bit integers." >&4
10160         d_quad="$define"
10161         ;;
10162 esac
10163
10164 : check for length of character
10165 echo " "
10166 case "$charsize" in
10167 '')
10168         echo "Checking to see how big your characters are (hey, you never know)..." >&4
10169         $cat >try.c <<'EOCP'
10170 #include <stdio.h>
10171 int main()
10172 {
10173     printf("%d\n", (int)sizeof(char));
10174     exit(0);
10175 }
10176 EOCP
10177         set try
10178         if eval $compile_ok; then
10179                 dflt=`./try`
10180         else
10181                 dflt='1'
10182                 echo "(I can't seem to compile the test program.  Guessing...)"
10183         fi
10184         ;;
10185 *)
10186         dflt="$charsize"
10187         ;;
10188 esac
10189 rp="What is the size of a character (in bytes)?"
10190 . ./myread
10191 charsize="$ans"
10192 $rm -f try.c try
10193
10194
10195 echo " "
10196 $echo "Choosing the C types to be used for Perl's internal types..." >&4
10197
10198 case "$use64bitint:$d_quad:$quadtype" in
10199 define:define:?*)
10200         ivtype="$quadtype"
10201         uvtype="$uquadtype"
10202         ivsize=8
10203         uvsize=8
10204         ;;
10205 *)      ivtype="long"
10206         uvtype="unsigned long"
10207         ivsize=$longsize
10208         uvsize=$longsize
10209         ;;
10210 esac
10211
10212 case "$uselongdouble:$d_longdbl" in
10213 define:define)
10214         nvtype="long double"
10215         nvsize=$longdblsize
10216         ;;
10217 *)      nvtype=double
10218         nvsize=$doublesize
10219         ;;
10220 esac
10221
10222 $echo "(IV will be "$ivtype", $ivsize bytes)"
10223 $echo "(UV will be "$uvtype", $uvsize bytes)"
10224 $echo "(NV will be "$nvtype", $nvsize bytes)"
10225
10226 $cat >try.c <<EOCP
10227 #$i_inttypes I_INTTYPES
10228 #ifdef I_INTTYPES
10229 #include <inttypes.h>
10230 #endif
10231 #include <stdio.h>
10232 int main() {
10233 #ifdef INT8
10234    int8_t i =  INT8_MAX;
10235   uint8_t u = UINT8_MAX;
10236   printf("int8_t\n");
10237 #endif
10238 #ifdef INT16
10239    int16_t i =  INT16_MAX;
10240   uint16_t i = UINT16_MAX;
10241   printf("int16_t\n");
10242 #endif
10243 #ifdef INT32
10244    int32_t i =  INT32_MAX;
10245   uint32_t u = UINT32_MAX;
10246   printf("int32_t\n");
10247 #endif
10248 }
10249 EOCP
10250
10251 case "$i8type" in
10252 '')     case "$charsize" in
10253         1)      i8type=char
10254                 u8type="unsigned char"
10255                 i8size=$charsize
10256                 u8size=$charsize
10257                 ;;
10258         esac
10259         ;;
10260 esac
10261 case "$i8type" in
10262 '')     set try -DINT8
10263         if eval $compile; then
10264                 case "`./try$exe_ext`" in
10265                 int8_t) i8type=int8_t
10266                         u8type=uint8_t
10267                         i8size=1
10268                         u8size=1
10269                         ;;
10270                 esac
10271         fi
10272         ;;
10273 esac
10274 case "$i8type" in
10275 '')     if $test $charsize -ge 1; then
10276                 i8type=char
10277                 u8type="unsigned char"
10278                 i8size=$charsize
10279                 u8size=$charsize
10280         fi
10281         ;;
10282 esac
10283
10284 case "$i16type" in
10285 '')     case "$shortsize" in
10286         2)      i16type=short
10287                 u16type="unsigned short"
10288                 i16size=$shortsize
10289                 u16size=$shortsize
10290                 ;;
10291         esac
10292         ;;
10293 esac
10294 case "$i16type" in
10295 '')     set try -DINT16
10296         if eval $compile; then
10297                 case "`./try$exe_ext`" in
10298                 int16_t)
10299                         i16type=int16_t
10300                         u16type=uint16_t
10301                         i16size=2
10302                         u16size=2
10303                         ;;
10304                 esac
10305         fi
10306         ;;
10307 esac
10308 case "$i16type" in
10309 '')     if $test $shortsize -ge 2; then
10310                 i16type=short
10311                 u16type="unsigned short"
10312                 i16size=$shortsize
10313                 u16size=$shortsize
10314         fi
10315         ;;
10316 esac
10317
10318 case "$i32type" in
10319 '')     case "$longsize" in
10320         4)      i32type=long
10321                 u32type="unsigned long"
10322                 i32size=$longsize
10323                 u32size=$longsize
10324                 ;;
10325         *)      case "$intsize" in
10326                 4)      i32type=int
10327                         u32type="unsigned int"
10328                         i32size=$intsize
10329                         u32size=$intsize
10330                         ;;
10331                 esac
10332                 ;;
10333         esac
10334         ;;
10335 esac
10336 case "$i32type" in
10337 '')     set try -DINT32
10338         if eval $compile; then
10339                 case "`./try$exe_ext`" in
10340                 int32_t)
10341                         i32type=int32_t
10342                         u32type=uint32_t
10343                         i32size=4
10344                         u32size=4
10345                         ;;
10346                 esac
10347         fi
10348         ;;
10349 esac
10350 case "$i32type" in
10351 '')     if $test $intsize -ge 4; then
10352                 i32type=int
10353                 u32type="unsigned int"
10354                 i32size=$intsize
10355                 u32size=$intsize
10356         fi
10357         ;;
10358 esac
10359
10360 case "$i64type" in
10361 '')     case "$d_quad:$quadtype" in
10362         define:?*)
10363                 i64type="$quadtype"
10364                 u64type="$uquadtype"
10365                 i64size=8
10366                 u64size=8
10367                 ;;
10368         esac
10369         ;;
10370 esac
10371
10372 $echo "Checking whether your NVs can preserve your UVs..." >&4
10373 $cat <<EOP >try.c
10374 #include <stdio.h>
10375 int main() {
10376     $uvtype k = ($uvtype)~0, l;
10377     $nvtype d;
10378     l = k;
10379     d = ($nvtype)l;
10380     l = ($uvtype)d;
10381     if (l == k)
10382        printf("preserve\n");
10383     exit(0);
10384 }
10385 EOP
10386 set try
10387 if eval $compile; then
10388         case "`./try$exe_ext`" in
10389         preserve) d_nv_preserves_uv="$define" ;;
10390         esac
10391 fi      
10392 case "$d_nv_preserves_uv" in
10393 $define) $echo "Yes, they can."  2>&1 ;;
10394 *)       $echo "No, they can't." 2>&1
10395          d_nv_preserves_uv="$undef"
10396          ;;
10397 esac
10398
10399 $rm -f try.* try
10400
10401 case "$d_nv_preserves_uv" in
10402 "$define") d_nv_preserves_uv_bits=`expr $uvsize \* 8` ;;
10403 *)      $echo "Checking how many bits of your UVs your NVs can preserve..." >&4
10404         $cat <<EOP >try.c
10405 #include <stdio.h>
10406 int main() {
10407     $uvtype u = 0;
10408     int     n = 8 * $uvsize;
10409     int     i;
10410     for (i = 0; i < n; i++) {
10411       u = u << 1 | ($uvtype)1;
10412       if (($uvtype)($nvtype)u != u)
10413         break;
10414     }
10415     printf("%d\n", i);
10416     exit(0);
10417 }
10418 EOP
10419         set try
10420         if eval $compile; then
10421                 d_nv_preserves_uv_bits="`./try$exe_ext`"
10422         fi
10423         case "$d_nv_preserves_uv_bits" in
10424         [1-9]*) $echo "Your NVs can preserve $d_nv_preserves_uv_bits bits of your UVs."  2>&1 ;;
10425         *)      $echo "Can't figure out how many bits your NVs preserve." 2>&1
10426                 d_nv_preserves_uv_bits="$undef"
10427                 ;;
10428         esac
10429         $rm -f try.* try
10430         ;;
10431 esac
10432
10433
10434
10435 : check for off64_t
10436 echo " "
10437 echo "Checking to see if you have off64_t..." >&4
10438 $cat >try.c <<EOCP
10439 #include <sys/types.h>
10440 #include <unistd.h>
10441 int main() { off64_t x = 7; }
10442 EOCP
10443 set try
10444 if eval $compile; then
10445         val="$define"
10446         echo "You have off64_t."
10447 else
10448         val="$undef"
10449         echo "You do not have off64_t."
10450         case "$lseeksize" in
10451         8) echo "(Your off_t is 64 bits, so you could use that.)" ;;
10452         esac
10453 fi
10454 $rm -f try.* try
10455 set d_off64_t
10456 eval $setvar
10457
10458 : see if POSIX threads are available
10459 set pthread.h i_pthread
10460 eval $inhdr
10461
10462
10463
10464
10465 : how to create joinable pthreads
10466 if test "X$usethreads" = "X$define" -a "X$i_pthread" = "X$define"; then
10467         echo " "
10468         echo "Checking what constant to use for creating joinable pthreads..." >&4 
10469         $cat >try.c <<'EOCP'
10470 #include <pthread.h>
10471 int main() {
10472     int detachstate = JOINABLE;
10473 }
10474 EOCP
10475         set try -DJOINABLE=PTHREAD_CREATE_JOINABLE
10476         if eval $compile; then
10477                 echo "You seem to use PTHREAD_CREATE_JOINABLE." >&4
10478                 val="$undef" # Yes, undef.
10479                 set d_old_pthread_create_joinable
10480                 eval $setvar
10481                 val=""
10482                 set old_pthread_create_joinable
10483                 eval $setvar
10484         else
10485                 set try -DJOINABLE=PTHREAD_CREATE_UNDETACHED
10486                 if eval $compile; then
10487                         echo "You seem to use PTHREAD_CREATE_UNDETACHED." >&4
10488                         val="$define"
10489                         set d_old_pthread_create_joinable
10490                         eval $setvar
10491                         val=PTHREAD_CREATE_UNDETACHED
10492                         set old_pthread_create_joinable
10493                         eval $setvar
10494                 else            
10495                         set try -DJOINABLE=__UNDETACHED
10496                         if eval $compile; then
10497                                 echo "You seem to use __UNDETACHED." >&4
10498                                 val="$define"
10499                                 set d_old_pthread_create_joinable
10500                                 eval $setvar
10501                                 val=__UNDETACHED
10502                                 set old_pthread_create_joinable
10503                                 eval $setvar
10504                         else
10505                                 echo "Egads, nothing obvious found.  Guessing that you use 0." >&4
10506                                 val="$define"
10507                                 set d_old_pthread_create_joinable
10508                                 eval $setvar
10509                                 val=0
10510                                 set old_pthread_create_joinable
10511                                 eval $setvar
10512                         fi
10513                 fi
10514         fi
10515         $rm -f try try.*
10516 else
10517     d_old_pthread_create_joinable="$undef"
10518     old_pthread_create_joinable=""
10519 fi
10520
10521 : see if pause exists
10522 set pause d_pause
10523 eval $inlibc
10524
10525 : see if pipe exists
10526 set pipe d_pipe
10527 eval $inlibc
10528
10529 : see if poll exists
10530 set poll d_poll
10531 eval $inlibc
10532
10533
10534 : see whether the various POSIXish _yields exist
10535 $cat >try.c <<EOP
10536 #include <pthread.h>
10537 #include <stdio.h>
10538 int main() {
10539 #ifdef SCHED_YIELD
10540         sched_yield();
10541 #else
10542 #ifdef PTHREAD_YIELD
10543         pthread_yield();
10544 #else
10545 #ifdef PTHREAD_YIELD_NULL
10546         pthread_yield(NULL);
10547 #endif
10548 #endif
10549 #endif
10550 }
10551 EOP
10552 : see if sched_yield exists
10553 set try -DSCHED_YIELD
10554 if eval $compile; then
10555     val="$define"
10556     sched_yield='sched_yield()'
10557 else
10558     val="$undef"
10559 fi
10560 case "$usethreads" in
10561 $define)
10562         case "$val" in
10563         $define) echo 'sched_yield() found.' >&4        ;;
10564         *)       echo 'sched_yield() NOT found.' >&4    ;;
10565         esac
10566 esac
10567 set d_sched_yield
10568 eval $setvar
10569
10570 : see if pthread_yield exists
10571 set try -DPTHREAD_YIELD
10572 if eval $compile; then
10573     val="$define"
10574     case "$sched_yield" in
10575     '') sched_yield='pthread_yield()' ;;
10576     esac
10577 else
10578     set try -DPTHREAD_YIELD_NULL
10579     if eval $compile; then
10580         val="$define"
10581         case "$sched_yield" in
10582         '') sched_yield='pthread_yield(NULL)' ;;
10583         esac
10584     else
10585         val="$undef"
10586     fi
10587 fi
10588 case "$usethreads" in
10589 $define)
10590         case "$val" in
10591         $define) echo 'pthread_yield() found.' >&4      ;;
10592         *)       echo 'pthread_yield() NOT found.' >&4  ;;
10593         esac
10594         ;;
10595 esac
10596 set d_pthread_yield
10597 eval $setvar
10598
10599 case "$sched_yield" in
10600 '') sched_yield=undef ;;
10601 esac
10602
10603 $rm -f try try.*
10604
10605 : see if this is a pwd.h system
10606 set pwd.h i_pwd
10607 eval $inhdr
10608
10609 case "$i_pwd" in
10610 $define)
10611         xxx=`./findhdr pwd.h`
10612         $cppstdin $cppflags $cppminus < $xxx >$$.h
10613
10614         if $contains 'pw_quota' $$.h >/dev/null 2>&1; then
10615                 val="$define"
10616         else
10617                 val="$undef"
10618         fi
10619         set d_pwquota
10620         eval $setvar
10621
10622         if $contains 'pw_age' $$.h >/dev/null 2>&1; then
10623                 val="$define"
10624         else
10625                 val="$undef"
10626         fi
10627         set d_pwage
10628         eval $setvar
10629
10630         if $contains 'pw_change' $$.h >/dev/null 2>&1; then
10631                 val="$define"
10632         else
10633                 val="$undef"
10634         fi
10635         set d_pwchange
10636         eval $setvar
10637
10638         if $contains 'pw_class' $$.h >/dev/null 2>&1; then
10639                 val="$define"
10640         else
10641                 val="$undef"
10642         fi
10643         set d_pwclass
10644         eval $setvar
10645
10646         if $contains 'pw_expire' $$.h >/dev/null 2>&1; then
10647                 val="$define"
10648         else
10649                 val="$undef"
10650         fi
10651         set d_pwexpire
10652         eval $setvar
10653
10654         if $contains 'pw_comment' $$.h >/dev/null 2>&1; then
10655                 val="$define"
10656         else
10657                 val="$undef"
10658         fi
10659         set d_pwcomment
10660         eval $setvar
10661
10662         if $contains 'pw_gecos' $$.h >/dev/null 2>&1; then
10663                 val="$define"
10664         else
10665                 val="$undef"
10666         fi
10667         set d_pwgecos
10668         eval $setvar
10669
10670         if $contains 'pw_passwd' $$.h >/dev/null 2>&1; then
10671                 val="$define"
10672         else
10673                 val="$undef"
10674         fi
10675         set d_pwpasswd
10676         eval $setvar
10677
10678         $rm -f $$.h
10679         ;;
10680 *)
10681         val="$undef"; 
10682         set d_pwquota; eval $setvar
10683         set d_pwage; eval $setvar
10684         set d_pwchange; eval $setvar
10685         set d_pwclass; eval $setvar
10686         set d_pwexpire; eval $setvar
10687         set d_pwcomment; eval $setvar
10688         set d_pwgecos; eval $setvar
10689         set d_pwpasswd; eval $setvar
10690         ;;
10691 esac
10692
10693 : see if readdir and friends exist
10694 set readdir d_readdir
10695 eval $inlibc
10696 set seekdir d_seekdir
10697 eval $inlibc
10698 set telldir d_telldir
10699 eval $inlibc
10700 set rewinddir d_rewinddir
10701 eval $inlibc
10702
10703 : see if readlink exists
10704 set readlink d_readlink
10705 eval $inlibc
10706
10707 : see if rename exists
10708 set rename d_rename
10709 eval $inlibc
10710
10711 : see if rmdir exists
10712 set rmdir d_rmdir
10713 eval $inlibc
10714
10715 : see if memory.h is available.
10716 val=''
10717 set memory.h val
10718 eval $inhdr
10719
10720 : See if it conflicts with string.h
10721 case "$val" in
10722 $define)
10723         case "$strings" in
10724         '') ;;
10725         *)
10726                 $cppstdin $cppflags $cppminus < $strings > mem.h
10727                 if $contains 'memcpy' mem.h >/dev/null 2>&1; then
10728                         echo " "
10729                         echo "We won't be including <memory.h>."
10730                         val="$undef"
10731                 fi
10732                 $rm -f mem.h
10733                 ;;
10734         esac
10735 esac
10736 set i_memory
10737 eval $setvar
10738
10739 : can bcopy handle overlapping blocks?
10740 val="$undef"
10741 case "$d_bcopy" in
10742 "$define")
10743         echo " "
10744         echo "Checking to see if your bcopy() can do overlapping copies..." >&4
10745         $cat >try.c <<EOCP
10746 #$i_memory I_MEMORY
10747 #$i_stdlib I_STDLIB
10748 #$i_string I_STRING
10749 #$i_unistd I_UNISTD
10750 EOCP
10751         $cat >>try.c <<'EOCP'
10752 #include <stdio.h>
10753 #ifdef I_MEMORY
10754 #  include <memory.h>
10755 #endif
10756 #ifdef I_STDLIB
10757 #  include <stdlib.h>
10758 #endif
10759 #ifdef I_STRING
10760 #  include <string.h>
10761 #else
10762 #  include <strings.h>
10763 #endif
10764 #ifdef I_UNISTD
10765 #  include <unistd.h>  /* Needed for NetBSD */
10766 #endif
10767 int main()
10768 {
10769 char buf[128], abc[128];
10770 char *b;
10771 int len;
10772 int off;
10773 int align;
10774
10775 bcopy("abcdefghijklmnopqrstuvwxyz0123456789", abc, 36);
10776
10777 for (align = 7; align >= 0; align--) {
10778         for (len = 36; len; len--) {
10779                 b = buf+align;
10780                 bcopy(abc, b, len);
10781                 for (off = 1; off <= len; off++) {
10782                         bcopy(b, b+off, len);
10783                         bcopy(b+off, b, len);
10784                         if (bcmp(b, abc, len))
10785                                 exit(1);
10786                 }
10787         }
10788 }
10789 exit(0);
10790 }
10791 EOCP
10792         set try
10793         if eval $compile_ok; then
10794                 if ./try 2>/dev/null; then
10795                         echo "Yes, it can."
10796                         val="$define"
10797                 else
10798                         echo "It can't, sorry."
10799                         case "$d_memmove" in
10800                         "$define") echo "But that's Ok since you have memmove()." ;;
10801                         esac
10802                 fi
10803         else
10804                 echo "(I can't compile the test program, so we'll assume not...)"
10805                 case "$d_memmove" in
10806                 "$define") echo "But that's Ok since you have memmove()." ;;
10807                 esac
10808         fi
10809         ;;
10810 esac
10811 $rm -f try.* try core
10812 set d_safebcpy
10813 eval $setvar
10814
10815 : can memcpy handle overlapping blocks?
10816 val="$undef"
10817 case "$d_memcpy" in
10818 "$define")
10819         echo " "
10820         echo "Checking to see if your memcpy() can do overlapping copies..." >&4
10821         $cat >try.c <<EOCP
10822 #$i_memory I_MEMORY
10823 #$i_stdlib I_STDLIB
10824 #$i_string I_STRING
10825 #$i_unistd I_UNISTD
10826 EOCP
10827         $cat >>try.c <<'EOCP'
10828 #include <stdio.h>
10829 #ifdef I_MEMORY
10830 #  include <memory.h>
10831 #endif
10832 #ifdef I_STDLIB
10833 #  include <stdlib.h>
10834 #endif
10835 #ifdef I_STRING
10836 #  include <string.h>
10837 #else
10838 #  include <strings.h>
10839 #endif
10840 #ifdef I_UNISTD
10841 #  include <unistd.h>  /* Needed for NetBSD */
10842 #endif
10843 int main()
10844 {
10845 char buf[128], abc[128];
10846 char *b;
10847 int len;
10848 int off;
10849 int align;
10850
10851 /* Copy "abcde..." string to char abc[] so that gcc doesn't
10852    try to store the string in read-only memory. */
10853 memcpy(abc, "abcdefghijklmnopqrstuvwxyz0123456789", 36);
10854
10855 for (align = 7; align >= 0; align--) {
10856         for (len = 36; len; len--) {
10857                 b = buf+align;
10858                 memcpy(b, abc, len);
10859                 for (off = 1; off <= len; off++) {
10860                         memcpy(b+off, b, len);
10861                         memcpy(b, b+off, len);
10862                         if (memcmp(b, abc, len))
10863                                 exit(1);
10864                 }
10865         }
10866 }
10867 exit(0);
10868 }
10869 EOCP
10870         set try
10871         if eval $compile_ok; then
10872                 if ./try 2>/dev/null; then
10873                         echo "Yes, it can."
10874                         val="$define"
10875                 else
10876                         echo "It can't, sorry."
10877                         case "$d_memmove" in
10878                         "$define") echo "But that's Ok since you have memmove()." ;;
10879                         esac
10880                 fi
10881         else
10882                 echo "(I can't compile the test program, so we'll assume not...)"
10883                 case "$d_memmove" in
10884                 "$define") echo "But that's Ok since you have memmove()." ;;
10885                 esac
10886         fi
10887         ;;
10888 esac
10889 $rm -f try.* try core
10890 set d_safemcpy
10891 eval $setvar
10892
10893 : can memcmp be trusted to compare relative magnitude?
10894 val="$undef"
10895 case "$d_memcmp" in
10896 "$define")
10897         echo " "
10898         echo "Checking if your memcmp() can compare relative magnitude..." >&4
10899         $cat >try.c <<EOCP
10900 #$i_memory I_MEMORY
10901 #$i_stdlib I_STDLIB
10902 #$i_string I_STRING
10903 #$i_unistd I_UNISTD
10904 EOCP
10905         $cat >>try.c <<'EOCP'
10906 #include <stdio.h>
10907 #ifdef I_MEMORY
10908 #  include <memory.h>
10909 #endif
10910 #ifdef I_STDLIB
10911 #  include <stdlib.h>
10912 #endif
10913 #ifdef I_STRING
10914 #  include <string.h>
10915 #else
10916 #  include <strings.h>
10917 #endif
10918 #ifdef I_UNISTD
10919 #  include <unistd.h>  /* Needed for NetBSD */
10920 #endif
10921 int main()
10922 {
10923 char a = -1;
10924 char b = 0;
10925 if ((a < b) && memcmp(&a, &b, 1) < 0)
10926         exit(1);
10927 exit(0);
10928 }
10929 EOCP
10930         set try
10931         if eval $compile_ok; then
10932                 if ./try 2>/dev/null; then
10933                         echo "Yes, it can."
10934                         val="$define"
10935                 else
10936                         echo "No, it can't (it uses signed chars)."
10937                 fi
10938         else
10939                 echo "(I can't compile the test program, so we'll assume not...)"
10940         fi
10941         ;;
10942 esac
10943 $rm -f try.* try core
10944 set d_sanemcmp
10945 eval $setvar
10946
10947 : see if select exists
10948 set select d_select
10949 eval $inlibc
10950
10951 : see if semctl exists
10952 set semctl d_semctl
10953 eval $inlibc
10954
10955 : see if semget exists
10956 set semget d_semget
10957 eval $inlibc
10958
10959 : see if semop exists
10960 set semop d_semop
10961 eval $inlibc
10962
10963 : see how much of the 'sem*(2)' library is present.
10964 h_sem=true
10965 echo " "
10966 case "$d_semctl$d_semget$d_semop" in
10967 *"$undef"*) h_sem=false;;
10968 esac
10969 case "$osname" in
10970 freebsd)
10971     case "`ipcs 2>&1`" in
10972     "SVID messages"*"not configured"*)
10973         echo "Your $osname does not have the sem*(2) configured." >&4
10974         h_sem=false
10975         val="$undef"
10976         set semctl d_semctl
10977         eval $setvar
10978         set semget d_semget
10979         eval $setvar
10980         set semop d_semop
10981         eval $setvar
10982         ;;
10983     esac
10984     ;;
10985 esac
10986 : we could also check for sys/ipc.h ...
10987 if $h_sem && $test `./findhdr sys/sem.h`; then
10988         echo "You have the full sem*(2) library." >&4
10989         val="$define"
10990 else
10991         echo "You don't have the full sem*(2) library." >&4
10992         val="$undef"
10993 fi
10994 set d_sem
10995 eval $setvar
10996
10997 : see whether sys/sem.h defines union semun
10998 echo " "
10999 $cat > try.c <<'END'
11000 #include <sys/types.h>
11001 #include <sys/ipc.h>
11002 #include <sys/sem.h>
11003 int main () { union semun semun; semun.buf = 0; }
11004 END
11005 set try
11006 if eval $compile; then
11007     echo "You have union semun in <sys/sem.h>." >&4
11008     val="$define"
11009 else
11010     echo "You do not have union semun in <sys/sem.h>." >&4
11011     val="$undef"
11012 fi
11013 $rm -f try try.c try.h
11014 set d_union_semun
11015 eval $setvar
11016
11017 : see how to do semctl IPC_STAT
11018 case "$d_sem" in
11019 $define)
11020     : see whether semctl IPC_STAT can use union semun
11021     echo " "
11022     $cat > try.h <<END
11023 #ifndef S_IRUSR
11024 #   ifdef S_IREAD
11025 #       define S_IRUSR S_IREAD
11026 #       define S_IWUSR S_IWRITE
11027 #       define S_IXUSR S_IEXEC
11028 #   else
11029 #       define S_IRUSR 0400
11030 #       define S_IWUSR 0200
11031 #       define S_IXUSR 0100
11032 #   endif
11033 #   define S_IRGRP (S_IRUSR>>3)
11034 #   define S_IWGRP (S_IWUSR>>3)
11035 #   define S_IXGRP (S_IXUSR>>3)
11036 #   define S_IROTH (S_IRUSR>>6)
11037 #   define S_IWOTH (S_IWUSR>>6)
11038 #   define S_IXOTH (S_IXUSR>>6)
11039 #endif
11040 #ifndef S_IRWXU
11041 #   define S_IRWXU (S_IRUSR|S_IWUSR|S_IXUSR)
11042 #   define S_IRWXG (S_IRGRP|S_IWGRP|S_IXGRP)
11043 #   define S_IRWXO (S_IROTH|S_IWOTH|S_IXOTH)
11044 #endif
11045 END
11046
11047     $cat > try.c <<END
11048 #include <sys/types.h>
11049 #include <sys/ipc.h>
11050 #include <sys/sem.h>
11051 #include <sys/stat.h>
11052 #include <stdio.h>
11053 #include <errno.h>
11054 #include "try.h"
11055 #ifndef errno
11056 extern int errno;
11057 #endif
11058 #$d_union_semun HAS_UNION_SEMUN
11059 int main() {
11060     union semun
11061 #ifndef HAS_UNION_SEMUN
11062     {
11063         int val;
11064         struct semid_ds *buf;
11065         unsigned short *array;
11066     }
11067 #endif
11068     arg;
11069     int sem, st;
11070
11071 #if defined(IPC_PRIVATE) && defined(S_IRWXU) && defined(S_IRWXG) && defined(S_IRWXO) && defined(IPC_CREAT)
11072     sem = semget(IPC_PRIVATE, 1, S_IRWXU|S_IRWXG|S_IRWXO|IPC_CREAT);
11073     if (sem > -1) {
11074         struct semid_ds argbuf;
11075         arg.buf = &argbuf;
11076 #       ifdef IPC_STAT
11077         st = semctl(sem, 0, IPC_STAT, arg);
11078         if (st == 0)
11079             printf("semun\n");
11080         else
11081 #       endif /* IPC_STAT */
11082             printf("semctl IPC_STAT failed: errno = %d\n", errno);
11083 #       ifdef IPC_RMID
11084         if (semctl(sem, 0, IPC_RMID, arg) != 0)
11085 #       endif /* IPC_RMID */
11086             printf("semctl IPC_RMID failed: errno = %d\n", errno);
11087     } else
11088 #endif /* IPC_PRIVATE && ... */
11089         printf("semget failed: errno = %d\n", errno);
11090   return 0;
11091 }
11092 END
11093     val="$undef"
11094     set try
11095     if eval $compile; then
11096         xxx=`./try`
11097         case "$xxx" in
11098         semun) val="$define" ;;
11099         esac
11100     fi
11101     $rm -f try try.c
11102     set d_semctl_semun
11103     eval $setvar
11104     case "$d_semctl_semun" in
11105     $define)
11106         echo "You can use union semun for semctl IPC_STAT." >&4
11107         also='also'
11108         ;;
11109     *)  echo "You cannot use union semun for semctl IPC_STAT." >&4
11110         also=''
11111         ;;
11112     esac
11113
11114     : see whether semctl IPC_STAT can use struct semid_ds pointer
11115     $cat > try.c <<'END'
11116 #include <sys/types.h>
11117 #include <sys/ipc.h>
11118 #include <sys/sem.h>
11119 #include <sys/stat.h>
11120 #include "try.h"
11121 #include <stdio.h>
11122 #include <errno.h>
11123 #ifndef errno
11124 extern int errno;
11125 #endif
11126 int main() {
11127     struct semid_ds arg;
11128     int sem, st;
11129
11130 #if defined(IPC_PRIVATE) && defined(S_IRWXU) && defined(S_IRWXG) &&  defined(S_IRWXO) && defined(IPC_CREAT)
11131     sem = semget(IPC_PRIVATE, 1, S_IRWXU|S_IRWXG|S_IRWXO|IPC_CREAT);
11132     if (sem > -1) {
11133 #       ifdef IPC_STAT
11134         st = semctl(sem, 0, IPC_STAT, &arg);
11135         if (st == 0)
11136             printf("semid_ds\n");
11137         else
11138 #       endif /* IPC_STAT */
11139             printf("semctl IPC_STAT failed: errno = %d\n", errno);
11140 #       ifdef IPC_RMID
11141         if (semctl(sem, 0, IPC_RMID, &arg) != 0)
11142 #       endif /* IPC_RMID */
11143             printf("semctl IPC_RMID failed: errno = %d\n", errno);
11144     } else
11145 #endif /* IPC_PRIVATE && ... */
11146         printf("semget failed: errno = %d\n", errno);
11147
11148     return 0;
11149 }
11150 END
11151     val="$undef"
11152     set try
11153     if eval $compile; then
11154         xxx=`./try`
11155         case "$xxx" in
11156         semid_ds) val="$define" ;;
11157         esac
11158     fi
11159     $rm -f try try.c
11160     set d_semctl_semid_ds
11161     eval $setvar
11162     case "$d_semctl_semid_ds" in
11163     $define)
11164         echo "You can $also use struct semid_ds* for semctl IPC_STAT." >&4
11165         ;;
11166     *)  echo "You cannot use struct semid_ds* for semctl IPC_STAT." >&4
11167         ;;
11168     esac
11169     $rm -f try.h
11170     ;;
11171 *)  val="$undef"
11172
11173     # We do not have the full sem*(2) library, so assume we can not
11174     # use either.
11175
11176     set d_semctl_semun
11177     eval $setvar
11178
11179     set d_semctl_semid_ds
11180     eval $setvar
11181     ;;
11182 esac
11183
11184 : see if setegid exists
11185 set setegid d_setegid
11186 eval $inlibc
11187
11188 : see if seteuid exists
11189 set seteuid d_seteuid
11190 eval $inlibc
11191
11192 : see if setgrent exists
11193 set setgrent d_setgrent
11194 eval $inlibc
11195
11196 : see if sethostent exists
11197 set sethostent d_sethent
11198 eval $inlibc
11199
11200 : see if setlinebuf exists
11201 set setlinebuf d_setlinebuf
11202 eval $inlibc
11203
11204 : see if setlocale exists
11205 set setlocale d_setlocale
11206 eval $inlibc
11207
11208 : see if setnetent exists
11209 set setnetent d_setnent
11210 eval $inlibc
11211
11212 : see if setprotoent exists
11213 set setprotoent d_setpent
11214 eval $inlibc
11215
11216 : see if setpgid exists
11217 set setpgid d_setpgid
11218 eval $inlibc
11219
11220 : see if setpgrp2 exists
11221 set setpgrp2 d_setpgrp2
11222 eval $inlibc
11223
11224 : see if setpriority exists
11225 set setpriority d_setprior
11226 eval $inlibc
11227
11228 : see if setproctitle exists
11229 set setproctitle d_setproctitle
11230 eval $inlibc
11231
11232 : see if setpwent exists
11233 set setpwent d_setpwent
11234 eval $inlibc
11235
11236 : see if setregid exists
11237 set setregid d_setregid
11238 eval $inlibc
11239 set setresgid d_setresgid
11240 eval $inlibc
11241
11242 : see if setreuid exists
11243 set setreuid d_setreuid
11244 eval $inlibc
11245 set setresuid d_setresuid
11246 eval $inlibc
11247
11248 : see if setrgid exists
11249 set setrgid d_setrgid
11250 eval $inlibc
11251
11252 : see if setruid exists
11253 set setruid d_setruid
11254 eval $inlibc
11255
11256 : see if setservent exists
11257 set setservent d_setsent
11258 eval $inlibc
11259
11260 : see if setsid exists
11261 set setsid d_setsid
11262 eval $inlibc
11263
11264 : see if setvbuf exists
11265 set setvbuf d_setvbuf
11266 eval $inlibc
11267
11268 : see if sfio.h is available
11269 set sfio.h i_sfio
11270 eval $inhdr
11271
11272
11273 : see if sfio library is available
11274 case "$i_sfio" in
11275 $define)
11276         val=''
11277         set sfreserve val
11278         eval $inlibc
11279         ;;
11280 *)
11281         val="$undef"
11282         ;;
11283 esac
11284 : Ok, but do we want to use it.
11285 case "$val" in
11286 $define)
11287         case "$usesfio" in
11288         true|$define|[yY]*) dflt='y';;
11289         *) dflt='n';;
11290         esac
11291         echo "$package can use the sfio library, but it is experimental."
11292         case "$useperlio" in
11293         "$undef")
11294             echo "For sfio also the PerlIO abstraction layer is needed."
11295             echo "Earlier you said you wouldn't want that."
11296             ;;
11297         esac
11298         rp="You seem to have sfio available, do you want to try using it?"
11299         . ./myread
11300         case "$ans" in
11301         y|Y)    echo "Ok, turning on both sfio and PerlIO, then."
11302                 useperlio="$define"
11303                 val="$define"
11304                 ;;
11305         *)      echo "Ok, avoiding sfio this time.  I'll use stdio instead."
11306                 val="$undef"
11307                 : Remove sfio from list of libraries to use
11308                 set `echo X $libs | $sed -e 's/-lsfio / /' -e 's/-lsfio$//'`
11309                 shift
11310                 libs="$*"
11311                 echo "libs = $libs" >&4
11312                 ;;
11313         esac
11314         ;;
11315 *)      case "$usesfio" in
11316         true|$define|[yY]*)
11317                 echo "Sorry, cannot find sfio on this machine." >&4
11318                 echo "Ignoring your setting of usesfio=$usesfio." >&4
11319                 val="$undef"
11320                 ;;
11321         esac
11322         ;;
11323 esac
11324 set d_sfio
11325 eval $setvar
11326 case "$d_sfio" in
11327 $define) usesfio='true';;
11328 *) usesfio='false';;
11329 esac
11330
11331 : see if shmctl exists
11332 set shmctl d_shmctl
11333 eval $inlibc
11334
11335 : see if shmget exists
11336 set shmget d_shmget
11337 eval $inlibc
11338
11339 : see if shmat exists
11340 set shmat d_shmat
11341 eval $inlibc
11342 : see what shmat returns
11343 case "$d_shmat" in
11344 "$define")
11345         $cat >shmat.c <<'END'
11346 #include <sys/shm.h>
11347 void *shmat();
11348 END
11349         if $cc $ccflags -c shmat.c >/dev/null 2>&1; then
11350                 shmattype='void *'
11351         else
11352                 shmattype='char *'
11353         fi
11354         echo "and it returns ($shmattype)." >&4
11355         : see if a prototype for shmat is available
11356         xxx=`./findhdr sys/shm.h`
11357         $cppstdin $cppflags $cppminus < $xxx > shmat.c 2>/dev/null
11358         if $contains 'shmat.*(' shmat.c >/dev/null 2>&1; then
11359                 val="$define"
11360         else
11361                 val="$undef"
11362         fi
11363         $rm -f shmat.[co]
11364         ;;
11365 *)
11366         val="$undef"
11367         ;;
11368 esac
11369 set d_shmatprototype
11370 eval $setvar
11371
11372 : see if shmdt exists
11373 set shmdt d_shmdt
11374 eval $inlibc
11375
11376 : see how much of the 'shm*(2)' library is present.
11377 h_shm=true
11378 echo " "
11379 case "$d_shmctl$d_shmget$d_shmat$d_shmdt" in
11380 *"$undef"*) h_shm=false;;
11381 esac
11382 case "$osname" in
11383 freebsd)
11384     case "`ipcs 2>&1`" in
11385     "SVID shared memory"*"not configured"*)
11386         echo "Your $osname does not have the shm*(2) configured." >&4
11387         h_shm=false
11388         val="$undef"
11389         set shmctl d_shmctl
11390         evat $setvar
11391         set shmget d_shmget
11392         evat $setvar
11393         set shmat d_shmat
11394         evat $setvar
11395         set shmdt d_shmdt
11396         evat $setvar
11397         ;;
11398     esac
11399     ;;
11400 esac
11401 : we could also check for sys/ipc.h ...
11402 if $h_shm && $test `./findhdr sys/shm.h`; then
11403         echo "You have the full shm*(2) library." >&4
11404         val="$define"
11405 else
11406         echo "You don't have the full shm*(2) library." >&4
11407         val="$undef"
11408 fi
11409 set d_shm
11410 eval $setvar
11411
11412 echo " "
11413 : see if we have sigaction
11414 if set sigaction val -f d_sigaction; eval $csym; $val; then
11415         echo 'sigaction() found.' >&4
11416         $cat > try.c <<'EOP'
11417 #include <stdio.h>
11418 #include <sys/types.h>
11419 #include <signal.h>
11420 int main()
11421 {
11422     struct sigaction act, oact;
11423     act.sa_flags = 0;
11424     oact.sa_handler = 0;
11425     /* so that act and oact are used */
11426     exit(act.sa_flags == 0 &&  oact.sa_handler == 0);
11427 }
11428 EOP
11429         set try
11430         if eval $compile_ok; then
11431                 val="$define"
11432         else
11433                 echo "But you don't seem to have a useable struct sigaction." >&4
11434                 val="$undef"
11435         fi
11436 else
11437         echo 'sigaction NOT found.' >&4
11438         val="$undef"
11439 fi
11440 set d_sigaction; eval $setvar
11441 $rm -f try try$_o try.c
11442
11443 : see if sigsetjmp exists
11444 echo " "
11445 case "$d_sigsetjmp" in
11446 '')
11447         $cat >try.c <<'EOP'
11448 #include <setjmp.h>
11449 sigjmp_buf env;
11450 int set = 1;
11451 int main()
11452 {
11453         if (sigsetjmp(env,1))
11454                 exit(set);
11455         set = 0;
11456         siglongjmp(env, 1);
11457         exit(1);
11458 }
11459 EOP
11460         set try
11461         if eval $compile; then
11462                 if ./try >/dev/null 2>&1; then
11463                         echo "POSIX sigsetjmp found." >&4
11464                         val="$define"
11465                 else
11466                         $cat >&4 <<EOM
11467 Uh-Oh! You have POSIX sigsetjmp and siglongjmp, but they do not work properly!!
11468 I'll ignore them.
11469 EOM
11470                         val="$undef"
11471                 fi
11472         else
11473                 echo "sigsetjmp not found." >&4
11474                 val="$undef"
11475         fi
11476         ;;
11477 *) val="$d_sigsetjmp"
11478         case "$d_sigsetjmp" in
11479         $define) echo "POSIX sigsetjmp found." >&4;;
11480         $undef) echo "sigsetjmp not found." >&4;;
11481         esac
11482         ;;
11483 esac
11484 set d_sigsetjmp
11485 eval $setvar
11486 $rm -f try.c try
11487
11488 : see if socks5_init exists
11489 set socks5_init d_socks5_init
11490 eval $inlibc
11491
11492 : see if sys/stat.h is available
11493 set sys/stat.h i_sysstat
11494 eval $inhdr
11495
11496
11497 : see if stat knows about block sizes
11498 echo " "
11499 echo "Checking to see if your struct stat has st_blocks field..." >&4
11500 set d_statblks stat st_blocks $i_sysstat sys/stat.h
11501 eval $hasfield
11502
11503
11504 : see if this is a sys/vfs.h system
11505 set sys/vfs.h i_sysvfs
11506 eval $inhdr
11507
11508
11509 : see if this is a sys/statfs.h system
11510 set sys/statfs.h i_sysstatfs
11511 eval $inhdr
11512
11513
11514 echo " "
11515 echo "Checking to see if your system supports struct statfs..." >&4
11516 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
11517 eval $hasstruct
11518 case "$d_statfs_s" in
11519 "$define")      echo "Yes, it does."   ;;
11520 *)              echo "No, it doesn't." ;;
11521 esac
11522
11523
11524
11525 : see if struct statfs knows about f_flags
11526 case "$d_statfs_s" in
11527 define) 
11528         echo " "
11529         echo "Checking to see if your struct statfs has f_flags field..." >&4
11530         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
11531         eval $hasfield
11532         ;;
11533 *)      val="$undef"
11534         set d_statfs_f_flags
11535         eval $setvar
11536         ;;
11537 esac
11538 case "$d_statfs_f_flags" in
11539 "$define")      echo "Yes, it does."   ;;
11540 *)              echo "No, it doesn't." ;;
11541 esac
11542
11543 : see if _ptr and _cnt from stdio act std
11544 echo " "
11545 if $contains '_IO_fpos_t' `./findhdr stdio.h` `./findhdr libio.h` >/dev/null 2>&1 ; then
11546         echo "(Looks like you have stdio.h from Linux.)"
11547         case "$stdio_ptr" in
11548         '') stdio_ptr='((fp)->_IO_read_ptr)'
11549                 ptr_lval=$define
11550                 ;;
11551         *)      ptr_lval=$d_stdio_ptr_lval;;
11552         esac
11553         case "$stdio_cnt" in
11554         '') stdio_cnt='((fp)->_IO_read_end - (fp)->_IO_read_ptr)'
11555                 cnt_lval=$undef
11556                 ;;
11557         *)      cnt_lval=$d_stdio_cnt_lval;;
11558         esac
11559         case "$stdio_base" in
11560         '') stdio_base='((fp)->_IO_read_base)';;
11561         esac
11562         case "$stdio_bufsiz" in
11563         '') stdio_bufsiz='((fp)->_IO_read_end - (fp)->_IO_read_base)';;
11564         esac
11565 else
11566         case "$stdio_ptr" in
11567         '') stdio_ptr='((fp)->_ptr)'
11568                 ptr_lval=$define
11569                 ;;
11570         *)      ptr_lval=$d_stdio_ptr_lval;;
11571         esac
11572         case "$stdio_cnt" in
11573         '') stdio_cnt='((fp)->_cnt)'
11574                 cnt_lval=$define
11575                 ;;
11576         *)      cnt_lval=$d_stdio_cnt_lval;;
11577         esac
11578         case "$stdio_base" in
11579         '') stdio_base='((fp)->_base)';;
11580         esac
11581         case "$stdio_bufsiz" in
11582         '') stdio_bufsiz='((fp)->_cnt + (fp)->_ptr - (fp)->_base)';;
11583         esac
11584 fi
11585 : test whether _ptr and _cnt really work
11586 echo "Checking how std your stdio is..." >&4
11587 $cat >try.c <<EOP
11588 #include <stdio.h>
11589 #define FILE_ptr(fp)    $stdio_ptr
11590 #define FILE_cnt(fp)    $stdio_cnt
11591 int main() {
11592         FILE *fp = fopen("try.c", "r");
11593         char c = getc(fp);
11594         if (
11595                 18 <= FILE_cnt(fp) &&
11596                 strncmp(FILE_ptr(fp), "include <stdio.h>\n", 18) == 0
11597         )
11598                 exit(0);
11599         exit(1);
11600 }
11601 EOP
11602 val="$undef"
11603 set try
11604 if eval $compile; then
11605         if ./try; then
11606                 echo "Your stdio acts pretty std."
11607                 val="$define"
11608         else
11609                 echo "Your stdio isn't very std."
11610         fi
11611 else
11612         echo "Your stdio doesn't appear very std."
11613 fi
11614 $rm -f try.c try
11615 set d_stdstdio
11616 eval $setvar
11617
11618 : Can _ptr be used as an lvalue?
11619 case "$d_stdstdio$ptr_lval" in
11620 $define$define) val=$define ;;
11621 *) val=$undef ;;
11622 esac
11623 set d_stdio_ptr_lval
11624 eval $setvar
11625
11626 : Can _cnt be used as an lvalue?
11627 case "$d_stdstdio$cnt_lval" in
11628 $define$define) val=$define ;;
11629 *) val=$undef ;;
11630 esac
11631 set d_stdio_cnt_lval
11632 eval $setvar
11633
11634 : see if _base is also standard
11635 val="$undef"
11636 case "$d_stdstdio" in
11637 $define)
11638         $cat >try.c <<EOP
11639 #include <stdio.h>
11640 #define FILE_base(fp)   $stdio_base
11641 #define FILE_bufsiz(fp) $stdio_bufsiz
11642 int main() {
11643         FILE *fp = fopen("try.c", "r");
11644         char c = getc(fp);
11645         if (
11646                 19 <= FILE_bufsiz(fp) &&
11647                 strncmp(FILE_base(fp), "#include <stdio.h>\n", 19) == 0
11648         )
11649                 exit(0);
11650         exit(1);
11651 }
11652 EOP
11653         set try
11654         if eval $compile; then
11655                 if ./try; then
11656                         echo "And its _base field acts std."
11657                         val="$define"
11658                 else
11659                         echo "But its _base field isn't std."
11660                 fi
11661         else
11662                 echo "However, it seems to be lacking the _base field."
11663         fi
11664         $rm -f try.c try
11665         ;;
11666 esac
11667 set d_stdiobase
11668 eval $setvar
11669
11670 $cat >&4 <<EOM
11671 Checking how to access stdio streams by file descriptor number...
11672 EOM
11673 case "$stdio_stream_array" in
11674 '')     $cat >try.c <<EOCP
11675 #include <stdio.h>
11676 int main() {
11677   if (&STDIO_STREAM_ARRAY[fileno(stdin)] == stdin)
11678     printf("yes\n");
11679 }
11680 EOCP
11681         for s in _iob __iob __sF
11682         do
11683                 set try -DSTDIO_STREAM_ARRAY=$s
11684                 if eval $compile; then
11685                         case "`./try$exe_ext`" in
11686                         yes)    stdio_stream_array=$s; break ;;
11687                         esac
11688                 fi
11689         done
11690         $rm -f try.* try$exe_ext
11691 esac
11692 case "$stdio_stream_array" in
11693 '')     $cat >&4 <<EOM
11694 I can't figure out how to access stdio streams by file descriptor number.
11695 EOM
11696         d_stdio_stream_array="$undef"
11697         ;;
11698 *)      $cat >&4 <<EOM
11699 You can access stdio streams by file descriptor number by the $stdio_stream_array array.
11700 EOM
11701         d_stdio_stream_array="$define"
11702         ;;
11703 esac
11704
11705 : see if strcoll exists
11706 set strcoll d_strcoll
11707 eval $inlibc
11708
11709 : check for structure copying
11710 echo " "
11711 echo "Checking to see if your C compiler can copy structs..." >&4
11712 $cat >try.c <<'EOCP'
11713 int main()
11714 {
11715         struct blurfl {
11716                 int dyick;
11717         } foo, bar;
11718
11719         foo = bar;
11720 }
11721 EOCP
11722 if $cc -c try.c >/dev/null 2>&1 ; then
11723         val="$define"
11724         echo "Yup, it can."
11725 else
11726         val="$undef"
11727         echo "Nope, it can't."
11728 fi
11729 set d_strctcpy
11730 eval $setvar
11731 $rm -f try.*
11732
11733 : see if strerror and/or sys_errlist[] exist
11734 echo " "
11735 if test "X$d_strerror" = X -o "X$d_syserrlst" = X; then
11736     if set strerror val -f d_strerror; eval $csym; $val; then
11737                 echo 'strerror() found.' >&4
11738                 d_strerror="$define"
11739                 d_strerrm='strerror(e)'
11740                 if set sys_errlist val -a d_syserrlst; eval $csym; $val; then   
11741                         echo "(You also have sys_errlist[], so we could roll our own strerror.)" 
11742                         d_syserrlst="$define"
11743                 else
11744                         echo "(Since you don't have sys_errlist[], sterror() is welcome.)"
11745                         d_syserrlst="$undef"
11746                 fi
11747     elif xxx=`./findhdr string.h`; test "$xxx" || xxx=`./findhdr strings.h`; \
11748                         $contains '#[   ]*define.*strerror' "$xxx" >/dev/null 2>&1; then
11749                 echo 'strerror() found in string header.' >&4
11750                 d_strerror="$define"
11751                 d_strerrm='strerror(e)'
11752                 if set sys_errlist val -a d_syserrlst; eval $csym; $val; then   
11753                         echo "(Most probably, strerror() uses sys_errlist[] for descriptions.)"
11754                                 d_syserrlst="$define"
11755                 else
11756                         echo "(You don't appear to have any sys_errlist[], how can this be?)"
11757                         d_syserrlst="$undef"
11758                 fi
11759     elif set sys_errlist val -a d_syserrlst; eval $csym; $val; then
11760                 echo "strerror() not found, but you have sys_errlist[] so we'll use that." >&4
11761                 d_strerror="$undef"
11762                 d_syserrlst="$define"
11763                 d_strerrm='((e)<0||(e)>=sys_nerr?"unknown":sys_errlist[e])'
11764     else
11765                 echo 'strerror() and sys_errlist[] NOT found.' >&4
11766                 d_strerror="$undef"
11767                 d_syserrlst="$undef"
11768                 d_strerrm='"unknown"'
11769     fi
11770 fi
11771
11772 : see if strtod exists
11773 set strtod d_strtod
11774 eval $inlibc
11775
11776 : see if strtol exists
11777 set strtol d_strtol
11778 eval $inlibc
11779
11780 : see if strtold exists
11781 set strtold d_strtold
11782 eval $inlibc
11783
11784 : see if strtoll exists
11785 set strtoll d_strtoll
11786 eval $inlibc
11787
11788 case "$d_longlong-$d_strtoll" in
11789 "$define-$define")
11790         $cat <<EOM
11791 Checking whether your strtoll() works okay...
11792 EOM
11793         $cat >try.c <<'EOCP'
11794 #include <errno.h>
11795 #ifdef __hpux
11796 #define strtoll __strtoll
11797 #endif
11798 #include <stdio.h>
11799 extern long long int strtoll(char *s, char **, int); 
11800 static int bad = 0;
11801 int check(char *s, long long ell, int een) {
11802         long long gll;
11803         errno = 0;
11804         gll = strtoll(s, 0, 10);
11805         if (!((gll == ell) && (errno == een)))
11806                 bad++;
11807 }
11808 int main() {
11809         check(" 1",                                      1LL, 0);
11810         check(" 0",                                      0LL, 0);
11811         check("-1",                                     -1LL, 0);
11812         check("-9223372036854775808", -9223372036854775808LL, 0);
11813         check("-9223372036854775808", -9223372036854775808LL, 0);
11814         check(" 9223372036854775807",  9223372036854775807LL, 0);
11815         check("-9223372036854775808", -9223372036854775808LL, 0);
11816         check(" 9223372036854775808",  9223372036854775807LL, ERANGE);
11817         check("-9223372036854775809", -9223372036854775808LL, ERANGE);
11818         if (!bad)
11819                 printf("ok\n");
11820 }
11821 EOCP
11822         set try
11823         if eval $compile; then
11824                 case "`./try`" in
11825                 ok) echo "Your strtoll() seems to be working okay." ;;
11826                 *) cat <<EOM >&4
11827 Your strtoll() doesn't seem to be working okay.
11828 EOM
11829                    d_strtoll="$undef"
11830                    ;;
11831                 esac
11832         fi
11833         ;;
11834 esac
11835
11836 : see if strtoul exists
11837 set strtoul d_strtoul
11838 eval $inlibc
11839
11840 : see if strtoull exists
11841 set strtoull d_strtoull
11842 eval $inlibc
11843
11844 case "$d_longlong-$d_strtoull" in
11845 "$define-$define")
11846         $cat <<EOM
11847 Checking whether your strtoull() works okay...
11848 EOM
11849         $cat >try.c <<'EOCP'
11850 #include <errno.h>
11851 #ifdef __hpux
11852 #define strtoull __strtoull
11853 #endif
11854 #include <stdio.h>
11855 extern unsigned long long int strtoull(char *s, char **, int); 
11856 static int bad = 0;
11857 int check(char *s, long long eull, int een) {
11858         long long gull;
11859         errno = 0;
11860         gull = strtoull(s, 0, 10);
11861         if (!((gull == eull) && (errno == een)))
11862                 bad++;
11863 }
11864 int main() {
11865         check(" 1",                                       1LL, 0);
11866         check(" 0",                                       0LL, 0);
11867         check("18446744073709551615", 18446744073709551615ULL, 0);
11868         check("18446744073709551616", 18446744073709551615ULL, ERANGE);
11869         if (!bad)
11870                 printf("ok\n");
11871 }
11872 EOCP
11873         set try
11874         if eval $compile; then
11875                 case "`./try`" in
11876                 ok) echo "Your strtoull() seems to be working okay." ;;
11877                 *) cat <<EOM >&4
11878 Your strtoull() doesn't seem to be working okay.
11879 EOM
11880                    d_strtoull="$undef"
11881                    ;;
11882                 esac
11883         fi
11884         ;;
11885 esac
11886
11887 : see if strtouq exists
11888 set strtouq d_strtouq
11889 eval $inlibc
11890
11891 : see if strxfrm exists
11892 set strxfrm d_strxfrm
11893 eval $inlibc
11894
11895 : see if symlink exists
11896 set symlink d_symlink
11897 eval $inlibc
11898
11899 : see if syscall exists
11900 set syscall d_syscall
11901 eval $inlibc
11902
11903 : see if sysconf exists
11904 set sysconf d_sysconf
11905 eval $inlibc
11906
11907 : see if system exists
11908 set system d_system
11909 eval $inlibc
11910
11911 : see if tcgetpgrp exists
11912 set tcgetpgrp d_tcgetpgrp
11913 eval $inlibc
11914
11915 : see if tcsetpgrp exists
11916 set tcsetpgrp d_tcsetpgrp
11917 eval $inlibc
11918
11919 : see if prototype for telldir is available
11920 echo " "
11921 set d_telldirproto telldir $i_systypes sys/types.h $i_dirent dirent.h
11922 eval $hasproto
11923
11924 : see if this is a sys/times.h system
11925 set sys/times.h i_systimes
11926 eval $inhdr
11927
11928 : see if times exists
11929 echo " "
11930 if set times val -f d_times; eval $csym; $val; then
11931         echo 'times() found.' >&4
11932         d_times="$define"
11933         inc=''
11934         case "$i_systimes" in
11935         "$define") inc='sys/times.h';;
11936         esac
11937         rp="What is the type returned by times() on this system?"
11938         set clock_t clocktype long stdio.h sys/types.h $inc
11939         eval $typedef_ask
11940 else
11941         echo 'times() NOT found, hope that will do.' >&4
11942         d_times="$undef"
11943         clocktype='int'
11944 fi
11945
11946 : see if truncate exists
11947 set truncate d_truncate
11948 eval $inlibc
11949
11950 : see if tzname[] exists
11951 echo " "
11952 if set tzname val -a d_tzname; eval $csym; $val; then
11953         val="$define"
11954         echo 'tzname[] found.' >&4
11955 else
11956         val="$undef"
11957         echo 'tzname[] NOT found.' >&4
11958 fi
11959 set d_tzname
11960 eval $setvar
11961
11962 : see if umask exists
11963 set umask d_umask
11964 eval $inlibc
11965
11966 : see if ustat exists
11967 set ustat d_ustat
11968 eval $inlibc
11969
11970 : backward compatibility for d_hvfork
11971 if test X$d_hvfork != X; then
11972         d_vfork="$d_hvfork"
11973         d_hvfork=''
11974 fi
11975 : see if there is a vfork
11976 val=''
11977 set vfork val
11978 eval $inlibc
11979
11980 : Ok, but do we want to use it. vfork is reportedly unreliable in 
11981 : perl on Solaris 2.x, and probably elsewhere.
11982 case "$val" in
11983 $define)
11984         echo " "
11985         case "$usevfork" in
11986         false) dflt='n';;
11987         *) dflt='y';;
11988         esac
11989         cat <<'EOM'
11990  
11991 Perl can only use a vfork() that doesn't suffer from strict
11992 restrictions on calling functions or modifying global data in
11993 the child.  For example, glibc-2.1 contains such a vfork()
11994 that is unsuitable.  If your system provides a proper fork()
11995 call, chances are that you do NOT want perl to use vfork().
11996
11997 EOM
11998         rp="Do you still want to use vfork()?"
11999         . ./myread
12000         case "$ans" in
12001         y|Y) ;;
12002         *)
12003                 echo "Ok, we won't use vfork()."
12004                 val="$undef"
12005                 ;;
12006         esac
12007         ;;
12008 esac
12009 set d_vfork
12010 eval $setvar
12011 case "$d_vfork" in
12012 $define) usevfork='true';;
12013 *) usevfork='false';;
12014 esac
12015
12016 : see if this is an sysdir system
12017 set sys/dir.h i_sysdir
12018 eval $inhdr
12019
12020 : see if this is an sysndir system
12021 set sys/ndir.h i_sysndir
12022 eval $inhdr
12023
12024 : see if closedir exists
12025 set closedir d_closedir
12026 eval $inlibc
12027
12028 case "$d_closedir" in
12029 "$define")
12030         echo " "
12031         echo "Checking whether closedir() returns a status..." >&4
12032         cat > closedir.c <<EOM
12033 #$i_dirent I_DIRENT             /**/
12034 #$i_sysdir I_SYS_DIR            /**/
12035 #$i_sysndir I_SYS_NDIR          /**/
12036 #$i_systypes I_SYS_TYPES        /**/
12037
12038 #if defined(I_SYS_TYPES)
12039 #include <sys/types.h>
12040 #endif
12041 #if defined(I_DIRENT)
12042 #include <dirent.h>
12043 #if defined(NeXT) && defined(I_SYS_DIR) /* NeXT needs dirent + sys/dir.h */
12044 #include <sys/dir.h>
12045 #endif
12046 #else
12047 #ifdef I_SYS_NDIR
12048 #include <sys/ndir.h>
12049 #else
12050 #ifdef I_SYS_DIR
12051 #ifdef hp9000s500
12052 #include <ndir.h>       /* may be wrong in the future */
12053 #else
12054 #include <sys/dir.h>
12055 #endif
12056 #endif
12057 #endif
12058 #endif 
12059 int main() { return closedir(opendir(".")); }
12060 EOM
12061         set closedir
12062         if eval $compile_ok; then
12063                 if ./closedir > /dev/null 2>&1 ; then
12064                         echo "Yes, it does."
12065                         val="$undef"
12066                 else
12067                         echo "No, it doesn't."
12068                         val="$define"
12069                 fi
12070         else
12071                 echo "(I can't seem to compile the test program--assuming it doesn't)"
12072                 val="$define"
12073         fi
12074         ;;
12075 *)
12076         val="$undef";
12077         ;;
12078 esac
12079 set d_void_closedir
12080 eval $setvar
12081 $rm -f closedir*
12082 : check for volatile keyword
12083 echo " "
12084 echo 'Checking to see if your C compiler knows about "volatile"...' >&4
12085 $cat >try.c <<'EOCP'
12086 int main()
12087 {
12088         typedef struct _goo_struct goo_struct;
12089         goo_struct * volatile goo = ((goo_struct *)0);
12090         struct _goo_struct {
12091                 long long_int;
12092                 int reg_int;
12093                 char char_var;
12094         };
12095         typedef unsigned short foo_t;
12096         char *volatile foo;
12097         volatile int bar;
12098         volatile foo_t blech;
12099         foo = foo;
12100 }
12101 EOCP
12102 if $cc -c $ccflags try.c >/dev/null 2>&1 ; then
12103         val="$define"
12104         echo "Yup, it does."
12105 else
12106         val="$undef"
12107         echo "Nope, it doesn't."
12108 fi
12109 set d_volatile
12110 eval $setvar
12111 $rm -f try.*
12112
12113 : see if there is a wait4
12114 set wait4 d_wait4
12115 eval $inlibc
12116
12117 : see if waitpid exists
12118 set waitpid d_waitpid
12119 eval $inlibc
12120
12121 : see if wcstombs exists
12122 set wcstombs d_wcstombs
12123 eval $inlibc
12124
12125 : see if wctomb exists
12126 set wctomb d_wctomb
12127 eval $inlibc
12128
12129 : preserve RCS keywords in files with variable substitution, grrr
12130 Date='$Date'
12131 Id='$Id'
12132 Log='$Log'
12133 RCSfile='$RCSfile'
12134 Revision='$Revision'
12135
12136 case "$crosscompile" in
12137 ''|[nN]*) crosscompile="$undef" ;;
12138 esac
12139
12140 case "$osname" in
12141 next|rhapsody|darwin) multiarch="$define" ;;
12142 esac
12143 case "$multiarch" in
12144 ''|[nN]*) multiarch="$undef" ;;
12145 esac
12146
12147 : check for alignment requirements
12148 echo " "
12149 case "$crosscompile$multiarch" in
12150 *$define*)
12151         $cat <<EOM
12152 You seem to be either cross-compiling or doing a multiarchitecture build,
12153 skipping the memory alignment check.
12154
12155 EOM
12156         case "$alignbytes" in
12157         '') alignbytes=8 ;;
12158         esac
12159         ;;
12160 *)
12161         case "$alignbytes" in
12162         '') echo "Checking alignment constraints..." >&4
12163                 if $test "X$uselongdouble" = Xdefine -a "X$d_longdbl" = Xdefine; then
12164                         $cat >try.c <<'EOCP'
12165 typedef long double NV;
12166 EOCP
12167                 else
12168                         $cat >try.c <<'EOCP'
12169 typedef double NV;
12170 EOCP
12171                 fi
12172                 $cat >>try.c <<'EOCP'
12173 #include <stdio.h>
12174 struct foobar {
12175         char foo;
12176         NV bar;
12177 } try_algn;
12178 int main()
12179 {
12180     printf("%d\n", (int)((char *)&try_algn.bar - (char *)&try_algn.foo));
12181     return(0);
12182 }
12183 EOCP
12184                 set try
12185                 if eval $compile_ok; then
12186                         dflt=`./try`
12187                 else
12188                         dflt='8'
12189                         echo "(I can't seem to compile the test program...)"
12190                 fi
12191                 ;;
12192         *) dflt="$alignbytes"
12193                 ;;
12194         esac
12195         rp="Doubles must be aligned on a how-many-byte boundary?"
12196         . ./myread
12197         alignbytes="$ans"
12198         $rm -f try.c try
12199         ;;
12200 esac
12201
12202
12203 : set the base revision
12204 baserev=5.0
12205
12206 : check for ordering of bytes in a long
12207 echo " "
12208 case "$crosscompile$multiarch" in
12209 *$define*)
12210         $cat <<EOM
12211 You seem to be either cross-compiling or doing a multiarchitecture build,
12212 skipping the byteorder check.
12213
12214 EOM
12215         byteorder='0xffff'
12216         ;;
12217 *)
12218         case "$byteorder" in
12219         '')
12220                 $cat <<'EOM'
12221 In the following, larger digits indicate more significance.  A big-endian
12222 machine like a Pyramid or a Motorola 680?0 chip will come out to 4321. A
12223 little-endian machine like a Vax or an Intel 80?86 chip would be 1234. Other
12224 machines may have weird orders like 3412.  A Cray will report 87654321,
12225 an Alpha will report 12345678. If the test program works the default is
12226 probably right.
12227 I'm now running the test program...
12228 EOM
12229                 $cat >try.c <<'EOCP'
12230 #include <stdio.h>
12231 int main()
12232 {
12233         int i;
12234         union {
12235                 unsigned long l;
12236                 char c[sizeof(long)];
12237         } u;
12238
12239         if (sizeof(long) > 4)
12240                 u.l = (0x08070605L << 32) | 0x04030201L;
12241         else
12242                 u.l = 0x04030201L;
12243         for (i = 0; i < sizeof(long); i++)
12244                 printf("%c", u.c[i]+'0');
12245         printf("\n");
12246         exit(0);
12247 }
12248 EOCP
12249                 xxx_prompt=y
12250                 set try
12251                 if eval $compile && ./try > /dev/null; then
12252                         dflt=`./try`
12253                         case "$dflt" in
12254                         [1-4][1-4][1-4][1-4]|12345678|87654321)
12255                                 echo "(The test program ran ok.)"
12256                                 echo "byteorder=$dflt"
12257                                 xxx_prompt=n
12258                         ;;
12259                         ????|????????) echo "(The test program ran ok.)" ;;
12260                         *) echo "(The test program didn't run right for some reason.)" ;;
12261                         esac
12262                 else
12263                         dflt='4321'
12264                         cat <<'EOM'
12265 (I can't seem to compile the test program.  Guessing big-endian...)
12266 EOM
12267                 fi
12268                 case "$xxx_prompt" in
12269                 y)
12270                         rp="What is the order of bytes in a long?"
12271                         . ./myread
12272                         byteorder="$ans"
12273                         ;;
12274                 *)      byteorder=$dflt
12275                         ;;
12276                 esac
12277                 ;;
12278         esac
12279         $rm -f try.c try
12280         ;;
12281 esac
12282
12283
12284 : how do we catenate cpp tokens here?
12285 echo " "
12286 echo "Checking to see how your cpp does stuff like catenate tokens..." >&4
12287 $cat >cpp_stuff.c <<'EOCP'
12288 #define RCAT(a,b)a/**/b
12289 #define ACAT(a,b)a ## b
12290 RCAT(Rei,ser)
12291 ACAT(Cir,cus)
12292 EOCP
12293 $cppstdin $cppflags $cppminus <cpp_stuff.c >cpp_stuff.out 2>&1
12294 if $contains 'Circus' cpp_stuff.out >/dev/null 2>&1; then
12295         echo "Oh!  Smells like ANSI's been here." >&4
12296         echo "We can catify or stringify, separately or together!"
12297         cpp_stuff=42
12298 elif $contains 'Reiser' cpp_stuff.out >/dev/null 2>&1; then
12299         echo "Ah, yes!  The good old days!" >&4
12300         echo "However, in the good old days we don't know how to stringify and"
12301         echo "catify at the same time."
12302         cpp_stuff=1
12303 else
12304         $cat >&4 <<EOM
12305 Hmm, I don't seem to be able to catenate tokens with your cpp.  You're going
12306 to have to edit the values of CAT[2-5] in config.h...
12307 EOM
12308         cpp_stuff="/* Help! How do we handle cpp_stuff? */*/"
12309 fi
12310 $rm -f cpp_stuff.*
12311
12312 : see if this is a db.h system
12313 set db.h i_db
12314 eval $inhdr
12315
12316 case "$i_db" in
12317 $define)
12318         : Check db version.
12319         echo " "
12320         echo "Checking Berkeley DB version ..." >&4
12321         $cat >try.c <<EOCP
12322 #$d_const HASCONST
12323 #ifndef HASCONST
12324 #define const
12325 #endif
12326 #include <sys/types.h>
12327 #include <stdio.h>
12328 #include <db.h>
12329 int main()
12330 {
12331 #ifdef DB_VERSION_MAJOR /* DB version >= 2 */
12332     int Major, Minor, Patch ;
12333     unsigned long Version ;
12334     (void)db_version(&Major, &Minor, &Patch) ;
12335     printf("You have Berkeley DB Version 2 or greater\n");
12336
12337     printf("db.h is from Berkeley DB Version %d.%d.%d\n",
12338                 DB_VERSION_MAJOR, DB_VERSION_MINOR, DB_VERSION_PATCH);
12339     printf("libdb is from Berkeley DB Version %d.%d.%d\n",
12340                 Major, Minor, Patch) ;
12341
12342     /* check that db.h & libdb are compatible */
12343     if (DB_VERSION_MAJOR != Major || DB_VERSION_MINOR != Minor || DB_VERSION_PATCH != Patch) {
12344         printf("db.h and libdb are incompatible\n") ;
12345         exit(3);        
12346     }
12347
12348     printf("db.h and libdb are compatible\n") ;
12349
12350     Version = DB_VERSION_MAJOR * 1000000 + DB_VERSION_MINOR * 1000
12351                 + DB_VERSION_PATCH ;
12352
12353     /* needs to be >= 2.3.4 */
12354     if (Version < 2003004) {
12355     /* if (DB_VERSION_MAJOR == 2 && DB_VERSION_MINOR == 0 && DB_VERSION_PATCH < 5) { */
12356         printf("but Perl needs Berkeley DB 2.3.4 or greater\n") ;
12357         exit(2);        
12358     }
12359
12360     exit(0);
12361 #else
12362 #if defined(_DB_H_) && defined(BTREEMAGIC) && defined(HASHMAGIC)
12363     printf("You have Berkeley DB Version 1\n");
12364     exit(0);    /* DB version < 2: the coast is clear. */
12365 #else
12366     exit(1);    /* <db.h> not Berkeley DB? */
12367 #endif
12368 #endif
12369 }
12370 EOCP
12371         set try
12372         if eval $compile_ok && ./try; then
12373                 echo 'Looks OK.' >&4
12374         else
12375                 echo "I can't use Berkeley DB with your <db.h>.  I'll disable Berkeley DB." >&4
12376                 i_db=$undef
12377                 case " $libs " in
12378                 *"-ldb "*)
12379                         : Remove db from list of libraries to use
12380                         echo "Removing unusable -ldb from library list" >&4
12381                         set `echo X $libs | $sed -e 's/-ldb / /' -e 's/-ldb$//'`
12382                         shift
12383                         libs="$*"
12384                         echo "libs = $libs" >&4
12385                         ;;
12386                 esac
12387         fi
12388         $rm -f try.*
12389         ;;
12390 esac
12391
12392 case "$i_db" in
12393 define)
12394         : Check the return type needed for hash 
12395         echo " "
12396         echo "Checking return type needed for hash for Berkeley DB ..." >&4
12397         $cat >try.c <<EOCP
12398 #$d_const HASCONST
12399 #ifndef HASCONST
12400 #define const
12401 #endif
12402 #include <sys/types.h>
12403 #include <db.h>
12404
12405 #ifndef DB_VERSION_MAJOR
12406 u_int32_t hash_cb (ptr, size)
12407 const void *ptr;
12408 size_t size;
12409 {
12410 }
12411 HASHINFO info;
12412 int main()
12413 {
12414         info.hash = hash_cb;
12415 }
12416 #endif
12417 EOCP
12418         if $cc $ccflags -c try.c >try.out 2>&1 ; then
12419                 if $contains warning try.out >>/dev/null 2>&1 ; then
12420                         db_hashtype='int'
12421                 else
12422                         db_hashtype='u_int32_t'
12423                 fi
12424         else
12425                 : XXX Maybe we should just give up here.
12426                 db_hashtype=u_int32_t
12427                 $cat try.out >&4
12428                 echo "Help:  I can't seem to compile the db test program." >&4
12429                 echo "Something's wrong, but I'll assume you use $db_hashtype." >&4
12430         fi
12431         $rm -f try.*
12432         echo "Your version of Berkeley DB uses $db_hashtype for hash."
12433         ;;
12434 *)      db_hashtype=u_int32_t
12435         ;;
12436 esac
12437 case "$i_db" in
12438 define)
12439         : Check the return type needed for prefix 
12440         echo " "
12441         echo "Checking return type needed for prefix for Berkeley DB ..." >&4
12442         cat >try.c <<EOCP
12443 #$d_const HASCONST
12444 #ifndef HASCONST
12445 #define const
12446 #endif
12447 #include <sys/types.h>
12448 #include <db.h>
12449
12450 #ifndef DB_VERSION_MAJOR
12451 size_t prefix_cb (key1, key2)
12452 const DBT *key1;
12453 const DBT *key2;
12454 {
12455 }
12456 BTREEINFO info;
12457 int main()
12458 {
12459         info.prefix = prefix_cb;
12460 }
12461 #endif
12462 EOCP
12463         if $cc $ccflags -c try.c  >try.out 2>&1 ; then
12464                 if $contains warning try.out >>/dev/null 2>&1 ; then
12465                         db_prefixtype='int'
12466                 else
12467                         db_prefixtype='size_t'
12468                 fi
12469         else
12470                 db_prefixtype='size_t'
12471                 : XXX Maybe we should just give up here.
12472                 $cat try.out >&4
12473                 echo "Help:  I can't seem to compile the db test program." >&4
12474                 echo "Something's wrong, but I'll assume you use $db_prefixtype." >&4
12475         fi
12476         $rm -f try.*
12477         echo "Your version of Berkeley DB uses $db_prefixtype for prefix."
12478         ;;
12479 *)      db_prefixtype='size_t'
12480         ;;
12481 esac
12482
12483 : check for void type
12484 echo " "
12485 echo "Checking to see how well your C compiler groks the void type..." >&4
12486 case "$voidflags" in
12487 '')
12488         $cat >try.c <<'EOCP'
12489 #if TRY & 1
12490 void sub() {
12491 #else
12492 sub() {
12493 #endif
12494         extern void moo();      /* function returning void */
12495         void (*goo)();          /* ptr to func returning void */
12496 #if TRY & 8
12497         void *hue;              /* generic ptr */
12498 #endif
12499 #if TRY & 2
12500         void (*foo[10])();
12501 #endif
12502
12503 #if TRY & 4
12504         if(goo == moo) {
12505                 exit(0);
12506         }
12507 #endif
12508         exit(0);
12509 }
12510 int main() { sub(); }
12511 EOCP
12512         if $cc $ccflags -c -DTRY=$defvoidused try.c >.out 2>&1 ; then
12513                 voidflags=$defvoidused
12514         echo "Good.  It appears to support void to the level $package wants.">&4
12515                 if $contains warning .out >/dev/null 2>&1; then
12516                         echo "However, you might get some warnings that look like this:"
12517                         $cat .out
12518                 fi
12519         else
12520 echo "Hmm, your compiler has some difficulty with void. Checking further..." >&4
12521                 if $cc $ccflags -c -DTRY=1 try.c >/dev/null 2>&1; then
12522                         echo "It supports 1..."
12523                         if $cc $ccflags -c -DTRY=3 try.c >/dev/null 2>&1; then
12524                                 echo "It also supports 2..."
12525                                 if $cc $ccflags -c -DTRY=7 try.c >/dev/null 2>&1; then
12526                                         voidflags=7
12527                                         echo "And it supports 4 but not 8 definitely."
12528                                 else
12529                                         echo "It doesn't support 4..."
12530                                         if $cc $ccflags -c -DTRY=11 try.c >/dev/null 2>&1; then
12531                                                 voidflags=11
12532                                                 echo "But it supports 8."
12533                                         else
12534                                                 voidflags=3
12535                                                 echo "Neither does it support 8."
12536                                         fi
12537                                 fi
12538                         else
12539                                 echo "It does not support 2..."
12540                                 if $cc $ccflags -c -DTRY=13 try.c >/dev/null 2>&1; then
12541                                         voidflags=13
12542                                         echo "But it supports 4 and 8."
12543                                 else
12544                                         if $cc $ccflags -c -DTRY=5 try.c >/dev/null 2>&1; then
12545                                                 voidflags=5
12546                                                 echo "And it supports 4 but has not heard about 8."
12547                                         else
12548                                                 echo "However it supports 8 but not 4."
12549                                         fi
12550                                 fi
12551                         fi
12552                 else
12553                         echo "There is no support at all for void."
12554                         voidflags=0
12555                 fi
12556         fi
12557 esac
12558 case "$voidflags" in
12559 "$defvoidused") ;;
12560 *)      $cat >&4 <<'EOM'
12561   Support flag bits are:
12562     1: basic void declarations.
12563     2: arrays of pointers to functions returning void.
12564     4: operations between pointers to and addresses of void functions.
12565     8: generic void pointers.
12566 EOM
12567         dflt="$voidflags";
12568         rp="Your void support flags add up to what?"
12569         . ./myread
12570         voidflags="$ans"
12571         ;;
12572 esac
12573 $rm -f try.* .out
12574
12575
12576 : How can we generate normalized random numbers ?
12577 echo " "
12578 echo "Looking for a random number function..." >&4
12579 case "$randfunc" in
12580 '')
12581         if set drand48 val -f; eval $csym; $val; then
12582                 dflt="drand48"
12583                 echo "Good, found drand48()." >&4
12584         elif set random val -f; eval $csym; $val; then
12585                 dflt="random"
12586                 echo "OK, found random()." >&4
12587         else
12588                 dflt="rand"
12589                 echo "Yick, looks like I have to use rand()." >&4
12590         fi
12591         echo " "
12592         ;;
12593 *)
12594         dflt="$randfunc"
12595         ;;
12596 esac
12597 cont=true
12598
12599 case "$ccflags" in
12600 *-Dmy_rand=*|*-Dmy_srand=*)
12601         echo "Removing obsolete -Dmy_rand, -Dmy_srand, and -Drandbits from ccflags." >&4
12602         ccflags="`echo $ccflags | sed -e 's/-Dmy_rand=random/ /'`"
12603         ccflags="`echo $ccflags | sed -e 's/-Dmy_srand=srandom/ /'`"
12604         ccflags="`echo $ccflags | sed -e 's/-Drandbits=[0-9][0-9]*/ /'`"
12605         ;;
12606 esac
12607
12608 while $test "$cont"; do
12609         rp="Use which function to generate random numbers?"
12610         . ./myread
12611         if $test "$ans" = "$dflt"; then
12612                 : null
12613         else
12614                 randbits=''
12615         fi
12616         randfunc="$ans"
12617         if set $ans val -f; eval $csym; $val; then
12618                 cont=''
12619         else
12620                 dflt=y
12621                 rp="I cannot find function $ans. Use that name anyway?"
12622                 . ./myread
12623                 dflt=rand
12624                 case "$ans" in
12625                         [yY]*) cont='';;
12626                 esac
12627         fi
12628         case "$cont" in
12629         '')
12630                 case "$randfunc" in
12631                 drand48)
12632                         drand01="drand48()"
12633                         seedfunc="srand48"
12634                         randbits=48
12635                         randseedtype=long
12636                         ;;
12637                 rand|random)
12638                         case "$randbits" in
12639                         '')
12640 echo "Checking to see how many bits your $randfunc() function produces..." >&4
12641                                 $cat >try.c <<EOCP
12642 #$i_unistd I_UNISTD
12643 #$i_stdlib I_STDLIB
12644 #include <stdio.h>
12645 #ifdef I_UNISTD
12646 #  include <unistd.h>
12647 #endif
12648 #ifdef I_STDLIB
12649 #  include <stdlib.h>
12650 #endif
12651 int main()
12652 {
12653         register int i;
12654         register unsigned long tmp;
12655         register unsigned long max = 0L;
12656
12657         for (i = 1000; i; i--) {
12658                 tmp = (unsigned long) $randfunc();
12659                 if (tmp > max) max = tmp;
12660         }
12661         for (i = 0; max; i++)
12662                 max /= 2;
12663         printf("%d\n",i);
12664 }
12665 EOCP
12666                                 set try
12667                                 if eval $compile_ok; then
12668                                         dflt=`try`
12669                                 else
12670                                         dflt='?'
12671                                         echo "(I can't seem to compile the test program...)"
12672                                 fi
12673                                 ;;
12674                         *)
12675                                 dflt="$randbits"
12676                                 ;;
12677                         esac
12678                         rp="How many bits does your $randfunc() function produce?"
12679                         . ./myread
12680                         randbits="$ans"
12681                         $rm -f try.c try
12682                         drand01="($randfunc() / (double) ((unsigned long)1 << $randbits))"
12683                         seedfunc="s$randfunc"
12684                         randseedtype=unsigned
12685                         ;;
12686                 *)
12687                         dflt="31"
12688                         rp="How many bits does your $randfunc() function produce?"
12689                         . ./myread
12690                         randbits="$ans"
12691                         seedfunc="s$randfunc"
12692                         drand01="($randfunc() / (double) ((unsigned long)1 << $randbits))"
12693                         if set $seedfunc val -f; eval $csym; $val; then
12694                                 echo "(Using $seedfunc() to seed random generator)"
12695                         else
12696                                 echo "(Warning: no $seedfunc() to seed random generator)"
12697                                 seedfunc=rand
12698                         fi
12699                         randseedtype=unsigned
12700                         ;;
12701                 esac
12702                 ;;
12703         esac
12704 done
12705
12706 echo " "
12707 echo "Determining whether or not we are on an EBCDIC system..." >&4
12708 $cat >tebcdic.c <<'EOM'
12709 int main()
12710 {
12711   if ('M'==0xd4) return 0;
12712   return 1;
12713 }
12714 EOM
12715
12716 val=$undef
12717 set tebcdic
12718 if eval $compile_ok; then
12719         if ./tebcdic; then
12720                 echo "You have EBCDIC." >&4
12721                 val="$define"
12722         else
12723                 echo "Nope, no EBCDIC, probably ASCII or some ISO Latin." >&4
12724         fi
12725 else
12726         echo "I'm unable to compile the test program." >&4
12727         echo "I'll assume ASCII or some ISO Latin." >&4
12728 fi
12729 $rm -f tebcdic.c tebcdic
12730 set ebcdic
12731 eval $setvar
12732
12733 echo " "
12734 $cat >&4 <<EOM
12735 Checking how to flush all pending stdio output...
12736 EOM
12737 # I only know how to find the first 32 possibly open files on SunOS.
12738 # See also hints/sunos_4_1.sh and util.c  --AD
12739 case "$osname" in
12740 sunos) $echo '#define PERL_FFLUSH_ALL_FOPEN_MAX 32' > try.c ;;
12741 esac
12742 $cat >>try.c <<EOCP
12743 #include <stdio.h>
12744 #$i_unistd I_UNISTD
12745 #ifdef I_UNISTD
12746 # include <unistd.h>
12747 #endif
12748 #$d_sysconf HAS_SYSCONF
12749 #$d_stdio_stream_array HAS_STDIO_STREAM_ARRAY
12750 #ifdef HAS_STDIO_STREAM_ARRAY
12751 # define STDIO_STREAM_ARRAY $stdio_stream_array
12752 #endif
12753 int main() {
12754   FILE* p = fopen("try.out", "w");
12755 #ifdef TRY_FPUTC
12756   fputc('x', p);
12757 #else
12758 # ifdef TRY_FPRINTF
12759   fprintf(p, "x");
12760 # endif
12761 #endif
12762 #ifdef TRY_FFLUSH_NULL
12763   fflush(NULL);
12764 #endif
12765 #ifdef TRY_FFLUSH_ALL
12766   {
12767     long open_max = -1;
12768 # ifdef PERL_FFLUSH_ALL_FOPEN_MAX
12769     open_max = PERL_FFLUSH_ALL_FOPEN_MAX;
12770 # else
12771 #  if defined(HAS_SYSCONF) && defined(_SC_OPEN_MAX)
12772     open_max = sysconf(_SC_OPEN_MAX);
12773 #  else
12774 #   ifdef FOPEN_MAX
12775     open_max = FOPEN_MAX;
12776 #   else
12777 #    ifdef OPEN_MAX
12778     open_max = OPEN_MAX;
12779 #    else
12780 #     ifdef _NFILE
12781     open_max = _NFILE;
12782 #     endif
12783 #    endif
12784 #   endif
12785 #  endif
12786 # endif 
12787 # ifdef HAS_STDIO_STREAM_ARRAY
12788     if (open_max > 0) {
12789       long i;
12790       for (i = 0; i < open_max; i++)
12791             if (STDIO_STREAM_ARRAY[i]._file >= 0 &&
12792                 STDIO_STREAM_ARRAY[i]._file < open_max &&
12793                 STDIO_STREAM_ARRAY[i]._flag)
12794                 fflush(&STDIO_STREAM_ARRAY[i]);
12795     }   
12796   }
12797 # endif
12798 #endif
12799   _exit(42);
12800 }
12801 EOCP
12802 : first we have to find out how _not_ to flush
12803 if $test "X$fflushNULL" = X -o "X$fflushall" = X; then
12804     output=''
12805     set try -DTRY_FPUTC
12806     if eval $compile; then
12807             $rm -f try.out
12808             ./try$exe_ext 2>/dev/null
12809             if $test ! -s try.out -a "X$?" = X42; then
12810                 output=-DTRY_FPUTC
12811             fi
12812     fi
12813     case "$output" in
12814     '')
12815             set try -DTRY_FPRINTF
12816             $rm -f try.out
12817             if eval $compile; then
12818                     $rm -f try.out
12819                     ./try$exe_ext 2>/dev/null
12820                     if $test ! -s try.out -a "X$?" = X42; then
12821                         output=-DTRY_FPRINTF
12822                     fi
12823             fi
12824         ;;
12825     esac
12826 fi
12827 : check for fflush NULL behaviour
12828 case "$fflushNULL" in
12829 '')     set try -DTRY_FFLUSH_NULL $output
12830         if eval $compile; then
12831                 $rm -f try.out
12832                 ./try$exe_ext 2>/dev/null
12833                 code="$?"
12834                 if $test -s try.out -a "X$code" = X42; then
12835                         fflushNULL="`$cat try.out`"
12836                 else
12837                         if $test "X$code" != X42; then
12838                                 $cat >&4 <<EOM
12839 (If this test failed, don't worry, we'll try another method shortly.)
12840 EOM
12841                         fi
12842                 fi
12843         fi
12844         $rm -f core try.core core.try.*
12845         case "$fflushNULL" in
12846         x)      $cat >&4 <<EOM
12847 Your fflush(NULL) works okay for output streams.
12848 Let's see if it clobbers input pipes...
12849 EOM
12850 # As of mid-March 2000 all versions of Solaris appear to have a stdio
12851 # bug that improperly flushes the input end of pipes.  So we avoid the
12852 # autoflush on fork/system/exec support for now. :-(
12853 $cat >tryp.c <<EOCP
12854 #include <stdio.h>
12855 int
12856 main(int argc, char **argv)
12857 {
12858     char buf[1024];
12859     int i;
12860     char *bp = buf;
12861     while (1) {
12862         while ((i = getc(stdin)) != -1
12863                && (*bp++ = i) != '\n'
12864                && bp < &buf[1024])
12865         /* DO NOTHING */ ;
12866         *bp = '\0';
12867         fprintf(stdout, "%s", buf);
12868         fflush(NULL);
12869         if (i == -1)
12870             return 0;
12871         bp = buf;
12872     }
12873 }
12874 EOCP
12875                 fflushNULL="$define"
12876                 set tryp
12877                 if eval $compile; then
12878                     $rm -f tryp.out
12879                     $cat tryp.c | ./tryp$exe_ext 2>/dev/null > tryp.out
12880                     if cmp tryp.c tryp.out >/dev/null 2>&1; then
12881                        $cat >&4 <<EOM
12882 fflush(NULL) seems to behave okay with input streams.
12883 EOM
12884                         fflushNULL="$define"
12885                     else
12886                         $cat >&4 <<EOM
12887 Ouch, fflush(NULL) clobbers input pipes!  We will not use it.
12888 EOM
12889                         fflushNULL="$undef"
12890                     fi
12891                 fi
12892                 $rm -f core tryp.c tryp.core core.tryp.*
12893                 ;;
12894         '')     $cat >&4 <<EOM
12895 Your fflush(NULL) isn't working (contrary to ANSI C).
12896 EOM
12897                 fflushNULL="$undef"
12898                 ;;
12899         *)      $cat >&4 <<EOM
12900 Cannot figure out whether your fflush(NULL) works or not.
12901 I'm assuming it doesn't (contrary to ANSI C).
12902 EOM
12903                 fflushNULL="$undef"
12904                 ;;
12905         esac
12906         ;;
12907 $define|true|[yY]*)
12908         fflushNULL="$define"
12909         ;;
12910 *)
12911         fflushNULL="$undef"
12912         ;;
12913 esac
12914 : check explicit looping only if NULL did not work, and if the pipe
12915 : bug does not show up on an explicit flush too
12916 case "$fflushNULL" in
12917 "$undef")
12918         $cat >tryp.c <<EOCP
12919 #include <stdio.h>
12920 int
12921 main(int argc, char **argv)
12922 {
12923     char buf[1024];
12924     int i;
12925     char *bp = buf;
12926     while (1) {
12927         while ((i = getc(stdin)) != -1
12928                && (*bp++ = i) != '\n'
12929                && bp < &buf[1024])
12930         /* DO NOTHING */ ;
12931         *bp = '\0';
12932         fprintf(stdout, "%s", buf);
12933         fflush(stdin);
12934         if (i == -1)
12935             return 0;
12936         bp = buf;
12937     }
12938 }
12939 EOCP
12940         set tryp
12941         if eval $compile; then
12942             $rm -f tryp.out
12943             $cat tryp.c | ./tryp$exe_ext 2>/dev/null > tryp.out
12944             if cmp tryp.c tryp.out >/dev/null 2>&1; then
12945                $cat >&4 <<EOM
12946 Good, at least fflush(stdin) seems to behave okay when stdin is a pipe.
12947 EOM
12948                 : now check for fflushall behaviour
12949                 case "$fflushall" in
12950                 '')     set try -DTRY_FFLUSH_ALL $output
12951                         if eval $compile; then
12952                                 $cat >&4 <<EOM
12953 (Now testing the other method--but note that this also may fail.)
12954 EOM
12955                                 $rm -f try.out
12956                                 ./try$exe_ext 2>/dev/null
12957                                 if $test -s try.out -a "X$?" = X42; then
12958                                         fflushall="`$cat try.out`"
12959                                 fi
12960                         fi
12961                         $rm -f core try.core core.try.*
12962                         case "$fflushall" in
12963                         x)      $cat >&4 <<EOM
12964 Whew. Flushing explicitly all the stdio streams works.
12965 EOM
12966                                 fflushall="$define"
12967                                 ;;
12968                         '')     $cat >&4 <<EOM
12969 Sigh. Flushing explicitly all the stdio streams doesn't work.
12970 EOM
12971                                 fflushall="$undef"
12972                                 ;;
12973                         *)      $cat >&4 <<EOM
12974 Cannot figure out whether flushing stdio streams explicitly works or not.
12975 I'm assuming it doesn't.
12976 EOM
12977                                 fflushall="$undef"
12978                                 ;;
12979                         esac
12980                         ;;
12981                 "$define"|true|[yY]*)
12982                         fflushall="$define"
12983                         ;;
12984                 *)
12985                         fflushall="$undef"
12986                         ;;
12987                 esac
12988             else
12989                 $cat >&4 <<EOM
12990 All is futile.  Even fflush(stdin) clobbers input pipes!
12991 EOM
12992                 fflushall="$undef"
12993             fi
12994         else
12995             fflushall="$undef"
12996         fi
12997         $rm -f core tryp.c tryp.core core.tryp.*
12998         ;;
12999 *)      fflushall="$undef"
13000         ;;
13001 esac
13002
13003 case "$fflushNULL$fflushall" in
13004 undefundef)
13005         $cat <<EOM
13006 OK, I give up.  I cannot figure out how to flush pending stdio output.
13007 We won't be flushing handles at all before fork/exec/popen.
13008 EOM
13009         ;;
13010 esac
13011 $rm -f try.* try$exe_ext
13012
13013 : Store the full pathname to the ar program for use in the C program
13014 : Respect a hint or command line value for full_ar.
13015 case "$full_ar" in
13016 '') full_ar=$ar ;;
13017 esac
13018
13019 : Store the full pathname to the sed program for use in the C program
13020 full_sed=$sed
13021
13022 : see what type gids are declared as in the kernel
13023 echo " "
13024 echo "Looking for the type for group ids returned by getgid()."
13025 set gid_t gidtype xxx stdio.h sys/types.h
13026 eval $typedef
13027 case "$gidtype" in
13028 xxx)
13029         xxx=`./findhdr sys/user.h`
13030         set `grep 'groups\[NGROUPS\];' "$xxx" 2>/dev/null` unsigned short
13031         case $1 in
13032         unsigned) dflt="$1 $2" ;;
13033         *) dflt="$1" ;;
13034         esac
13035         ;;
13036 *) dflt="$gidtype";;
13037 esac
13038 case "$gidtype" in
13039 gid_t) echo "gid_t found." ;;
13040 *)      rp="What is the type for group ids returned by getgid()?"
13041         . ./myread
13042         gidtype="$ans"
13043         ;;
13044 esac
13045
13046 echo " "
13047 case "$gidtype" in
13048 *_t) zzz="$gidtype"     ;;
13049 *)   zzz="gid"          ;;
13050 esac
13051 echo "Checking the size of $zzz..." >&4 
13052 cat > try.c <<EOCP
13053 #include <sys/types.h>
13054 #include <stdio.h>
13055 int main() {
13056     printf("%d\n", (int)sizeof($gidtype));
13057     exit(0);
13058 }
13059 EOCP
13060 set try
13061 if eval $compile_ok; then
13062         yyy=`./try`
13063         case "$yyy" in
13064         '')     gidsize=4
13065                 echo "(I can't execute the test program--guessing $gidsize.)" >&4
13066                 ;;
13067         *)      gidsize=$yyy
13068                 echo "Your $zzz is $gidsize bytes long."
13069                 ;;
13070         esac
13071 else
13072         gidsize=4
13073         echo "(I can't compile the test program--guessing $gidsize.)" >&4
13074 fi
13075
13076
13077 echo " "
13078 case "$gidtype" in
13079 *_t) zzz="$gidtype"     ;;
13080 *)   zzz="gid"          ;;
13081 esac
13082 echo "Checking the sign of $zzz..." >&4 
13083 cat > try.c <<EOCP
13084 #include <sys/types.h>
13085 #include <stdio.h>
13086 int main() {
13087         $gidtype foo = -1;
13088         if (foo < 0)
13089                 printf("-1\n");
13090         else
13091                 printf("1\n");
13092 }
13093 EOCP
13094 set try
13095 if eval $compile; then
13096         yyy=`./try`
13097         case "$yyy" in
13098         '')     gidsign=1
13099                 echo "(I can't execute the test program--guessing unsigned.)" >&4
13100                 ;;
13101         *)      gidsign=$yyy
13102                 case "$gidsign" in
13103                  1) echo "Your $zzz is unsigned." ;;
13104                 -1) echo "Your $zzz is signed."   ;;
13105                 esac
13106                 ;;
13107         esac
13108 else
13109         gidsign=1
13110         echo "(I can't compile the test program--guessing unsigned.)" >&4
13111 fi
13112
13113
13114 echo " "
13115
13116 if $test X"$quadtype" != X; then
13117
13118 echo "Checking how to print 64-bit integers..." >&4
13119
13120 if $test X"$sPRId64" = X -a X"$quadtype" = Xint; then
13121         $cat >try.c <<'EOCP'
13122 #include <sys/types.h>
13123 #include <stdio.h>
13124 int main() {
13125   int q = 12345678901;
13126   printf("%ld\n", q);
13127 }
13128 EOCP
13129         set try
13130         if eval $compile; then
13131                 yyy=`./try$exe_ext`
13132                 case "$yyy" in
13133                 12345678901)
13134                         sPRId64='"d"'; sPRIi64='"i"'; sPRIu64='"u"';
13135                         sPRIo64='"o"'; sPRIx64='"x"'; sPRIX64='"X"';
13136                         echo "We will use %d."
13137                         ;;
13138                 esac
13139         fi
13140 fi
13141
13142 if $test X"$sPRId64" = X -a X"$quadtype" = Xlong; then
13143         $cat >try.c <<'EOCP'
13144 #include <sys/types.h>
13145 #include <stdio.h>
13146 int main() {
13147   long q = 12345678901;
13148   printf("%ld\n", q);
13149 }
13150 EOCP
13151         set try
13152         if eval $compile; then
13153                 yyy=`./try$exe_ext`
13154                 case "$yyy" in
13155                 12345678901)
13156                         sPRId64='"ld"'; sPRIi64='"li"'; sPRIu64='"lu"';
13157                         sPRIo64='"lo"'; sPRIx64='"lx"'; sPRIX64='"lX"';
13158                         echo "We will use %ld."
13159                         ;;
13160                 esac
13161         fi
13162 fi
13163
13164 if $test X"$sPRId64" = X -a X"$i_inttypes" = X"$define" -a X"$quadtype" = Xint64_t; then
13165         $cat >try.c <<'EOCP'
13166 #include <sys/types.h>
13167 #include <inttypes.h>
13168 #include <stdio.h>
13169 int main() {
13170   int64_t q = 12345678901;
13171   printf("%" PRId64 "\n", q);
13172 }
13173 EOCP
13174         set try
13175         if eval $compile; then
13176                 yyy=`./try$exe_ext`
13177                 case "$yyy" in
13178                 12345678901)
13179                         sPRId64=PRId64; sPRIi64=PRIi64; sPRIu64=PRIu64;
13180                         sPRIo64=PRIo64; sPRIx64=PRIx64; sPRIX64=PRIX64;
13181                         echo "We will use the C9X style."
13182                         ;;
13183                 esac
13184         fi
13185 fi
13186
13187 if $test X"$sPRId64" = X -a X"$quadtype" = X"long long"; then
13188         $cat >try.c <<'EOCP'
13189 #include <sys/types.h>
13190 #include <stdio.h>
13191 int main() {
13192   long long q = 12345678901LL; /* AIX cc requires the LL prefix. */
13193   printf("%lld\n", q);
13194 }
13195 EOCP
13196         set try
13197         if eval $compile; then
13198                 yyy=`./try$exe_ext`
13199                 case "$yyy" in
13200                 12345678901)
13201                         sPRId64='"lld"'; sPRIi64='"lli"'; sPRIu64='"llu"';
13202                         sPRIo64='"llo"'; sPRIx64='"llx"'; sPRIX64='"llX"';
13203                         echo "We will use the %lld style."
13204                         ;;
13205                 esac
13206         fi
13207 fi
13208
13209 if $test X"$sPRId64" = X -a X"$quadtype" != X; then
13210         $cat >try.c <<EOCP
13211 #include <sys/types.h>
13212 #include <stdio.h>
13213 int main() {
13214   $quadtype q = 12345678901;
13215   printf("%Ld\n", q);
13216 }
13217 EOCP
13218         set try
13219         if eval $compile; then
13220                 yyy=`./try$exe_ext`
13221                 case "$yyy" in
13222                 12345678901)
13223                         sPRId64='"Ld"'; sPRIi64='"Li"'; sPRIu64='"Lu"';
13224                         sPRIo64='"Lo"'; sPRIx64='"Lx"'; sPRIX64='"LX"';
13225                         echo "We will use %Ld."
13226                         ;;
13227                 esac
13228         fi
13229 fi
13230
13231 if $test X"$sPRId64" = X -a X"$quadtype" != X; then
13232         $cat >try.c <<EOCP
13233 #include <sys/types.h>
13234 #include <stdio.h>
13235 int main() {
13236   $quadtype q = 12345678901;
13237   printf("%qd\n", q);
13238 }
13239 EOCP
13240         set try
13241         if eval $compile; then
13242                 yyy=`./try$exe_ext`
13243                 case "$yyy" in
13244                 12345678901)
13245                         sPRId64='"qd"'; sPRIi64='"qi"'; sPRIu64='"qu"';
13246                         sPRIo64='"qo"'; sPRIx64='"qx"'; sPRIX64='"qX"';
13247                         echo "We will use %qd."
13248                         ;;
13249                 esac
13250         fi
13251 fi
13252
13253 if $test X"$sPRId64" = X; then
13254         echo "Cannot figure out how to print 64-bit integers." >&4
13255 fi
13256
13257 $rm -f try try.*
13258
13259 fi
13260
13261 case "$sPRId64" in
13262 '')     d_PRId64="$undef"; d_PRIi64="$undef"; d_PRIu64="$undef"; 
13263         d_PRIo64="$undef"; d_PRIx64="$undef"; d_PRIX64="$undef"; 
13264         ;;
13265 *)      d_PRId64="$define"; d_PRIi64="$define"; d_PRIu64="$define"; 
13266         d_PRIo64="$define"; d_PRIx64="$define"; d_PRIX64="$define"; 
13267         ;;
13268 esac
13269
13270
13271 echo " "
13272 $echo "Checking the format strings to be used for Perl's internal types..." >&4
13273
13274 if $test X"$ivsize" = X8; then
13275         ivdformat="$sPRId64"
13276         uvuformat="$sPRIu64"
13277         uvoformat="$sPRIo64"
13278         uvxformat="$sPRIx64"
13279         uvXformat="$sPRIX64"
13280 else
13281         if $test X"$ivsize" = X"$longsize"; then
13282                 ivdformat='"ld"'
13283                 uvuformat='"lu"'
13284                 uvoformat='"lo"'
13285                 uvxformat='"lx"'
13286                 uvXformat='"lX"'
13287         else
13288                 if $test X"$ivsize" = X"$intsize"; then
13289                         ivdformat='"d"'
13290                         uvuformat='"u"'
13291                         uvoformat='"o"'
13292                         uvxformat='"x"'
13293                         uvXformat='"X"'
13294                 else
13295                         : far out
13296                         if $test X"$ivsize" = X"$shortsize"; then
13297                                 ivdformat='"hd"'
13298                                 uvuformat='"hu"'
13299                                 uvoformat='"ho"'
13300                                 uvxformat='"hx"'
13301                                 uvXformat='"hX"'
13302                         fi
13303                 fi
13304         fi
13305 fi
13306
13307 if $test X"$uselongdouble" = X"$define" -a X"$d_longdbl" = X"$define" -a X"$d_PRIgldbl" = X"$define"; then
13308         nveformat="$sPRIeldbl"
13309         nvfformat="$sPRIfldbl"
13310         nvgformat="$sPRIgldbl"
13311         nvEformat="$sPRIEldbl"
13312         nvFformat="$sPRIFldbl"
13313         nvGformat="$sPRIGldbl"
13314 else
13315         nveformat='"e"'
13316         nvfformat='"f"'
13317         nvgformat='"g"'
13318         nvEformat='"E"'
13319         nvFformat='"F"'
13320         nvGformat='"G"'
13321 fi
13322
13323 case "$ivdformat" in
13324 '') echo "$0: Fatal: failed to find format strings, cannot continue." >& 4
13325     exit 1
13326     ;;
13327 esac
13328
13329
13330 echo " "
13331 $echo "Checking the format string to be used for gids..." >&4
13332
13333 case "$gidsign" in
13334 -1)     if $test X"$gidsize" = X"$ivsize"; then
13335                 gidformat="$ivdformat"
13336         else
13337                 if $test X"$gidsize" = X"$longsize"; then
13338                         gidformat='"ld"'
13339                 else
13340                         if $test X"$gidsize" = X"$intsize"; then
13341                                 gidformat='"d"'
13342                         else
13343                                 if $test X"$gidsize" = X"$shortsize"; then
13344                                         gidformat='"hd"'
13345                                 fi
13346                         fi
13347                 fi
13348         fi
13349         ;;
13350 *)      if $test X"$gidsize" = X"$uvsize"; then
13351                 gidformat="$uvuformat"
13352         else
13353                 if $test X"$gidsize" = X"$longsize"; then
13354                         gidformat='"lu"'
13355                 else
13356                         if $test X"$gidsize" = X"$intsize"; then
13357                                 gidformat='"u"'
13358                         else
13359                                 if $test X"$gidsize" = X"$shortsize"; then
13360                                         gidformat='"hu"'
13361                                 fi
13362                         fi
13363                 fi
13364         fi
13365         ;;
13366 esac
13367
13368 : see if getgroups exists
13369 set getgroups d_getgrps
13370 eval $inlibc
13371
13372 : see if setgroups exists
13373 set setgroups d_setgrps
13374 eval $inlibc
13375
13376
13377 : Find type of 2nd arg to 'getgroups()' and 'setgroups()'
13378 echo " "
13379 case "$d_getgrps$d_setgrps" in
13380 *define*)
13381         case "$groupstype" in
13382         '') dflt="$gidtype" ;;
13383         *)  dflt="$groupstype" ;;
13384         esac
13385         $cat <<EOM
13386 What type of pointer is the second argument to getgroups() and setgroups()?
13387 Usually this is the same as group ids, $gidtype, but not always.
13388
13389 EOM
13390         rp='What type pointer is the second argument to getgroups() and setgroups()?'
13391         . ./myread
13392         groupstype="$ans"
13393         ;;
13394 *)  groupstype="$gidtype";;
13395 esac
13396
13397 echo " "
13398 echo "Checking if your $make program sets \$(MAKE)..." >&4
13399 case "$make_set_make" in
13400 '')
13401         $sed 's/^X //' > testmake.mak << 'EOF'
13402 Xall:
13403 X       @echo 'maketemp="$(MAKE)"'
13404 EOF
13405         case "`$make -f testmake.mak 2>/dev/null`" in
13406         *maketemp=*) make_set_make='#' ;;
13407         *)      make_set_make="MAKE=$make" ;;
13408         esac
13409         $rm -f testmake.mak
13410         ;;
13411 esac
13412 case "$make_set_make" in
13413 '#') echo "Yup, it does.";;
13414 *) echo "Nope, it doesn't.";;
13415 esac
13416
13417 : see what type is used for mode_t
13418 rp="What is the type used for file modes for system calls (e.g. fchmod())?"
13419 set mode_t modetype int stdio.h sys/types.h
13420 eval $typedef_ask
13421
13422 : define a fucntion to check prototypes
13423 $cat > protochk <<EOSH
13424 $startsh
13425 cc="$cc"
13426 optimize="$optimize"
13427 ccflags="$ccflags"
13428 prototype="$prototype"
13429 define="$define"
13430 rm=$rm
13431 EOSH
13432
13433 $cat >> protochk <<'EOSH'
13434
13435 $rm -f try.c
13436 foo="$1"
13437 shift
13438 while test $# -ge 2; do
13439         case "$1" in
13440                 $define) echo "#include <$2>" >> try.c ;;
13441                 literal) echo "$2" >> try.c ;;
13442         esac
13443     shift 2
13444 done
13445 test "$prototype" = "$define"  && echo '#define CAN_PROTOTYPE' >> try.c
13446 cat >> try.c <<'EOCP'
13447 #ifdef CAN_PROTOTYPE
13448 #define _(args) args
13449 #else
13450 #define _(args) ()
13451 #endif
13452 EOCP
13453 echo "$foo" >> try.c
13454 echo 'int no_real_function_has_this_name _((void)) { return 0; }' >> try.c
13455 $cc $optimize $ccflags -c try.c > /dev/null 2>&1
13456 status=$?
13457 $rm -f try.[co]
13458 exit $status
13459 EOSH
13460 chmod +x protochk
13461 $eunicefix protochk
13462
13463 : see what type is used for size_t
13464 rp="What is the type used for the length parameter for string functions?"
13465 set size_t sizetype 'unsigned int' stdio.h sys/types.h
13466 eval $typedef_ask
13467
13468 : check for type of arguments to gethostbyaddr. 
13469 if test "X$netdb_host_type" = X -o "X$netdb_hlen_type" = X; then
13470         case "$d_gethbyaddr" in
13471         $define)
13472                 $cat <<EOM
13473
13474 Checking to see what type of arguments are accepted by gethostbyaddr().
13475 EOM
13476                 hdrs="$define sys/types.h
13477                         $d_socket sys/socket.h 
13478                         $i_niin netinet/in.h 
13479                         $i_netdb netdb.h
13480                         $i_unistd unistd.h"
13481                 : The first arg can 'char *' or 'void *'
13482                 : The second arg is some of integral type
13483                 for xxx in in_addr_t 'const void *' 'const char *' 'void *' 'char *'; do
13484                         for yyy in size_t long int; do
13485                                 case "$netdb_host_type" in
13486                                 '')     try="extern struct hostent *gethostbyaddr($xxx, $yyy, int);"
13487                                         if ./protochk "$try" $hdrs; then
13488                                                 echo "Your system accepts $xxx for the first arg."
13489                                                 echo "...and $yyy for the second arg."
13490                                                 netdb_host_type="$xxx"
13491                                                 netdb_hlen_type="$yyy"
13492                                         fi
13493                                         ;;
13494                                 esac
13495                         done
13496                 done
13497                 : In case none of those worked, prompt the user.
13498                 case "$netdb_host_type" in
13499                 '')     rp='What is the type for the 1st argument to gethostbyaddr?'
13500                         dflt='char *'
13501                         . ./myread
13502                         netdb_host_type=$ans
13503                         rp='What is the type for the 2nd argument to gethostbyaddr?'
13504                         dflt="$sizetype"
13505                         . ./myread
13506                         netdb_hlen_type=$ans
13507                         ;;
13508                 esac
13509                 ;;
13510         *)      : no gethostbyaddr, so pick harmless defaults
13511                 netdb_host_type='char *'
13512                 netdb_hlen_type="$sizetype"
13513                 ;;
13514         esac
13515         # Remove the "const" if needed. -- but then we'll have a 
13516         # prototype clash!
13517         # netdb_host_type=`echo "$netdb_host_type" | sed 's/^const //'`
13518 fi
13519
13520 : check for type of argument to gethostbyname. 
13521 if test "X$netdb_name_type" = X ; then
13522         case "$d_gethbyname" in
13523         $define)
13524                 $cat <<EOM
13525
13526 Checking to see what type of argument is accepted by gethostbyname().
13527 EOM
13528                 hdrs="$define sys/types.h
13529                         $d_socket sys/socket.h 
13530                         $i_niin netinet/in.h 
13531                         $i_netdb netdb.h
13532                         $i_unistd unistd.h"
13533                 for xxx in "const char *" "char *"; do
13534                         case "$netdb_name_type" in
13535                         '')     try="extern struct hostent *gethostbyname($xxx);"
13536                                 if ./protochk "$try" $hdrs; then
13537                                         echo "Your system accepts $xxx."
13538                                         netdb_name_type="$xxx"
13539                                 fi
13540                                 ;;
13541                         esac
13542                 done
13543                 : In case none of those worked, prompt the user.
13544                 case "$netdb_name_type" in
13545                 '')     rp='What is the type for the 1st argument to gethostbyname?'
13546                         dflt='char *'
13547                         . ./myread
13548                         netdb_name_type=$ans
13549                         ;;
13550                 esac
13551                 ;;
13552         *)      : no gethostbyname, so pick harmless default
13553                 netdb_name_type='char *'
13554                 ;;
13555         esac
13556 fi
13557
13558 : check for type of 1st argument to getnetbyaddr. 
13559 if test "X$netdb_net_type" = X ; then
13560         case "$d_getnbyaddr" in
13561         $define)
13562                 $cat <<EOM
13563
13564 Checking to see what type of 1st argument is accepted by getnetbyaddr().
13565 EOM
13566                 hdrs="$define sys/types.h
13567                         $d_socket sys/socket.h 
13568                         $i_niin netinet/in.h 
13569                         $i_netdb netdb.h
13570                         $i_unistd unistd.h"
13571                 for xxx in in_addr_t "unsigned long" long "unsigned int" int; do
13572                         case "$netdb_net_type" in
13573                         '')     try="extern struct netent *getnetbyaddr($xxx, int);"
13574                                 if ./protochk "$try" $hdrs; then
13575                                         echo "Your system accepts $xxx."
13576                                         netdb_net_type="$xxx"
13577                                 fi
13578                                 ;;
13579                         esac
13580                 done
13581                 : In case none of those worked, prompt the user.
13582                 case "$netdb_net_type" in
13583                 '')     rp='What is the type for the 1st argument to getnetbyaddr?'
13584                         dflt='long'
13585                         . ./myread
13586                         netdb_net_type=$ans
13587                         ;;
13588                 esac
13589                 ;;
13590         *)      : no getnetbyaddr, so pick harmless default
13591                 netdb_net_type='long'
13592                 ;;
13593         esac
13594 fi
13595 : locate the preferred pager for this system
13596 case "$pager" in
13597 '')
13598         dflt=''
13599         case "$pg" in
13600         /*) dflt=$pg;;
13601         esac
13602         case "$more" in
13603         /*) dflt=$more;;
13604         esac
13605         case "$less" in
13606         /*) dflt=$less;;
13607         esac
13608         case "$dflt" in
13609         '') dflt=/usr/ucb/more;;
13610         esac
13611         ;;
13612 *) dflt="$pager";;
13613 esac
13614 echo " "
13615 fn=f/
13616 rp='What pager is used on your system?'
13617 . ./getfile
13618 pager="$ans"
13619
13620 : see what type pids are declared as in the kernel
13621 rp="What is the type of process ids on this system?"
13622 set pid_t pidtype int stdio.h sys/types.h
13623 eval $typedef_ask
13624
13625 : Find earliest binary compatible site_perl subdirectory perl can use.
13626 case "$bincompat5005" in
13627 "$define") xs_apiversion='5.005' ;;
13628 *) xs_apiversion=$version ;;   # The current site_perl version.
13629 esac
13630 : Find earliest pure perl site_perl subdirectory perl can use.
13631 : The versioned directories started at 5.005.
13632 pm_apiversion='5.005'
13633
13634 : check for length of pointer
13635 echo " "
13636 case "$ptrsize" in
13637 '')
13638         echo "Checking to see how big your pointers are..." >&4
13639         if test "$voidflags" -gt 7; then
13640                 echo '#define VOID_PTR char *' > try.c
13641         else
13642                 echo '#define VOID_PTR void *' > try.c
13643         fi
13644         $cat >>try.c <<'EOCP'
13645 #include <stdio.h>
13646 int main()
13647 {
13648     printf("%d\n", (int)sizeof(VOID_PTR));
13649     exit(0);
13650 }
13651 EOCP
13652         set try
13653         if eval $compile_ok; then
13654                 ptrsize=`./try`
13655                 echo "Your pointers are $ptrsize bytes long."
13656         else
13657                 dflt='4'
13658                 echo "(I can't seem to compile the test program.  Guessing...)" >&4
13659                 rp="What is the size of a pointer (in bytes)?"
13660                 . ./myread
13661                 ptrsize="$ans"
13662         fi
13663         ;;
13664 esac
13665 $rm -f try.c try
13666
13667 : see if ar generates random libraries by itself
13668 echo " "
13669 echo "Checking how to generate random libraries on your machine..." >&4
13670 echo 'int bar1() { return bar2(); }' > bar1.c
13671 echo 'int bar2() { return 2; }' > bar2.c
13672 $cat > foo.c <<'EOP'
13673 int main() { printf("%d\n", bar1()); exit(0); }
13674 EOP
13675 $cc $ccflags -c bar1.c >/dev/null 2>&1
13676 $cc $ccflags -c bar2.c >/dev/null 2>&1
13677 $cc $ccflags -c foo.c >/dev/null 2>&1
13678 $ar rc bar$_a bar2$_o bar1$_o >/dev/null 2>&1
13679 if $cc $ccflags $ldflags -o foobar foo$_o bar$_a $libs > /dev/null 2>&1 &&
13680         ./foobar >/dev/null 2>&1; then
13681         echo "$ar appears to generate random libraries itself."
13682         orderlib=false
13683         ranlib=":"
13684 elif $ar ts bar$_a >/dev/null 2>&1 &&
13685         $cc $ccflags $ldflags -o foobar foo$_o bar$_a $libs > /dev/null 2>&1 &&
13686         ./foobar >/dev/null 2>&1; then
13687                 echo "a table of contents needs to be added with '$ar ts'."
13688                 orderlib=false
13689                 ranlib="$ar ts"
13690 else
13691         case "$ranlib" in
13692         :) ranlib='';;
13693         '')
13694                 ranlib=`./loc ranlib X /usr/bin /bin /usr/local/bin`
13695                 $test -f $ranlib || ranlib=''
13696                 ;;
13697         esac
13698         if $test -n "$ranlib"; then
13699                 echo "your system has '$ranlib'; we'll use that."
13700                 orderlib=false
13701         else
13702                 echo "your system doesn't seem to support random libraries"
13703                 echo "so we'll use lorder and tsort to order the libraries."
13704                 orderlib=true
13705                 ranlib=":"
13706         fi
13707 fi
13708 $rm -f foo* bar* 
13709
13710 : check for type of arguments to select. 
13711 case "$selecttype" in
13712 '') case "$d_select" in
13713         $define)
13714                 echo " "
13715                 $cat <<EOM
13716 Checking to see what type of arguments are accepted by select().
13717 EOM
13718                 hdrs="$define sys/types.h
13719                         $i_systime sys/time.h 
13720                         $i_sysselct sys/select.h
13721                         $d_socket sys/socket.h"
13722                 : The first arg can be int, unsigned, or size_t
13723                 : The last arg may or may not be 'const'
13724                 val=''
13725                 : void pointer has been seen but using that
13726                 : breaks the selectminbits test
13727                 for xxx in 'fd_set *' 'int *'; do
13728                         for nfd in 'int' 'size_t' 'unsigned long' 'unsigned' ; do
13729                                 for tmo in 'struct timeval *' 'const struct timeval *'; do
13730                                         case "$val" in
13731                                         '')     try="extern select _(($nfd, $xxx, $xxx, $xxx, $tmo));"
13732                                                 if ./protochk "$try" $hdrs; then
13733                                                         echo "Your system accepts $xxx."
13734                                                         val="$xxx"
13735                                                 fi
13736                                                 ;;
13737                                         esac
13738                                 done
13739                         done
13740                 done
13741                 case "$val" in
13742                 '')     rp='What is the type for the 2nd, 3rd, and 4th arguments to select?'
13743                         case "$d_fd_set" in
13744                                 $define) dflt="fd_set *" ;;
13745                                 *)              dflt="int *" ;;
13746                         esac
13747                         . ./myread
13748                         val=$ans
13749                         ;;
13750                 esac
13751                 selecttype="$val"
13752                 ;;
13753         *)      : no select, so pick a harmless default
13754                 selecttype='int *'
13755                 ;;
13756         esac
13757         ;;
13758 esac
13759
13760 : check for the select 'width'
13761 case "$selectminbits" in
13762 '') case "$d_select" in
13763         $define)
13764                 $cat <<EOM
13765
13766 Checking to see on how many bits at a time your select() operates...
13767 EOM
13768                 $cat >try.c <<EOCP
13769 #include <sys/types.h>
13770 #$i_time I_TIME
13771 #$i_systime I_SYS_TIME
13772 #$i_systimek I_SYS_TIME_KERNEL
13773 #ifdef I_TIME
13774 #   include <time.h>
13775 #endif
13776 #ifdef I_SYS_TIME
13777 #   ifdef I_SYS_TIME_KERNEL
13778 #       define KERNEL
13779 #   endif
13780 #   include <sys/time.h>
13781 #   ifdef I_SYS_TIME_KERNEL
13782 #       undef KERNEL
13783 #   endif
13784 #endif
13785 #$i_sysselct I_SYS_SELECT
13786 #ifdef I_SYS_SELECT
13787 #include <sys/select.h>
13788 #endif
13789 #$d_socket HAS_SOCKET
13790 #ifdef HAS_SOCKET
13791 #   include <sys/socket.h> /* Might include <sys/bsdtypes.h> */
13792 #endif
13793 #include <stdio.h>
13794 $selecttype b;
13795 #define S sizeof(*(b))
13796 #define MINBITS 64
13797 #define NBYTES (S * 8 > MINBITS ? S : MINBITS/8)
13798 #define NBITS  (NBYTES * 8)
13799 int main() {
13800     char s[NBYTES];
13801     struct timeval t;
13802     int i;
13803     FILE* fp;
13804     int fd;
13805
13806     fclose(stdin);
13807     fp = fopen("try.c", "r");
13808     if (fp == 0)
13809       exit(1);
13810     fd = fileno(fp);
13811     if (fd < 0)
13812       exit(2);
13813     b = ($selecttype)s;
13814     for (i = 0; i < NBITS; i++)
13815         FD_SET(i, b);
13816     t.tv_sec  = 0;
13817     t.tv_usec = 0;
13818     select(fd + 1, b, 0, 0, &t);
13819     for (i = NBITS - 1; i > fd && FD_ISSET(i, b); i--);
13820     printf("%d\n", i + 1);
13821     return 0;
13822 }
13823 EOCP
13824                 set try
13825                 if eval $compile_ok; then
13826                         selectminbits=`./try`
13827                         case "$selectminbits" in
13828                         '')     cat >&4 <<EOM
13829 Cannot figure out on how many bits at a time your select() operates.
13830 I'll play safe and guess it is 32 bits.
13831 EOM
13832                                 selectminbits=32
13833                                 bits="32 bits"
13834                                 ;;
13835                         1)      bits="1 bit" ;;
13836                         *)      bits="$selectminbits bits" ;;
13837                         esac
13838                         echo "Your select() operates on $bits at a time." >&4
13839                 else
13840                         rp='What is the minimum number of bits your select() operates on?'
13841                         case "$byteorder" in
13842                         1234|12345678)  dflt=32 ;;
13843                         *)              dflt=1  ;;
13844                         esac
13845                         . ./myread
13846                         val=$ans
13847                         selectminbits="$val"
13848                 fi
13849                 $rm -f try.* try
13850                 ;;
13851         *)      : no select, so pick a harmless default
13852                 selectminbits='32'
13853                 ;;
13854         esac
13855         ;;
13856 esac
13857
13858 : Trace out the files included by signal.h, then look for SIGxxx names.
13859 : Remove SIGARRAYSIZE used by HPUX.
13860 : Remove SIGSTKSIZE used by Linux.
13861 : Remove SIGSTKSZ used by Posix.
13862 : Remove SIGTYP void lines used by OS2.
13863 : Some cpps, like os390, dont give the file name anywhere
13864 if [ "X$fieldn" = X ]; then
13865         : Just make some guesses.  We check them later.
13866         xxx='/usr/include/signal.h /usr/include/sys/signal.h'
13867 else
13868         xxx=`echo '#include <signal.h>' |
13869         $cppstdin $cppminus $cppflags 2>/dev/null |
13870         $grep '^[       ]*#.*include' | 
13871         $awk "{print \\$$fieldn}" | $sed 's!"!!g' | $sort | $uniq`
13872 fi
13873 : Check this list of files to be sure we have parsed the cpp output ok.
13874 : This will also avoid potentially non-existent files, such 
13875 : as ../foo/bar.h
13876 xxxfiles=''
13877 for xx in $xxx /dev/null ; do
13878         $test -f "$xx" && xxxfiles="$xxxfiles $xx"
13879 done
13880 : If we have found no files, at least try signal.h
13881 case "$xxxfiles" in
13882 '')     xxxfiles=`./findhdr signal.h` ;;
13883 esac
13884 xxx=`awk '
13885 $1 ~ /^#define$/ && $2 ~ /^SIG[A-Z0-9]*$/ && $2 !~ /SIGARRAYSIZE/ && $2 !~ /SIGSTKSIZE/ && $2 !~ /SIGSTKSZ/ && $3 !~ /void/ {
13886         print substr($2, 4, 20)
13887 }
13888 $1 == "#" && $2 ~ /^define$/ && $3 ~ /^SIG[A-Z0-9]*$/ && $3 !~ /SIGARRAYSIZE/ && $4 !~ /void/ {
13889         print substr($3, 4, 20)
13890 }' $xxxfiles`
13891 : Append some common names just in case the awk scan failed.
13892 xxx="$xxx ABRT ALRM BUS CANCEL CHLD CLD CONT DIL EMT FPE"
13893 xxx="$xxx FREEZE HUP ILL INT IO IOT KILL LOST LWP PHONE"
13894 xxx="$xxx PIPE POLL PROF PWR QUIT RTMAX RTMIN SEGV STKFLT STOP"
13895 xxx="$xxx SYS TERM THAW TRAP TSTP TTIN TTOU URG USR1 USR2"
13896 xxx="$xxx USR3 USR4 VTALRM WAITING WINCH WIND WINDOW XCPU XFSZ"
13897
13898 : generate a few handy files for later
13899 $cat > signal.c <<'EOCP'
13900 #include <sys/types.h>
13901 #include <signal.h>
13902 #include <stdio.h>
13903 int main() {
13904
13905 /* Strange style to avoid deeply-nested #if/#else/#endif */
13906 #ifndef NSIG
13907 #  ifdef _NSIG
13908 #    define NSIG (_NSIG)
13909 #  endif
13910 #endif
13911
13912 #ifndef NSIG
13913 #  ifdef SIGMAX
13914 #    define NSIG (SIGMAX+1)
13915 #  endif
13916 #endif
13917
13918 #ifndef NSIG
13919 #  ifdef SIG_MAX
13920 #    define NSIG (SIG_MAX+1)
13921 #  endif
13922 #endif
13923
13924 #ifndef NSIG
13925 #  ifdef MAXSIG
13926 #    define NSIG (MAXSIG+1)
13927 #  endif
13928 #endif
13929
13930 #ifndef NSIG
13931 #  ifdef MAX_SIG
13932 #    define NSIG (MAX_SIG+1)
13933 #  endif
13934 #endif
13935
13936 #ifndef NSIG
13937 #  ifdef SIGARRAYSIZE
13938 #    define NSIG (SIGARRAYSIZE+1) /* Not sure of the +1 */
13939 #  endif
13940 #endif
13941
13942 #ifndef NSIG
13943 #  ifdef _sys_nsig
13944 #    define NSIG (_sys_nsig) /* Solaris 2.5 */
13945 #  endif
13946 #endif
13947
13948 /* Default to some arbitrary number that's big enough to get most
13949    of the common signals.
13950 */
13951 #ifndef NSIG
13952 #    define NSIG 50
13953 #endif
13954
13955 printf("NSIG %d\n", NSIG);
13956
13957 #ifndef JUST_NSIG
13958
13959 EOCP
13960
13961 echo $xxx | $tr ' ' $trnl | $sort | $uniq | $awk '
13962 {
13963         printf "#ifdef SIG"; printf $1; printf "\n"
13964         printf "printf(\""; printf $1; printf " %%d\\n\",SIG";
13965         printf $1; printf ");\n"
13966         printf "#endif\n"
13967 }
13968 END {
13969         printf "#endif /* JUST_NSIG */\n";
13970         printf "exit(0);\n}\n";
13971 }
13972 ' >>signal.c
13973 $cat >signal.awk <<'EOP'
13974 BEGIN { ndups = 0 }
13975 $1 ~ /^NSIG$/ { nsig = $2 }
13976 ($1 !~ /^NSIG$/) && (NF == 2) {
13977     if ($2 > maxsig) { maxsig = $2 }
13978     if (sig_name[$2]) {
13979         dup_name[ndups] = $1
13980         dup_num[ndups] = $2
13981         ndups++ 
13982     }
13983     else {
13984         sig_name[$2] = $1
13985         sig_num[$2] = $2
13986     }
13987 }
13988 END { 
13989     if (nsig == 0) {
13990         nsig = maxsig + 1
13991     }
13992     printf("NSIG %d\n", nsig);
13993     for (n = 1; n < nsig; n++) {
13994         if (sig_name[n]) {
13995             printf("%s %d\n", sig_name[n], sig_num[n])
13996         }
13997         else {
13998             printf("NUM%d %d\n", n, n) 
13999         }
14000     }
14001     for (n = 0; n < ndups; n++) {
14002         printf("%s %d\n", dup_name[n], dup_num[n])
14003     }
14004 }
14005 EOP
14006 $cat >signal_cmd <<EOS
14007 $startsh
14008 if $test -s signal.lst; then
14009     echo "Using your existing signal.lst file"
14010         exit 0
14011 fi
14012 xxx="$xxx"
14013 EOS
14014 $cat >>signal_cmd <<'EOS'
14015
14016 set signal
14017 if eval $compile_ok; then
14018         ./signal$_exe | $sort -n +1 | $uniq | $awk -f signal.awk >signal.lst
14019 else
14020         echo "(I can't seem be able to compile the whole test program)" >&4
14021         echo "(I'll try it in little pieces.)" >&4
14022         set signal -DJUST_NSIG
14023         if eval $compile_ok; then
14024                 ./signal$_exe > signal.nsg
14025                 $cat signal.nsg
14026         else
14027                 echo "I can't seem to figure out how many signals you have." >&4
14028                 echo "Guessing 50." >&4
14029                 echo 'NSIG 50' > signal.nsg
14030         fi
14031         : Now look at all the signal names, one at a time.
14032         for xx in `echo $xxx | $tr ' ' $trnl | $sort | $uniq`; do
14033                 $cat > signal.c <<EOCP
14034 #include <sys/types.h>
14035 #include <signal.h>
14036 #include <stdio.h>
14037 int main() {
14038 printf("$xx %d\n", SIG${xx});
14039 return 0;
14040 }
14041 EOCP
14042                 set signal
14043                 if eval $compile; then
14044                         echo "SIG${xx} found."
14045                         ./signal$_exe  >> signal.ls1
14046                 else
14047                         echo "SIG${xx} NOT found."
14048                 fi
14049         done
14050         if $test -s signal.ls1; then
14051                 $cat signal.nsg signal.ls1 |
14052                         $sort -n +1 | $uniq | $awk -f signal.awk >signal.lst
14053         fi
14054
14055 fi
14056 if $test -s signal.lst; then
14057         :
14058 else
14059         echo "(AAK! I can't compile the test programs -- Guessing)" >&4
14060         echo 'kill -l' >signal
14061         set X `csh -f <signal`
14062         $rm -f signal
14063         shift
14064         case $# in
14065         0) set HUP INT QUIT ILL TRAP ABRT EMT FPE KILL BUS SEGV SYS PIPE ALRM TERM;;
14066         esac
14067         echo $@ | $tr ' ' $trnl | \
14068             $awk '{ printf "%s %d\n", $1, ++s; }
14069                   END { printf "NSIG %d\n", ++s }' >signal.lst
14070 fi
14071 $rm -f signal.c signal$_exe signal$_o signal.nsg signal.ls1
14072 EOS
14073 chmod a+x signal_cmd
14074 $eunicefix signal_cmd
14075
14076 : generate list of signal names
14077 echo " "
14078 case "$sig_name_init" in
14079 '') doinit=yes ;;
14080 *)  case "$sig_num_init" in
14081     ''|*,*) doinit=yes ;;
14082     esac ;;
14083 esac
14084 case "$doinit" in
14085 yes)
14086         echo "Generating a list of signal names and numbers..." >&4
14087         . ./signal_cmd
14088         sig_count=`$awk '/^NSIG/ { printf "%d", $2 }' signal.lst`
14089         sig_name=`$awk 'BEGIN { printf "ZERO " }
14090                         !/^NSIG/ { printf "%s ", $1 }' signal.lst`
14091         sig_num=`$awk  'BEGIN { printf "0 " }
14092                         !/^NSIG/ { printf "%d ", $2 }' signal.lst`
14093         sig_name_init=`$awk 'BEGIN      { printf "\"ZERO\", " }
14094                              !/^NSIG/   { printf "\"%s\", ", $1 }
14095                              END        { printf "0\n" }' signal.lst`
14096         sig_num_init=`$awk  'BEGIN      { printf "0, " }
14097                              !/^NSIG/   { printf "%d, ", $2}
14098                              END        { printf "0\n"}' signal.lst`
14099         ;;
14100 esac
14101 echo "The following $sig_count signals are available:"
14102 echo " "
14103 echo $sig_name | $awk \
14104 'BEGIN { linelen = 0 }
14105 {
14106         for (i = 1; i <= NF; i++) {
14107                 name = "SIG" $i " "
14108                 linelen = linelen + length(name)
14109                 if (linelen > 70) {
14110                         printf "\n"
14111                         linelen = length(name)
14112                 }
14113                 printf "%s", name
14114         }
14115         printf "\n"
14116 }'
14117 $rm -f signal signal.c signal.awk signal.lst signal_cmd 
14118
14119 echo " "
14120 case "$sizetype" in
14121 *_t) zzz="$sizetype"    ;;
14122 *)   zzz="filesize"     ;;
14123 esac
14124 echo "Checking the size of $zzz..." >&4 
14125 cat > try.c <<EOCP
14126 #include <sys/types.h>
14127 #include <stdio.h>
14128 int main() {
14129     printf("%d\n", (int)sizeof($sizetype));
14130     exit(0);
14131 }
14132 EOCP
14133 set try
14134 if eval $compile_ok; then
14135         yyy=`./try`
14136         case "$yyy" in
14137         '')     sizesize=4
14138                 echo "(I can't execute the test program--guessing $sizesize.)" >&4
14139                 ;;
14140         *)      sizesize=$yyy
14141                 echo "Your $zzz size is $sizesize bytes."
14142                 ;;
14143         esac
14144 else
14145         sizesize=4
14146         echo "(I can't compile the test program--guessing $sizesize.)" >&4
14147 fi
14148
14149
14150 : check for socklen_t
14151 echo " "
14152 echo "Checking to see if you have socklen_t..." >&4
14153 $cat >try.c <<EOCP
14154 #include <sys/types.h>
14155 #$d_socket HAS_SOCKET
14156 #ifdef HAS_SOCKET
14157 #include <sys/socket.h>
14158 #endif
14159 int main() { socklen_t x = 16; }
14160 EOCP
14161 set try
14162 if eval $compile; then
14163         val="$define"
14164         echo "You have socklen_t."
14165 else
14166         val="$undef"
14167         echo "You do not have socklen_t."
14168         case "$sizetype" in
14169         size_t) echo "(You do have size_t, that might work. Some people are happy with just an int.)" ;;
14170         esac
14171 fi
14172 $rm -f try try.*
14173 set d_socklen_t
14174 eval $setvar
14175
14176 : check for type of the size argument to socket calls
14177 case "$d_socket" in
14178 "$define")
14179         $cat <<EOM
14180
14181 Checking to see what type is the last argument of accept().
14182 EOM
14183         hdrs="$define sys/types.h $d_socket sys/socket.h" 
14184         yyy=''
14185         case "$d_socklen_t" in
14186         "$define") yyy="$yyy socklen_t"
14187         esac
14188         yyy="$yyy $sizetype int long unsigned"
14189         for xxx in $yyy; do
14190                 case "$socksizetype" in
14191                 '')     try="extern int accept(int, struct sockaddr *, $xxx *);"
14192                         if ./protochk "$try" $hdrs; then
14193                                 echo "Your system accepts '$xxx *' for the last argument of accept()."
14194                                 socksizetype="$xxx"
14195                         fi
14196                         ;;
14197                 esac
14198         done
14199 : In case none of those worked, prompt the user.
14200         case "$socksizetype" in
14201         '')     rp='What is the type for socket address structure sizes?'
14202                 dflt='int'
14203                 . ./myread
14204                 socksizetype=$ans
14205                 ;;
14206         esac
14207         ;;
14208 *)      : no sockets, so pick relatively harmless default
14209         socksizetype='int'
14210         ;;
14211 esac
14212
14213 : see what type is used for signed size_t
14214 set ssize_t ssizetype int stdio.h sys/types.h
14215 eval $typedef
14216 dflt="$ssizetype"
14217 $cat > ssize.c <<EOM
14218 #include <stdio.h>
14219 #include <sys/types.h>
14220 #define Size_t $sizetype
14221 #define SSize_t $dflt
14222 int main()
14223 {
14224         if (sizeof(Size_t) == sizeof(SSize_t))
14225                 printf("$dflt\n");
14226         else if (sizeof(Size_t) == sizeof(int))
14227                 printf("int\n");
14228         else 
14229                 printf("long\n");
14230         exit(0);
14231 }
14232 EOM
14233 echo " "
14234 set ssize
14235 if eval $compile_ok && ./ssize > /dev/null; then
14236         ssizetype=`./ssize`
14237         echo "I'll be using $ssizetype for functions returning a byte count." >&4
14238 else
14239         $cat >&4 <<EOM
14240 Help! I can't compile and run the ssize_t test program: please enlighten me!
14241 (This is probably a misconfiguration in your system or libraries, and
14242 you really ought to fix it.  Still, I'll try anyway.)
14243
14244 I need a type that is the same size as $sizetype, but is guaranteed to
14245 be signed.  Common values are ssize_t, int and long.
14246
14247 EOM
14248         rp="What signed type is the same size as $sizetype?"
14249         . ./myread
14250         ssizetype="$ans"
14251 fi
14252 $rm -f ssize ssize.*
14253
14254 : see what type of char stdio uses.
14255 echo " "
14256 if $contains 'unsigned.*char.*_ptr;' `./findhdr stdio.h` >/dev/null 2>&1 ; then
14257         echo "Your stdio uses unsigned chars." >&4
14258         stdchar="unsigned char"
14259 else
14260         echo "Your stdio uses signed chars." >&4
14261         stdchar="char"
14262 fi
14263
14264 : see if time exists
14265 echo " "
14266 if test "X$d_time" = X -o X"$timetype" = X; then
14267     if set time val -f d_time; eval $csym; $val; then
14268                 echo 'time() found.' >&4
14269                 val="$define"
14270                 rp="What is the type returned by time() on this system?"
14271                 set time_t timetype long stdio.h sys/types.h
14272                 eval $typedef_ask
14273     else
14274                 echo 'time() not found, hope that will do.' >&4
14275                 val="$undef"
14276                 timetype='int';
14277     fi
14278     set d_time
14279     eval $setvar
14280 fi
14281
14282 : see what type uids are declared as in the kernel
14283 echo " "
14284 echo "Looking for the type for user ids returned by getuid()."
14285 set uid_t uidtype xxx stdio.h sys/types.h
14286 eval $typedef
14287 case "$uidtype" in
14288 xxx)
14289         xxx=`./findhdr sys/user.h`
14290         set `grep '_ruid;' "$xxx" 2>/dev/null` unsigned short
14291         case $1 in
14292         unsigned) dflt="$1 $2" ;;
14293         *) dflt="$1" ;;
14294         esac
14295         ;;
14296 *) dflt="$uidtype";;
14297 esac
14298 case "$uidtype" in
14299 uid_t)  echo "uid_t found." ;;
14300 *)      rp="What is the type for user ids returned by getuid()?"
14301         . ./myread
14302         uidtype="$ans"
14303         ;;
14304 esac
14305
14306 echo " "
14307 case "$uidtype" in
14308 *_t) zzz="$uidtype"     ;;
14309 *)   zzz="uid"          ;;
14310 esac
14311 echo "Checking the size of $zzz..." >&4 
14312 cat > try.c <<EOCP
14313 #include <sys/types.h>
14314 #include <stdio.h>
14315 int main() {
14316     printf("%d\n", (int)sizeof($uidtype));
14317     exit(0);
14318 }
14319 EOCP
14320 set try
14321 if eval $compile_ok; then
14322         yyy=`./try`
14323         case "$yyy" in
14324         '')     uidsize=4
14325                 echo "(I can't execute the test program--guessing $uidsize.)" >&4
14326                 ;;
14327         *)      uidsize=$yyy
14328                 echo "Your $zzz is $uidsize bytes long."
14329                 ;;
14330         esac
14331 else
14332         uidsize=4
14333         echo "(I can't compile the test program--guessing $uidsize.)" >&4
14334 fi
14335
14336 echo " "
14337 case "$uidtype" in
14338 *_t) zzz="$uidtype"     ;;
14339 *)   zzz="uid"          ;;
14340 esac
14341 echo "Checking the sign of $zzz..." >&4
14342 cat > try.c <<EOCP
14343 #include <sys/types.h>
14344 #include <stdio.h>
14345 int main() {
14346         $uidtype foo = -1;
14347         if (foo < 0)
14348                 printf("-1\n");
14349         else
14350                 printf("1\n");
14351 }
14352 EOCP
14353 set try
14354 if eval $compile; then
14355         yyy=`./try`
14356         case "$yyy" in
14357         '')     uidsign=1
14358                 echo "(I can't execute the test program--guessing unsigned.)" >&4
14359                 ;;
14360         *)      uidsign=$yyy
14361                 case "$uidsign" in
14362                  1) echo "Your $zzz is unsigned." ;;
14363                 -1) echo "Your $zzz is signed."   ;;
14364                 esac
14365                 ;;
14366         esac
14367 else
14368         uidsign=1
14369         echo "(I can't compile the test program--guessing unsigned.)" >&4
14370 fi
14371
14372
14373
14374 echo " "
14375 $echo "Checking the format string to be used for uids..." >&4
14376
14377 case "$uidsign" in
14378 -1)     if $test X"$uidsize" = X"$ivsize"; then
14379                 uidformat="$ivdformat"
14380         else
14381                 if $test X"$uidsize" = X"$longsize"; then
14382                         uidformat='"ld"'
14383                 else
14384                         if $test X"$uidsize" = X"$intsize"; then
14385                                 uidformat='"d"'
14386                         else
14387                                 if $test X"$uidsize" = X"$shortsize"; then
14388                                         uidformat='"hd"'
14389                                 fi
14390                         fi
14391                 fi
14392         fi
14393         ;;
14394 *)      if $test X"$uidsize" = X"$uvsize"; then
14395                 uidformat="$uvuformat"
14396         else
14397                 if $test X"$uidsize" = X"$longsize"; then
14398                         uidformat='"lu"'
14399                 else
14400                         if $test X"$uidsize" = X"$intsize"; then
14401                                 uidformat='"u"'
14402                         else
14403                                 if $test X"$uidsize" = X"$shortsize"; then
14404                                         uidformat='"hu"'
14405                                 fi
14406                         fi
14407                 fi
14408         fi
14409         ;;
14410 esac
14411
14412 : see if dbm.h is available
14413 : see if dbmclose exists
14414 set dbmclose d_dbmclose
14415 eval $inlibc
14416
14417 case "$d_dbmclose" in
14418 $define)
14419         set dbm.h i_dbm
14420         eval $inhdr
14421         case "$i_dbm" in
14422         $define)
14423                 val="$undef"
14424                 set i_rpcsvcdbm
14425                 eval $setvar
14426                 ;;
14427         *)      set rpcsvc/dbm.h i_rpcsvcdbm
14428                 eval $inhdr
14429                 ;;
14430         esac
14431         ;;
14432 *)      echo "We won't be including <dbm.h>"
14433         val="$undef"
14434         set i_dbm
14435         eval $setvar
14436         val="$undef"
14437         set i_rpcsvcdbm
14438         eval $setvar
14439         ;;
14440 esac
14441
14442 : see if this is a sys/file.h system
14443 val=''
14444 set sys/file.h val
14445 eval $inhdr
14446
14447 : do we need to include sys/file.h ?
14448 case "$val" in
14449 "$define")
14450         echo " "
14451         if $h_sysfile; then
14452                 val="$define"
14453                 echo "We'll be including <sys/file.h>." >&4
14454         else
14455                 val="$undef"
14456                 echo "We won't be including <sys/file.h>." >&4
14457         fi
14458         ;;
14459 *)
14460         h_sysfile=false
14461         ;;
14462 esac
14463 set i_sysfile
14464 eval $setvar
14465
14466 : see if fcntl.h is there
14467 val=''
14468 set fcntl.h val
14469 eval $inhdr
14470
14471 : see if we can include fcntl.h
14472 case "$val" in
14473 "$define")
14474         echo " "
14475         if $h_fcntl; then
14476                 val="$define"
14477                 echo "We'll be including <fcntl.h>." >&4
14478         else
14479                 val="$undef"
14480                 if $h_sysfile; then
14481         echo "We don't need to include <fcntl.h> if we include <sys/file.h>." >&4
14482                 else
14483                         echo "We won't be including <fcntl.h>." >&4
14484                 fi
14485         fi
14486         ;;
14487 *)
14488         h_fcntl=false
14489         val="$undef"
14490         ;;
14491 esac
14492 set i_fcntl
14493 eval $setvar
14494
14495 : see if this is a iconv.h system
14496 set iconv.h i_iconv
14497 eval $inhdr
14498
14499 : see if this is a ieeefp.h system
14500 set ieeefp.h i_ieeefp
14501 eval $inhdr
14502
14503 : see if this is a libutil.h system
14504 set libutil.h i_libutil
14505 eval $inhdr
14506
14507 : see if locale.h is available
14508 set locale.h i_locale
14509 eval $inhdr
14510
14511 : see if mach cthreads are available
14512 if test "X$usethreads" = "X$define"; then
14513         set mach/cthreads.h i_machcthr
14514         eval $inhdr
14515 else
14516         i_machcthr="$undef"
14517 fi
14518
14519
14520
14521 : see if this is a math.h system
14522 set math.h i_math
14523 eval $inhdr
14524
14525 : see if this is a mntent.h system
14526 set mntent.h i_mntent
14527 eval $inhdr
14528
14529 : see if ndbm.h is available
14530 set ndbm.h t_ndbm
14531 eval $inhdr
14532 case "$t_ndbm" in
14533 $define)
14534         : see if dbm_open exists
14535         set dbm_open d_dbm_open
14536         eval $inlibc
14537         case "$d_dbm_open" in
14538         $undef)
14539                 t_ndbm="$undef"
14540                 echo "We won't be including <ndbm.h>"
14541                 ;;
14542         esac
14543         ;;
14544 esac
14545 val="$t_ndbm"
14546 set i_ndbm
14547 eval $setvar
14548
14549 : see if net/errno.h is available
14550 val=''
14551 set net/errno.h val
14552 eval $inhdr
14553
14554 : Unfortunately, it causes problems on some systems.  Arrgh.
14555 case "$val" in
14556 $define)
14557         cat > try.c <<'EOM'
14558 #include <stdio.h>
14559 #include <errno.h>
14560 #include <net/errno.h>
14561 int func()
14562 {
14563         return ENOTSOCK;
14564 }
14565 EOM
14566         if $cc $ccflags -c try.c >/dev/null 2>&1; then
14567                 echo "We'll be including <net/errno.h>." >&4
14568         else
14569                 echo "We won't be including <net/errno.h>." >&4
14570                 val="$undef"
14571         fi
14572         $rm -f try.* try
14573         ;;
14574 esac
14575 set i_neterrno
14576 eval $setvar
14577
14578 : see if netinet/tcp.h is available
14579 set netinet/tcp.h i_netinettcp
14580 eval $inhdr
14581
14582 : see if this is a poll.h system
14583 set poll.h i_poll
14584 eval $inhdr
14585
14586 : see if this is a prot.h system
14587 set prot.h i_prot
14588 eval $inhdr
14589
14590 echo " "
14591 $echo "Guessing which symbols your C compiler and preprocessor define..." >&4 
14592 $cat <<'EOSH' > Cppsym.know
14593 a29k ABI64 aegis AES_SOURCE AIX AIX32 AIX370
14594 AIX41 AIX42 AIX43 AIX_SOURCE aixpc ALL_SOURCE
14595 alliant alpha am29000 AM29000 amiga AMIGAOS AMIX
14596 ansi ANSI_C_SOURCE apollo ardent atarist att386 att3b BeOS
14597 BIG_ENDIAN BIT_MSF bsd BSD bsd43 bsd4_2 bsd4_3 BSD4_3 bsd4_4
14598 BSD_4_3 BSD_4_4 BSD_NET2 BSD_TIME BSD_TYPES BSDCOMPAT bsdi
14599 bull c cadmus clipper CMU COFF COMPILER_VERSION
14600 concurrent convex cpu cray CRAY CRAYMPP ctix CX_UX
14601 CYGWIN DGUX DGUX_SOURCE DJGPP dmert DOLPHIN DPX2 DSO
14602 Dynix DynixPTX ELF encore EPI EXTENSIONS FILE_OFFSET_BITS
14603 FreeBSD GCC_NEW_VARARGS gcos gcx gimpel
14604 GNU_SOURCE GNUC GNUC_MINOR GO32 gould GOULD_PN
14605 H3050R H3050RX hbullx20 hcx host_mips
14606 hp200 hp300 hp700 HP700 hp800 hp9000
14607 hp9000s200 hp9000s300 hp9000s400 hp9000s500
14608 hp9000s700 hp9000s800 hp9k8 hp_osf hppa hpux HPUX_SOURCE
14609 i186 i286 i386 i486 i586 i686 i8086 i80960 i860 I960
14610 iAPX286 ibm ibm032 ibmesa IBMR2 ibmrt ILP32 ILP64
14611 INLINE_INTRINSICS INTRINSICS INT64 interdata is68k ksr1
14612 LANGUAGE_C LARGE_FILE_API LARGEFILE64_SOURCE
14613 LARGEFILE_SOURCE LFS64_LARGEFILE LFS_LARGEFILE
14614 Linux LITTLE_ENDIAN LONG64 LONG_DOUBLE LONG_LONG
14615 LONGDOUBLE LONGLONG LP64 luna luna88k Lynx
14616 M68000 m68k m88100 m88k M88KBCS_TARGET M_COFF
14617 M_I186 M_I286 M_I386 M_I8086 M_I86 M_I86SM M_SYS3
14618 M_SYS5 M_SYSIII M_SYSV M_UNIX M_XENIX MACH machine MachTen
14619 MATH_HAS_NO_SIDE_EFFECTS
14620 mc300 mc500 mc68000 mc68010 mc68020 mc68030 mc68040
14621 mc68060 mc68k mc68k32 mc700 mc88000 mc88100 merlin
14622 mert MiNT mips MIPS_FPSET MIPS_ISA MIPS_SIM MIPS_SZINT
14623 MIPS_SZLONG MIPS_SZPTR MIPSEB MIPSEL MODERN_C motorola
14624 mpeix MSDOS MTXINU MULTIMAX mvs MVS n16 ncl_el ncl_mr
14625 NetBSD news1500 news1700 news1800 news1900 news3700
14626 news700 news800 news900 NeXT NLS ns16000 ns32000
14627 ns32016 ns32332 ns32k nsc32000
14628 OCS88 OEMVS OpenBSD os OS2 OS390 osf OSF1 OSF_SOURCE
14629 pa_risc PA_RISC1_1 PA_RISC2_0 PARAGON parisc
14630 pc532 pdp11 PGC PIC plexus PORTAR posix
14631 POSIX1B_SOURCE POSIX2_SOURCE POSIX4_SOURCE
14632 POSIX_C_SOURCE POSIX_SOURCE POWER
14633 PROTOTYPES PWB pyr QNX R3000 REENTRANT RES Rhapsody RISC6000
14634 riscix riscos RT scs SCO sequent sgi SGI_SOURCE sinix
14635 SIZE_INT SIZE_LONG SIZE_PTR SOCKET_SOURCE SOCKETS_SOURCE
14636 sony sony_news sonyrisc sparc sparclite spectrum
14637 stardent stdc STDC_EXT stratos sun sun3 sun386
14638 Sun386i svr3 svr4 SVR4_2 SVR4_SOURCE svr5
14639 SX system SYSTYPE_BSD SYSTYPE_BSD43 SYSTYPE_BSD44
14640 SYSTYPE_SVR4 SYSTYPE_SVR5 SYSTYPE_SYSV SYSV SYSV3 SYSV4 SYSV5
14641 sysV68 sysV88 Tek4132 Tek4300 titan
14642 tower tower32 tower32_200 tower32_600 tower32_700
14643 tower32_800 tower32_850 tss
14644 u370 u3b u3b2 u3b20 u3b200 u3b20d u3b5
14645 ultrix UMAXV UnicomPBB UnicomPBD UNICOS UNICOSMK
14646 unix UNIX95 UNIX99 unixpc unos USGr4 USGr4_2
14647 Utek UTek UTS UWIN uxpm uxps vax venix VMESA vms xenix Xenix286
14648 XOPEN_SOURCE XOPEN_SOURCE_EXTENDED XPG2 XPG2_EXTENDED
14649 XPG3 XPG3_EXTENDED XPG4 XPG4_EXTENDED
14650 z8000
14651 EOSH
14652 # Maybe put other stuff here too.
14653 cat <<EOSH >>Cppsym.know
14654 $osname
14655 EOSH
14656 ./tr '[a-z]' '[A-Z]' < Cppsym.know > Cppsym.a
14657 ./tr '[A-Z]' '[a-z]' < Cppsym.know > Cppsym.b
14658 $cat Cppsym.know > Cppsym.c
14659 $cat Cppsym.a Cppsym.b Cppsym.c | $tr ' ' $trnl | sort | uniq > Cppsym.know
14660 $rm -f Cppsym.a Cppsym.b Cppsym.c
14661 cat <<EOSH > Cppsym
14662 $startsh
14663 if $test \$# -gt 0; then
14664     echo \$* | $tr " " "$trnl" | ./Cppsym.try > Cppsym.got
14665     if $test -s Cppsym.got; then
14666         $rm -f Cppsym.got
14667         exit 0
14668     fi
14669     $rm -f Cppsym.got
14670     exit 1
14671 else
14672     $tr " " "$trnl" | ./Cppsym.try
14673     exit 0
14674 fi
14675 EOSH
14676 chmod +x Cppsym
14677 $eunicefix Cppsym
14678 cat <<EOSH > Cppsym.try
14679 $startsh
14680 cat <<'EOCP' > try.c
14681 #include <stdio.h>
14682 int main() {
14683 EOCP
14684 $awk \\
14685 EOSH
14686 cat <<'EOSH' >> Cppsym.try
14687 'length($1) > 0 {
14688     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
14689     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
14690     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
14691     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
14692 }'       >> try.c
14693 echo '}' >> try.c
14694 EOSH
14695 cat <<EOSH >> Cppsym.try
14696 ccflags="$ccflags"
14697 case "$osname-$gccversion" in
14698 irix-) ccflags="\$ccflags -woff 1178" ;;
14699 os2-*) ccflags="\$ccflags -Zlinker /PM:VIO" ;;
14700 esac
14701 $cc $optimize \$ccflags $ldflags -o try try.c $libs && ./try$exe_ext
14702 EOSH
14703 chmod +x Cppsym.try
14704 $eunicefix Cppsym.try
14705 ./Cppsym < Cppsym.know > Cppsym.true
14706 : now check the C compiler for additional symbols
14707 postprocess_cc_v=''
14708 case "$osname" in
14709 aix) postprocess_cc_v="|$tr , ' '" ;;
14710 esac
14711 $cat >ccsym <<EOS
14712 $startsh
14713 $cat >tmp.c <<EOF
14714 extern int foo;
14715 EOF
14716 for i in \`$cc -v -c tmp.c 2>&1 $postprocess_cc_v\`
14717 do
14718         case "\$i" in
14719         -D*) echo "\$i" | $sed 's/^-D//';;
14720         -A*) $test "$gccversion" && echo "\$i" | $sed 's/^-A\(.*\)(\(.*\))/\1=\2/';;
14721         esac
14722 done
14723 $rm -f try.c
14724 EOS
14725 postprocess_cc_v=''
14726 chmod +x ccsym
14727 $eunicefix ccsym
14728 ./ccsym > ccsym1.raw
14729 if $test -s ccsym1.raw; then
14730        $sort ccsym1.raw | $uniq >ccsym.raw
14731 else
14732        mv ccsym1.raw ccsym.raw
14733 fi
14734
14735 $awk '/\=/ { print $0; next }
14736         { print $0"=1" }' ccsym.raw >ccsym.list
14737 $awk '/\=/ { print $0; next }
14738         { print $0"=1" }' Cppsym.true >ccsym.true
14739 $comm -13 ccsym.true ccsym.list >ccsym.own
14740 $comm -12 ccsym.true ccsym.list >ccsym.com
14741 $comm -23 ccsym.true ccsym.list >ccsym.cpp
14742 also=''
14743 if $test -z ccsym.raw; then
14744         echo "Your C compiler doesn't seem to define any symbols!" >&4
14745         echo " "
14746         echo "However, your C preprocessor defines the following symbols:"
14747         $cat Cppsym.true
14748         ccsymbols=''
14749         cppsymbols=`$cat Cppsym.true`
14750         cppsymbols=`echo $cppsymbols`
14751         cppccsymbols="$cppsymbols"
14752 else
14753         if $test -s ccsym.com; then
14754                 echo "Your C compiler and pre-processor define these symbols:"
14755                 $sed -e 's/\(..*\)=.*/\1/' ccsym.com
14756                 also='also '
14757                 symbols='ones'
14758                 cppccsymbols=`$cat ccsym.com`
14759                 cppccsymbols=`echo $cppccsymbols`
14760                 $test "$silent" || sleep 1
14761         fi
14762         if $test -s ccsym.cpp; then
14763                 $test "$also" && echo " "
14764                 echo "Your C pre-processor ${also}defines the following symbols:"
14765                 $sed -e 's/\(..*\)=.*/\1/' ccsym.cpp
14766                 also='further '
14767                 cppsymbols=`$cat ccsym.cpp`
14768                 cppsymbols=`echo $cppsymbols`
14769                 $test "$silent" || sleep 1
14770         fi
14771         if $test -s ccsym.own; then
14772                 $test "$also" && echo " "
14773                 echo "Your C compiler ${also}defines the following cpp symbols:"
14774                 $sed -e 's/\(..*\)=1/\1/' ccsym.own
14775                 $sed -e 's/\(..*\)=.*/\1/' ccsym.own | $uniq >>Cppsym.true
14776                 ccsymbols=`$cat ccsym.own`
14777                 ccsymbols=`echo $ccsymbols`
14778                 $test "$silent" || sleep 1
14779         fi
14780 fi
14781 $rm -f ccsym* Cppsym.*
14782
14783 : see if this is a termio system
14784 val="$undef"
14785 val2="$undef"
14786 val3="$undef"
14787 if $test `./findhdr termios.h`; then
14788         set tcsetattr i_termios
14789         eval $inlibc
14790         val3="$i_termios"
14791 fi
14792 echo " "
14793 case "$val3" in
14794 "$define") echo "You have POSIX termios.h... good!" >&4;;
14795 *) if ./Cppsym pyr; then
14796                 case "`/bin/universe`" in
14797                 ucb) if $test `./findhdr sgtty.h`; then
14798                                 val2="$define"
14799                                 echo "<sgtty.h> found." >&4
14800                         else
14801                                 echo "System is pyramid with BSD universe."
14802                                 echo "<sgtty.h> not found--you could have problems." >&4
14803                         fi;;
14804                 *) if $test `./findhdr termio.h`; then
14805                                 val="$define"
14806                                 echo "<termio.h> found." >&4
14807                         else
14808                                 echo "System is pyramid with USG universe."
14809                                 echo "<termio.h> not found--you could have problems." >&4
14810                         fi;;
14811                 esac
14812         elif ./usg; then
14813                 if $test `./findhdr termio.h`; then
14814                         echo "<termio.h> found." >&4
14815                         val="$define"
14816                 elif $test `./findhdr sgtty.h`; then
14817                         echo "<sgtty.h> found." >&4
14818                         val2="$define"
14819                 else
14820 echo "Neither <termio.h> nor <sgtty.h> found--you could have problems." >&4
14821                 fi
14822         else
14823                 if $test `./findhdr sgtty.h`; then
14824                         echo "<sgtty.h> found." >&4
14825                         val2="$define"
14826                 elif $test `./findhdr termio.h`; then
14827                         echo "<termio.h> found." >&4
14828                         val="$define"
14829                 else
14830 echo "Neither <sgtty.h> nor <termio.h> found--you could have problems." >&4
14831                 fi
14832         fi;;
14833 esac
14834 set i_termio; eval $setvar
14835 val=$val2; set i_sgtty; eval $setvar
14836 val=$val3; set i_termios; eval $setvar
14837
14838 : see if this is a shadow.h system
14839 set shadow.h i_shadow
14840 eval $inhdr
14841
14842 : see if this is a socks.h system
14843 set socks.h i_socks
14844 eval $inhdr
14845
14846 : see if stdarg is available
14847 echo " "
14848 if $test `./findhdr stdarg.h`; then
14849         echo "<stdarg.h> found." >&4
14850         valstd="$define"
14851 else
14852         echo "<stdarg.h> NOT found." >&4
14853         valstd="$undef"
14854 fi
14855
14856 : see if varags is available
14857 echo " "
14858 if $test `./findhdr varargs.h`; then
14859         echo "<varargs.h> found." >&4
14860 else
14861         echo "<varargs.h> NOT found, but that's ok (I hope)." >&4
14862 fi
14863
14864 : set up the varargs testing programs
14865 $cat > varargs.c <<EOP
14866 #ifdef I_STDARG
14867 #include <stdarg.h>
14868 #endif
14869 #ifdef I_VARARGS
14870 #include <varargs.h>
14871 #endif
14872
14873 #ifdef I_STDARG
14874 int f(char *p, ...)
14875 #else
14876 int f(va_alist)
14877 va_dcl
14878 #endif
14879 {
14880         va_list ap;
14881 #ifndef I_STDARG
14882         char *p;
14883 #endif
14884 #ifdef I_STDARG
14885         va_start(ap,p);
14886 #else
14887         va_start(ap);
14888         p = va_arg(ap, char *);
14889 #endif
14890         va_end(ap);
14891 }
14892 EOP
14893 $cat > varargs <<EOP
14894 $startsh
14895 if $cc -c $ccflags -D\$1 varargs.c >/dev/null 2>&1; then
14896         echo "true"
14897 else
14898         echo "false"
14899 fi
14900 $rm -f varargs$_o
14901 EOP
14902 chmod +x varargs
14903
14904 : now check which varargs header should be included
14905 echo " "
14906 i_varhdr=''
14907 case "$valstd" in
14908 "$define")
14909         if `./varargs I_STDARG`; then
14910                 val='stdarg.h'
14911         elif `./varargs I_VARARGS`; then
14912                 val='varargs.h'
14913         fi
14914         ;;
14915 *)
14916         if `./varargs I_VARARGS`; then
14917                 val='varargs.h'
14918         fi
14919         ;;
14920 esac
14921 case "$val" in
14922 '')
14923 echo "I could not find the definition for va_dcl... You have problems..." >&4
14924         val="$undef"; set i_stdarg; eval $setvar
14925         val="$undef"; set i_varargs; eval $setvar
14926         ;;
14927 *) 
14928         set i_varhdr
14929         eval $setvar
14930         case "$i_varhdr" in
14931         stdarg.h)
14932                 val="$define"; set i_stdarg; eval $setvar
14933                 val="$undef"; set i_varargs; eval $setvar
14934                 ;;
14935         varargs.h)
14936                 val="$undef"; set i_stdarg; eval $setvar
14937                 val="$define"; set i_varargs; eval $setvar
14938                 ;;
14939         esac
14940         echo "We'll include <$i_varhdr> to get va_dcl definition." >&4;;
14941 esac
14942 $rm -f varargs*
14943
14944 : see if stddef is available
14945 set stddef.h i_stddef
14946 eval $inhdr
14947
14948 : see if this is a sunmath.h system
14949 set sunmath.h i_sunmath
14950 eval $inhdr
14951
14952 : see if sys/access.h is available
14953 set sys/access.h i_sysaccess
14954 eval $inhdr
14955
14956 : see if ioctl defs are in sgtty, termio, sys/filio or sys/ioctl
14957 set sys/filio.h i_sysfilio
14958 eval $inhdr
14959 echo " "
14960 if $test `./findhdr sys/ioctl.h`; then
14961         val="$define"
14962         echo '<sys/ioctl.h> found.' >&4
14963 else
14964         val="$undef"
14965         if $test $i_sysfilio = "$define"; then
14966             echo '<sys/ioctl.h> NOT found.' >&4
14967         else
14968                 $test $i_sgtty = "$define" && xxx="sgtty.h"
14969                 $test $i_termio = "$define" && xxx="termio.h"
14970                 $test $i_termios = "$define" && xxx="termios.h"
14971 echo "No <sys/ioctl.h> found, assuming ioctl args are defined in <$xxx>." >&4
14972         fi
14973 fi
14974 set i_sysioctl
14975 eval $setvar
14976
14977
14978 : see if this is a syslog.h system
14979 set syslog.h i_syslog
14980 eval $inhdr
14981
14982
14983 : see if this is a sys/mode.h system
14984 set sys/mode.h i_sysmode
14985 eval $inhdr
14986
14987 : see if sys/resource.h has to be included
14988 set sys/resource.h i_sysresrc
14989 eval $inhdr
14990
14991 : see if sys/security.h is available
14992 set sys/security.h i_syssecrt
14993 eval $inhdr
14994
14995 : see if this is a sys/statvfs.h system
14996 set sys/statvfs.h i_sysstatvfs
14997 eval $inhdr
14998
14999 : see if this is a sys/uio.h system
15000 set sys/uio.h i_sysuio
15001 eval $inhdr
15002
15003 : see if this is a sys/un.h system
15004 set sys/un.h i_sysun
15005 eval $inhdr
15006
15007
15008 : see if this is a sys/utsname.h system
15009 set sys/utsname.h i_sysutsname
15010 eval $inhdr
15011
15012 : see if this is a syswait system
15013 set sys/wait.h i_syswait
15014 eval $inhdr
15015
15016 : see if this is a ustat.h system
15017 set ustat.h i_ustat
15018 eval $inhdr
15019
15020 : see if this is an utime system
15021 set utime.h i_utime
15022 eval $inhdr
15023
15024 : see if this is a values.h system
15025 set values.h i_values
15026 eval $inhdr
15027
15028 : see if this is a vfork system
15029 case "$d_vfork" in
15030 "$define")
15031         set vfork.h i_vfork
15032         eval $inhdr
15033         ;;
15034 *)
15035         i_vfork="$undef"
15036         ;;
15037 esac
15038
15039 : see if gdbm.h is available
15040 set gdbm.h t_gdbm
15041 eval $inhdr
15042 case "$t_gdbm" in
15043 $define)
15044         : see if gdbm_open exists
15045         set gdbm_open d_gdbm_open
15046         eval $inlibc
15047         case "$d_gdbm_open" in
15048         $undef)
15049                 t_gdbm="$undef"
15050                 echo "We won't be including <gdbm.h>"
15051                 ;;
15052         esac
15053         ;;
15054 esac
15055 val="$t_gdbm"
15056 set i_gdbm
15057 eval $setvar
15058
15059 echo " "
15060 echo "Looking for extensions..." >&4
15061 : If we are using the old config.sh, known_extensions may contain
15062 : old or inaccurate or duplicate values.
15063 known_extensions=''
15064 nonxs_extensions=''
15065 : We do not use find because it might not be available.
15066 : We do not just use MANIFEST because the user may have dropped
15067 : some additional extensions into the source tree and expect them
15068 : to be built.
15069
15070 : Function to recursively find available extensions, ignoring DynaLoader
15071 : NOTE: recursion limit of 10 to prevent runaway in case of symlink madness
15072 find_extensions='
15073     for xxx in *; do
15074        case "$xxx" in
15075            DynaLoader|dynaload) ;;
15076            *)
15077            if $test -f $xxx/$xxx.xs; then
15078                known_extensions="$known_extensions $1$xxx";
15079            elif $test -f $xxx/Makefile.PL; then
15080                nonxs_extensions="$nonxs_extensions $1$xxx";
15081            else
15082                if $test -d $xxx -a $# -lt 10; then
15083                    set $1$xxx/ $*;
15084                    cd $xxx;
15085                    eval $find_extensions;
15086                    cd ..;
15087                    shift;
15088                fi;
15089            fi
15090            ;;
15091        esac;
15092     done'
15093 tdir=`pwd`
15094 cd $rsrc/ext
15095 set X
15096 shift
15097 eval $find_extensions
15098 set X $nonxs_extensions
15099 shift
15100 nonxs_extensions="$*"
15101 set X $known_extensions
15102 shift
15103 known_extensions="$*"
15104 cd $tdir
15105
15106 : Now see which are supported on this system.
15107 avail_ext=''
15108 for xxx in $known_extensions ; do
15109         case "$xxx" in
15110         DB_File|db_file)
15111                 case "$i_db" in
15112                 $define) avail_ext="$avail_ext $xxx" ;;
15113                 esac
15114                 ;;
15115         GDBM_File|gdbm_fil)
15116                 case "$i_gdbm" in 
15117                 $define) avail_ext="$avail_ext $xxx" ;;
15118                 esac
15119                 ;;
15120         NDBM_File|ndbm_fil)
15121                 case "$i_ndbm" in
15122                 $define)
15123                     case "$osname-$use64bitint" in
15124                     hpux-define)
15125                         case "$libs" in
15126                         *-lndbm*) avail_ext="$avail_ext $xxx" ;;
15127                         esac
15128                         ;;
15129                     *) avail_ext="$avail_ext $xxx" ;;
15130                     esac
15131                     ;;
15132                 esac
15133                 ;;
15134         ODBM_File|odbm_fil) 
15135                 case "${i_dbm}${i_rpcsvcdbm}" in
15136                 *"${define}"*)
15137                     case "$osname-$use64bitint" in
15138                     hpux-define)
15139                         case "$libs" in
15140                         *-ldbm*) avail_ext="$avail_ext $xxx" ;;
15141                         esac
15142                         ;;
15143                     *) avail_ext="$avail_ext $xxx" ;;
15144                     esac
15145                     ;;
15146                 esac
15147                 ;;
15148         POSIX|posix)
15149                 case "$useposix" in
15150                 true|define|y) avail_ext="$avail_ext $xxx" ;;
15151                 esac
15152                 ;;
15153         Opcode|opcode)
15154                 case "$useopcode" in
15155                 true|define|y) avail_ext="$avail_ext $xxx" ;;
15156                 esac
15157                 ;;
15158         Socket|socket)
15159                 case "$d_socket" in 
15160                 true|$define|y) avail_ext="$avail_ext $xxx" ;;
15161                 esac
15162                 ;;
15163         Sys/Syslog|sys/syslog)
15164                 : XXX syslog requires socket
15165                 case "$d_socket" in 
15166                 true|$define|y) avail_ext="$avail_ext $xxx" ;;
15167                 esac
15168                 ;;
15169         Thread|thread)
15170                 case "$usethreads" in 
15171                 true|$define|y) avail_ext="$avail_ext $xxx" ;;
15172                 esac
15173                 ;;
15174         IPC/SysV|ipc/sysv)
15175                 : XXX Do we need a useipcsysv variable here
15176                 case "${d_msg}${d_sem}${d_shm}" in 
15177                 *"${define}"*) avail_ext="$avail_ext $xxx" ;;
15178                 esac
15179                 ;;
15180         *)      avail_ext="$avail_ext $xxx"
15181                 ;;
15182         esac
15183 done
15184
15185 set X $avail_ext
15186 shift
15187 avail_ext="$*"
15188
15189 : Now see which nonxs extensions are supported on this system.
15190 : For now assume all are.
15191 nonxs_ext=''
15192 for xxx in $nonxs_extensions ; do
15193         case "$xxx" in
15194         *)      nonxs_ext="$nonxs_ext $xxx"
15195                 ;;
15196         esac
15197 done
15198
15199 set X $nonxs_ext
15200 shift
15201 nonxs_ext="$*"
15202
15203 case $usedl in
15204 $define)
15205         $cat <<EOM
15206 A number of extensions are supplied with $package.  You may choose to
15207 compile these extensions for dynamic loading (the default), compile
15208 them into the $package executable (static loading), or not include
15209 them at all.  Answer "none" to include no extensions.
15210 Note that DynaLoader is always built and need not be mentioned here.
15211
15212 EOM
15213         case "$dynamic_ext" in
15214         '') dflt="$avail_ext" ;;
15215         *)      dflt="$dynamic_ext"
15216                 # Perhaps we are reusing an old out-of-date config.sh.
15217                 case "$hint" in
15218                 previous)
15219                         if test X"$dynamic_ext" != X"$avail_ext"; then
15220                                 $cat <<EOM
15221 NOTICE:  Your previous config.sh list may be incorrect. 
15222 The extensions now available to you are 
15223         ${avail_ext}
15224 but the default list from your previous config.sh is
15225         ${dynamic_ext} 
15226
15227 EOM
15228                         fi
15229                         ;;
15230                 esac
15231                 ;;
15232         esac
15233         case "$dflt" in
15234         '')     dflt=none;;
15235         esac
15236         rp="What extensions do you wish to load dynamically?"
15237         . ./myread
15238         case "$ans" in
15239         none) dynamic_ext=' ' ;;
15240         *) dynamic_ext="$ans" ;;
15241         esac
15242
15243         case "$static_ext" in
15244         '')
15245                 : Exclude those already listed in dynamic linking
15246                 dflt=''
15247                 for xxx in $avail_ext; do
15248                         case " $dynamic_ext " in
15249                         *" $xxx "*) ;;
15250                         *) dflt="$dflt $xxx" ;;
15251                         esac
15252                 done
15253                 set X $dflt
15254                 shift
15255                 dflt="$*"
15256                 ;;
15257         *)  dflt="$static_ext" 
15258                 ;;
15259         esac
15260
15261         case "$dflt" in
15262         '')     dflt=none;;
15263         esac
15264         rp="What extensions do you wish to load statically?"
15265         . ./myread
15266         case "$ans" in
15267         none) static_ext=' ' ;;
15268         *) static_ext="$ans" ;;
15269         esac
15270         ;;
15271 *)
15272         $cat <<EOM
15273 A number of extensions are supplied with $package.  Answer "none" 
15274 to include no extensions. 
15275 Note that DynaLoader is always built and need not be mentioned here.
15276
15277 EOM
15278         case "$static_ext" in
15279         '') dflt="$avail_ext" ;;
15280         *)      dflt="$static_ext"
15281                 # Perhaps we are reusing an old out-of-date config.sh.
15282                 case "$hint" in
15283                 previous)
15284                         if test X"$static_ext" != X"$avail_ext"; then
15285                                 $cat <<EOM
15286 NOTICE:  Your previous config.sh list may be incorrect. 
15287 The extensions now available to you are 
15288         ${avail_ext}
15289 but the default list from your previous config.sh is
15290         ${static_ext} 
15291
15292 EOM
15293                         fi
15294                         ;;
15295                 esac
15296                 ;;
15297         esac
15298         : Exclude those that are not xs extensions
15299         case "$dflt" in
15300         '')     dflt=none;;
15301         esac
15302         rp="What extensions do you wish to include?"
15303         . ./myread
15304         case "$ans" in
15305         none) static_ext=' ' ;;
15306         *) static_ext="$ans" ;;
15307         esac
15308         ;;
15309 esac
15310
15311 set X $dynamic_ext $static_ext $nonxs_ext
15312 shift
15313 extensions="$*"
15314
15315 : Remove build directory name from cppstdin so it can be used from
15316 : either the present location or the final installed location.
15317 echo " "
15318 : Get out of the UU directory to get correct path name.
15319 cd ..
15320 case "$cppstdin" in
15321 `pwd`/cppstdin)
15322         echo "Stripping down cppstdin path name"
15323         cppstdin=cppstdin
15324         ;;
15325 esac
15326 cd UU
15327
15328 : end of configuration questions
15329 echo " "
15330 echo "End of configuration questions."
15331 echo " "
15332
15333 : back to where it started
15334 if test -d ../UU; then
15335         cd ..
15336 fi
15337
15338 : configuration may be patched via a 'config.over' file
15339 if $test -f config.over; then
15340         echo " "
15341         dflt=y
15342         rp='I see a config.over file.  Do you wish to load it?'
15343         . UU/myread
15344         case "$ans" in
15345         n*) echo "OK, I'll ignore it.";;
15346         *)      . ./config.over
15347                 echo "Configuration override changes have been loaded."
15348                 ;;
15349         esac
15350 fi
15351
15352 : in case they want portability, strip down executable paths
15353 case "$d_portable" in
15354 "$define")
15355         echo " "
15356         echo "Stripping down executable paths..." >&4
15357         for file in $loclist $trylist; do
15358                 eval temp=\$$file
15359                 eval $file=`basename $temp`
15360         done
15361         ;;
15362 esac
15363
15364 : create config.sh file
15365 echo " "
15366 echo "Creating config.sh..." >&4
15367 $spitshell <<EOT >config.sh
15368 $startsh
15369 #
15370 # This file was produced by running the Configure script. It holds all the
15371 # definitions figured out by Configure. Should you modify one of these values,
15372 # do not forget to propagate your changes by running "Configure -der". You may
15373 # instead choose to run each of the .SH files by yourself, or "Configure -S".
15374 #
15375
15376 # Package name      : $package
15377 # Source directory  : $src
15378 # Configuration time: $cf_time
15379 # Configured by     : $cf_by
15380 # Target system     : $myuname
15381
15382 Author='$Author'
15383 Date='$Date'
15384 Header='$Header'
15385 Id='$Id'
15386 Locker='$Locker'
15387 Log='$Log'
15388 Mcc='$Mcc'
15389 RCSfile='$RCSfile'
15390 Revision='$Revision'
15391 Source='$Source'
15392 State='$State'
15393 _a='$_a'
15394 _exe='$_exe'
15395 _o='$_o'
15396 afs='$afs'
15397 alignbytes='$alignbytes'
15398 ansi2knr='$ansi2knr'
15399 aphostname='$aphostname'
15400 api_revision='$api_revision'
15401 api_subversion='$api_subversion'
15402 api_version='$api_version'
15403 api_versionstring='$api_versionstring'
15404 ar='$ar'
15405 archlib='$archlib'
15406 archlibexp='$archlibexp'
15407 archname64='$archname64'
15408 archname='$archname'
15409 archobjs='$archobjs'
15410 awk='$awk'
15411 baserev='$baserev'
15412 bash='$bash'
15413 bin='$bin'
15414 bincompat5005='$bincompat5005'
15415 binexp='$binexp'
15416 bison='$bison'
15417 byacc='$byacc'
15418 byteorder='$byteorder'
15419 c='$c'
15420 castflags='$castflags'
15421 cat='$cat'
15422 cc='$cc'
15423 cccdlflags='$cccdlflags'
15424 ccdlflags='$ccdlflags'
15425 ccflags='$ccflags'
15426 ccflags_uselargefiles='$ccflags_uselargefiles'
15427 ccname='$ccname'
15428 ccsymbols='$ccsymbols'
15429 cf_by='$cf_by'
15430 cf_email='$cf_email'
15431 cf_time='$cf_time'
15432 charsize='$charsize'
15433 chgrp='$chgrp'
15434 chmod='$chmod'
15435 chown='$chown'
15436 clocktype='$clocktype'
15437 comm='$comm'
15438 compress='$compress'
15439 contains='$contains'
15440 cp='$cp'
15441 cpio='$cpio'
15442 cpp='$cpp'
15443 cpp_stuff='$cpp_stuff'
15444 cppccsymbols='$cppccsymbols'
15445 cppflags='$cppflags'
15446 cpplast='$cpplast'
15447 cppminus='$cppminus'
15448 cpprun='$cpprun'
15449 cppstdin='$cppstdin'
15450 cppsymbols='$cppsymbols'
15451 crosscompile='$crosscompile'
15452 cryptlib='$cryptlib'
15453 csh='$csh'
15454 d_Gconvert='$d_Gconvert'
15455 d_PRIEldbl='$d_PRIEldbl'
15456 d_PRIFldbl='$d_PRIFldbl'
15457 d_PRIGldbl='$d_PRIGldbl'
15458 d_PRIX64='$d_PRIX64'
15459 d_PRId64='$d_PRId64'
15460 d_PRIeldbl='$d_PRIeldbl'
15461 d_PRIfldbl='$d_PRIfldbl'
15462 d_PRIgldbl='$d_PRIgldbl'
15463 d_PRIi64='$d_PRIi64'
15464 d_PRIo64='$d_PRIo64'
15465 d_PRIu64='$d_PRIu64'
15466 d_PRIx64='$d_PRIx64'
15467 d_SCNfldbl='$d_SCNfldbl'
15468 d_access='$d_access'
15469 d_accessx='$d_accessx'
15470 d_alarm='$d_alarm'
15471 d_archlib='$d_archlib'
15472 d_atolf='$d_atolf'
15473 d_atoll='$d_atoll'
15474 d_attribut='$d_attribut'
15475 d_bcmp='$d_bcmp'
15476 d_bcopy='$d_bcopy'
15477 d_bincompat5005='$d_bincompat5005'
15478 d_bsd='$d_bsd'
15479 d_bsdgetpgrp='$d_bsdgetpgrp'
15480 d_bsdsetpgrp='$d_bsdsetpgrp'
15481 d_bzero='$d_bzero'
15482 d_casti32='$d_casti32'
15483 d_castneg='$d_castneg'
15484 d_charvspr='$d_charvspr'
15485 d_chown='$d_chown'
15486 d_chroot='$d_chroot'
15487 d_chsize='$d_chsize'
15488 d_closedir='$d_closedir'
15489 d_const='$d_const'
15490 d_crypt='$d_crypt'
15491 d_csh='$d_csh'
15492 d_cuserid='$d_cuserid'
15493 d_dbl_dig='$d_dbl_dig'
15494 d_difftime='$d_difftime'
15495 d_dirnamlen='$d_dirnamlen'
15496 d_dlerror='$d_dlerror'
15497 d_dlopen='$d_dlopen'
15498 d_dlsymun='$d_dlsymun'
15499 d_dosuid='$d_dosuid'
15500 d_drand48proto='$d_drand48proto'
15501 d_dup2='$d_dup2'
15502 d_eaccess='$d_eaccess'
15503 d_endgrent='$d_endgrent'
15504 d_endhent='$d_endhent'
15505 d_endnent='$d_endnent'
15506 d_endpent='$d_endpent'
15507 d_endpwent='$d_endpwent'
15508 d_endsent='$d_endsent'
15509 d_eofnblk='$d_eofnblk'
15510 d_eunice='$d_eunice'
15511 d_fchmod='$d_fchmod'
15512 d_fchown='$d_fchown'
15513 d_fcntl='$d_fcntl'
15514 d_fd_macros='$d_fd_macros'
15515 d_fd_set='$d_fd_set'
15516 d_fds_bits='$d_fds_bits'
15517 d_fgetpos='$d_fgetpos'
15518 d_flexfnam='$d_flexfnam'
15519 d_flock='$d_flock'
15520 d_fork='$d_fork'
15521 d_fpathconf='$d_fpathconf'
15522 d_fpos64_t='$d_fpos64_t'
15523 d_frexpl='$d_frexpl'
15524 d_fs_data_s='$d_fs_data_s'
15525 d_fseeko='$d_fseeko'
15526 d_fsetpos='$d_fsetpos'
15527 d_fstatfs='$d_fstatfs'
15528 d_fstatvfs='$d_fstatvfs'
15529 d_ftello='$d_ftello'
15530 d_ftime='$d_ftime'
15531 d_getcwd='$d_getcwd'
15532 d_getespwnam='$d_getespwnam'
15533 d_getfsstat='$d_getfsstat'
15534 d_getgrent='$d_getgrent'
15535 d_getgrps='$d_getgrps'
15536 d_gethbyaddr='$d_gethbyaddr'
15537 d_gethbyname='$d_gethbyname'
15538 d_gethent='$d_gethent'
15539 d_gethname='$d_gethname'
15540 d_gethostprotos='$d_gethostprotos'
15541 d_getlogin='$d_getlogin'
15542 d_getmnt='$d_getmnt'
15543 d_getmntent='$d_getmntent'
15544 d_getnbyaddr='$d_getnbyaddr'
15545 d_getnbyname='$d_getnbyname'
15546 d_getnent='$d_getnent'
15547 d_getnetprotos='$d_getnetprotos'
15548 d_getpbyname='$d_getpbyname'
15549 d_getpbynumber='$d_getpbynumber'
15550 d_getpent='$d_getpent'
15551 d_getpgid='$d_getpgid'
15552 d_getpgrp2='$d_getpgrp2'
15553 d_getpgrp='$d_getpgrp'
15554 d_getppid='$d_getppid'
15555 d_getprior='$d_getprior'
15556 d_getprotoprotos='$d_getprotoprotos'
15557 d_getprpwnam='$d_getprpwnam'
15558 d_getpwent='$d_getpwent'
15559 d_getsbyname='$d_getsbyname'
15560 d_getsbyport='$d_getsbyport'
15561 d_getsent='$d_getsent'
15562 d_getservprotos='$d_getservprotos'
15563 d_getspnam='$d_getspnam'
15564 d_gettimeod='$d_gettimeod'
15565 d_gnulibc='$d_gnulibc'
15566 d_grpasswd='$d_grpasswd'
15567 d_hasmntopt='$d_hasmntopt'
15568 d_htonl='$d_htonl'
15569 d_iconv='$d_iconv'
15570 d_index='$d_index'
15571 d_inetaton='$d_inetaton'
15572 d_int64_t='$d_int64_t'
15573 d_isascii='$d_isascii'
15574 d_isnan='$d_isnan'
15575 d_isnanl='$d_isnanl'
15576 d_killpg='$d_killpg'
15577 d_lchown='$d_lchown'
15578 d_ldbl_dig='$d_ldbl_dig'
15579 d_link='$d_link'
15580 d_locconv='$d_locconv'
15581 d_lockf='$d_lockf'
15582 d_longdbl='$d_longdbl'
15583 d_longlong='$d_longlong'
15584 d_lseekproto='$d_lseekproto'
15585 d_lstat='$d_lstat'
15586 d_madvise='$d_madvise'
15587 d_mblen='$d_mblen'
15588 d_mbstowcs='$d_mbstowcs'
15589 d_mbtowc='$d_mbtowc'
15590 d_memchr='$d_memchr'
15591 d_memcmp='$d_memcmp'
15592 d_memcpy='$d_memcpy'
15593 d_memmove='$d_memmove'
15594 d_memset='$d_memset'
15595 d_mkdir='$d_mkdir'
15596 d_mkdtemp='$d_mkdtemp'
15597 d_mkfifo='$d_mkfifo'
15598 d_mkstemp='$d_mkstemp'
15599 d_mkstemps='$d_mkstemps'
15600 d_mktime='$d_mktime'
15601 d_mmap='$d_mmap'
15602 d_modfl='$d_modfl'
15603 d_mprotect='$d_mprotect'
15604 d_msg='$d_msg'
15605 d_msg_ctrunc='$d_msg_ctrunc'
15606 d_msg_dontroute='$d_msg_dontroute'
15607 d_msg_oob='$d_msg_oob'
15608 d_msg_peek='$d_msg_peek'
15609 d_msg_proxy='$d_msg_proxy'
15610 d_msgctl='$d_msgctl'
15611 d_msgget='$d_msgget'
15612 d_msgrcv='$d_msgrcv'
15613 d_msgsnd='$d_msgsnd'
15614 d_msync='$d_msync'
15615 d_munmap='$d_munmap'
15616 d_mymalloc='$d_mymalloc'
15617 d_nice='$d_nice'
15618 d_nv_preserves_uv='$d_nv_preserves_uv'
15619 d_nv_preserves_uv_bits='$d_nv_preserves_uv_bits'
15620 d_off64_t='$d_off64_t'
15621 d_old_pthread_create_joinable='$d_old_pthread_create_joinable'
15622 d_oldpthreads='$d_oldpthreads'
15623 d_oldsock='$d_oldsock'
15624 d_open3='$d_open3'
15625 d_pathconf='$d_pathconf'
15626 d_pause='$d_pause'
15627 d_perl_otherlibdirs='$d_perl_otherlibdirs'
15628 d_phostname='$d_phostname'
15629 d_pipe='$d_pipe'
15630 d_poll='$d_poll'
15631 d_portable='$d_portable'
15632 d_pthread_yield='$d_pthread_yield'
15633 d_pwage='$d_pwage'
15634 d_pwchange='$d_pwchange'
15635 d_pwclass='$d_pwclass'
15636 d_pwcomment='$d_pwcomment'
15637 d_pwexpire='$d_pwexpire'
15638 d_pwgecos='$d_pwgecos'
15639 d_pwpasswd='$d_pwpasswd'
15640 d_pwquota='$d_pwquota'
15641 d_qgcvt='$d_qgcvt'
15642 d_quad='$d_quad'
15643 d_readdir='$d_readdir'
15644 d_readlink='$d_readlink'
15645 d_rename='$d_rename'
15646 d_rewinddir='$d_rewinddir'
15647 d_rmdir='$d_rmdir'
15648 d_safebcpy='$d_safebcpy'
15649 d_safemcpy='$d_safemcpy'
15650 d_sanemcmp='$d_sanemcmp'
15651 d_sched_yield='$d_sched_yield'
15652 d_scm_rights='$d_scm_rights'
15653 d_seekdir='$d_seekdir'
15654 d_select='$d_select'
15655 d_sem='$d_sem'
15656 d_semctl='$d_semctl'
15657 d_semctl_semid_ds='$d_semctl_semid_ds'
15658 d_semctl_semun='$d_semctl_semun'
15659 d_semget='$d_semget'
15660 d_semop='$d_semop'
15661 d_setegid='$d_setegid'
15662 d_seteuid='$d_seteuid'
15663 d_setgrent='$d_setgrent'
15664 d_setgrps='$d_setgrps'
15665 d_sethent='$d_sethent'
15666 d_setlinebuf='$d_setlinebuf'
15667 d_setlocale='$d_setlocale'
15668 d_setnent='$d_setnent'
15669 d_setpent='$d_setpent'
15670 d_setpgid='$d_setpgid'
15671 d_setpgrp2='$d_setpgrp2'
15672 d_setpgrp='$d_setpgrp'
15673 d_setprior='$d_setprior'
15674 d_setproctitle='$d_setproctitle'
15675 d_setpwent='$d_setpwent'
15676 d_setregid='$d_setregid'
15677 d_setresgid='$d_setresgid'
15678 d_setresuid='$d_setresuid'
15679 d_setreuid='$d_setreuid'
15680 d_setrgid='$d_setrgid'
15681 d_setruid='$d_setruid'
15682 d_setsent='$d_setsent'
15683 d_setsid='$d_setsid'
15684 d_setvbuf='$d_setvbuf'
15685 d_sfio='$d_sfio'
15686 d_shm='$d_shm'
15687 d_shmat='$d_shmat'
15688 d_shmatprototype='$d_shmatprototype'
15689 d_shmctl='$d_shmctl'
15690 d_shmdt='$d_shmdt'
15691 d_shmget='$d_shmget'
15692 d_sigaction='$d_sigaction'
15693 d_sigsetjmp='$d_sigsetjmp'
15694 d_socket='$d_socket'
15695 d_socklen_t='$d_socklen_t'
15696 d_sockpair='$d_sockpair'
15697 d_socks5_init='$d_socks5_init'
15698 d_sqrtl='$d_sqrtl'
15699 d_statblks='$d_statblks'
15700 d_statfs_f_flags='$d_statfs_f_flags'
15701 d_statfs_s='$d_statfs_s'
15702 d_statvfs='$d_statvfs'
15703 d_stdio_cnt_lval='$d_stdio_cnt_lval'
15704 d_stdio_ptr_lval='$d_stdio_ptr_lval'
15705 d_stdio_stream_array='$d_stdio_stream_array'
15706 d_stdiobase='$d_stdiobase'
15707 d_stdstdio='$d_stdstdio'
15708 d_strchr='$d_strchr'
15709 d_strcoll='$d_strcoll'
15710 d_strctcpy='$d_strctcpy'
15711 d_strerrm='$d_strerrm'
15712 d_strerror='$d_strerror'
15713 d_strtod='$d_strtod'
15714 d_strtol='$d_strtol'
15715 d_strtold='$d_strtold'
15716 d_strtoll='$d_strtoll'
15717 d_strtoul='$d_strtoul'
15718 d_strtoull='$d_strtoull'
15719 d_strtouq='$d_strtouq'
15720 d_strxfrm='$d_strxfrm'
15721 d_suidsafe='$d_suidsafe'
15722 d_symlink='$d_symlink'
15723 d_syscall='$d_syscall'
15724 d_sysconf='$d_sysconf'
15725 d_sysernlst='$d_sysernlst'
15726 d_syserrlst='$d_syserrlst'
15727 d_system='$d_system'
15728 d_tcgetpgrp='$d_tcgetpgrp'
15729 d_tcsetpgrp='$d_tcsetpgrp'
15730 d_telldir='$d_telldir'
15731 d_telldirproto='$d_telldirproto'
15732 d_time='$d_time'
15733 d_times='$d_times'
15734 d_truncate='$d_truncate'
15735 d_tzname='$d_tzname'
15736 d_umask='$d_umask'
15737 d_uname='$d_uname'
15738 d_union_semun='$d_union_semun'
15739 d_ustat='$d_ustat'
15740 d_vendorarch='$d_vendorarch'
15741 d_vendorbin='$d_vendorbin'
15742 d_vendorlib='$d_vendorlib'
15743 d_vfork='$d_vfork'
15744 d_void_closedir='$d_void_closedir'
15745 d_voidsig='$d_voidsig'
15746 d_voidtty='$d_voidtty'
15747 d_volatile='$d_volatile'
15748 d_vprintf='$d_vprintf'
15749 d_wait4='$d_wait4'
15750 d_waitpid='$d_waitpid'
15751 d_wcstombs='$d_wcstombs'
15752 d_wctomb='$d_wctomb'
15753 d_xenix='$d_xenix'
15754 date='$date'
15755 db_hashtype='$db_hashtype'
15756 db_prefixtype='$db_prefixtype'
15757 defvoidused='$defvoidused'
15758 direntrytype='$direntrytype'
15759 dlext='$dlext'
15760 dlsrc='$dlsrc'
15761 doublesize='$doublesize'
15762 drand01='$drand01'
15763 dynamic_ext='$dynamic_ext'
15764 eagain='$eagain'
15765 ebcdic='$ebcdic'
15766 echo='$echo'
15767 egrep='$egrep'
15768 emacs='$emacs'
15769 eunicefix='$eunicefix'
15770 exe_ext='$exe_ext'
15771 expr='$expr'
15772 extensions='$extensions'
15773 fflushNULL='$fflushNULL'
15774 fflushall='$fflushall'
15775 find='$find'
15776 firstmakefile='$firstmakefile'
15777 flex='$flex'
15778 fpossize='$fpossize'
15779 fpostype='$fpostype'
15780 freetype='$freetype'
15781 full_ar='$full_ar'
15782 full_csh='$full_csh'
15783 full_sed='$full_sed'
15784 gccosandvers='$gccosandvers'
15785 gccversion='$gccversion'
15786 gidformat='$gidformat'
15787 gidsign='$gidsign'
15788 gidsize='$gidsize'
15789 gidtype='$gidtype'
15790 glibpth='$glibpth'
15791 grep='$grep'
15792 groupcat='$groupcat'
15793 groupstype='$groupstype'
15794 gzip='$gzip'
15795 h_fcntl='$h_fcntl'
15796 h_sysfile='$h_sysfile'
15797 hint='$hint'
15798 hostcat='$hostcat'
15799 huge='$huge'
15800 i16size='$i16size'
15801 i16type='$i16type'
15802 i32size='$i32size'
15803 i32type='$i32type'
15804 i64size='$i64size'
15805 i64type='$i64type'
15806 i8size='$i8size'
15807 i8type='$i8type'
15808 i_arpainet='$i_arpainet'
15809 i_bsdioctl='$i_bsdioctl'
15810 i_db='$i_db'
15811 i_dbm='$i_dbm'
15812 i_dirent='$i_dirent'
15813 i_dld='$i_dld'
15814 i_dlfcn='$i_dlfcn'
15815 i_fcntl='$i_fcntl'
15816 i_float='$i_float'
15817 i_gdbm='$i_gdbm'
15818 i_grp='$i_grp'
15819 i_iconv='$i_iconv'
15820 i_ieeefp='$i_ieeefp'
15821 i_inttypes='$i_inttypes'
15822 i_libutil='$i_libutil'
15823 i_limits='$i_limits'
15824 i_locale='$i_locale'
15825 i_machcthr='$i_machcthr'
15826 i_malloc='$i_malloc'
15827 i_math='$i_math'
15828 i_memory='$i_memory'
15829 i_mntent='$i_mntent'
15830 i_ndbm='$i_ndbm'
15831 i_netdb='$i_netdb'
15832 i_neterrno='$i_neterrno'
15833 i_netinettcp='$i_netinettcp'
15834 i_niin='$i_niin'
15835 i_poll='$i_poll'
15836 i_prot='$i_prot'
15837 i_pthread='$i_pthread'
15838 i_pwd='$i_pwd'
15839 i_rpcsvcdbm='$i_rpcsvcdbm'
15840 i_sfio='$i_sfio'
15841 i_sgtty='$i_sgtty'
15842 i_shadow='$i_shadow'
15843 i_socks='$i_socks'
15844 i_stdarg='$i_stdarg'
15845 i_stddef='$i_stddef'
15846 i_stdlib='$i_stdlib'
15847 i_string='$i_string'
15848 i_sunmath='$i_sunmath'
15849 i_sysaccess='$i_sysaccess'
15850 i_sysdir='$i_sysdir'
15851 i_sysfile='$i_sysfile'
15852 i_sysfilio='$i_sysfilio'
15853 i_sysin='$i_sysin'
15854 i_sysioctl='$i_sysioctl'
15855 i_syslog='$i_syslog'
15856 i_sysmman='$i_sysmman'
15857 i_sysmode='$i_sysmode'
15858 i_sysmount='$i_sysmount'
15859 i_sysndir='$i_sysndir'
15860 i_sysparam='$i_sysparam'
15861 i_sysresrc='$i_sysresrc'
15862 i_syssecrt='$i_syssecrt'
15863 i_sysselct='$i_sysselct'
15864 i_syssockio='$i_syssockio'
15865 i_sysstat='$i_sysstat'
15866 i_sysstatfs='$i_sysstatfs'
15867 i_sysstatvfs='$i_sysstatvfs'
15868 i_systime='$i_systime'
15869 i_systimek='$i_systimek'
15870 i_systimes='$i_systimes'
15871 i_systypes='$i_systypes'
15872 i_sysuio='$i_sysuio'
15873 i_sysun='$i_sysun'
15874 i_sysutsname='$i_sysutsname'
15875 i_sysvfs='$i_sysvfs'
15876 i_syswait='$i_syswait'
15877 i_termio='$i_termio'
15878 i_termios='$i_termios'
15879 i_time='$i_time'
15880 i_unistd='$i_unistd'
15881 i_ustat='$i_ustat'
15882 i_utime='$i_utime'
15883 i_values='$i_values'
15884 i_varargs='$i_varargs'
15885 i_varhdr='$i_varhdr'
15886 i_vfork='$i_vfork'
15887 ignore_versioned_solibs='$ignore_versioned_solibs'
15888 inc_version_list='$inc_version_list'
15889 inc_version_list_init='$inc_version_list_init'
15890 incpath='$incpath'
15891 inews='$inews'
15892 installarchlib='$installarchlib'
15893 installbin='$installbin'
15894 installman1dir='$installman1dir'
15895 installman3dir='$installman3dir'
15896 installprefix='$installprefix'
15897 installprefixexp='$installprefixexp'
15898 installprivlib='$installprivlib'
15899 installscript='$installscript'
15900 installsitearch='$installsitearch'
15901 installsitebin='$installsitebin'
15902 installsitelib='$installsitelib'
15903 installstyle='$installstyle'
15904 installusrbinperl='$installusrbinperl'
15905 installvendorarch='$installvendorarch'
15906 installvendorbin='$installvendorbin'
15907 installvendorlib='$installvendorlib'
15908 intsize='$intsize'
15909 ivdformat='$ivdformat'
15910 ivsize='$ivsize'
15911 ivtype='$ivtype'
15912 known_extensions='$known_extensions'
15913 ksh='$ksh'
15914 large='$large'
15915 ld='$ld'
15916 lddlflags='$lddlflags'
15917 ldflags='$ldflags'
15918 ldflags_uselargefiles='$ldflags_uselargefiles'
15919 ldlibpthname='$ldlibpthname'
15920 less='$less'
15921 lib_ext='$lib_ext'
15922 libc='$libc'
15923 libperl='$libperl'
15924 libpth='$libpth'
15925 libs='$libs'
15926 libsdirs='$libsdirs'
15927 libsfiles='$libsfiles'
15928 libsfound='$libsfound'
15929 libspath='$libspath'
15930 libswanted='$libswanted'
15931 libswanted_uselargefiles='$libswanted_uselargefiles'
15932 line='$line'
15933 lint='$lint'
15934 lkflags='$lkflags'
15935 ln='$ln'
15936 lns='$lns'
15937 locincpth='$locincpth'
15938 loclibpth='$loclibpth'
15939 longdblsize='$longdblsize'
15940 longlongsize='$longlongsize'
15941 longsize='$longsize'
15942 lp='$lp'
15943 lpr='$lpr'
15944 ls='$ls'
15945 lseeksize='$lseeksize'
15946 lseektype='$lseektype'
15947 mail='$mail'
15948 mailx='$mailx'
15949 make='$make'
15950 make_set_make='$make_set_make'
15951 mallocobj='$mallocobj'
15952 mallocsrc='$mallocsrc'
15953 malloctype='$malloctype'
15954 man1dir='$man1dir'
15955 man1direxp='$man1direxp'
15956 man1ext='$man1ext'
15957 man3dir='$man3dir'
15958 man3direxp='$man3direxp'
15959 man3ext='$man3ext'
15960 medium='$medium'
15961 mips_type='$mips_type'
15962 mkdir='$mkdir'
15963 mmaptype='$mmaptype'
15964 models='$models'
15965 modetype='$modetype'
15966 more='$more'
15967 multiarch='$multiarch'
15968 mv='$mv'
15969 myarchname='$myarchname'
15970 mydomain='$mydomain'
15971 myhostname='$myhostname'
15972 myuname='$myuname'
15973 n='$n'
15974 netdb_hlen_type='$netdb_hlen_type'
15975 netdb_host_type='$netdb_host_type'
15976 netdb_name_type='$netdb_name_type'
15977 netdb_net_type='$netdb_net_type'
15978 nm='$nm'
15979 nm_opt='$nm_opt'
15980 nm_so_opt='$nm_so_opt'
15981 nonxs_ext='$nonxs_ext'
15982 nroff='$nroff'
15983 nvEformat='$nvEformat'
15984 nvFformat='$nvFformat'
15985 nvGformat='$nvGformat'
15986 nveformat='$nveformat'
15987 nvfformat='$nvfformat'
15988 nvgformat='$nvgformat'
15989 nvsize='$nvsize'
15990 nvtype='$nvtype'
15991 o_nonblock='$o_nonblock'
15992 obj_ext='$obj_ext'
15993 old_pthread_create_joinable='$old_pthread_create_joinable'
15994 optimize='$optimize'
15995 orderlib='$orderlib'
15996 osname='$osname'
15997 osvers='$osvers'
15998 otherlibdirs='$otherlibdirs'
15999 package='$package'
16000 pager='$pager'
16001 passcat='$passcat'
16002 patchlevel='$patchlevel'
16003 path_sep='$path_sep'
16004 perl5='$perl5'
16005 perl='$perl'
16006 perladmin='$perladmin'
16007 perlpath='$perlpath'
16008 pg='$pg'
16009 phostname='$phostname'
16010 pidtype='$pidtype'
16011 plibpth='$plibpth'
16012 pm_apiversion='$pm_apiversion'
16013 pmake='$pmake'
16014 pr='$pr'
16015 prefix='$prefix'
16016 prefixexp='$prefixexp'
16017 privlib='$privlib'
16018 privlibexp='$privlibexp'
16019 prototype='$prototype'
16020 ptrsize='$ptrsize'
16021 quadkind='$quadkind'
16022 quadtype='$quadtype'
16023 randbits='$randbits'
16024 randfunc='$randfunc'
16025 randseedtype='$randseedtype'
16026 ranlib='$ranlib'
16027 rd_nodata='$rd_nodata'
16028 revision='$revision'
16029 rm='$rm'
16030 rmail='$rmail'
16031 runnm='$runnm'
16032 sPRIEldbl='$sPRIEldbl'
16033 sPRIFldbl='$sPRIFldbl'
16034 sPRIGldbl='$sPRIGldbl'
16035 sPRIX64='$sPRIX64'
16036 sPRId64='$sPRId64'
16037 sPRIeldbl='$sPRIeldbl'
16038 sPRIfldbl='$sPRIfldbl'
16039 sPRIgldbl='$sPRIgldbl'
16040 sPRIi64='$sPRIi64'
16041 sPRIo64='$sPRIo64'
16042 sPRIu64='$sPRIu64'
16043 sPRIx64='$sPRIx64'
16044 sSCNfldbl='$sSCNfldbl'
16045 sched_yield='$sched_yield'
16046 scriptdir='$scriptdir'
16047 scriptdirexp='$scriptdirexp'
16048 sed='$sed'
16049 seedfunc='$seedfunc'
16050 selectminbits='$selectminbits'
16051 selecttype='$selecttype'
16052 sendmail='$sendmail'
16053 sh='$sh'
16054 shar='$shar'
16055 sharpbang='$sharpbang'
16056 shmattype='$shmattype'
16057 shortsize='$shortsize'
16058 shrpenv='$shrpenv'
16059 shsharp='$shsharp'
16060 sig_count='$sig_count'
16061 sig_name='$sig_name'
16062 sig_name_init='$sig_name_init'
16063 sig_num='$sig_num'
16064 sig_num_init='$sig_num_init'
16065 signal_t='$signal_t'
16066 sitearch='$sitearch'
16067 sitearchexp='$sitearchexp'
16068 sitebin='$sitebin'
16069 sitebinexp='$sitebinexp'
16070 sitelib='$sitelib'
16071 sitelib_stem='$sitelib_stem'
16072 sitelibexp='$sitelibexp'
16073 siteprefix='$siteprefix'
16074 siteprefixexp='$siteprefixexp'
16075 sizesize='$sizesize'
16076 sizetype='$sizetype'
16077 sleep='$sleep'
16078 smail='$smail'
16079 small='$small'
16080 so='$so'
16081 sockethdr='$sockethdr'
16082 socketlib='$socketlib'
16083 socksizetype='$socksizetype'
16084 sort='$sort'
16085 spackage='$spackage'
16086 spitshell='$spitshell'
16087 split='$split'
16088 src='$src'
16089 ssizetype='$ssizetype'
16090 startperl='$startperl'
16091 startsh='$startsh'
16092 static_ext='$static_ext'
16093 stdchar='$stdchar'
16094 stdio_base='$stdio_base'
16095 stdio_bufsiz='$stdio_bufsiz'
16096 stdio_cnt='$stdio_cnt'
16097 stdio_filbuf='$stdio_filbuf'
16098 stdio_ptr='$stdio_ptr'
16099 stdio_stream_array='$stdio_stream_array'
16100 strings='$strings'
16101 submit='$submit'
16102 subversion='$subversion'
16103 sysman='$sysman'
16104 tail='$tail'
16105 tar='$tar'
16106 tbl='$tbl'
16107 tee='$tee'
16108 test='$test'
16109 timeincl='$timeincl'
16110 timetype='$timetype'
16111 touch='$touch'
16112 tr='$tr'
16113 trnl='$trnl'
16114 troff='$troff'
16115 u16size='$u16size'
16116 u16type='$u16type'
16117 u32size='$u32size'
16118 u32type='$u32type'
16119 u64size='$u64size'
16120 u64type='$u64type'
16121 u8size='$u8size'
16122 u8type='$u8type'
16123 uidformat='$uidformat'
16124 uidsign='$uidsign'
16125 uidsize='$uidsize'
16126 uidtype='$uidtype'
16127 uname='$uname'
16128 uniq='$uniq'
16129 uquadtype='$uquadtype'
16130 use5005threads='$use5005threads'
16131 use64bitall='$use64bitall'
16132 use64bitint='$use64bitint'
16133 usedl='$usedl'
16134 useithreads='$useithreads'
16135 uselargefiles='$uselargefiles'
16136 uselongdouble='$uselongdouble'
16137 usemorebits='$usemorebits'
16138 usemultiplicity='$usemultiplicity'
16139 usemymalloc='$usemymalloc'
16140 usenm='$usenm'
16141 useopcode='$useopcode'
16142 useperlio='$useperlio'
16143 useposix='$useposix'
16144 usesfio='$usesfio'
16145 useshrplib='$useshrplib'
16146 usesocks='$usesocks'
16147 usethreads='$usethreads'
16148 usevendorprefix='$usevendorprefix'
16149 usevfork='$usevfork'
16150 usrinc='$usrinc'
16151 uuname='$uuname'
16152 uvXformat='$uvXformat'
16153 uvoformat='$uvoformat'
16154 uvsize='$uvsize'
16155 uvtype='$uvtype'
16156 uvuformat='$uvuformat'
16157 uvxformat='$uvxformat'
16158 vendorarch='$vendorarch'
16159 vendorarchexp='$vendorarchexp'
16160 vendorbin='$vendorbin'
16161 vendorbinexp='$vendorbinexp'
16162 vendorlib='$vendorlib'
16163 vendorlib_stem='$vendorlib_stem'
16164 vendorlibexp='$vendorlibexp'
16165 vendorprefix='$vendorprefix'
16166 vendorprefixexp='$vendorprefixexp'
16167 version='$version'
16168 vi='$vi'
16169 voidflags='$voidflags'
16170 xlibpth='$xlibpth'
16171 xs_apiversion='$xs_apiversion'
16172 zcat='$zcat'
16173 zip='$zip'
16174 EOT
16175
16176 : Add in command line options if available
16177 $test -f UU/cmdline.opt && $cat UU/cmdline.opt >> config.sh
16178
16179 : add special variables
16180 $test -f $src/patchlevel.h && \
16181 awk '/^#define[         ]+PERL_/ {printf "%s=%s\n",$2,$3}' $src/patchlevel.h >>config.sh
16182 echo "CONFIGDOTSH=true" >>config.sh
16183
16184 : propagate old symbols
16185 if $test -f UU/config.sh; then
16186         <UU/config.sh sort | uniq >UU/oldconfig.sh
16187         sed -n 's/^\([a-zA-Z_0-9]*\)=.*/\1/p' config.sh config.sh UU/oldconfig.sh |\
16188         sort | uniq -u >UU/oldsyms
16189         set X `cat UU/oldsyms`
16190         shift
16191         case $# in
16192         0) ;;
16193         *)
16194                 cat <<EOM
16195 Hmm...You had some extra variables I don't know about...I'll try to keep 'em...
16196 EOM
16197                 echo "# Variables propagated from previous config.sh file." >>config.sh
16198                 for sym in `cat UU/oldsyms`; do
16199                         echo "    Propagating $hint variable "'$'"$sym..."
16200                         eval 'tmp="$'"${sym}"'"'
16201                         echo "$tmp" | \
16202                                 sed -e "s/'/'\"'\"'/g" -e "s/^/$sym='/" -e "s/$/'/" >>config.sh
16203                 done
16204                 ;;
16205         esac
16206 fi
16207
16208 : Finish up by extracting the .SH files
16209 case "$alldone" in
16210 exit)
16211         $rm -rf UU
16212         echo "Done."
16213         exit 0
16214         ;;
16215 cont)
16216         ;;
16217 '')
16218         dflt=''
16219         nostick=true
16220         $cat <<EOM
16221
16222 If you'd like to make any changes to the config.sh file before I begin
16223 to configure things, do it as a shell escape now (e.g. !vi config.sh).
16224
16225 EOM
16226         rp="Press return or use a shell escape to edit config.sh:"
16227         . UU/myread
16228         nostick=''
16229         case "$ans" in
16230         '') ;;
16231         *) : in case they cannot read
16232                 sh 1>&4 -c "$ans";;
16233         esac
16234         ;;
16235 esac
16236
16237 : if this fails, just run all the .SH files by hand
16238 . ./config.sh
16239
16240 echo " "
16241 exec 1>&4
16242 . ./UU/extract
16243
16244 if $contains '^depend:' [Mm]akefile >/dev/null 2>&1; then
16245         dflt=y
16246         case "$silent" in
16247         true) ;;
16248         *)
16249                 $cat <<EOM
16250
16251 Now you need to generate make dependencies by running "$make depend".
16252 You might prefer to run it in background: "$make depend > makedepend.out &"
16253 It can take a while, so you might not want to run it right now.
16254
16255 EOM
16256                 ;;
16257         esac
16258         rp="Run $make depend now?"
16259         . UU/myread
16260         case "$ans" in
16261         y*)
16262                 $make depend && echo "Now you must run a $make."
16263                 ;;
16264         *)
16265                 echo "You must run '$make depend' then '$make'."
16266                 ;;
16267         esac
16268 elif test -f [Mm]akefile; then
16269         echo " "
16270         echo "Now you must run a $make."
16271 else
16272         echo "Done."
16273 fi
16274
16275 if $test -f Policy.sh; then
16276     $cat <<EOM
16277
16278 If you compile $package on a different machine or from a different object
16279 directory, copy the Policy.sh file from this object directory to the
16280 new one before you run Configure -- this will help you with most of
16281 the policy defaults.
16282
16283 EOM
16284 fi
16285 if $test -f config.msg; then
16286     echo "Hmm.  I also noted the following information while running:"
16287     echo " "
16288     $cat config.msg >&4
16289     $rm -f config.msg
16290 fi
16291 $rm -f kit*isdone ark*isdone
16292 $rm -rf UU
16293
16294 : End of Configure
16295