File::Temp patches from Andreas König,
[p5sagit/p5-mst-13.2.git] / Configure
1 #! /bin/sh
2 #
3 # If these # comments don't work, trim them. Don't worry about any other
4 # shell scripts, Configure will trim # comments from them for you.
5 #
6 # (If you are trying to port this package to a machine without sh,
7 # I would suggest you have a look at the prototypical config_h.SH file
8 # and edit it to reflect your system. Some packages may include samples
9 # of config.h for certain machines, so you might look for one of those.)
10 #
11 # Yes, you may rip this off to use in other distribution packages. This
12 # script belongs to the public domain and cannot be copyrighted.
13 #
14 # (Note: this Configure script was generated automatically. Rather than
15 # working with this copy of Configure, you may wish to get metaconfig.
16 # The dist-3.0 package (which contains metaconfig) was posted in
17 # comp.sources.misc and is available on CPAN under authors/id/RAM so
18 # you may fetch it yourself from your nearest archive site.)
19 #
20
21 # $Id: Head.U,v 3.0.1.9 1997/02/28 15:02:09 ram Exp $
22 #
23 # Generated on Fri Sep  1 02:17:50 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                 echo "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         Gconvert((DOUBLETYPE)123.456, 8, 0, buf); 
7851         checkit("123.456", buf);
7852
7853         exit(0);
7854 }
7855 EOP
7856 case "$d_Gconvert" in
7857 gconvert*) xxx_list='gconvert gcvt sprintf' ;;
7858 gcvt*) xxx_list='gcvt gconvert sprintf' ;;
7859 sprintf*) xxx_list='sprintf gconvert gcvt' ;;
7860 *) xxx_list='gconvert gcvt sprintf' ;;
7861 esac
7862
7863 case "$d_longdbl$uselongdouble$d_PRIgldbl" in
7864 "$define$define$define")
7865     # for long doubles prefer first qgcvt, then sprintf
7866     xxx_list="`echo $xxx_list|sed s/sprintf//`" 
7867     xxx_list="sprintf $xxx_list"
7868     case "$d_qgcvt" in
7869     "$define") xxx_list="qgcvt $xxx_list" ;;
7870     esac
7871     ;;
7872 esac
7873
7874 for xxx_convert in $xxx_list; do
7875         echo "Trying $xxx_convert..."
7876         $rm -f try try$_o
7877         set try -DTRY_$xxx_convert
7878         if eval $compile; then
7879                 echo "$xxx_convert() found." >&4
7880                 if ./try; then
7881                         echo "I'll use $xxx_convert to convert floats into a string." >&4
7882                         break;
7883                 else
7884                         echo "...But $xxx_convert didn't work as I expected."
7885                 fi
7886         else
7887                 echo "$xxx_convert NOT found." >&4
7888         fi
7889 done
7890         
7891 case "$xxx_convert" in
7892 gconvert) d_Gconvert='gconvert((x),(n),(t),(b))' ;;
7893 gcvt) d_Gconvert='gcvt((x),(n),(b))' ;;
7894 qgcvt) d_Gconvert='qgcvt((x),(n),(b))' ;;
7895 *) case "$uselongdouble$d_longdbl$d_PRIgldbl" in
7896    "$define$define$define")
7897       d_Gconvert="sprintf((b),\"%.*\"$sPRIgldbl,(n),(x))" ;;
7898    *) d_Gconvert='sprintf((b),"%.*g",(n),(x))' ;;
7899    esac
7900    ;;  
7901 esac
7902
7903 : Initialize h_fcntl
7904 h_fcntl=false
7905
7906 : Initialize h_sysfile
7907 h_sysfile=false
7908
7909 : access call always available on UNIX
7910 set access d_access
7911 eval $inlibc
7912
7913 : locate the flags for 'access()'
7914 case "$d_access" in
7915 "$define")
7916         echo " "
7917         $cat >access.c <<'EOCP'
7918 #include <sys/types.h>
7919 #ifdef I_FCNTL
7920 #include <fcntl.h>
7921 #endif
7922 #ifdef I_SYS_FILE
7923 #include <sys/file.h>
7924 #endif
7925 #ifdef I_UNISTD
7926 #include <unistd.h>
7927 #endif
7928 int main() {
7929         exit(R_OK);
7930 }
7931 EOCP
7932         : check sys/file.h first, no particular reason here
7933         if $test `./findhdr sys/file.h` && \
7934                 $cc $cppflags -DI_SYS_FILE -o access access.c >/dev/null 2>&1 ; then
7935                 h_sysfile=true;
7936                 echo "<sys/file.h> defines the *_OK access constants." >&4
7937         elif $test `./findhdr fcntl.h` && \
7938                 $cc $cppflags -DI_FCNTL -o access access.c >/dev/null 2>&1 ; then
7939                 h_fcntl=true;
7940                 echo "<fcntl.h> defines the *_OK access constants." >&4
7941         elif $test `./findhdr unistd.h` && \
7942                 $cc $cppflags -DI_UNISTD -o access access.c >/dev/null 2>&1 ; then
7943                 echo "<unistd.h> defines the *_OK access constants." >&4
7944         else
7945                 echo "I can't find the four *_OK access constants--I'll use mine." >&4
7946         fi
7947         ;;
7948 esac
7949 $rm -f access*
7950
7951 : see if accessx exists
7952 set accessx d_accessx
7953 eval $inlibc
7954
7955 : see if alarm exists
7956 set alarm d_alarm
7957 eval $inlibc
7958
7959 : see if atolf exists
7960 set atolf d_atolf
7961 eval $inlibc
7962
7963 : see if atoll exists
7964 set atoll d_atoll
7965 eval $inlibc
7966
7967 : Look for GNU-cc style attribute checking
7968 echo " "
7969 echo "Checking whether your compiler can handle __attribute__ ..." >&4
7970 $cat >attrib.c <<'EOCP'
7971 #include <stdio.h>
7972 void croak (char* pat,...) __attribute__((format(printf,1,2),noreturn));
7973 EOCP
7974 if $cc $ccflags -c attrib.c >attrib.out 2>&1 ; then
7975         if $contains 'warning' attrib.out >/dev/null 2>&1; then
7976                 echo "Your C compiler doesn't fully support __attribute__."
7977                 val="$undef"
7978         else
7979                 echo "Your C compiler supports __attribute__."
7980                 val="$define"
7981         fi
7982 else
7983         echo "Your C compiler doesn't seem to understand __attribute__ at all."
7984         val="$undef"
7985 fi
7986 set d_attribut
7987 eval $setvar
7988 $rm -f attrib*
7989
7990 : see if bcmp exists
7991 set bcmp d_bcmp
7992 eval $inlibc
7993
7994 : see if bcopy exists
7995 set bcopy d_bcopy
7996 eval $inlibc
7997
7998 : see if this is a unistd.h system
7999 set unistd.h i_unistd
8000 eval $inhdr
8001
8002 : see if getpgrp exists
8003 set getpgrp d_getpgrp
8004 eval $inlibc
8005
8006 case "$d_getpgrp" in
8007 "$define")
8008         echo " "
8009         echo "Checking to see which flavor of getpgrp is in use..."
8010         $cat >set.c <<EOP
8011 #$i_unistd I_UNISTD
8012 #include <sys/types.h>
8013 #ifdef I_UNISTD
8014 #  include <unistd.h>
8015 #endif
8016 int main()
8017 {
8018         if (getuid() == 0) {
8019                 printf("(I see you are running Configure as super-user...)\n");
8020                 setuid(1);
8021         }
8022 #ifdef TRY_BSD_PGRP
8023         if (getpgrp(1) == 0)
8024                 exit(0);
8025 #else
8026         if (getpgrp() > 0)
8027                 exit(0);
8028 #endif
8029         exit(1);
8030 }
8031 EOP
8032         if $cc -DTRY_BSD_PGRP $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1 && ./set; then
8033                 echo "You have to use getpgrp(pid) instead of getpgrp()." >&4
8034                 val="$define"
8035         elif $cc $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1 && ./set; then
8036                 echo "You have to use getpgrp() instead of getpgrp(pid)." >&4
8037                 val="$undef"
8038         else
8039                 echo "I can't seem to compile and run the test program."
8040                 if ./usg; then
8041                         xxx="a USG one, i.e. you use getpgrp()."
8042                 else
8043                         # SVR4 systems can appear rather BSD-ish.
8044                         case "$i_unistd" in
8045                         $undef)
8046                                 xxx="a BSD one, i.e. you use getpgrp(pid)."
8047                                 val="$define"
8048                                 ;;
8049                         $define)
8050                                 xxx="probably a USG one, i.e. you use getpgrp()."
8051                                 val="$undef"
8052                                 ;;
8053                         esac
8054                 fi
8055                 echo "Assuming your getpgrp is $xxx" >&4
8056         fi
8057         ;;
8058 *) val="$undef";;
8059 esac
8060 set d_bsdgetpgrp
8061 eval $setvar
8062 $rm -f set set.c
8063
8064 : see if setpgrp exists
8065 set setpgrp d_setpgrp
8066 eval $inlibc
8067
8068 case "$d_setpgrp" in
8069 "$define")
8070         echo " "
8071         echo "Checking to see which flavor of setpgrp is in use..."
8072         $cat >set.c <<EOP
8073 #$i_unistd I_UNISTD
8074 #include <sys/types.h>
8075 #ifdef I_UNISTD
8076 #  include <unistd.h>
8077 #endif
8078 int main()
8079 {
8080         if (getuid() == 0) {
8081                 printf("(I see you are running Configure as super-user...)\n");
8082                 setuid(1);
8083         }
8084 #ifdef TRY_BSD_PGRP
8085         if (-1 == setpgrp(1, 1))
8086                 exit(0);
8087 #else
8088         if (setpgrp() != -1)
8089                 exit(0);
8090 #endif
8091         exit(1);
8092 }
8093 EOP
8094         if $cc -DTRY_BSD_PGRP $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1 && ./set; then
8095                 echo 'You have to use setpgrp(pid,pgrp) instead of setpgrp().' >&4
8096                 val="$define"
8097         elif $cc $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1 && ./set; then
8098                 echo 'You have to use setpgrp() instead of setpgrp(pid,pgrp).' >&4
8099                 val="$undef"
8100         else
8101                 echo "(I can't seem to compile and run the test program.)"
8102                 if ./usg; then
8103                         xxx="a USG one, i.e. you use setpgrp()."
8104                 else
8105                         # SVR4 systems can appear rather BSD-ish.
8106                         case "$i_unistd" in
8107                         $undef)
8108                                 xxx="a BSD one, i.e. you use setpgrp(pid,pgrp)."
8109                                 val="$define"
8110                                 ;;
8111                         $define)
8112                                 xxx="probably a USG one, i.e. you use setpgrp()."
8113                                 val="$undef"
8114                                 ;;
8115                         esac
8116                 fi
8117                 echo "Assuming your setpgrp is $xxx" >&4
8118         fi
8119         ;;
8120 *) val="$undef";;
8121 esac
8122 set d_bsdsetpgrp
8123 eval $setvar
8124 $rm -f set set.c
8125 : see if bzero exists
8126 set bzero d_bzero
8127 eval $inlibc
8128
8129 : see if signal is declared as pointer to function returning int or void
8130 echo " "
8131 xxx=`./findhdr signal.h`
8132 $test "$xxx" && $cppstdin $cppminus $cppflags < $xxx >$$.tmp 2>/dev/null
8133 if $contains 'int.*\*[  ]*signal' $$.tmp >/dev/null 2>&1 ; then
8134         echo "You have int (*signal())() instead of void." >&4
8135         val="$undef"
8136 elif $contains 'void.*\*[       ]*signal' $$.tmp >/dev/null 2>&1 ; then
8137         echo "You have void (*signal())()." >&4
8138         val="$define"
8139 elif $contains 'extern[         ]*[(\*]*signal' $$.tmp >/dev/null 2>&1 ; then
8140         echo "You have int (*signal())() instead of void." >&4
8141         val="$undef"
8142 elif $contains 'void.*\*.*sig' $$.tmp >/dev/null 2>&1 ; then
8143         echo "You have void (*signal())()." >&4
8144         val="$define"
8145 else
8146         case "$d_voidsig" in
8147         '')
8148         echo "I can't determine whether signal handler returns void or int..." >&4
8149                 dflt=void
8150                 rp="What type does your signal handler return?"
8151                 . ./myread
8152                 case "$ans" in
8153                 v*) val="$define";;
8154                 *) val="$undef";;
8155                 esac;;
8156         "$define")
8157                 echo "As you already told me, signal handler returns void." >&4
8158                 val="$define"
8159                 ;;
8160         *)      echo "As you already told me, signal handler returns int." >&4
8161                 val="$undef"
8162                 ;;
8163         esac
8164 fi
8165 set d_voidsig
8166 eval $setvar
8167 case "$d_voidsig" in
8168 "$define") signal_t="void";;
8169 *) signal_t="int";;
8170 esac
8171 $rm -f $$.tmp
8172
8173 : check for ability to cast large floats to 32-bit ints.
8174 echo " "
8175 echo 'Checking whether your C compiler can cast large floats to int32.' >&4
8176 if $test "$intsize" -ge 4; then
8177         xxx=int
8178 else
8179         xxx=long
8180 fi
8181 $cat >try.c <<EOCP
8182 #include <stdio.h>
8183 #include <sys/types.h>
8184 #include <signal.h>
8185 $signal_t blech(s) int s; { exit(3); }
8186 int main()
8187 {
8188         $xxx i32;
8189         double f, g;
8190         int result = 0;
8191         char str[16];
8192         signal(SIGFPE, blech);
8193
8194         /* Don't let compiler optimize the test away.  Store the number 
8195            in a writable string for gcc to pass to sscanf under HP/UX.
8196         */
8197         sprintf(str, "2147483647");
8198         sscanf(str, "%lf", &f); /* f = (double) 0x7fffffff; */
8199         g = 10 * f;
8200         i32  = ($xxx) g;
8201
8202         /* x86 processors will probably give 0x8000 0000, which is a
8203        sign change.  We don't want that.  We want to mimic SPARC
8204            behavior here, which is to preserve the sign and give
8205            back 0x7fff ffff.
8206         */
8207         if (i32 != ($xxx) f)
8208                 result |= 1;
8209         exit(result);
8210 }
8211 EOCP
8212 set try
8213 if eval $compile_ok; then
8214         ./try
8215         yyy=$?
8216 else
8217         echo "(I can't seem to compile the test program--assuming it can't)"
8218         yyy=1
8219 fi
8220 case "$yyy" in
8221 0)      val="$define"
8222         echo "Yup, it can."
8223         ;;
8224 *)      val="$undef"
8225         echo "Nope, it can't."
8226         ;;
8227 esac
8228 set d_casti32
8229 eval $setvar
8230 $rm -f try try.*
8231
8232 : check for ability to cast negative floats to unsigned
8233 echo " "
8234 echo 'Checking whether your C compiler can cast negative float to unsigned.' >&4
8235 $cat >try.c <<EOCP
8236 #include <stdio.h>
8237 #include <sys/types.h>
8238 #include <signal.h>
8239 $signal_t blech(s) int s; { exit(7); }
8240 $signal_t blech_in_list(s) int s; { exit(4); }
8241 unsigned long dummy_long(p) unsigned long p; { return p; }
8242 unsigned int dummy_int(p) unsigned int p; { return p; }
8243 unsigned short dummy_short(p) unsigned short p; { return p; }
8244 int main()
8245 {
8246         double f;
8247         unsigned long along;
8248         unsigned int aint;
8249         unsigned short ashort;
8250         int result = 0;
8251         char str[16];
8252         
8253         /* Frustrate gcc-2.7.2's optimizer which failed this test with
8254            a direct f = -123. assignment.  gcc-2.8.0 reportedly
8255            optimized the whole file away
8256         */
8257         /* Store the number in a writable string for gcc to pass to 
8258            sscanf under HP/UX.
8259         */
8260         sprintf(str, "-123");
8261         sscanf(str, "%lf", &f);  /* f = -123.; */
8262
8263         signal(SIGFPE, blech);
8264         along = (unsigned long)f;
8265         aint = (unsigned int)f;
8266         ashort = (unsigned short)f;
8267         if (along != (unsigned long)-123)
8268                 result |= 1;
8269         if (aint != (unsigned int)-123)
8270                 result |= 1;
8271         if (ashort != (unsigned short)-123)
8272                 result |= 1;
8273         sprintf(str, "1073741824.");
8274         sscanf(str, "%lf", &f); /* f = (double)0x40000000; */
8275         f = f + f;
8276         along = 0;
8277         along = (unsigned long)f;
8278         if (along != 0x80000000)
8279                 result |= 2;
8280         f -= 1.;
8281         along = 0;
8282         along = (unsigned long)f;
8283         if (along != 0x7fffffff)
8284                 result |= 1;
8285         f += 2.;
8286         along = 0;
8287         along = (unsigned long)f;
8288         if (along != 0x80000001)
8289                 result |= 2;
8290         if (result)
8291                 exit(result);
8292         signal(SIGFPE, blech_in_list);
8293         sprintf(str, "123.");
8294         sscanf(str, "%lf", &f);  /* f = 123.; */
8295         along = dummy_long((unsigned long)f);
8296         aint = dummy_int((unsigned int)f);
8297         ashort = dummy_short((unsigned short)f);
8298         if (along != (unsigned long)123)
8299                 result |= 4;
8300         if (aint != (unsigned int)123)
8301                 result |= 4;
8302         if (ashort != (unsigned short)123)
8303                 result |= 4;
8304         exit(result);
8305
8306 }
8307 EOCP
8308 set try
8309 if eval $compile_ok; then
8310         ./try
8311         castflags=$?
8312 else
8313         echo "(I can't seem to compile the test program--assuming it can't)"
8314         castflags=7
8315 fi
8316 case "$castflags" in
8317 0)      val="$define"
8318         echo "Yup, it can."
8319         ;;
8320 *)      val="$undef"
8321         echo "Nope, it can't."
8322         ;;
8323 esac
8324 set d_castneg
8325 eval $setvar
8326 $rm -f try.*
8327
8328 : see if vprintf exists
8329 echo " "
8330 if set vprintf val -f d_vprintf; eval $csym; $val; then
8331         echo 'vprintf() found.' >&4
8332         val="$define"
8333         $cat >vprintf.c <<'EOF'
8334 #include <varargs.h>
8335
8336 int main() { xxx("foo"); }
8337
8338 xxx(va_alist)
8339 va_dcl
8340 {
8341         va_list args;
8342         char buf[10];
8343
8344         va_start(args);
8345         exit((unsigned long)vsprintf(buf,"%s",args) > 10L);
8346 }
8347 EOF
8348         set vprintf
8349         if eval $compile && ./vprintf; then
8350                 echo "Your vsprintf() returns (int)." >&4
8351                 val2="$undef"
8352         else
8353                 echo "Your vsprintf() returns (char*)." >&4
8354                 val2="$define"
8355         fi
8356 else
8357         echo 'vprintf() NOT found.' >&4
8358                 val="$undef"
8359                 val2="$undef"
8360 fi
8361 set d_vprintf
8362 eval $setvar
8363 val=$val2
8364 set d_charvspr
8365 eval $setvar
8366
8367 : see if chown exists
8368 set chown d_chown
8369 eval $inlibc
8370
8371 : see if chroot exists
8372 set chroot d_chroot
8373 eval $inlibc
8374
8375 : see if chsize exists
8376 set chsize d_chsize
8377 eval $inlibc
8378
8379 : check for const keyword
8380 echo " "
8381 echo 'Checking to see if your C compiler knows about "const"...' >&4
8382 $cat >const.c <<'EOCP'
8383 typedef struct spug { int drokk; } spug;
8384 int main()
8385 {
8386         const char *foo;
8387         const spug y;
8388 }
8389 EOCP
8390 if $cc -c $ccflags const.c >/dev/null 2>&1 ; then
8391         val="$define"
8392         echo "Yup, it does."
8393 else
8394         val="$undef"
8395         echo "Nope, it doesn't."
8396 fi
8397 set d_const
8398 eval $setvar
8399
8400 : see if crypt exists
8401 echo " "
8402 if set crypt val -f d_crypt; eval $csym; $val; then
8403         echo 'crypt() found.' >&4
8404         val="$define"
8405         cryptlib=''
8406 else
8407         cryptlib=`./loc Slibcrypt$_a "" $xlibpth`
8408         if $test -z "$cryptlib"; then
8409                 cryptlib=`./loc Mlibcrypt$_a "" $xlibpth`
8410         else
8411                 cryptlib=-lcrypt
8412         fi
8413         if $test -z "$cryptlib"; then
8414                 cryptlib=`./loc Llibcrypt$_a "" $xlibpth`
8415         else
8416                 cryptlib=-lcrypt
8417         fi
8418         if $test -z "$cryptlib"; then
8419                 cryptlib=`./loc libcrypt$_a "" $libpth`
8420         else
8421                 cryptlib=-lcrypt
8422         fi
8423         if $test -z "$cryptlib"; then
8424                 echo 'crypt() NOT found.' >&4
8425                 val="$undef"
8426         else
8427                 val="$define"
8428         fi
8429 fi
8430 set d_crypt
8431 eval $setvar
8432
8433 : get csh whereabouts
8434 case "$csh" in
8435 'csh') val="$undef" ;;
8436 *) val="$define" ;;
8437 esac
8438 set d_csh
8439 eval $setvar
8440 : Respect a hint or command line value for full_csh.
8441 case "$full_csh" in
8442 '') full_csh=$csh ;;
8443 esac
8444
8445 : see if cuserid exists
8446 set cuserid d_cuserid
8447 eval $inlibc
8448
8449 : see if this is a limits.h system
8450 set limits.h i_limits
8451 eval $inhdr
8452
8453 : see if this is a float.h system
8454 set float.h i_float
8455 eval $inhdr
8456
8457 : See if number of significant digits in a double precision number is known
8458 echo " "
8459 $cat >dbl_dig.c <<EOM
8460 #$i_limits I_LIMITS
8461 #$i_float I_FLOAT
8462 #ifdef I_LIMITS
8463 #include <limits.h>
8464 #endif
8465 #ifdef I_FLOAT
8466 #include <float.h>
8467 #endif
8468 #ifdef DBL_DIG
8469 printf("Contains DBL_DIG");
8470 #endif
8471 EOM
8472 $cppstdin $cppflags $cppminus < dbl_dig.c >dbl_dig.E 2>/dev/null
8473 if $contains 'DBL_DIG' dbl_dig.E >/dev/null 2>&1; then
8474         echo "DBL_DIG found." >&4
8475         val="$define"
8476 else
8477         echo "DBL_DIG NOT found." >&4
8478         val="$undef"
8479 fi
8480 $rm -f dbl_dig.?
8481 set d_dbl_dig
8482 eval $setvar
8483
8484 : see if difftime exists
8485 set difftime d_difftime
8486 eval $inlibc
8487
8488 : see if this is a dirent system
8489 echo " "
8490 if xinc=`./findhdr dirent.h`; $test "$xinc"; then
8491         val="$define"
8492         echo "<dirent.h> found." >&4
8493 else
8494         val="$undef"
8495         if xinc=`./findhdr sys/dir.h`; $test "$xinc"; then
8496                 echo "<sys/dir.h> found." >&4
8497                 echo " "
8498         else
8499                 xinc=`./findhdr sys/ndir.h`
8500         fi
8501         echo "<dirent.h> NOT found." >&4
8502 fi
8503 set i_dirent
8504 eval $setvar
8505
8506 : Look for type of directory structure.
8507 echo " "
8508 $cppstdin $cppflags $cppminus < "$xinc" > try.c
8509
8510 case "$direntrytype" in
8511 ''|' ')
8512         case "$i_dirent" in
8513         $define) guess1='struct dirent' ;;
8514         *) guess1='struct direct'  ;;
8515         esac
8516         ;;
8517 *)      guess1="$direntrytype"
8518         ;;
8519 esac
8520
8521 case "$guess1" in
8522 'struct dirent') guess2='struct direct' ;;
8523 *) guess2='struct dirent' ;;
8524 esac
8525                 
8526 if $contains "$guess1" try.c >/dev/null 2>&1; then
8527         direntrytype="$guess1"
8528         echo "Your directory entries are $direntrytype." >&4
8529 elif $contains "$guess2" try.c >/dev/null 2>&1; then
8530         direntrytype="$guess2"
8531         echo "Your directory entries seem to be $direntrytype." >&4
8532 else
8533         echo "I don't recognize your system's directory entries." >&4
8534         rp="What type is used for directory entries on this system?"
8535         dflt="$guess1"
8536         . ./myread
8537         direntrytype="$ans"
8538 fi
8539 $rm -f try.c
8540
8541
8542 : see if the directory entry stores field length
8543 echo " "
8544 $cppstdin $cppflags $cppminus < "$xinc" > try.c
8545 if $contains 'd_namlen' try.c >/dev/null 2>&1; then
8546         echo "Good, your directory entry keeps length information in d_namlen." >&4
8547         val="$define"
8548 else
8549         echo "Your directory entry does not know about the d_namlen field." >&4
8550         val="$undef"
8551 fi
8552 set d_dirnamlen
8553 eval $setvar
8554 $rm -f try.c
8555
8556 : see if dlerror exists
8557 xxx_runnm="$runnm"
8558 runnm=false
8559 set dlerror d_dlerror
8560 eval $inlibc
8561 runnm="$xxx_runnm"
8562
8563 : see if dlfcn is available
8564 set dlfcn.h i_dlfcn
8565 eval $inhdr
8566
8567 case "$usedl" in
8568 $define|y|true)
8569         $cat << EOM
8570
8571 On a few systems, the dynamically loaded modules that perl generates and uses
8572 will need a different extension than shared libs. The default will probably
8573 be appropriate.
8574
8575 EOM
8576         case "$dlext" in
8577         '')     dflt="$so" ;;
8578         *)      dflt="$dlext" ;;
8579         esac
8580         rp='What is the extension of dynamically loaded modules'
8581         . ./myread
8582         dlext="$ans"
8583         ;;
8584 *)
8585         dlext="none"
8586         ;;
8587 esac
8588
8589 : Check if dlsym need a leading underscore
8590 echo " "
8591 val="$undef"
8592
8593 case "$dlsrc" in
8594 dl_dlopen.xs)
8595         echo "Checking whether your dlsym() needs a leading underscore ..." >&4
8596         $cat >dyna.c <<'EOM'
8597 fred () { }
8598 EOM
8599
8600 $cat >fred.c<<EOM
8601
8602 #include <stdio.h>
8603 #$i_dlfcn I_DLFCN
8604 #ifdef I_DLFCN
8605 #include <dlfcn.h>      /* the dynamic linker include file for Sunos/Solaris */
8606 #else
8607 #include <sys/types.h>
8608 #include <nlist.h>
8609 #include <link.h>
8610 #endif
8611
8612 extern int fred() ;
8613
8614 int main()
8615 {
8616     void * handle ;
8617     void * symbol ;
8618 #ifndef RTLD_LAZY
8619     int mode = 1 ;
8620 #else
8621     int mode = RTLD_LAZY ;
8622 #endif
8623     handle = dlopen("./dyna.$dlext", mode) ;
8624     if (handle == NULL) {
8625         printf ("1\n") ;
8626         fflush (stdout) ;
8627         exit(0);
8628     }
8629     symbol = dlsym(handle, "fred") ;
8630     if (symbol == NULL) {
8631         /* try putting a leading underscore */
8632         symbol = dlsym(handle, "_fred") ;
8633         if (symbol == NULL) {
8634             printf ("2\n") ;
8635             fflush (stdout) ;
8636             exit(0);
8637         }
8638         printf ("3\n") ;
8639     }
8640     else
8641         printf ("4\n") ;
8642     fflush (stdout) ;
8643     exit(0);
8644 }
8645 EOM
8646         : Call the object file tmp-dyna.o in case dlext=o.
8647         if $cc $ccflags $cccdlflags -c dyna.c > /dev/null 2>&1 && 
8648                 mv dyna${_o} tmp-dyna${_o} > /dev/null 2>&1 && 
8649                 $ld $lddlflags -o dyna.$dlext tmp-dyna${_o} > /dev/null 2>&1 && 
8650                 $cc $ccflags -o fred $ldflags $cccdlflags $ccdlflags fred.c $libs > /dev/null 2>&1; then
8651                 xxx=`./fred`
8652                 case $xxx in
8653                 1)      echo "Test program failed using dlopen." >&4
8654                         echo "Perhaps you should not use dynamic loading." >&4;;
8655                 2)      echo "Test program failed using dlsym." >&4
8656                         echo "Perhaps you should not use dynamic loading." >&4;;
8657                 3)      echo "dlsym needs a leading underscore" >&4
8658                         val="$define" ;;
8659                 4)      echo "dlsym doesn't need a leading underscore." >&4;;
8660                 esac
8661         else
8662                 echo "I can't compile and run the test program." >&4
8663                 echo "I'm guessing that dlsym doesn't need a leading underscore." >&4
8664         fi
8665         ;;
8666 esac
8667                 
8668 $rm -f fred fred.? dyna.$dlext dyna.? tmp-dyna.?
8669
8670 set d_dlsymun
8671 eval $setvar
8672
8673 hasproto='varname=$1; func=$2; shift; shift;
8674 while $test $# -ge 2; do
8675         case "$1" in
8676         $define) echo "#include <$2>";;
8677         esac ;
8678     shift 2;
8679 done > try.c;
8680 $cppstdin $cppflags $cppminus < try.c > tryout.c 2>/dev/null;
8681 if $contains "$func.*(" tryout.c >/dev/null 2>&1; then
8682         echo "$func() prototype found.";
8683         val="$define";
8684 else
8685         echo "$func() prototype NOT found.";
8686         val="$undef";
8687 fi;
8688 set $varname;
8689 eval $setvar;
8690 $rm -f try.c tryout.c'
8691
8692 : see if prototype for drand48 is available
8693 echo " "
8694 set d_drand48proto drand48 $i_stdlib stdlib.h $i_unistd unistd.h
8695 eval $hasproto
8696
8697 : see if dup2 exists
8698 set dup2 d_dup2
8699 eval $inlibc
8700
8701 : see if eaccess exists
8702 set eaccess d_eaccess
8703 eval $inlibc
8704
8705 : see if endgrent exists
8706 set endgrent d_endgrent
8707 eval $inlibc
8708
8709 : see if endhostent exists
8710 set endhostent d_endhent
8711 eval $inlibc
8712
8713 : see if endnetent exists
8714 set endnetent d_endnent
8715 eval $inlibc
8716
8717 : see if endprotoent exists
8718 set endprotoent d_endpent
8719 eval $inlibc
8720
8721 : see if endpwent exists
8722 set endpwent d_endpwent
8723 eval $inlibc
8724
8725 : see if endservent exists
8726 set endservent d_endsent
8727 eval $inlibc
8728
8729 : Locate the flags for 'open()'
8730 echo " "
8731 $cat >open3.c <<'EOCP'
8732 #include <sys/types.h>
8733 #ifdef I_FCNTL
8734 #include <fcntl.h>
8735 #endif
8736 #ifdef I_SYS_FILE
8737 #include <sys/file.h>
8738 #endif
8739 int main() {
8740         if(O_RDONLY);
8741 #ifdef O_TRUNC
8742         exit(0);
8743 #else
8744         exit(1);
8745 #endif
8746 }
8747 EOCP
8748 : check sys/file.h first to get FREAD on Sun
8749 if $test `./findhdr sys/file.h` && \
8750                 set open3 -DI_SYS_FILE && eval $compile; then
8751         h_sysfile=true;
8752         echo "<sys/file.h> defines the O_* constants..." >&4
8753         if ./open3; then
8754                 echo "and you have the 3 argument form of open()." >&4
8755                 val="$define"
8756         else
8757                 echo "but not the 3 argument form of open().  Oh, well." >&4
8758                 val="$undef"
8759         fi
8760 elif $test `./findhdr fcntl.h` && \
8761                 set open3 -DI_FCNTL && eval $compile; then
8762         h_fcntl=true;
8763         echo "<fcntl.h> defines the O_* constants..." >&4
8764         if ./open3; then
8765                 echo "and you have the 3 argument form of open()." >&4
8766                 val="$define"
8767         else
8768                 echo "but not the 3 argument form of open().  Oh, well." >&4
8769                 val="$undef"
8770         fi
8771 else
8772         val="$undef"
8773         echo "I can't find the O_* constant definitions!  You got problems." >&4
8774 fi
8775 set d_open3
8776 eval $setvar
8777 $rm -f open3*
8778
8779 : see which of string.h or strings.h is needed
8780 echo " "
8781 strings=`./findhdr string.h`
8782 if $test "$strings" && $test -r "$strings"; then
8783         echo "Using <string.h> instead of <strings.h>." >&4
8784         val="$define"
8785 else
8786         val="$undef"
8787         strings=`./findhdr strings.h`
8788         if $test "$strings" && $test -r "$strings"; then
8789                 echo "Using <strings.h> instead of <string.h>." >&4
8790         else
8791                 echo "No string header found -- You'll surely have problems." >&4
8792         fi
8793 fi
8794 set i_string
8795 eval $setvar
8796 case "$i_string" in
8797 "$undef") strings=`./findhdr strings.h`;;
8798 *)        strings=`./findhdr string.h`;;
8799 esac
8800
8801 : check for non-blocking I/O stuff
8802 case "$h_sysfile" in
8803 true) echo "#include <sys/file.h>" > head.c;;
8804 *)
8805         case "$h_fcntl" in
8806         true) echo "#include <fcntl.h>" > head.c;;
8807         *) echo "#include <sys/fcntl.h>" > head.c;;
8808         esac
8809         ;;
8810 esac
8811 echo " "
8812 echo "Figuring out the flag used by open() for non-blocking I/O..." >&4
8813 case "$o_nonblock" in
8814 '')
8815         $cat head.c > try.c
8816         $cat >>try.c <<'EOCP'
8817 #include <stdio.h>
8818 int main() {
8819 #ifdef O_NONBLOCK
8820         printf("O_NONBLOCK\n");
8821         exit(0);
8822 #endif
8823 #ifdef O_NDELAY
8824         printf("O_NDELAY\n");
8825         exit(0);
8826 #endif
8827 #ifdef FNDELAY
8828         printf("FNDELAY\n");
8829         exit(0);
8830 #endif
8831         exit(0);
8832 }
8833 EOCP
8834         set try
8835         if eval $compile_ok; then
8836                 o_nonblock=`./try`
8837                 case "$o_nonblock" in
8838                 '') echo "I can't figure it out, assuming O_NONBLOCK will do.";;
8839                 *) echo "Seems like we can use $o_nonblock.";;
8840                 esac
8841         else
8842                 echo "(I can't compile the test program; pray O_NONBLOCK is right!)"
8843         fi
8844         ;;
8845 *) echo "Using $hint value $o_nonblock.";;
8846 esac
8847 $rm -f try try.* .out core
8848
8849 echo " "
8850 echo "Let's see what value errno gets from read() on a $o_nonblock file..." >&4
8851 case "$eagain" in
8852 '')
8853         $cat head.c > try.c
8854         $cat >>try.c <<EOCP
8855 #include <errno.h>
8856 #include <sys/types.h>
8857 #include <signal.h>
8858 #include <stdio.h> 
8859 #define MY_O_NONBLOCK $o_nonblock
8860 #ifndef errno  /* XXX need better Configure test */
8861 extern int errno;
8862 #endif
8863 #$i_unistd I_UNISTD
8864 #ifdef I_UNISTD
8865 #include <unistd.h>
8866 #endif
8867 #$i_string I_STRING
8868 #ifdef I_STRING
8869 #include <string.h>
8870 #else
8871 #include <strings.h>
8872 #endif
8873 $signal_t blech(x) int x; { exit(3); }
8874 EOCP
8875         $cat >> try.c <<'EOCP'
8876 int main()
8877 {
8878         int pd[2];
8879         int pu[2];
8880         char buf[1];
8881         char string[100];
8882
8883         pipe(pd);       /* Down: child -> parent */
8884         pipe(pu);       /* Up: parent -> child */
8885         if (0 != fork()) {
8886                 int ret;
8887                 close(pd[1]);   /* Parent reads from pd[0] */
8888                 close(pu[0]);   /* Parent writes (blocking) to pu[1] */
8889                 if (-1 == fcntl(pd[0], F_SETFL, MY_O_NONBLOCK))
8890                         exit(1);
8891                 signal(SIGALRM, blech);
8892                 alarm(5);
8893                 if ((ret = read(pd[0], buf, 1)) > 0)    /* Nothing to read! */
8894                         exit(2);
8895                 sprintf(string, "%d\n", ret);
8896                 write(2, string, strlen(string));
8897                 alarm(0);
8898 #ifdef EAGAIN
8899                 if (errno == EAGAIN) {
8900                         printf("EAGAIN\n");
8901                         goto ok;
8902                 }
8903 #endif
8904 #ifdef EWOULDBLOCK
8905                 if (errno == EWOULDBLOCK)
8906                         printf("EWOULDBLOCK\n");
8907 #endif
8908         ok:
8909                 write(pu[1], buf, 1);   /* Unblocks child, tell it to close our pipe */
8910                 sleep(2);                               /* Give it time to close our pipe */
8911                 alarm(5);
8912                 ret = read(pd[0], buf, 1);      /* Should read EOF */
8913                 alarm(0);
8914                 sprintf(string, "%d\n", ret);
8915                 write(3, string, strlen(string));
8916                 exit(0);
8917         }
8918
8919         close(pd[0]);                   /* We write to pd[1] */
8920         close(pu[1]);                   /* We read from pu[0] */
8921         read(pu[0], buf, 1);    /* Wait for parent to signal us we may continue */
8922         close(pd[1]);                   /* Pipe pd is now fully closed! */
8923         exit(0);                                /* Bye bye, thank you for playing! */
8924 }
8925 EOCP
8926         set try
8927         if eval $compile_ok; then
8928                 echo "$startsh" >mtry
8929                 echo "./try >try.out 2>try.ret 3>try.err || exit 4" >>mtry
8930                 chmod +x mtry
8931                 ./mtry >/dev/null 2>&1
8932                 case $? in
8933                 0) eagain=`$cat try.out`;;
8934                 1) echo "Could not perform non-blocking setting!";;
8935                 2) echo "I did a successful read() for something that was not there!";;
8936                 3) echo "Hmm... non-blocking I/O does not seem to be working!";;
8937                 *) echo "Something terribly wrong happened during testing.";;
8938                 esac
8939                 rd_nodata=`$cat try.ret`
8940                 echo "A read() system call with no data present returns $rd_nodata."
8941                 case "$rd_nodata" in
8942                 0|-1) ;;
8943                 *)
8944                         echo "(That's peculiar, fixing that to be -1.)"
8945                         rd_nodata=-1
8946                         ;;
8947                 esac
8948                 case "$eagain" in
8949                 '')
8950                         echo "Forcing errno EAGAIN on read() with no data available."
8951                         eagain=EAGAIN
8952                         ;;
8953                 *)
8954                         echo "Your read() sets errno to $eagain when no data is available."
8955                         ;;
8956                 esac
8957                 status=`$cat try.err`
8958                 case "$status" in
8959                 0) echo "And it correctly returns 0 to signal EOF.";;
8960                 -1) echo "But it also returns -1 to signal EOF, so be careful!";;
8961                 *) echo "However, your read() returns '$status' on EOF??";;
8962                 esac
8963                 val="$define"
8964                 if test "$status" = "$rd_nodata"; then
8965                         echo "WARNING: you can't distinguish between EOF and no data!"
8966                         val="$undef"
8967                 fi
8968         else
8969                 echo "I can't compile the test program--assuming errno EAGAIN will do."
8970                 eagain=EAGAIN
8971         fi
8972         set d_eofnblk
8973         eval $setvar
8974         ;;
8975 *)
8976         echo "Using $hint value $eagain."
8977         echo "Your read() returns $rd_nodata when no data is present."
8978         case "$d_eofnblk" in
8979         "$define") echo "And you can see EOF because read() returns 0.";;
8980         "$undef") echo "But you can't see EOF status from read() returned value.";;
8981         *)
8982                 echo "(Assuming you can't see EOF status from read anyway.)"
8983                 d_eofnblk=$undef
8984                 ;;
8985         esac
8986         ;;
8987 esac
8988 $rm -f try try.* .out core head.c mtry
8989
8990 : see if fchmod exists
8991 set fchmod d_fchmod
8992 eval $inlibc
8993
8994 : see if fchown exists
8995 set fchown d_fchown
8996 eval $inlibc
8997
8998 : see if this is an fcntl system
8999 set fcntl d_fcntl
9000 eval $inlibc
9001
9002 hasfield='varname=$1; struct=$2; field=$3; shift; shift; shift;
9003 while $test $# -ge 2; do
9004         case "$1" in
9005         $define) echo "#include <$2>";;
9006         esac ;
9007     shift 2;
9008 done > try.c;
9009 echo "int main () { struct $struct foo; char* bar; bar = (char*)foo.$field; }" >> try.c;
9010 set try;
9011 if eval $compile; then
9012         val="$define";
9013 else
9014         val="$undef";
9015 fi;
9016 set $varname;
9017 eval $setvar;
9018 $rm -f try.c try.o'
9019
9020 socketlib=''
9021 sockethdr=''
9022 : see whether socket exists
9023 echo " "
9024 $echo $n "Hmm... $c" >&4
9025 if set socket val -f d_socket; eval $csym; $val; then
9026         echo "Looks like you have Berkeley networking support." >&4
9027         d_socket="$define"
9028         if set setsockopt val -f; eval $csym; $val; then
9029                 d_oldsock="$undef"
9030         else
9031                 echo "...but it uses the old BSD 4.1c interface, rather than 4.2." >&4
9032                 d_oldsock="$define"
9033         fi
9034 else
9035         if $contains socklib libc.list >/dev/null 2>&1; then
9036                 echo "Looks like you have Berkeley networking support." >&4
9037                 d_socket="$define"
9038                 : we will have to assume that it supports the 4.2 BSD interface
9039                 d_oldsock="$undef"
9040         else
9041                 echo "You don't have Berkeley networking in libc$_a..." >&4
9042                 if test "X$d_socket" = "X$define"; then
9043                    echo "...but you seem to believe that you have sockets." >&4
9044                 else
9045                         for net in net socket
9046                         do
9047                                 if test -f /usr/lib/lib$net$_a; then
9048                                         ( ($nm $nm_opt /usr/lib/lib$net$_a | eval $nm_extract) ||  \
9049                                         $ar t /usr/lib/lib$net$_a) 2>/dev/null >> libc.list
9050                                         if $contains socket libc.list >/dev/null 2>&1; then
9051                                                 d_socket="$define"
9052                                                 socketlib="-l$net"
9053                                                 case "$net" in
9054                                                 net)
9055                                                         echo "...but the Wollongong group seems to have hacked it in." >&4
9056                                                         sockethdr="-I/usr/netinclude"
9057                                                         ;;
9058                                                 esac
9059                                                 echo "Found Berkeley sockets interface in lib$net." >& 4 
9060                                                 if $contains setsockopt libc.list >/dev/null 2>&1; then
9061                                                         d_oldsock="$undef"
9062                                                 else
9063                                                         echo "...using the old BSD 4.1c interface, rather than 4.2." >&4
9064                                                         d_oldsock="$define"
9065                                                 fi
9066                                                 break
9067                                         fi
9068                                 fi
9069                         done
9070                         if test "X$d_socket" != "X$define"; then
9071                            echo "or anywhere else I see." >&4
9072                            d_socket="$undef"
9073                            d_oldsock="$undef"
9074                         fi
9075                 fi
9076         fi
9077 fi
9078
9079 : see if socketpair exists
9080 set socketpair d_sockpair
9081 eval $inlibc
9082
9083
9084 echo " "
9085 echo "Checking the availability of certain socket constants..." >& 4
9086 for ENUM in MSG_CTRUNC MSG_DONTROUTE MSG_OOB MSG_PEEK MSG_PROXY SCM_RIGHTS; do
9087         enum=`$echo $ENUM|./tr '[A-Z]' '[a-z]'`
9088         $cat >try.c <<EOF
9089 #include <sys/types.h>
9090 #include <sys/socket.h>
9091 int main() {
9092     int i = $ENUM;
9093 }
9094 EOF
9095         val="$undef"
9096         set try; if eval $compile; then
9097                 val="$define"
9098         fi
9099         set d_${enum}; eval $setvar
9100         $rm -f try.c try
9101 done
9102
9103 : see if sys/select.h has to be included
9104 set sys/select.h i_sysselct
9105 eval $inhdr
9106
9107 : see if we should include time.h, sys/time.h, or both
9108 echo " "
9109 if test "X$timeincl" = X; then
9110         echo "Testing to see if we should include <time.h>, <sys/time.h> or both." >&4
9111         $echo $n "I'm now running the test program...$c"
9112         $cat >try.c <<'EOCP'
9113 #include <sys/types.h>
9114 #ifdef I_TIME
9115 #include <time.h>
9116 #endif
9117 #ifdef I_SYSTIME
9118 #ifdef SYSTIMEKERNEL
9119 #define KERNEL
9120 #endif
9121 #include <sys/time.h>
9122 #endif
9123 #ifdef I_SYSSELECT
9124 #include <sys/select.h>
9125 #endif
9126 int main()
9127 {
9128         struct tm foo;
9129 #ifdef S_TIMEVAL
9130         struct timeval bar;
9131 #endif
9132 #ifdef S_TIMEZONE
9133         struct timezone tzp;
9134 #endif
9135         if (foo.tm_sec == foo.tm_sec)
9136                 exit(0);
9137 #ifdef S_TIMEVAL
9138         if (bar.tv_sec == bar.tv_sec)
9139                 exit(0);
9140 #endif
9141         exit(1);
9142 }
9143 EOCP
9144         flags=''
9145         for s_timezone in '-DS_TIMEZONE' ''; do
9146         sysselect=''
9147         for s_timeval in '-DS_TIMEVAL' ''; do
9148         for i_systimek in '' '-DSYSTIMEKERNEL'; do
9149         for i_time in '' '-DI_TIME'; do
9150         for i_systime in '-DI_SYSTIME' ''; do
9151                 case "$flags" in
9152                 '') $echo $n ".$c"
9153                         set try $i_time $i_systime $i_systimek $sysselect $s_timeval $s_timezone
9154                         if eval $compile; then
9155                                 set X $i_time $i_systime $i_systimek $sysselect $s_timeval
9156                                 shift
9157                                 flags="$*"
9158                                 echo " "
9159                                 $echo $n "Succeeded with $flags$c"
9160                         fi
9161                         ;;
9162                 esac
9163         done
9164         done
9165         done
9166         done
9167         done
9168         timeincl=''
9169         echo " "
9170         case "$flags" in
9171         *SYSTIMEKERNEL*) i_systimek="$define"
9172                 timeincl=`./findhdr sys/time.h`
9173                 echo "We'll include <sys/time.h> with KERNEL defined." >&4;;
9174         *) i_systimek="$undef";;
9175         esac
9176         case "$flags" in
9177         *I_TIME*) i_time="$define"
9178                 timeincl=`./findhdr time.h`" $timeincl"
9179                 echo "We'll include <time.h>." >&4;;
9180         *) i_time="$undef";;
9181         esac
9182         case "$flags" in
9183         *I_SYSTIME*) i_systime="$define"
9184                 timeincl=`./findhdr sys/time.h`" $timeincl"
9185                 echo "We'll include <sys/time.h>." >&4;;
9186         *) i_systime="$undef";;
9187         esac
9188         $rm -f try.c try
9189 fi
9190
9191 : check for fd_set items
9192 $cat <<EOM
9193
9194 Checking to see how well your C compiler handles fd_set and friends ...
9195 EOM
9196 $cat >fd_set.c <<EOCP
9197 #$i_systime I_SYS_TIME
9198 #$i_sysselct I_SYS_SELECT
9199 #$d_socket HAS_SOCKET
9200 #include <sys/types.h>
9201 #ifdef HAS_SOCKET
9202 #include <sys/socket.h> /* Might include <sys/bsdtypes.h> */
9203 #endif
9204 #ifdef I_SYS_TIME
9205 #include <sys/time.h>
9206 #endif
9207 #ifdef I_SYS_SELECT
9208 #include <sys/select.h>
9209 #endif
9210 int main() {
9211         fd_set fds;
9212
9213 #ifdef TRYBITS
9214         if(fds.fds_bits);
9215 #endif
9216
9217 #if defined(FD_SET) && defined(FD_CLR) && defined(FD_ISSET) && defined(FD_ZERO)
9218         exit(0);
9219 #else
9220         exit(1);
9221 #endif
9222 }
9223 EOCP
9224 set fd_set -DTRYBITS
9225 if eval $compile; then
9226         d_fds_bits="$define"
9227         d_fd_set="$define"
9228         echo "Well, your system knows about the normal fd_set typedef..." >&4
9229         if ./fd_set; then
9230                 echo "and you have the normal fd_set macros (just as I'd expect)." >&4
9231                 d_fd_macros="$define"
9232         else
9233                 $cat >&4 <<'EOM'
9234 but not the normal fd_set macros!  Gaaack!  I'll have to cover for you.
9235 EOM
9236                 d_fd_macros="$undef"
9237         fi
9238 else
9239         $cat <<'EOM'
9240 Hmm, your compiler has some difficulty with fd_set.  Checking further...
9241 EOM
9242         set fd_set
9243         if eval $compile; then
9244                 d_fds_bits="$undef"
9245                 d_fd_set="$define"
9246                 echo "Well, your system has some sort of fd_set available..." >&4
9247                 if ./fd_set; then
9248                         echo "and you have the normal fd_set macros." >&4
9249                         d_fd_macros="$define"
9250                 else
9251                         $cat <<'EOM'
9252 but not the normal fd_set macros!  Gross!  More work for me...
9253 EOM
9254                         d_fd_macros="$undef"
9255                 fi
9256         else
9257         echo "Well, you got zip.  That's OK, I can roll my own fd_set stuff." >&4
9258                 d_fd_set="$undef"
9259                 d_fds_bits="$undef"
9260                 d_fd_macros="$undef"
9261         fi
9262 fi
9263 $rm -f fd_set*
9264
9265 : see if fgetpos exists
9266 set fgetpos d_fgetpos
9267 eval $inlibc
9268
9269 : see if flock exists
9270 set flock d_flock
9271 eval $inlibc
9272
9273 : see if fork exists
9274 set fork d_fork
9275 eval $inlibc
9276
9277 : see if pathconf exists
9278 set pathconf d_pathconf
9279 eval $inlibc
9280
9281 : see if fpathconf exists
9282 set fpathconf d_fpathconf
9283 eval $inlibc
9284
9285
9286 : check for fpos64_t
9287 echo " "
9288 echo "Checking to see if you have fpos64_t..." >&4
9289 $cat >try.c <<EOCP
9290 #include <stdio.h>
9291 int main() { fpos64_t x = 7; }
9292 EOCP
9293 set try
9294 if eval $compile; then
9295         val="$define"
9296         echo "You have fpos64_t."
9297 else
9298         val="$undef"
9299         echo "You do not have fpos64_t."
9300         case "$fpossize" in
9301         8) echo "(Your fpos_t is 64 bits, so you could use that.)" ;;
9302         esac
9303 fi
9304 $rm -f try.* try
9305 set d_fpos64_t
9306 eval $setvar
9307
9308 : see if frexpl exists
9309 set frexpl d_frexpl
9310 eval $inlibc
9311
9312 hasstruct='varname=$1; struct=$2; shift; shift;
9313 while $test $# -ge 2; do
9314         case "$1" in
9315         $define) echo "#include <$2>";;
9316         esac ;
9317     shift 2;
9318 done > try.c;
9319 echo "int main () { struct $struct foo; }" >> try.c;
9320 set try;
9321 if eval $compile; then
9322         val="$define";
9323 else
9324         val="$undef";
9325 fi;
9326 set $varname;
9327 eval $setvar;
9328 $rm -f try.c try.o'
9329
9330 : see if this is a sys/param system
9331 set sys/param.h i_sysparam
9332 eval $inhdr
9333
9334 : see if this is a sys/mount.h system
9335 set sys/mount.h i_sysmount
9336 eval $inhdr
9337
9338 : see if sys/types.h has to be included
9339 set sys/types.h i_systypes
9340 eval $inhdr
9341
9342
9343 echo " "
9344 echo "Checking to see if your system supports struct fs_data..." >&4
9345 set d_fs_data_s fs_data $i_systypes sys/types.h $i_sysparam sys/param.h $i_sysmount sys/mount.h
9346 eval $hasstruct
9347 case "$d_fs_data_s" in
9348 "$define")      echo "Yes, it does."   ;;
9349 *)              echo "No, it doesn't." ;;
9350 esac
9351
9352 : see if fseeko exists
9353 set fseeko d_fseeko
9354 eval $inlibc
9355 case "$longsize" in
9356 8) echo "(Your long is 64 bits, so you could use fseek.)" ;;
9357 esac
9358
9359 : see if fsetpos exists
9360 set fsetpos d_fsetpos
9361 eval $inlibc
9362
9363
9364 : see if fstatfs exists
9365 set fstatfs d_fstatfs
9366 eval $inlibc
9367
9368
9369 : see if statvfs exists
9370 set statvfs d_statvfs
9371 eval $inlibc
9372
9373 : see if fstatvfs exists
9374 set fstatvfs d_fstatvfs
9375 eval $inlibc
9376
9377
9378 : see if ftello exists
9379 set ftello d_ftello
9380 eval $inlibc
9381 case "$longsize" in
9382 8) echo "(Your long is 64 bits, so you could use ftell.)" ;;
9383 esac
9384
9385 : see if getcwd exists
9386 set getcwd d_getcwd
9387 eval $inlibc
9388
9389 : see if getespwnam exists
9390 set getespwnam d_getespwnam
9391 eval $inlibc
9392
9393
9394 : see if getfsstat exists
9395 set getfsstat d_getfsstat
9396 eval $inlibc
9397
9398 : see if getgrent exists
9399 set getgrent d_getgrent
9400 eval $inlibc
9401
9402 : see if gethostbyaddr exists
9403 set gethostbyaddr d_gethbyaddr
9404 eval $inlibc
9405
9406 : see if gethostbyname exists
9407 set gethostbyname d_gethbyname
9408 eval $inlibc
9409
9410 : see if gethostent exists
9411 set gethostent d_gethent
9412 eval $inlibc
9413
9414 : see how we will look up host name
9415 echo " "
9416 call=''
9417 if set gethostname val -f d_gethname; eval $csym; $val; then
9418         echo 'gethostname() found.' >&4
9419         d_gethname="$define"
9420         call=gethostname
9421 fi
9422 if set uname val -f d_uname; eval $csym; $val; then
9423         if ./xenix; then
9424                 $cat <<'EOM'
9425 uname() was found, but you're running xenix, and older versions of xenix
9426 have a broken uname(). If you don't really know whether your xenix is old
9427 enough to have a broken system call, use the default answer.
9428
9429 EOM
9430                 dflt=y
9431                 case "$d_uname" in
9432                 "$define") dflt=n;;
9433                 esac
9434                 rp='Is your uname() broken?'
9435                 . ./myread
9436                 case "$ans" in
9437                 n*) d_uname="$define"; call=uname;;
9438                 esac
9439         else
9440                 echo 'uname() found.' >&4
9441                 d_uname="$define"
9442                 case "$call" in
9443                 '') call=uname ;;
9444                 esac
9445         fi
9446 fi
9447 case "$d_gethname" in
9448 '') d_gethname="$undef";;
9449 esac
9450 case "$d_uname" in
9451 '') d_uname="$undef";;
9452 esac
9453 case "$d_uname$d_gethname" in
9454 *define*)
9455         dflt=n
9456         cat <<EOM
9457  
9458 Every now and then someone has a $call() that lies about the hostname
9459 but can't be fixed for political or economic reasons.  If you wish, I can
9460 pretend $call() isn't there and maybe compute hostname at run-time
9461 thanks to the '$phostname' command.
9462
9463 EOM
9464         rp="Shall I ignore $call() from now on?"
9465         . ./myread
9466         case "$ans" in
9467         y*) d_uname="$undef" d_gethname="$undef"; $echo $n "Okay...$c";;
9468         esac;;
9469 esac
9470 case "$phostname" in
9471 '') aphostname='';;
9472 *) case "$aphostname" in
9473         /*) ;;
9474         *) set X $phostname
9475                 shift
9476                 file=$1
9477                 shift
9478                 file=`./loc $file $file $pth`
9479                 aphostname=`echo $file $*`
9480                 ;;
9481         esac
9482         ;;
9483 esac
9484 case "$d_uname$d_gethname" in
9485 *define*) ;;
9486 *)
9487         case "$phostname" in
9488         '')
9489                 echo "There will be no way for $package to get your hostname." >&4;;
9490         *)
9491         echo "I'll use 'popen("'"'$aphostname'", "r")'"' to get your hostname." >&4
9492                 ;;
9493         esac;;
9494 esac
9495 case "$d_phostname" in
9496 '') d_phostname="$undef";;
9497 esac
9498
9499 : see if this is a netdb.h system
9500 set netdb.h i_netdb
9501 eval $inhdr
9502
9503 : see if prototypes for various gethostxxx netdb.h functions are available
9504 echo " "
9505 set d_gethostprotos gethostent $i_netdb netdb.h
9506 eval $hasproto
9507
9508 : see if getlogin exists
9509 set getlogin d_getlogin
9510 eval $inlibc
9511
9512 : see if getmnt exists
9513 set getmnt d_getmnt
9514 eval $inlibc
9515
9516 : see if getmntent exists
9517 set getmntent d_getmntent
9518 eval $inlibc
9519
9520 : see if getnetbyaddr exists
9521 set getnetbyaddr d_getnbyaddr
9522 eval $inlibc
9523
9524 : see if getnetbyname exists
9525 set getnetbyname d_getnbyname
9526 eval $inlibc
9527
9528 : see if getnetent exists
9529 set getnetent d_getnent
9530 eval $inlibc
9531
9532 : see if prototypes for various getnetxxx netdb.h functions are available
9533 echo " "
9534 set d_getnetprotos getnetent $i_netdb netdb.h
9535 eval $hasproto
9536
9537
9538 : see if getprotobyname exists
9539 set getprotobyname d_getpbyname
9540 eval $inlibc
9541
9542 : see if getprotobynumber exists
9543 set getprotobynumber d_getpbynumber
9544 eval $inlibc
9545
9546 : see if getprotoent exists
9547 set getprotoent d_getpent
9548 eval $inlibc
9549
9550 : see if getpgid exists
9551 set getpgid d_getpgid
9552 eval $inlibc
9553
9554 : see if getpgrp2 exists
9555 set getpgrp2 d_getpgrp2
9556 eval $inlibc
9557
9558 : see if getppid exists
9559 set getppid d_getppid
9560 eval $inlibc
9561
9562 : see if getpriority exists
9563 set getpriority d_getprior
9564 eval $inlibc
9565
9566 : see if prototypes for various getprotoxxx netdb.h functions are available
9567 echo " "
9568 set d_getprotoprotos getprotoent $i_netdb netdb.h
9569 eval $hasproto
9570
9571 : see if getprpwnam exists
9572 set getprpwnam d_getprpwnam
9573 eval $inlibc
9574
9575 : see if getpwent exists
9576 set getpwent d_getpwent
9577 eval $inlibc
9578
9579
9580 : see if getservbyname exists
9581 set getservbyname d_getsbyname
9582 eval $inlibc
9583
9584 : see if getservbyport exists
9585 set getservbyport d_getsbyport
9586 eval $inlibc
9587
9588 : see if getservent exists
9589 set getservent d_getsent
9590 eval $inlibc
9591
9592 : see if prototypes for various getservxxx netdb.h functions are available
9593 echo " "
9594 set d_getservprotos getservent $i_netdb netdb.h
9595 eval $hasproto
9596
9597 : see if getspnam exists
9598 set getspnam d_getspnam
9599 eval $inlibc
9600
9601 : see if gettimeofday or ftime exists
9602 set gettimeofday d_gettimeod
9603 eval $inlibc
9604 case "$d_gettimeod" in
9605 "$undef")
9606         set ftime d_ftime 
9607         eval $inlibc
9608         ;;
9609 *)
9610         val="$undef"; set d_ftime; eval $setvar
9611         ;;
9612 esac
9613 case "$d_gettimeod$d_ftime" in
9614 "$undef$undef")
9615         echo " "
9616         echo 'No ftime() nor gettimeofday() -- timing may be less accurate.' >&4
9617         ;;
9618 esac
9619
9620 : see if this is an grp system
9621 set grp.h i_grp
9622 eval $inhdr
9623
9624 case "$i_grp" in
9625 $define)
9626         xxx=`./findhdr grp.h`
9627         $cppstdin $cppflags $cppminus < $xxx >$$.h
9628
9629         if $contains 'gr_passwd' $$.h >/dev/null 2>&1; then
9630                 val="$define"
9631         else
9632                 val="$undef"
9633         fi
9634         set d_grpasswd
9635         eval $setvar
9636
9637         $rm -f $$.h
9638         ;;
9639 *)
9640         val="$undef";
9641         set d_grpasswd; eval $setvar
9642         ;;
9643 esac
9644
9645 : see if hasmntopt exists
9646 set hasmntopt d_hasmntopt
9647 eval $inlibc
9648
9649 : see if this is a netinet/in.h or sys/in.h system
9650 set netinet/in.h i_niin sys/in.h i_sysin
9651 eval $inhdr
9652
9653 : see if arpa/inet.h has to be included
9654 set arpa/inet.h i_arpainet
9655 eval $inhdr
9656
9657 : see if htonl --and friends-- exists
9658 val=''
9659 set htonl val
9660 eval $inlibc
9661
9662 : Maybe they are macros.
9663 case "$val" in
9664 $undef)
9665         $cat >htonl.c <<EOM
9666 #include <stdio.h>
9667 #include <sys/types.h>
9668 #$i_niin I_NETINET_IN
9669 #$i_sysin I_SYS_IN
9670 #$i_arpainet I_ARPA_INET
9671 #ifdef I_NETINET_IN
9672 #include <netinet/in.h>
9673 #endif
9674 #ifdef I_SYS_IN
9675 #include <sys/in.h>
9676 #endif
9677 #ifdef I_ARPA_INET
9678 #include <arpa/inet.h>
9679 #endif
9680 #ifdef htonl
9681 printf("Defined as a macro.");
9682 #endif
9683 EOM
9684         $cppstdin $cppflags $cppminus < htonl.c >htonl.E 2>/dev/null
9685         if $contains 'Defined as a macro' htonl.E >/dev/null 2>&1; then
9686                 val="$define"
9687                 echo "But it seems to be defined as a macro." >&4
9688         fi
9689         $rm -f htonl.?
9690         ;;
9691 esac
9692 set d_htonl
9693 eval $setvar
9694
9695 : see if iconv exists
9696 set iconv d_iconv
9697 eval $inlibc
9698
9699 : index or strchr
9700 echo " "
9701 if set index val -f; eval $csym; $val; then
9702         if set strchr val -f d_strchr; eval $csym; $val; then
9703                 if $contains strchr "$strings" >/dev/null 2>&1 ; then
9704                         val="$define"
9705                         vali="$undef"
9706                         echo "strchr() found." >&4
9707                 else
9708                         val="$undef"
9709                         vali="$define"
9710                         echo "index() found." >&4
9711                 fi
9712         else
9713                 val="$undef"
9714                 vali="$define"
9715                 echo "index() found." >&4
9716         fi
9717 else
9718         if set strchr val -f d_strchr; eval $csym; $val; then
9719                 val="$define"
9720                 vali="$undef"
9721                 echo "strchr() found." >&4
9722         else
9723                 echo "No index() or strchr() found!" >&4
9724                 val="$undef"
9725                 vali="$undef"
9726         fi
9727 fi
9728 set d_strchr; eval $setvar
9729 val="$vali"
9730 set d_index; eval $setvar
9731
9732 : check whether inet_aton exists
9733 set inet_aton d_inetaton
9734 eval $inlibc
9735
9736 : see if inttypes.h is available
9737 : we want a real compile instead of Inhdr because some systems
9738 : have an inttypes.h which includes non-existent headers
9739 echo " "
9740 $cat >try.c <<EOCP
9741 #include <inttypes.h>
9742 int main() {
9743         static int32_t foo32 = 0x12345678;
9744 }
9745 EOCP
9746 set try
9747 if eval $compile; then
9748         echo "<inttypes.h> found." >&4
9749         val="$define"
9750 else
9751         echo "<inttypes.h> NOT found." >&4
9752         val="$undef"
9753 fi
9754 $rm -f try.c try
9755 set i_inttypes
9756 eval $setvar
9757
9758 : check for int64_t
9759 echo " "
9760 echo "Checking to see if you have int64_t..." >&4
9761 $cat >try.c <<EOCP
9762 #include <sys/types.h>
9763 #$i_inttypes I_INTTYPES
9764 #ifdef I_INTTYPES
9765 #include <inttypes.h>
9766 #endif
9767 int main() { int64_t x = 7; }
9768 EOCP
9769 set try
9770 if eval $compile; then
9771         val="$define"
9772         echo "You have int64_t."
9773 else
9774         val="$undef"
9775         echo "You do not have int64_t."
9776 fi
9777 $rm -f try try.*
9778 set d_int64_t
9779 eval $setvar
9780
9781 : Look for isascii
9782 echo " "
9783 $cat >isascii.c <<'EOCP'
9784 #include <stdio.h>
9785 #include <ctype.h>
9786 int main() {
9787         int c = 'A';
9788         if (isascii(c))
9789                 exit(0);
9790         else
9791                 exit(1);
9792 }
9793 EOCP
9794 set isascii
9795 if eval $compile; then
9796         echo "isascii() found." >&4
9797         val="$define"
9798 else
9799         echo "isascii() NOT found." >&4
9800         val="$undef"
9801 fi
9802 set d_isascii
9803 eval $setvar
9804 $rm -f isascii*
9805
9806 : see if isnan exists
9807 set isnan d_isnan
9808 eval $inlibc
9809
9810 : see if isnanl exists
9811 set isnanl d_isnanl
9812 eval $inlibc
9813
9814 : see if killpg exists
9815 set killpg d_killpg
9816 eval $inlibc
9817
9818 : see if lchown exists
9819 echo " "
9820 $cat > try.c <<'EOCP'
9821 /* System header to define __stub macros and hopefully few prototypes,
9822     which can conflict with char lchown(); below.  */
9823 #include <assert.h>
9824 /* Override any gcc2 internal prototype to avoid an error.  */
9825 /* We use char because int might match the return type of a gcc2
9826    builtin and then its argument prototype would still apply.  */
9827 char lchown();
9828 int main() {
9829     /*  The GNU C library defines this for functions which it implements
9830         to always fail with ENOSYS.  Some functions are actually named
9831         something starting with __ and the normal name is an alias.  */
9832 #if defined (__stub_lchown) || defined (__stub___lchown)
9833 choke me
9834 #else
9835 lchown();
9836 #endif
9837 ; return 0; }
9838 EOCP
9839 set try
9840 if eval $compile; then
9841     $echo "lchown() found." >&4
9842     val="$define"
9843 else
9844     $echo "lchown() NOT found." >&4
9845     val="$undef"
9846 fi
9847 set d_lchown
9848 eval $setvar
9849
9850 : See if number of significant digits in a double precision number is known
9851 echo " "
9852 $cat >ldbl_dig.c <<EOM
9853 #$i_limits I_LIMITS
9854 #$i_float I_FLOAT
9855 #ifdef I_LIMITS
9856 #include <limits.h>
9857 #endif
9858 #ifdef I_FLOAT
9859 #include <float.h>
9860 #endif
9861 #ifdef LDBL_DIG
9862 printf("Contains LDBL_DIG");
9863 #endif
9864 EOM
9865 $cppstdin $cppflags $cppminus < ldbl_dig.c >ldbl_dig.E 2>/dev/null
9866 if $contains 'LDBL_DIG' ldbl_dig.E >/dev/null 2>&1; then
9867         echo "LDBL_DIG found." >&4
9868         val="$define"
9869 else
9870         echo "LDBL_DIG NOT found." >&4
9871         val="$undef"
9872 fi
9873 $rm -f ldbl_dig.?
9874 set d_ldbl_dig
9875 eval $setvar
9876
9877 : see if link exists
9878 set link d_link
9879 eval $inlibc
9880
9881 : see if localeconv exists
9882 set localeconv d_locconv
9883 eval $inlibc
9884
9885 : see if lockf exists
9886 set lockf d_lockf
9887 eval $inlibc
9888
9889 : check for long long
9890 echo " "
9891 echo "Checking to see if you have long long..." >&4
9892 echo 'int main() { long long x = 7; return 0; }' > try.c
9893 set try
9894 if eval $compile; then
9895         val="$define"
9896         echo "You have long long."
9897 else
9898         val="$undef"
9899         echo "You do not have long long."
9900 fi
9901 $rm try.*
9902 set d_longlong
9903 eval $setvar
9904
9905 : check for length of long long
9906 case "${d_longlong}${longlongsize}" in
9907 $define)
9908         echo " "
9909         echo "Checking to see how big your long longs are..." >&4
9910         $cat >try.c <<'EOCP'
9911 #include <stdio.h>
9912 int main()
9913 {
9914     printf("%d\n", (int)sizeof(long long));
9915     return(0);
9916 }
9917 EOCP
9918         set try
9919         if eval $compile_ok; then
9920                 longlongsize=`./try$exe_ext`
9921                 echo "Your long longs are $longlongsize bytes long."
9922         else
9923                 dflt='8'
9924                 echo " "
9925                 echo "(I can't seem to compile the test program.  Guessing...)"
9926                 rp="What is the size of a long long (in bytes)?"
9927                 . ./myread
9928                 longlongsize="$ans"
9929         fi
9930         if $test "X$longsize" = "X$longlongsize"; then
9931                 echo "(That isn't any different from an ordinary long.)"
9932         fi      
9933         ;;
9934 esac
9935 $rm -f try.* try
9936
9937 : see if prototype for lseek is available
9938 echo " "
9939 set d_lseekproto lseek $i_systypes sys/types.h $i_unistd unistd.h
9940 eval $hasproto
9941
9942 : see if lstat exists
9943 set lstat d_lstat
9944 eval $inlibc
9945
9946 : see if madvise exists
9947 set madvise d_madvise
9948 eval $inlibc
9949
9950 : see if mblen exists
9951 set mblen d_mblen
9952 eval $inlibc
9953
9954 : see if mbstowcs exists
9955 set mbstowcs d_mbstowcs
9956 eval $inlibc
9957
9958 : see if mbtowc exists
9959 set mbtowc d_mbtowc
9960 eval $inlibc
9961
9962 : see if memchr exists
9963 set memchr d_memchr
9964 eval $inlibc
9965
9966 : see if memcmp exists
9967 set memcmp d_memcmp
9968 eval $inlibc
9969
9970 : see if memcpy exists
9971 set memcpy d_memcpy
9972 eval $inlibc
9973
9974 : see if memmove exists
9975 set memmove d_memmove
9976 eval $inlibc
9977
9978 : see if memset exists
9979 set memset d_memset
9980 eval $inlibc
9981
9982 : see if mkdir exists
9983 set mkdir d_mkdir
9984 eval $inlibc
9985
9986 : see if mkdtemp exists
9987 set mkdtemp d_mkdtemp
9988 eval $inlibc
9989
9990 : see if mkfifo exists
9991 set mkfifo d_mkfifo
9992 eval $inlibc
9993
9994 : see if mkstemp exists
9995 set mkstemp d_mkstemp
9996 eval $inlibc
9997
9998 : see if mkstemps exists
9999 set mkstemps d_mkstemps
10000 eval $inlibc
10001
10002 : see if mktime exists
10003 set mktime d_mktime
10004 eval $inlibc
10005
10006 : see if this is a sys/mman.h system
10007 set sys/mman.h i_sysmman
10008 eval $inhdr
10009
10010 : see if mmap exists
10011 set mmap d_mmap
10012 eval $inlibc
10013 : see what shmat returns
10014 : default to something harmless
10015 mmaptype='void *'
10016 case "$i_sysmman$d_mmap" in
10017 "$define$define")
10018         $cat >mmap.c <<'END'
10019 #include <sys/mman.h>
10020 void *mmap();
10021 END
10022         if $cc $ccflags -c mmap.c >/dev/null 2>&1; then
10023                 mmaptype='void *'
10024         else
10025                 mmaptype='caddr_t'
10026         fi
10027         echo "and it returns ($mmaptype)." >&4
10028         ;;
10029 esac
10030
10031
10032
10033 : see if modfl exists
10034 set modfl d_modfl
10035 eval $inlibc
10036
10037 : see if mprotect exists
10038 set mprotect d_mprotect
10039 eval $inlibc
10040
10041 : see if msgctl exists
10042 set msgctl d_msgctl
10043 eval $inlibc
10044
10045 : see if msgget exists
10046 set msgget d_msgget
10047 eval $inlibc
10048
10049 : see if msgsnd exists
10050 set msgsnd d_msgsnd
10051 eval $inlibc
10052
10053 : see if msgrcv exists
10054 set msgrcv d_msgrcv
10055 eval $inlibc
10056
10057 : see how much of the 'msg*(2)' library is present.
10058 h_msg=true
10059 echo " "
10060 case "$d_msgctl$d_msgget$d_msgsnd$d_msgrcv" in
10061 *"$undef"*) h_msg=false;;
10062 esac
10063 case "$osname" in
10064 freebsd)
10065     case "`ipcs 2>&1`" in
10066     "SVID messages"*"not configured"*)
10067         echo "Your $osname does not have the msg*(2) configured." >&4
10068         h_msg=false
10069         val="$undef"
10070         set msgctl d_msgctl
10071         eval $setvar
10072         set msgget d_msgget
10073         eval $setvar
10074         set msgsnd d_msgsnd
10075         eval $setvar
10076         set msgrcv d_msgrcv
10077         eval $setvar
10078         ;;
10079     esac
10080     ;;
10081 esac
10082 : we could also check for sys/ipc.h ...
10083 if $h_msg && $test `./findhdr sys/msg.h`; then
10084         echo "You have the full msg*(2) library." >&4
10085         val="$define"
10086 else
10087         echo "You don't have the full msg*(2) library." >&4
10088         val="$undef"
10089 fi
10090 set d_msg
10091 eval $setvar
10092
10093 : see if msync exists
10094 set msync d_msync
10095 eval $inlibc
10096
10097 : see if munmap exists
10098 set munmap d_munmap
10099 eval $inlibc
10100
10101 : see if nice exists
10102 set nice d_nice
10103 eval $inlibc
10104
10105
10106 echo " "
10107 echo "Checking which 64-bit integer type we could use..." >&4
10108
10109 case "$intsize" in
10110 8) val=int
10111    set quadtype
10112    eval $setvar
10113    val='"unsigned int"'
10114    set uquadtype
10115    eval $setvar
10116    quadkind=1
10117    ;;
10118 *) case "$longsize" in
10119    8) val=long
10120       set quadtype
10121       eval $setvar
10122       val='"unsigned long"'
10123       set uquadtype
10124       eval $setvar
10125       quadkind=2
10126       ;;
10127    *) case "$d_longlong:$longlongsize" in
10128       define:8)
10129         val='"long long"'
10130         set quadtype
10131         eval $setvar
10132         val='"unsigned long long"'
10133         set uquadtype
10134         eval $setvar
10135         quadkind=3
10136         ;;
10137       *) case "$d_int64_t" in
10138          define)
10139            val=int64_t
10140            set quadtype
10141            eval $setvar
10142            val=uint64_t
10143            set uquadtype
10144            eval $setvar
10145            quadkind=4
10146            ;;
10147          esac
10148          ;;
10149       esac
10150       ;;
10151    esac
10152    ;;
10153 esac
10154
10155 case "$quadtype" in
10156 '')     echo "Alas, no 64-bit integer types in sight." >&4
10157         d_quad="$undef"
10158         ;;
10159 *)      if test X"$use64bitint" = Xdefine -o X"$longsize" = X8; then
10160             verb="will"
10161         else
10162             verb="could"
10163         fi
10164         echo "We $verb use '$quadtype' for 64-bit integers." >&4
10165         d_quad="$define"
10166         ;;
10167 esac
10168
10169 : check for length of character
10170 echo " "
10171 case "$charsize" in
10172 '')
10173         echo "Checking to see how big your characters are (hey, you never know)..." >&4
10174         $cat >try.c <<'EOCP'
10175 #include <stdio.h>
10176 int main()
10177 {
10178     printf("%d\n", (int)sizeof(char));
10179     exit(0);
10180 }
10181 EOCP
10182         set try
10183         if eval $compile_ok; then
10184                 dflt=`./try`
10185         else
10186                 dflt='1'
10187                 echo "(I can't seem to compile the test program.  Guessing...)"
10188         fi
10189         ;;
10190 *)
10191         dflt="$charsize"
10192         ;;
10193 esac
10194 rp="What is the size of a character (in bytes)?"
10195 . ./myread
10196 charsize="$ans"
10197 $rm -f try.c try
10198
10199
10200 echo " "
10201 $echo "Choosing the C types to be used for Perl's internal types..." >&4
10202
10203 case "$use64bitint:$d_quad:$quadtype" in
10204 define:define:?*)
10205         ivtype="$quadtype"
10206         uvtype="$uquadtype"
10207         ivsize=8
10208         uvsize=8
10209         ;;
10210 *)      ivtype="long"
10211         uvtype="unsigned long"
10212         ivsize=$longsize
10213         uvsize=$longsize
10214         ;;
10215 esac
10216
10217 case "$uselongdouble:$d_longdbl" in
10218 define:define)
10219         nvtype="long double"
10220         nvsize=$longdblsize
10221         ;;
10222 *)      nvtype=double
10223         nvsize=$doublesize
10224         ;;
10225 esac
10226
10227 $echo "(IV will be "$ivtype", $ivsize bytes)"
10228 $echo "(UV will be "$uvtype", $uvsize bytes)"
10229 $echo "(NV will be "$nvtype", $nvsize bytes)"
10230
10231 $cat >try.c <<EOCP
10232 #$i_inttypes I_INTTYPES
10233 #ifdef I_INTTYPES
10234 #include <inttypes.h>
10235 #endif
10236 #include <stdio.h>
10237 int main() {
10238 #ifdef INT8
10239    int8_t i =  INT8_MAX;
10240   uint8_t u = UINT8_MAX;
10241   printf("int8_t\n");
10242 #endif
10243 #ifdef INT16
10244    int16_t i =  INT16_MAX;
10245   uint16_t i = UINT16_MAX;
10246   printf("int16_t\n");
10247 #endif
10248 #ifdef INT32
10249    int32_t i =  INT32_MAX;
10250   uint32_t u = UINT32_MAX;
10251   printf("int32_t\n");
10252 #endif
10253 }
10254 EOCP
10255
10256 case "$i8type" in
10257 '')     case "$charsize" in
10258         1)      i8type=char
10259                 u8type="unsigned char"
10260                 i8size=$charsize
10261                 u8size=$charsize
10262                 ;;
10263         esac
10264         ;;
10265 esac
10266 case "$i8type" in
10267 '')     set try -DINT8
10268         if eval $compile; then
10269                 case "`./try$exe_ext`" in
10270                 int8_t) i8type=int8_t
10271                         u8type=uint8_t
10272                         i8size=1
10273                         u8size=1
10274                         ;;
10275                 esac
10276         fi
10277         ;;
10278 esac
10279 case "$i8type" in
10280 '')     if $test $charsize -ge 1; then
10281                 i8type=char
10282                 u8type="unsigned char"
10283                 i8size=$charsize
10284                 u8size=$charsize
10285         fi
10286         ;;
10287 esac
10288
10289 case "$i16type" in
10290 '')     case "$shortsize" in
10291         2)      i16type=short
10292                 u16type="unsigned short"
10293                 i16size=$shortsize
10294                 u16size=$shortsize
10295                 ;;
10296         esac
10297         ;;
10298 esac
10299 case "$i16type" in
10300 '')     set try -DINT16
10301         if eval $compile; then
10302                 case "`./try$exe_ext`" in
10303                 int16_t)
10304                         i16type=int16_t
10305                         u16type=uint16_t
10306                         i16size=2
10307                         u16size=2
10308                         ;;
10309                 esac
10310         fi
10311         ;;
10312 esac
10313 case "$i16type" in
10314 '')     if $test $shortsize -ge 2; then
10315                 i16type=short
10316                 u16type="unsigned short"
10317                 i16size=$shortsize
10318                 u16size=$shortsize
10319         fi
10320         ;;
10321 esac
10322
10323 case "$i32type" in
10324 '')     case "$longsize" in
10325         4)      i32type=long
10326                 u32type="unsigned long"
10327                 i32size=$longsize
10328                 u32size=$longsize
10329                 ;;
10330         *)      case "$intsize" in
10331                 4)      i32type=int
10332                         u32type="unsigned int"
10333                         i32size=$intsize
10334                         u32size=$intsize
10335                         ;;
10336                 esac
10337                 ;;
10338         esac
10339         ;;
10340 esac
10341 case "$i32type" in
10342 '')     set try -DINT32
10343         if eval $compile; then
10344                 case "`./try$exe_ext`" in
10345                 int32_t)
10346                         i32type=int32_t
10347                         u32type=uint32_t
10348                         i32size=4
10349                         u32size=4
10350                         ;;
10351                 esac
10352         fi
10353         ;;
10354 esac
10355 case "$i32type" in
10356 '')     if $test $intsize -ge 4; then
10357                 i32type=int
10358                 u32type="unsigned int"
10359                 i32size=$intsize
10360                 u32size=$intsize
10361         fi
10362         ;;
10363 esac
10364
10365 case "$i64type" in
10366 '')     case "$d_quad:$quadtype" in
10367         define:?*)
10368                 i64type="$quadtype"
10369                 u64type="$uquadtype"
10370                 i64size=8
10371                 u64size=8
10372                 ;;
10373         esac
10374         ;;
10375 esac
10376
10377 $echo "Checking whether your NVs can preserve your UVs..." >&4
10378 $cat <<EOP >try.c
10379 #include <stdio.h>
10380 int main() {
10381     $uvtype k = ($uvtype)~0, l;
10382     $nvtype d;
10383     l = k;
10384     d = ($nvtype)l;
10385     l = ($uvtype)d;
10386     if (l == k)
10387        printf("preserve\n");
10388     exit(0);
10389 }
10390 EOP
10391 set try
10392 if eval $compile; then
10393         case "`./try$exe_ext`" in
10394         preserve) d_nv_preserves_uv="$define" ;;
10395         esac
10396 fi      
10397 case "$d_nv_preserves_uv" in
10398 $define) $echo "Yes, they can."  2>&1 ;;
10399 *)       $echo "No, they can't." 2>&1
10400          d_nv_preserves_uv="$undef"
10401          ;;
10402 esac
10403
10404 $rm -f try.* try
10405
10406 case "$d_nv_preserves_uv" in
10407 "$define") d_nv_preserves_uv_bits=`expr $uvsize \* 8` ;;
10408 *)      $echo "Checking how many bits of your UVs your NVs can preserve..." >&4
10409         $cat <<EOP >try.c
10410 #include <stdio.h>
10411 int main() {
10412     $uvtype u = 0;
10413     int     n = 8 * $uvsize;
10414     int     i;
10415     for (i = 0; i < n; i++) {
10416       u = u << 1 | ($uvtype)1;
10417       if (($uvtype)($nvtype)u != u)
10418         break;
10419     }
10420     printf("%d\n", i);
10421     exit(0);
10422 }
10423 EOP
10424         set try
10425         if eval $compile; then
10426                 d_nv_preserves_uv_bits="`./try$exe_ext`"
10427         fi
10428         case "$d_nv_preserves_uv_bits" in
10429         [1-9]*) $echo "Your NVs can preserve $d_nv_preserves_uv_bits bits of your UVs."  2>&1 ;;
10430         *)      $echo "Can't figure out how many bits your NVs preserve." 2>&1
10431                 d_nv_preserves_uv_bits="$undef"
10432                 ;;
10433         esac
10434         $rm -f try.* try
10435         ;;
10436 esac
10437
10438
10439 : check for off64_t
10440 echo " "
10441 echo "Checking to see if you have off64_t..." >&4
10442 $cat >try.c <<EOCP
10443 #include <sys/types.h>
10444 #include <unistd.h>
10445 int main() { off64_t x = 7; }
10446 EOCP
10447 set try
10448 if eval $compile; then
10449         val="$define"
10450         echo "You have off64_t."
10451 else
10452         val="$undef"
10453         echo "You do not have off64_t."
10454         case "$lseeksize" in
10455         8) echo "(Your off_t is 64 bits, so you could use that.)" ;;
10456         esac
10457 fi
10458 $rm -f try.* try
10459 set d_off64_t
10460 eval $setvar
10461
10462 : see if POSIX threads are available
10463 set pthread.h i_pthread
10464 eval $inhdr
10465
10466
10467
10468
10469 : how to create joinable pthreads
10470 if test "X$usethreads" = "X$define" -a "X$i_pthread" = "X$define"; then
10471         echo " "
10472         echo "Checking what constant to use for creating joinable pthreads..." >&4 
10473         $cat >try.c <<'EOCP'
10474 #include <pthread.h>
10475 int main() {
10476     int detachstate = JOINABLE;
10477 }
10478 EOCP
10479         set try -DJOINABLE=PTHREAD_CREATE_JOINABLE
10480         if eval $compile; then
10481                 echo "You seem to use PTHREAD_CREATE_JOINABLE." >&4
10482                 val="$undef" # Yes, undef.
10483                 set d_old_pthread_create_joinable
10484                 eval $setvar
10485                 val=""
10486                 set old_pthread_create_joinable
10487                 eval $setvar
10488         else
10489                 set try -DJOINABLE=PTHREAD_CREATE_UNDETACHED
10490                 if eval $compile; then
10491                         echo "You seem to use PTHREAD_CREATE_UNDETACHED." >&4
10492                         val="$define"
10493                         set d_old_pthread_create_joinable
10494                         eval $setvar
10495                         val=PTHREAD_CREATE_UNDETACHED
10496                         set old_pthread_create_joinable
10497                         eval $setvar
10498                 else            
10499                         set try -DJOINABLE=__UNDETACHED
10500                         if eval $compile; then
10501                                 echo "You seem to use __UNDETACHED." >&4
10502                                 val="$define"
10503                                 set d_old_pthread_create_joinable
10504                                 eval $setvar
10505                                 val=__UNDETACHED
10506                                 set old_pthread_create_joinable
10507                                 eval $setvar
10508                         else
10509                                 echo "Egads, nothing obvious found.  Guessing that you use 0." >&4
10510                                 val="$define"
10511                                 set d_old_pthread_create_joinable
10512                                 eval $setvar
10513                                 val=0
10514                                 set old_pthread_create_joinable
10515                                 eval $setvar
10516                         fi
10517                 fi
10518         fi
10519         $rm -f try try.*
10520 else
10521     d_old_pthread_create_joinable="$undef"
10522     old_pthread_create_joinable=""
10523 fi
10524
10525 : see if pause exists
10526 set pause d_pause
10527 eval $inlibc
10528
10529 : see if pipe exists
10530 set pipe d_pipe
10531 eval $inlibc
10532
10533 : see if poll exists
10534 set poll d_poll
10535 eval $inlibc
10536
10537
10538 : see whether the various POSIXish _yields exist
10539 $cat >try.c <<EOP
10540 #include <pthread.h>
10541 #include <stdio.h>
10542 int main() {
10543 #ifdef SCHED_YIELD
10544         sched_yield();
10545 #else
10546 #ifdef PTHREAD_YIELD
10547         pthread_yield();
10548 #else
10549 #ifdef PTHREAD_YIELD_NULL
10550         pthread_yield(NULL);
10551 #endif
10552 #endif
10553 #endif
10554 }
10555 EOP
10556 : see if sched_yield exists
10557 set try -DSCHED_YIELD
10558 if eval $compile; then
10559     val="$define"
10560     sched_yield='sched_yield()'
10561 else
10562     val="$undef"
10563 fi
10564 case "$usethreads" in
10565 $define)
10566         case "$val" in
10567         $define) echo 'sched_yield() found.' >&4        ;;
10568         *)       echo 'sched_yield() NOT found.' >&4    ;;
10569         esac
10570 esac
10571 set d_sched_yield
10572 eval $setvar
10573
10574 : see if pthread_yield exists
10575 set try -DPTHREAD_YIELD
10576 if eval $compile; then
10577     val="$define"
10578     case "$sched_yield" in
10579     '') sched_yield='pthread_yield()' ;;
10580     esac
10581 else
10582     set try -DPTHREAD_YIELD_NULL
10583     if eval $compile; then
10584         val="$define"
10585         case "$sched_yield" in
10586         '') sched_yield='pthread_yield(NULL)' ;;
10587         esac
10588     else
10589         val="$undef"
10590     fi
10591 fi
10592 case "$usethreads" in
10593 $define)
10594         case "$val" in
10595         $define) echo 'pthread_yield() found.' >&4      ;;
10596         *)       echo 'pthread_yield() NOT found.' >&4  ;;
10597         esac
10598         ;;
10599 esac
10600 set d_pthread_yield
10601 eval $setvar
10602
10603 case "$sched_yield" in
10604 '') sched_yield=undef ;;
10605 esac
10606
10607 $rm -f try try.*
10608
10609 : see if this is a pwd.h system
10610 set pwd.h i_pwd
10611 eval $inhdr
10612
10613 case "$i_pwd" in
10614 $define)
10615         xxx=`./findhdr pwd.h`
10616         $cppstdin $cppflags $cppminus < $xxx >$$.h
10617
10618         if $contains 'pw_quota' $$.h >/dev/null 2>&1; then
10619                 val="$define"
10620         else
10621                 val="$undef"
10622         fi
10623         set d_pwquota
10624         eval $setvar
10625
10626         if $contains 'pw_age' $$.h >/dev/null 2>&1; then
10627                 val="$define"
10628         else
10629                 val="$undef"
10630         fi
10631         set d_pwage
10632         eval $setvar
10633
10634         if $contains 'pw_change' $$.h >/dev/null 2>&1; then
10635                 val="$define"
10636         else
10637                 val="$undef"
10638         fi
10639         set d_pwchange
10640         eval $setvar
10641
10642         if $contains 'pw_class' $$.h >/dev/null 2>&1; then
10643                 val="$define"
10644         else
10645                 val="$undef"
10646         fi
10647         set d_pwclass
10648         eval $setvar
10649
10650         if $contains 'pw_expire' $$.h >/dev/null 2>&1; then
10651                 val="$define"
10652         else
10653                 val="$undef"
10654         fi
10655         set d_pwexpire
10656         eval $setvar
10657
10658         if $contains 'pw_comment' $$.h >/dev/null 2>&1; then
10659                 val="$define"
10660         else
10661                 val="$undef"
10662         fi
10663         set d_pwcomment
10664         eval $setvar
10665
10666         if $contains 'pw_gecos' $$.h >/dev/null 2>&1; then
10667                 val="$define"
10668         else
10669                 val="$undef"
10670         fi
10671         set d_pwgecos
10672         eval $setvar
10673
10674         if $contains 'pw_passwd' $$.h >/dev/null 2>&1; then
10675                 val="$define"
10676         else
10677                 val="$undef"
10678         fi
10679         set d_pwpasswd
10680         eval $setvar
10681
10682         $rm -f $$.h
10683         ;;
10684 *)
10685         val="$undef"; 
10686         set d_pwquota; eval $setvar
10687         set d_pwage; eval $setvar
10688         set d_pwchange; eval $setvar
10689         set d_pwclass; eval $setvar
10690         set d_pwexpire; eval $setvar
10691         set d_pwcomment; eval $setvar
10692         set d_pwgecos; eval $setvar
10693         set d_pwpasswd; eval $setvar
10694         ;;
10695 esac
10696
10697 : see if readdir and friends exist
10698 set readdir d_readdir
10699 eval $inlibc
10700 set seekdir d_seekdir
10701 eval $inlibc
10702 set telldir d_telldir
10703 eval $inlibc
10704 set rewinddir d_rewinddir
10705 eval $inlibc
10706
10707 : see if readlink exists
10708 set readlink d_readlink
10709 eval $inlibc
10710
10711 : see if rename exists
10712 set rename d_rename
10713 eval $inlibc
10714
10715 : see if rmdir exists
10716 set rmdir d_rmdir
10717 eval $inlibc
10718
10719 : see if memory.h is available.
10720 val=''
10721 set memory.h val
10722 eval $inhdr
10723
10724 : See if it conflicts with string.h
10725 case "$val" in
10726 $define)
10727         case "$strings" in
10728         '') ;;
10729         *)
10730                 $cppstdin $cppflags $cppminus < $strings > mem.h
10731                 if $contains 'memcpy' mem.h >/dev/null 2>&1; then
10732                         echo " "
10733                         echo "We won't be including <memory.h>."
10734                         val="$undef"
10735                 fi
10736                 $rm -f mem.h
10737                 ;;
10738         esac
10739 esac
10740 set i_memory
10741 eval $setvar
10742
10743 : can bcopy handle overlapping blocks?
10744 val="$undef"
10745 case "$d_bcopy" in
10746 "$define")
10747         echo " "
10748         echo "Checking to see if your bcopy() can do overlapping copies..." >&4
10749         $cat >try.c <<EOCP
10750 #$i_memory I_MEMORY
10751 #$i_stdlib I_STDLIB
10752 #$i_string I_STRING
10753 #$i_unistd I_UNISTD
10754 EOCP
10755         $cat >>try.c <<'EOCP'
10756 #include <stdio.h>
10757 #ifdef I_MEMORY
10758 #  include <memory.h>
10759 #endif
10760 #ifdef I_STDLIB
10761 #  include <stdlib.h>
10762 #endif
10763 #ifdef I_STRING
10764 #  include <string.h>
10765 #else
10766 #  include <strings.h>
10767 #endif
10768 #ifdef I_UNISTD
10769 #  include <unistd.h>  /* Needed for NetBSD */
10770 #endif
10771 int main()
10772 {
10773 char buf[128], abc[128];
10774 char *b;
10775 int len;
10776 int off;
10777 int align;
10778
10779 bcopy("abcdefghijklmnopqrstuvwxyz0123456789", abc, 36);
10780
10781 for (align = 7; align >= 0; align--) {
10782         for (len = 36; len; len--) {
10783                 b = buf+align;
10784                 bcopy(abc, b, len);
10785                 for (off = 1; off <= len; off++) {
10786                         bcopy(b, b+off, len);
10787                         bcopy(b+off, b, len);
10788                         if (bcmp(b, abc, len))
10789                                 exit(1);
10790                 }
10791         }
10792 }
10793 exit(0);
10794 }
10795 EOCP
10796         set try
10797         if eval $compile_ok; then
10798                 if ./try 2>/dev/null; then
10799                         echo "Yes, it can."
10800                         val="$define"
10801                 else
10802                         echo "It can't, sorry."
10803                         case "$d_memmove" in
10804                         "$define") echo "But that's Ok since you have memmove()." ;;
10805                         esac
10806                 fi
10807         else
10808                 echo "(I can't compile the test program, so we'll assume not...)"
10809                 case "$d_memmove" in
10810                 "$define") echo "But that's Ok since you have memmove()." ;;
10811                 esac
10812         fi
10813         ;;
10814 esac
10815 $rm -f try.* try core
10816 set d_safebcpy
10817 eval $setvar
10818
10819 : can memcpy handle overlapping blocks?
10820 val="$undef"
10821 case "$d_memcpy" in
10822 "$define")
10823         echo " "
10824         echo "Checking to see if your memcpy() can do overlapping copies..." >&4
10825         $cat >try.c <<EOCP
10826 #$i_memory I_MEMORY
10827 #$i_stdlib I_STDLIB
10828 #$i_string I_STRING
10829 #$i_unistd I_UNISTD
10830 EOCP
10831         $cat >>try.c <<'EOCP'
10832 #include <stdio.h>
10833 #ifdef I_MEMORY
10834 #  include <memory.h>
10835 #endif
10836 #ifdef I_STDLIB
10837 #  include <stdlib.h>
10838 #endif
10839 #ifdef I_STRING
10840 #  include <string.h>
10841 #else
10842 #  include <strings.h>
10843 #endif
10844 #ifdef I_UNISTD
10845 #  include <unistd.h>  /* Needed for NetBSD */
10846 #endif
10847 int main()
10848 {
10849 char buf[128], abc[128];
10850 char *b;
10851 int len;
10852 int off;
10853 int align;
10854
10855 /* Copy "abcde..." string to char abc[] so that gcc doesn't
10856    try to store the string in read-only memory. */
10857 memcpy(abc, "abcdefghijklmnopqrstuvwxyz0123456789", 36);
10858
10859 for (align = 7; align >= 0; align--) {
10860         for (len = 36; len; len--) {
10861                 b = buf+align;
10862                 memcpy(b, abc, len);
10863                 for (off = 1; off <= len; off++) {
10864                         memcpy(b+off, b, len);
10865                         memcpy(b, b+off, len);
10866                         if (memcmp(b, abc, len))
10867                                 exit(1);
10868                 }
10869         }
10870 }
10871 exit(0);
10872 }
10873 EOCP
10874         set try
10875         if eval $compile_ok; then
10876                 if ./try 2>/dev/null; then
10877                         echo "Yes, it can."
10878                         val="$define"
10879                 else
10880                         echo "It can't, sorry."
10881                         case "$d_memmove" in
10882                         "$define") echo "But that's Ok since you have memmove()." ;;
10883                         esac
10884                 fi
10885         else
10886                 echo "(I can't compile the test program, so we'll assume not...)"
10887                 case "$d_memmove" in
10888                 "$define") echo "But that's Ok since you have memmove()." ;;
10889                 esac
10890         fi
10891         ;;
10892 esac
10893 $rm -f try.* try core
10894 set d_safemcpy
10895 eval $setvar
10896
10897 : can memcmp be trusted to compare relative magnitude?
10898 val="$undef"
10899 case "$d_memcmp" in
10900 "$define")
10901         echo " "
10902         echo "Checking if your memcmp() can compare relative magnitude..." >&4
10903         $cat >try.c <<EOCP
10904 #$i_memory I_MEMORY
10905 #$i_stdlib I_STDLIB
10906 #$i_string I_STRING
10907 #$i_unistd I_UNISTD
10908 EOCP
10909         $cat >>try.c <<'EOCP'
10910 #include <stdio.h>
10911 #ifdef I_MEMORY
10912 #  include <memory.h>
10913 #endif
10914 #ifdef I_STDLIB
10915 #  include <stdlib.h>
10916 #endif
10917 #ifdef I_STRING
10918 #  include <string.h>
10919 #else
10920 #  include <strings.h>
10921 #endif
10922 #ifdef I_UNISTD
10923 #  include <unistd.h>  /* Needed for NetBSD */
10924 #endif
10925 int main()
10926 {
10927 char a = -1;
10928 char b = 0;
10929 if ((a < b) && memcmp(&a, &b, 1) < 0)
10930         exit(1);
10931 exit(0);
10932 }
10933 EOCP
10934         set try
10935         if eval $compile_ok; then
10936                 if ./try 2>/dev/null; then
10937                         echo "Yes, it can."
10938                         val="$define"
10939                 else
10940                         echo "No, it can't (it uses signed chars)."
10941                 fi
10942         else
10943                 echo "(I can't compile the test program, so we'll assume not...)"
10944         fi
10945         ;;
10946 esac
10947 $rm -f try.* try core
10948 set d_sanemcmp
10949 eval $setvar
10950
10951 : see if select exists
10952 set select d_select
10953 eval $inlibc
10954
10955 : see if semctl exists
10956 set semctl d_semctl
10957 eval $inlibc
10958
10959 : see if semget exists
10960 set semget d_semget
10961 eval $inlibc
10962
10963 : see if semop exists
10964 set semop d_semop
10965 eval $inlibc
10966
10967 : see how much of the 'sem*(2)' library is present.
10968 h_sem=true
10969 echo " "
10970 case "$d_semctl$d_semget$d_semop" in
10971 *"$undef"*) h_sem=false;;
10972 esac
10973 case "$osname" in
10974 freebsd)
10975     case "`ipcs 2>&1`" in
10976     "SVID messages"*"not configured"*)
10977         echo "Your $osname does not have the sem*(2) configured." >&4
10978         h_sem=false
10979         val="$undef"
10980         set semctl d_semctl
10981         eval $setvar
10982         set semget d_semget
10983         eval $setvar
10984         set semop d_semop
10985         eval $setvar
10986         ;;
10987     esac
10988     ;;
10989 esac
10990 : we could also check for sys/ipc.h ...
10991 if $h_sem && $test `./findhdr sys/sem.h`; then
10992         echo "You have the full sem*(2) library." >&4
10993         val="$define"
10994 else
10995         echo "You don't have the full sem*(2) library." >&4
10996         val="$undef"
10997 fi
10998 set d_sem
10999 eval $setvar
11000
11001 : see whether sys/sem.h defines union semun
11002 echo " "
11003 $cat > try.c <<'END'
11004 #include <sys/types.h>
11005 #include <sys/ipc.h>
11006 #include <sys/sem.h>
11007 int main () { union semun semun; semun.buf = 0; }
11008 END
11009 set try
11010 if eval $compile; then
11011     echo "You have union semun in <sys/sem.h>." >&4
11012     val="$define"
11013 else
11014     echo "You do not have union semun in <sys/sem.h>." >&4
11015     val="$undef"
11016 fi
11017 $rm -f try try.c try.h
11018 set d_union_semun
11019 eval $setvar
11020
11021 : see how to do semctl IPC_STAT
11022 case "$d_sem" in
11023 $define)
11024     : see whether semctl IPC_STAT can use union semun
11025     echo " "
11026     $cat > try.h <<END
11027 #ifndef S_IRUSR
11028 #   ifdef S_IREAD
11029 #       define S_IRUSR S_IREAD
11030 #       define S_IWUSR S_IWRITE
11031 #       define S_IXUSR S_IEXEC
11032 #   else
11033 #       define S_IRUSR 0400
11034 #       define S_IWUSR 0200
11035 #       define S_IXUSR 0100
11036 #   endif
11037 #   define S_IRGRP (S_IRUSR>>3)
11038 #   define S_IWGRP (S_IWUSR>>3)
11039 #   define S_IXGRP (S_IXUSR>>3)
11040 #   define S_IROTH (S_IRUSR>>6)
11041 #   define S_IWOTH (S_IWUSR>>6)
11042 #   define S_IXOTH (S_IXUSR>>6)
11043 #endif
11044 #ifndef S_IRWXU
11045 #   define S_IRWXU (S_IRUSR|S_IWUSR|S_IXUSR)
11046 #   define S_IRWXG (S_IRGRP|S_IWGRP|S_IXGRP)
11047 #   define S_IRWXO (S_IROTH|S_IWOTH|S_IXOTH)
11048 #endif
11049 END
11050
11051     $cat > try.c <<END
11052 #include <sys/types.h>
11053 #include <sys/ipc.h>
11054 #include <sys/sem.h>
11055 #include <sys/stat.h>
11056 #include <stdio.h>
11057 #include <errno.h>
11058 #include "try.h"
11059 #ifndef errno
11060 extern int errno;
11061 #endif
11062 #$d_union_semun HAS_UNION_SEMUN
11063 int main() {
11064     union semun
11065 #ifndef HAS_UNION_SEMUN
11066     {
11067         int val;
11068         struct semid_ds *buf;
11069         unsigned short *array;
11070     }
11071 #endif
11072     arg;
11073     int sem, st;
11074
11075 #if defined(IPC_PRIVATE) && defined(S_IRWXU) && defined(S_IRWXG) && defined(S_IRWXO) && defined(IPC_CREAT)
11076     sem = semget(IPC_PRIVATE, 1, S_IRWXU|S_IRWXG|S_IRWXO|IPC_CREAT);
11077     if (sem > -1) {
11078         struct semid_ds argbuf;
11079         arg.buf = &argbuf;
11080 #       ifdef IPC_STAT
11081         st = semctl(sem, 0, IPC_STAT, arg);
11082         if (st == 0)
11083             printf("semun\n");
11084         else
11085 #       endif /* IPC_STAT */
11086             printf("semctl IPC_STAT failed: errno = %d\n", errno);
11087 #       ifdef IPC_RMID
11088         if (semctl(sem, 0, IPC_RMID, arg) != 0)
11089 #       endif /* IPC_RMID */
11090             printf("semctl IPC_RMID failed: errno = %d\n", errno);
11091     } else
11092 #endif /* IPC_PRIVATE && ... */
11093         printf("semget failed: errno = %d\n", errno);
11094   return 0;
11095 }
11096 END
11097     val="$undef"
11098     set try
11099     if eval $compile; then
11100         xxx=`./try`
11101         case "$xxx" in
11102         semun) val="$define" ;;
11103         esac
11104     fi
11105     $rm -f try try.c
11106     set d_semctl_semun
11107     eval $setvar
11108     case "$d_semctl_semun" in
11109     $define)
11110         echo "You can use union semun for semctl IPC_STAT." >&4
11111         also='also'
11112         ;;
11113     *)  echo "You cannot use union semun for semctl IPC_STAT." >&4
11114         also=''
11115         ;;
11116     esac
11117
11118     : see whether semctl IPC_STAT can use struct semid_ds pointer
11119     $cat > try.c <<'END'
11120 #include <sys/types.h>
11121 #include <sys/ipc.h>
11122 #include <sys/sem.h>
11123 #include <sys/stat.h>
11124 #include "try.h"
11125 #include <stdio.h>
11126 #include <errno.h>
11127 #ifndef errno
11128 extern int errno;
11129 #endif
11130 int main() {
11131     struct semid_ds arg;
11132     int sem, st;
11133
11134 #if defined(IPC_PRIVATE) && defined(S_IRWXU) && defined(S_IRWXG) &&  defined(S_IRWXO) && defined(IPC_CREAT)
11135     sem = semget(IPC_PRIVATE, 1, S_IRWXU|S_IRWXG|S_IRWXO|IPC_CREAT);
11136     if (sem > -1) {
11137 #       ifdef IPC_STAT
11138         st = semctl(sem, 0, IPC_STAT, &arg);
11139         if (st == 0)
11140             printf("semid_ds\n");
11141         else
11142 #       endif /* IPC_STAT */
11143             printf("semctl IPC_STAT failed: errno = %d\n", errno);
11144 #       ifdef IPC_RMID
11145         if (semctl(sem, 0, IPC_RMID, &arg) != 0)
11146 #       endif /* IPC_RMID */
11147             printf("semctl IPC_RMID failed: errno = %d\n", errno);
11148     } else
11149 #endif /* IPC_PRIVATE && ... */
11150         printf("semget failed: errno = %d\n", errno);
11151
11152     return 0;
11153 }
11154 END
11155     val="$undef"
11156     set try
11157     if eval $compile; then
11158         xxx=`./try`
11159         case "$xxx" in
11160         semid_ds) val="$define" ;;
11161         esac
11162     fi
11163     $rm -f try try.c
11164     set d_semctl_semid_ds
11165     eval $setvar
11166     case "$d_semctl_semid_ds" in
11167     $define)
11168         echo "You can $also use struct semid_ds* for semctl IPC_STAT." >&4
11169         ;;
11170     *)  echo "You cannot use struct semid_ds* for semctl IPC_STAT." >&4
11171         ;;
11172     esac
11173     $rm -f try.h
11174     ;;
11175 *)  val="$undef"
11176
11177     # We do not have the full sem*(2) library, so assume we can not
11178     # use either.
11179
11180     set d_semctl_semun
11181     eval $setvar
11182
11183     set d_semctl_semid_ds
11184     eval $setvar
11185     ;;
11186 esac
11187
11188 : see if setegid exists
11189 set setegid d_setegid
11190 eval $inlibc
11191
11192 : see if seteuid exists
11193 set seteuid d_seteuid
11194 eval $inlibc
11195
11196 : see if setgrent exists
11197 set setgrent d_setgrent
11198 eval $inlibc
11199
11200 : see if sethostent exists
11201 set sethostent d_sethent
11202 eval $inlibc
11203
11204 : see if setlinebuf exists
11205 set setlinebuf d_setlinebuf
11206 eval $inlibc
11207
11208 : see if setlocale exists
11209 set setlocale d_setlocale
11210 eval $inlibc
11211
11212 : see if setnetent exists
11213 set setnetent d_setnent
11214 eval $inlibc
11215
11216 : see if setprotoent exists
11217 set setprotoent d_setpent
11218 eval $inlibc
11219
11220 : see if setpgid exists
11221 set setpgid d_setpgid
11222 eval $inlibc
11223
11224 : see if setpgrp2 exists
11225 set setpgrp2 d_setpgrp2
11226 eval $inlibc
11227
11228 : see if setpriority exists
11229 set setpriority d_setprior
11230 eval $inlibc
11231
11232 : see if setproctitle exists
11233 set setproctitle d_setproctitle
11234 eval $inlibc
11235
11236 : see if setpwent exists
11237 set setpwent d_setpwent
11238 eval $inlibc
11239
11240 : see if setregid exists
11241 set setregid d_setregid
11242 eval $inlibc
11243 set setresgid d_setresgid
11244 eval $inlibc
11245
11246 : see if setreuid exists
11247 set setreuid d_setreuid
11248 eval $inlibc
11249 set setresuid d_setresuid
11250 eval $inlibc
11251
11252 : see if setrgid exists
11253 set setrgid d_setrgid
11254 eval $inlibc
11255
11256 : see if setruid exists
11257 set setruid d_setruid
11258 eval $inlibc
11259
11260 : see if setservent exists
11261 set setservent d_setsent
11262 eval $inlibc
11263
11264 : see if setsid exists
11265 set setsid d_setsid
11266 eval $inlibc
11267
11268 : see if setvbuf exists
11269 set setvbuf d_setvbuf
11270 eval $inlibc
11271
11272 : see if sfio.h is available
11273 set sfio.h i_sfio
11274 eval $inhdr
11275
11276
11277 : see if sfio library is available
11278 case "$i_sfio" in
11279 $define)
11280         val=''
11281         set sfreserve val
11282         eval $inlibc
11283         ;;
11284 *)
11285         val="$undef"
11286         ;;
11287 esac
11288 : Ok, but do we want to use it.
11289 case "$val" in
11290 $define)
11291         case "$usesfio" in
11292         true|$define|[yY]*) dflt='y';;
11293         *) dflt='n';;
11294         esac
11295         echo "$package can use the sfio library, but it is experimental."
11296         case "$useperlio" in
11297         "$undef")
11298             echo "For sfio also the PerlIO abstraction layer is needed."
11299             echo "Earlier you said you wouldn't want that."
11300             ;;
11301         esac
11302         rp="You seem to have sfio available, do you want to try using it?"
11303         . ./myread
11304         case "$ans" in
11305         y|Y)    echo "Ok, turning on both sfio and PerlIO, then."
11306                 useperlio="$define"
11307                 val="$define"
11308                 ;;
11309         *)      echo "Ok, avoiding sfio this time.  I'll use stdio instead."
11310                 val="$undef"
11311                 : Remove sfio from list of libraries to use
11312                 set `echo X $libs | $sed -e 's/-lsfio / /' -e 's/-lsfio$//'`
11313                 shift
11314                 libs="$*"
11315                 echo "libs = $libs" >&4
11316                 ;;
11317         esac
11318         ;;
11319 *)      case "$usesfio" in
11320         true|$define|[yY]*)
11321                 echo "Sorry, cannot find sfio on this machine." >&4
11322                 echo "Ignoring your setting of usesfio=$usesfio." >&4
11323                 val="$undef"
11324                 ;;
11325         esac
11326         ;;
11327 esac
11328 set d_sfio
11329 eval $setvar
11330 case "$d_sfio" in
11331 $define) usesfio='true';;
11332 *) usesfio='false';;
11333 esac
11334
11335 : see if shmctl exists
11336 set shmctl d_shmctl
11337 eval $inlibc
11338
11339 : see if shmget exists
11340 set shmget d_shmget
11341 eval $inlibc
11342
11343 : see if shmat exists
11344 set shmat d_shmat
11345 eval $inlibc
11346 : see what shmat returns
11347 case "$d_shmat" in
11348 "$define")
11349         $cat >shmat.c <<'END'
11350 #include <sys/shm.h>
11351 void *shmat();
11352 END
11353         if $cc $ccflags -c shmat.c >/dev/null 2>&1; then
11354                 shmattype='void *'
11355         else
11356                 shmattype='char *'
11357         fi
11358         echo "and it returns ($shmattype)." >&4
11359         : see if a prototype for shmat is available
11360         xxx=`./findhdr sys/shm.h`
11361         $cppstdin $cppflags $cppminus < $xxx > shmat.c 2>/dev/null
11362         if $contains 'shmat.*(' shmat.c >/dev/null 2>&1; then
11363                 val="$define"
11364         else
11365                 val="$undef"
11366         fi
11367         $rm -f shmat.[co]
11368         ;;
11369 *)
11370         val="$undef"
11371         ;;
11372 esac
11373 set d_shmatprototype
11374 eval $setvar
11375
11376 : see if shmdt exists
11377 set shmdt d_shmdt
11378 eval $inlibc
11379
11380 : see how much of the 'shm*(2)' library is present.
11381 h_shm=true
11382 echo " "
11383 case "$d_shmctl$d_shmget$d_shmat$d_shmdt" in
11384 *"$undef"*) h_shm=false;;
11385 esac
11386 case "$osname" in
11387 freebsd)
11388     case "`ipcs 2>&1`" in
11389     "SVID shared memory"*"not configured"*)
11390         echo "Your $osname does not have the shm*(2) configured." >&4
11391         h_shm=false
11392         val="$undef"
11393         set shmctl d_shmctl
11394         evat $setvar
11395         set shmget d_shmget
11396         evat $setvar
11397         set shmat d_shmat
11398         evat $setvar
11399         set shmdt d_shmdt
11400         evat $setvar
11401         ;;
11402     esac
11403     ;;
11404 esac
11405 : we could also check for sys/ipc.h ...
11406 if $h_shm && $test `./findhdr sys/shm.h`; then
11407         echo "You have the full shm*(2) library." >&4
11408         val="$define"
11409 else
11410         echo "You don't have the full shm*(2) library." >&4
11411         val="$undef"
11412 fi
11413 set d_shm
11414 eval $setvar
11415
11416 echo " "
11417 : see if we have sigaction
11418 if set sigaction val -f d_sigaction; eval $csym; $val; then
11419         echo 'sigaction() found.' >&4
11420         $cat > try.c <<'EOP'
11421 #include <stdio.h>
11422 #include <sys/types.h>
11423 #include <signal.h>
11424 int main()
11425 {
11426     struct sigaction act, oact;
11427     act.sa_flags = 0;
11428     oact.sa_handler = 0;
11429     /* so that act and oact are used */
11430     exit(act.sa_flags == 0 &&  oact.sa_handler == 0);
11431 }
11432 EOP
11433         set try
11434         if eval $compile_ok; then
11435                 val="$define"
11436         else
11437                 echo "But you don't seem to have a useable struct sigaction." >&4
11438                 val="$undef"
11439         fi
11440 else
11441         echo 'sigaction NOT found.' >&4
11442         val="$undef"
11443 fi
11444 set d_sigaction; eval $setvar
11445 $rm -f try try$_o try.c
11446
11447 : see if sigsetjmp exists
11448 echo " "
11449 case "$d_sigsetjmp" in
11450 '')
11451         $cat >try.c <<'EOP'
11452 #include <setjmp.h>
11453 sigjmp_buf env;
11454 int set = 1;
11455 int main()
11456 {
11457         if (sigsetjmp(env,1))
11458                 exit(set);
11459         set = 0;
11460         siglongjmp(env, 1);
11461         exit(1);
11462 }
11463 EOP
11464         set try
11465         if eval $compile; then
11466                 if ./try >/dev/null 2>&1; then
11467                         echo "POSIX sigsetjmp found." >&4
11468                         val="$define"
11469                 else
11470                         $cat >&4 <<EOM
11471 Uh-Oh! You have POSIX sigsetjmp and siglongjmp, but they do not work properly!!
11472 I'll ignore them.
11473 EOM
11474                         val="$undef"
11475                 fi
11476         else
11477                 echo "sigsetjmp not found." >&4
11478                 val="$undef"
11479         fi
11480         ;;
11481 *) val="$d_sigsetjmp"
11482         case "$d_sigsetjmp" in
11483         $define) echo "POSIX sigsetjmp found." >&4;;
11484         $undef) echo "sigsetjmp not found." >&4;;
11485         esac
11486         ;;
11487 esac
11488 set d_sigsetjmp
11489 eval $setvar
11490 $rm -f try.c try
11491
11492 : see if socks5_init exists
11493 set socks5_init d_socks5_init
11494 eval $inlibc
11495
11496 : see if sys/stat.h is available
11497 set sys/stat.h i_sysstat
11498 eval $inhdr
11499
11500
11501 : see if stat knows about block sizes
11502 echo " "
11503 echo "Checking to see if your struct stat has st_blocks field..." >&4
11504 set d_statblks stat st_blocks $i_sysstat sys/stat.h
11505 eval $hasfield
11506
11507
11508 : see if this is a sys/vfs.h system
11509 set sys/vfs.h i_sysvfs
11510 eval $inhdr
11511
11512
11513 : see if this is a sys/statfs.h system
11514 set sys/statfs.h i_sysstatfs
11515 eval $inhdr
11516
11517
11518 echo " "
11519 echo "Checking to see if your system supports struct statfs..." >&4
11520 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
11521 eval $hasstruct
11522 case "$d_statfs_s" in
11523 "$define")      echo "Yes, it does."   ;;
11524 *)              echo "No, it doesn't." ;;
11525 esac
11526
11527
11528
11529 : see if struct statfs knows about f_flags
11530 case "$d_statfs_s" in
11531 define) 
11532         echo " "
11533         echo "Checking to see if your struct statfs has f_flags field..." >&4
11534         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
11535         eval $hasfield
11536         ;;
11537 *)      val="$undef"
11538         set d_statfs_f_flags
11539         eval $setvar
11540         ;;
11541 esac
11542 case "$d_statfs_f_flags" in
11543 "$define")      echo "Yes, it does."   ;;
11544 *)              echo "No, it doesn't." ;;
11545 esac
11546
11547 : see if _ptr and _cnt from stdio act std
11548 echo " "
11549 if $contains '_IO_fpos_t' `./findhdr stdio.h` `./findhdr libio.h` >/dev/null 2>&1 ; then
11550         echo "(Looks like you have stdio.h from Linux.)"
11551         case "$stdio_ptr" in
11552         '') stdio_ptr='((fp)->_IO_read_ptr)'
11553                 ptr_lval=$define
11554                 ;;
11555         *)      ptr_lval=$d_stdio_ptr_lval;;
11556         esac
11557         case "$stdio_cnt" in
11558         '') stdio_cnt='((fp)->_IO_read_end - (fp)->_IO_read_ptr)'
11559                 cnt_lval=$undef
11560                 ;;
11561         *)      cnt_lval=$d_stdio_cnt_lval;;
11562         esac
11563         case "$stdio_base" in
11564         '') stdio_base='((fp)->_IO_read_base)';;
11565         esac
11566         case "$stdio_bufsiz" in
11567         '') stdio_bufsiz='((fp)->_IO_read_end - (fp)->_IO_read_base)';;
11568         esac
11569 else
11570         case "$stdio_ptr" in
11571         '') stdio_ptr='((fp)->_ptr)'
11572                 ptr_lval=$define
11573                 ;;
11574         *)      ptr_lval=$d_stdio_ptr_lval;;
11575         esac
11576         case "$stdio_cnt" in
11577         '') stdio_cnt='((fp)->_cnt)'
11578                 cnt_lval=$define
11579                 ;;
11580         *)      cnt_lval=$d_stdio_cnt_lval;;
11581         esac
11582         case "$stdio_base" in
11583         '') stdio_base='((fp)->_base)';;
11584         esac
11585         case "$stdio_bufsiz" in
11586         '') stdio_bufsiz='((fp)->_cnt + (fp)->_ptr - (fp)->_base)';;
11587         esac
11588 fi
11589 : test whether _ptr and _cnt really work
11590 echo "Checking how std your stdio is..." >&4
11591 $cat >try.c <<EOP
11592 #include <stdio.h>
11593 #define FILE_ptr(fp)    $stdio_ptr
11594 #define FILE_cnt(fp)    $stdio_cnt
11595 int main() {
11596         FILE *fp = fopen("try.c", "r");
11597         char c = getc(fp);
11598         if (
11599                 18 <= FILE_cnt(fp) &&
11600                 strncmp(FILE_ptr(fp), "include <stdio.h>\n", 18) == 0
11601         )
11602                 exit(0);
11603         exit(1);
11604 }
11605 EOP
11606 val="$undef"
11607 set try
11608 if eval $compile; then
11609         if ./try; then
11610                 echo "Your stdio acts pretty std."
11611                 val="$define"
11612         else
11613                 echo "Your stdio isn't very std."
11614         fi
11615 else
11616         echo "Your stdio doesn't appear very std."
11617 fi
11618 $rm -f try.c try
11619 set d_stdstdio
11620 eval $setvar
11621
11622 : Can _ptr be used as an lvalue?
11623 case "$d_stdstdio$ptr_lval" in
11624 $define$define) val=$define ;;
11625 *) val=$undef ;;
11626 esac
11627 set d_stdio_ptr_lval
11628 eval $setvar
11629
11630 : Can _cnt be used as an lvalue?
11631 case "$d_stdstdio$cnt_lval" in
11632 $define$define) val=$define ;;
11633 *) val=$undef ;;
11634 esac
11635 set d_stdio_cnt_lval
11636 eval $setvar
11637
11638 : see if _base is also standard
11639 val="$undef"
11640 case "$d_stdstdio" in
11641 $define)
11642         $cat >try.c <<EOP
11643 #include <stdio.h>
11644 #define FILE_base(fp)   $stdio_base
11645 #define FILE_bufsiz(fp) $stdio_bufsiz
11646 int main() {
11647         FILE *fp = fopen("try.c", "r");
11648         char c = getc(fp);
11649         if (
11650                 19 <= FILE_bufsiz(fp) &&
11651                 strncmp(FILE_base(fp), "#include <stdio.h>\n", 19) == 0
11652         )
11653                 exit(0);
11654         exit(1);
11655 }
11656 EOP
11657         set try
11658         if eval $compile; then
11659                 if ./try; then
11660                         echo "And its _base field acts std."
11661                         val="$define"
11662                 else
11663                         echo "But its _base field isn't std."
11664                 fi
11665         else
11666                 echo "However, it seems to be lacking the _base field."
11667         fi
11668         $rm -f try.c try
11669         ;;
11670 esac
11671 set d_stdiobase
11672 eval $setvar
11673
11674 $cat >&4 <<EOM
11675 Checking how to access stdio streams by file descriptor number...
11676 EOM
11677 case "$stdio_stream_array" in
11678 '')     $cat >try.c <<EOCP
11679 #include <stdio.h>
11680 int main() {
11681   if (&STDIO_STREAM_ARRAY[fileno(stdin)] == stdin)
11682     printf("yes\n");
11683 }
11684 EOCP
11685         for s in _iob __iob __sF
11686         do
11687                 set try -DSTDIO_STREAM_ARRAY=$s
11688                 if eval $compile; then
11689                         case "`./try$exe_ext`" in
11690                         yes)    stdio_stream_array=$s; break ;;
11691                         esac
11692                 fi
11693         done
11694         $rm -f try.* try$exe_ext
11695 esac
11696 case "$stdio_stream_array" in
11697 '')     $cat >&4 <<EOM
11698 I can't figure out how to access stdio streams by file descriptor number.
11699 EOM
11700         d_stdio_stream_array="$undef"
11701         ;;
11702 *)      $cat >&4 <<EOM
11703 You can access stdio streams by file descriptor number by the $stdio_stream_array array.
11704 EOM
11705         d_stdio_stream_array="$define"
11706         ;;
11707 esac
11708
11709 : see if strcoll exists
11710 set strcoll d_strcoll
11711 eval $inlibc
11712
11713 : check for structure copying
11714 echo " "
11715 echo "Checking to see if your C compiler can copy structs..." >&4
11716 $cat >try.c <<'EOCP'
11717 int main()
11718 {
11719         struct blurfl {
11720                 int dyick;
11721         } foo, bar;
11722
11723         foo = bar;
11724 }
11725 EOCP
11726 if $cc -c try.c >/dev/null 2>&1 ; then
11727         val="$define"
11728         echo "Yup, it can."
11729 else
11730         val="$undef"
11731         echo "Nope, it can't."
11732 fi
11733 set d_strctcpy
11734 eval $setvar
11735 $rm -f try.*
11736
11737 : see if strerror and/or sys_errlist[] exist
11738 echo " "
11739 if test "X$d_strerror" = X -o "X$d_syserrlst" = X; then
11740     if set strerror val -f d_strerror; eval $csym; $val; then
11741                 echo 'strerror() found.' >&4
11742                 d_strerror="$define"
11743                 d_strerrm='strerror(e)'
11744                 if set sys_errlist val -a d_syserrlst; eval $csym; $val; then   
11745                         echo "(You also have sys_errlist[], so we could roll our own strerror.)" 
11746                         d_syserrlst="$define"
11747                 else
11748                         echo "(Since you don't have sys_errlist[], sterror() is welcome.)"
11749                         d_syserrlst="$undef"
11750                 fi
11751     elif xxx=`./findhdr string.h`; test "$xxx" || xxx=`./findhdr strings.h`; \
11752                         $contains '#[   ]*define.*strerror' "$xxx" >/dev/null 2>&1; then
11753                 echo 'strerror() found in string header.' >&4
11754                 d_strerror="$define"
11755                 d_strerrm='strerror(e)'
11756                 if set sys_errlist val -a d_syserrlst; eval $csym; $val; then   
11757                         echo "(Most probably, strerror() uses sys_errlist[] for descriptions.)"
11758                                 d_syserrlst="$define"
11759                 else
11760                         echo "(You don't appear to have any sys_errlist[], how can this be?)"
11761                         d_syserrlst="$undef"
11762                 fi
11763     elif set sys_errlist val -a d_syserrlst; eval $csym; $val; then
11764                 echo "strerror() not found, but you have sys_errlist[] so we'll use that." >&4
11765                 d_strerror="$undef"
11766                 d_syserrlst="$define"
11767                 d_strerrm='((e)<0||(e)>=sys_nerr?"unknown":sys_errlist[e])'
11768     else
11769                 echo 'strerror() and sys_errlist[] NOT found.' >&4
11770                 d_strerror="$undef"
11771                 d_syserrlst="$undef"
11772                 d_strerrm='"unknown"'
11773     fi
11774 fi
11775
11776 : see if strtod exists
11777 set strtod d_strtod
11778 eval $inlibc
11779
11780 : see if strtol exists
11781 set strtol d_strtol
11782 eval $inlibc
11783
11784 : see if strtold exists
11785 set strtold d_strtold
11786 eval $inlibc
11787
11788 : see if strtoll exists
11789 set strtoll d_strtoll
11790 eval $inlibc
11791
11792 case "$d_longlong-$d_strtoll" in
11793 "$define-$define")
11794         $cat <<EOM
11795 Checking whether your strtoll() works okay...
11796 EOM
11797         $cat >try.c <<'EOCP'
11798 #include <errno.h>
11799 #ifdef __hpux
11800 #define strtoll __strtoll
11801 #endif
11802 #include <stdio.h>
11803 extern long long int strtoll(char *s, char **, int); 
11804 static int bad = 0;
11805 int check(char *s, long long ell, int een) {
11806         long long gll;
11807         errno = 0;
11808         gll = strtoll(s, 0, 10);
11809         if (!((gll == ell) && (errno == een)))
11810                 bad++;
11811 }
11812 int main() {
11813         check(" 1",                                      1LL, 0);
11814         check(" 0",                                      0LL, 0);
11815         check("-1",                                     -1LL, 0);
11816         check("-9223372036854775808", -9223372036854775808LL, 0);
11817         check("-9223372036854775808", -9223372036854775808LL, 0);
11818         check(" 9223372036854775807",  9223372036854775807LL, 0);
11819         check("-9223372036854775808", -9223372036854775808LL, 0);
11820         check(" 9223372036854775808",  9223372036854775807LL, ERANGE);
11821         check("-9223372036854775809", -9223372036854775808LL, ERANGE);
11822         if (!bad)
11823                 printf("ok\n");
11824 }
11825 EOCP
11826         set try
11827         if eval $compile; then
11828                 case "`./try`" in
11829                 ok) echo "Your strtoll() seems to be working okay." ;;
11830                 *) cat <<EOM >&4
11831 Your strtoll() doesn't seem to be working okay.
11832 EOM
11833                    d_strtoll="$undef"
11834                    ;;
11835                 esac
11836         fi
11837         ;;
11838 esac
11839
11840 : see if strtoul exists
11841 set strtoul d_strtoul
11842 eval $inlibc
11843
11844 : see if strtoull exists
11845 set strtoull d_strtoull
11846 eval $inlibc
11847
11848 case "$d_longlong-$d_strtoull" in
11849 "$define-$define")
11850         $cat <<EOM
11851 Checking whether your strtoull() works okay...
11852 EOM
11853         $cat >try.c <<'EOCP'
11854 #include <errno.h>
11855 #ifdef __hpux
11856 #define strtoull __strtoull
11857 #endif
11858 #include <stdio.h>
11859 extern unsigned long long int strtoull(char *s, char **, int); 
11860 static int bad = 0;
11861 int check(char *s, long long eull, int een) {
11862         long long gull;
11863         errno = 0;
11864         gull = strtoull(s, 0, 10);
11865         if (!((gull == eull) && (errno == een)))
11866                 bad++;
11867 }
11868 int main() {
11869         check(" 1",                                       1LL, 0);
11870         check(" 0",                                       0LL, 0);
11871         check("18446744073709551615", 18446744073709551615ULL, 0);
11872         check("18446744073709551616", 18446744073709551615ULL, ERANGE);
11873         if (!bad)
11874                 printf("ok\n");
11875 }
11876 EOCP
11877         set try
11878         if eval $compile; then
11879                 case "`./try`" in
11880                 ok) echo "Your strtoull() seems to be working okay." ;;
11881                 *) cat <<EOM >&4
11882 Your strtoull() doesn't seem to be working okay.
11883 EOM
11884                    d_strtoull="$undef"
11885                    ;;
11886                 esac
11887         fi
11888         ;;
11889 esac
11890
11891 : see if strtouq exists
11892 set strtouq d_strtouq
11893 eval $inlibc
11894
11895 : see if strxfrm exists
11896 set strxfrm d_strxfrm
11897 eval $inlibc
11898
11899 : see if symlink exists
11900 set symlink d_symlink
11901 eval $inlibc
11902
11903 : see if syscall exists
11904 set syscall d_syscall
11905 eval $inlibc
11906
11907 : see if sysconf exists
11908 set sysconf d_sysconf
11909 eval $inlibc
11910
11911 : see if system exists
11912 set system d_system
11913 eval $inlibc
11914
11915 : see if tcgetpgrp exists
11916 set tcgetpgrp d_tcgetpgrp
11917 eval $inlibc
11918
11919 : see if tcsetpgrp exists
11920 set tcsetpgrp d_tcsetpgrp
11921 eval $inlibc
11922
11923 : see if prototype for telldir is available
11924 echo " "
11925 set d_telldirproto telldir $i_systypes sys/types.h $i_dirent dirent.h
11926 eval $hasproto
11927
11928 : see if this is a sys/times.h system
11929 set sys/times.h i_systimes
11930 eval $inhdr
11931
11932 : see if times exists
11933 echo " "
11934 if set times val -f d_times; eval $csym; $val; then
11935         echo 'times() found.' >&4
11936         d_times="$define"
11937         inc=''
11938         case "$i_systimes" in
11939         "$define") inc='sys/times.h';;
11940         esac
11941         rp="What is the type returned by times() on this system?"
11942         set clock_t clocktype long stdio.h sys/types.h $inc
11943         eval $typedef_ask
11944 else
11945         echo 'times() NOT found, hope that will do.' >&4
11946         d_times="$undef"
11947         clocktype='int'
11948 fi
11949
11950 : see if truncate exists
11951 set truncate d_truncate
11952 eval $inlibc
11953
11954 : see if tzname[] exists
11955 echo " "
11956 if set tzname val -a d_tzname; eval $csym; $val; then
11957         val="$define"
11958         echo 'tzname[] found.' >&4
11959 else
11960         val="$undef"
11961         echo 'tzname[] NOT found.' >&4
11962 fi
11963 set d_tzname
11964 eval $setvar
11965
11966 : see if umask exists
11967 set umask d_umask
11968 eval $inlibc
11969
11970 : see if ustat exists
11971 set ustat d_ustat
11972 eval $inlibc
11973
11974 : backward compatibility for d_hvfork
11975 if test X$d_hvfork != X; then
11976         d_vfork="$d_hvfork"
11977         d_hvfork=''
11978 fi
11979 : see if there is a vfork
11980 val=''
11981 set vfork val
11982 eval $inlibc
11983
11984 : Ok, but do we want to use it. vfork is reportedly unreliable in 
11985 : perl on Solaris 2.x, and probably elsewhere.
11986 case "$val" in
11987 $define)
11988         echo " "
11989         case "$usevfork" in
11990         false) dflt='n';;
11991         *) dflt='y';;
11992         esac
11993         cat <<'EOM'
11994  
11995 Perl can only use a vfork() that doesn't suffer from strict
11996 restrictions on calling functions or modifying global data in
11997 the child.  For example, glibc-2.1 contains such a vfork()
11998 that is unsuitable.  If your system provides a proper fork()
11999 call, chances are that you do NOT want perl to use vfork().
12000
12001 EOM
12002         rp="Do you still want to use vfork()?"
12003         . ./myread
12004         case "$ans" in
12005         y|Y) ;;
12006         *)
12007                 echo "Ok, we won't use vfork()."
12008                 val="$undef"
12009                 ;;
12010         esac
12011         ;;
12012 esac
12013 set d_vfork
12014 eval $setvar
12015 case "$d_vfork" in
12016 $define) usevfork='true';;
12017 *) usevfork='false';;
12018 esac
12019
12020 : see if this is an sysdir system
12021 set sys/dir.h i_sysdir
12022 eval $inhdr
12023
12024 : see if this is an sysndir system
12025 set sys/ndir.h i_sysndir
12026 eval $inhdr
12027
12028 : see if closedir exists
12029 set closedir d_closedir
12030 eval $inlibc
12031
12032 case "$d_closedir" in
12033 "$define")
12034         echo " "
12035         echo "Checking whether closedir() returns a status..." >&4
12036         cat > closedir.c <<EOM
12037 #$i_dirent I_DIRENT             /**/
12038 #$i_sysdir I_SYS_DIR            /**/
12039 #$i_sysndir I_SYS_NDIR          /**/
12040 #$i_systypes I_SYS_TYPES        /**/
12041
12042 #if defined(I_SYS_TYPES)
12043 #include <sys/types.h>
12044 #endif
12045 #if defined(I_DIRENT)
12046 #include <dirent.h>
12047 #if defined(NeXT) && defined(I_SYS_DIR) /* NeXT needs dirent + sys/dir.h */
12048 #include <sys/dir.h>
12049 #endif
12050 #else
12051 #ifdef I_SYS_NDIR
12052 #include <sys/ndir.h>
12053 #else
12054 #ifdef I_SYS_DIR
12055 #ifdef hp9000s500
12056 #include <ndir.h>       /* may be wrong in the future */
12057 #else
12058 #include <sys/dir.h>
12059 #endif
12060 #endif
12061 #endif
12062 #endif 
12063 int main() { return closedir(opendir(".")); }
12064 EOM
12065         set closedir
12066         if eval $compile_ok; then
12067                 if ./closedir > /dev/null 2>&1 ; then
12068                         echo "Yes, it does."
12069                         val="$undef"
12070                 else
12071                         echo "No, it doesn't."
12072                         val="$define"
12073                 fi
12074         else
12075                 echo "(I can't seem to compile the test program--assuming it doesn't)"
12076                 val="$define"
12077         fi
12078         ;;
12079 *)
12080         val="$undef";
12081         ;;
12082 esac
12083 set d_void_closedir
12084 eval $setvar
12085 $rm -f closedir*
12086 : check for volatile keyword
12087 echo " "
12088 echo 'Checking to see if your C compiler knows about "volatile"...' >&4
12089 $cat >try.c <<'EOCP'
12090 int main()
12091 {
12092         typedef struct _goo_struct goo_struct;
12093         goo_struct * volatile goo = ((goo_struct *)0);
12094         struct _goo_struct {
12095                 long long_int;
12096                 int reg_int;
12097                 char char_var;
12098         };
12099         typedef unsigned short foo_t;
12100         char *volatile foo;
12101         volatile int bar;
12102         volatile foo_t blech;
12103         foo = foo;
12104 }
12105 EOCP
12106 if $cc -c $ccflags try.c >/dev/null 2>&1 ; then
12107         val="$define"
12108         echo "Yup, it does."
12109 else
12110         val="$undef"
12111         echo "Nope, it doesn't."
12112 fi
12113 set d_volatile
12114 eval $setvar
12115 $rm -f try.*
12116
12117 : see if there is a wait4
12118 set wait4 d_wait4
12119 eval $inlibc
12120
12121 : see if waitpid exists
12122 set waitpid d_waitpid
12123 eval $inlibc
12124
12125 : see if wcstombs exists
12126 set wcstombs d_wcstombs
12127 eval $inlibc
12128
12129 : see if wctomb exists
12130 set wctomb d_wctomb
12131 eval $inlibc
12132
12133 : preserve RCS keywords in files with variable substitution, grrr
12134 Date='$Date'
12135 Id='$Id'
12136 Log='$Log'
12137 RCSfile='$RCSfile'
12138 Revision='$Revision'
12139
12140 case "$crosscompile" in
12141 ''|[nN]*) crosscompile="$undef" ;;
12142 esac
12143
12144 case "$osname" in
12145 next|rhapsody|darwin) multiarch="$define" ;;
12146 esac
12147 case "$multiarch" in
12148 ''|[nN]*) multiarch="$undef" ;;
12149 esac
12150
12151 : check for alignment requirements
12152 echo " "
12153 case "$crosscompile$multiarch" in
12154 *$define*)
12155         $cat <<EOM
12156 You seem to be either cross-compiling or doing a multiarchitecture build,
12157 skipping the memory alignment check.
12158
12159 EOM
12160         case "$alignbytes" in
12161         '') alignbytes=8 ;;
12162         esac
12163         ;;
12164 *)
12165         case "$alignbytes" in
12166         '') echo "Checking alignment constraints..." >&4
12167                 if $test "X$uselongdouble" = Xdefine -a "X$d_longdbl" = Xdefine; then
12168                         $cat >try.c <<'EOCP'
12169 typedef long double NV;
12170 EOCP
12171                 else
12172                         $cat >try.c <<'EOCP'
12173 typedef double NV;
12174 EOCP
12175                 fi
12176                 $cat >>try.c <<'EOCP'
12177 #include <stdio.h>
12178 struct foobar {
12179         char foo;
12180         NV bar;
12181 } try_algn;
12182 int main()
12183 {
12184     printf("%d\n", (int)((char *)&try_algn.bar - (char *)&try_algn.foo));
12185     return(0);
12186 }
12187 EOCP
12188                 set try
12189                 if eval $compile_ok; then
12190                         dflt=`./try`
12191                 else
12192                         dflt='8'
12193                         echo "(I can't seem to compile the test program...)"
12194                 fi
12195                 ;;
12196         *) dflt="$alignbytes"
12197                 ;;
12198         esac
12199         rp="Doubles must be aligned on a how-many-byte boundary?"
12200         . ./myread
12201         alignbytes="$ans"
12202         $rm -f try.c try
12203         ;;
12204 esac
12205
12206
12207 : set the base revision
12208 baserev=5.0
12209
12210 : check for ordering of bytes in a long
12211 echo " "
12212 case "$crosscompile$multiarch" in
12213 *$define*)
12214         $cat <<EOM
12215 You seem to be either cross-compiling or doing a multiarchitecture build,
12216 skipping the byteorder check.
12217
12218 EOM
12219         byteorder='0xffff'
12220         ;;
12221 *)
12222         case "$byteorder" in
12223         '')
12224                 $cat <<'EOM'
12225 In the following, larger digits indicate more significance.  A big-endian
12226 machine like a Pyramid or a Motorola 680?0 chip will come out to 4321. A
12227 little-endian machine like a Vax or an Intel 80?86 chip would be 1234. Other
12228 machines may have weird orders like 3412.  A Cray will report 87654321,
12229 an Alpha will report 12345678. If the test program works the default is
12230 probably right.
12231 I'm now running the test program...
12232 EOM
12233                 $cat >try.c <<'EOCP'
12234 #include <stdio.h>
12235 int main()
12236 {
12237         int i;
12238         union {
12239                 unsigned long l;
12240                 char c[sizeof(long)];
12241         } u;
12242
12243         if (sizeof(long) > 4)
12244                 u.l = (0x08070605L << 32) | 0x04030201L;
12245         else
12246                 u.l = 0x04030201L;
12247         for (i = 0; i < sizeof(long); i++)
12248                 printf("%c", u.c[i]+'0');
12249         printf("\n");
12250         exit(0);
12251 }
12252 EOCP
12253                 xxx_prompt=y
12254                 set try
12255                 if eval $compile && ./try > /dev/null; then
12256                         dflt=`./try`
12257                         case "$dflt" in
12258                         [1-4][1-4][1-4][1-4]|12345678|87654321)
12259                                 echo "(The test program ran ok.)"
12260                                 echo "byteorder=$dflt"
12261                                 xxx_prompt=n
12262                         ;;
12263                         ????|????????) echo "(The test program ran ok.)" ;;
12264                         *) echo "(The test program didn't run right for some reason.)" ;;
12265                         esac
12266                 else
12267                         dflt='4321'
12268                         cat <<'EOM'
12269 (I can't seem to compile the test program.  Guessing big-endian...)
12270 EOM
12271                 fi
12272                 case "$xxx_prompt" in
12273                 y)
12274                         rp="What is the order of bytes in a long?"
12275                         . ./myread
12276                         byteorder="$ans"
12277                         ;;
12278                 *)      byteorder=$dflt
12279                         ;;
12280                 esac
12281                 ;;
12282         esac
12283         $rm -f try.c try
12284         ;;
12285 esac
12286
12287
12288 : how do we catenate cpp tokens here?
12289 echo " "
12290 echo "Checking to see how your cpp does stuff like catenate tokens..." >&4
12291 $cat >cpp_stuff.c <<'EOCP'
12292 #define RCAT(a,b)a/**/b
12293 #define ACAT(a,b)a ## b
12294 RCAT(Rei,ser)
12295 ACAT(Cir,cus)
12296 EOCP
12297 $cppstdin $cppflags $cppminus <cpp_stuff.c >cpp_stuff.out 2>&1
12298 if $contains 'Circus' cpp_stuff.out >/dev/null 2>&1; then
12299         echo "Oh!  Smells like ANSI's been here." >&4
12300         echo "We can catify or stringify, separately or together!"
12301         cpp_stuff=42
12302 elif $contains 'Reiser' cpp_stuff.out >/dev/null 2>&1; then
12303         echo "Ah, yes!  The good old days!" >&4
12304         echo "However, in the good old days we don't know how to stringify and"
12305         echo "catify at the same time."
12306         cpp_stuff=1
12307 else
12308         $cat >&4 <<EOM
12309 Hmm, I don't seem to be able to catenate tokens with your cpp.  You're going
12310 to have to edit the values of CAT[2-5] in config.h...
12311 EOM
12312         cpp_stuff="/* Help! How do we handle cpp_stuff? */*/"
12313 fi
12314 $rm -f cpp_stuff.*
12315
12316 : see if this is a db.h system
12317 set db.h i_db
12318 eval $inhdr
12319
12320 case "$i_db" in
12321 $define)
12322         : Check db version.
12323         echo " "
12324         echo "Checking Berkeley DB version ..." >&4
12325         $cat >try.c <<EOCP
12326 #$d_const HASCONST
12327 #ifndef HASCONST
12328 #define const
12329 #endif
12330 #include <sys/types.h>
12331 #include <stdio.h>
12332 #include <db.h>
12333 int main()
12334 {
12335 #ifdef DB_VERSION_MAJOR /* DB version >= 2 */
12336     int Major, Minor, Patch ;
12337     unsigned long Version ;
12338     (void)db_version(&Major, &Minor, &Patch) ;
12339     printf("You have Berkeley DB Version 2 or greater\n");
12340
12341     printf("db.h is from Berkeley DB Version %d.%d.%d\n",
12342                 DB_VERSION_MAJOR, DB_VERSION_MINOR, DB_VERSION_PATCH);
12343     printf("libdb is from Berkeley DB Version %d.%d.%d\n",
12344                 Major, Minor, Patch) ;
12345
12346     /* check that db.h & libdb are compatible */
12347     if (DB_VERSION_MAJOR != Major || DB_VERSION_MINOR != Minor || DB_VERSION_PATCH != Patch) {
12348         printf("db.h and libdb are incompatible\n") ;
12349         exit(3);        
12350     }
12351
12352     printf("db.h and libdb are compatible\n") ;
12353
12354     Version = DB_VERSION_MAJOR * 1000000 + DB_VERSION_MINOR * 1000
12355                 + DB_VERSION_PATCH ;
12356
12357     /* needs to be >= 2.3.4 */
12358     if (Version < 2003004) {
12359     /* if (DB_VERSION_MAJOR == 2 && DB_VERSION_MINOR == 0 && DB_VERSION_PATCH < 5) { */
12360         printf("but Perl needs Berkeley DB 2.3.4 or greater\n") ;
12361         exit(2);        
12362     }
12363
12364     exit(0);
12365 #else
12366 #if defined(_DB_H_) && defined(BTREEMAGIC) && defined(HASHMAGIC)
12367     printf("You have Berkeley DB Version 1\n");
12368     exit(0);    /* DB version < 2: the coast is clear. */
12369 #else
12370     exit(1);    /* <db.h> not Berkeley DB? */
12371 #endif
12372 #endif
12373 }
12374 EOCP
12375         set try
12376         if eval $compile_ok && ./try; then
12377                 echo 'Looks OK.' >&4
12378         else
12379                 echo "I can't use Berkeley DB with your <db.h>.  I'll disable Berkeley DB." >&4
12380                 i_db=$undef
12381                 case " $libs " in
12382                 *"-ldb "*)
12383                         : Remove db from list of libraries to use
12384                         echo "Removing unusable -ldb from library list" >&4
12385                         set `echo X $libs | $sed -e 's/-ldb / /' -e 's/-ldb$//'`
12386                         shift
12387                         libs="$*"
12388                         echo "libs = $libs" >&4
12389                         ;;
12390                 esac
12391         fi
12392         $rm -f try.*
12393         ;;
12394 esac
12395
12396 case "$i_db" in
12397 define)
12398         : Check the return type needed for hash 
12399         echo " "
12400         echo "Checking return type needed for hash for Berkeley DB ..." >&4
12401         $cat >try.c <<EOCP
12402 #$d_const HASCONST
12403 #ifndef HASCONST
12404 #define const
12405 #endif
12406 #include <sys/types.h>
12407 #include <db.h>
12408
12409 #ifndef DB_VERSION_MAJOR
12410 u_int32_t hash_cb (ptr, size)
12411 const void *ptr;
12412 size_t size;
12413 {
12414 }
12415 HASHINFO info;
12416 int main()
12417 {
12418         info.hash = hash_cb;
12419 }
12420 #endif
12421 EOCP
12422         if $cc $ccflags -c try.c >try.out 2>&1 ; then
12423                 if $contains warning try.out >>/dev/null 2>&1 ; then
12424                         db_hashtype='int'
12425                 else
12426                         db_hashtype='u_int32_t'
12427                 fi
12428         else
12429                 : XXX Maybe we should just give up here.
12430                 db_hashtype=u_int32_t
12431                 $cat try.out >&4
12432                 echo "Help:  I can't seem to compile the db test program." >&4
12433                 echo "Something's wrong, but I'll assume you use $db_hashtype." >&4
12434         fi
12435         $rm -f try.*
12436         echo "Your version of Berkeley DB uses $db_hashtype for hash."
12437         ;;
12438 *)      db_hashtype=u_int32_t
12439         ;;
12440 esac
12441 case "$i_db" in
12442 define)
12443         : Check the return type needed for prefix 
12444         echo " "
12445         echo "Checking return type needed for prefix for Berkeley DB ..." >&4
12446         cat >try.c <<EOCP
12447 #$d_const HASCONST
12448 #ifndef HASCONST
12449 #define const
12450 #endif
12451 #include <sys/types.h>
12452 #include <db.h>
12453
12454 #ifndef DB_VERSION_MAJOR
12455 size_t prefix_cb (key1, key2)
12456 const DBT *key1;
12457 const DBT *key2;
12458 {
12459 }
12460 BTREEINFO info;
12461 int main()
12462 {
12463         info.prefix = prefix_cb;
12464 }
12465 #endif
12466 EOCP
12467         if $cc $ccflags -c try.c  >try.out 2>&1 ; then
12468                 if $contains warning try.out >>/dev/null 2>&1 ; then
12469                         db_prefixtype='int'
12470                 else
12471                         db_prefixtype='size_t'
12472                 fi
12473         else
12474                 db_prefixtype='size_t'
12475                 : XXX Maybe we should just give up here.
12476                 $cat try.out >&4
12477                 echo "Help:  I can't seem to compile the db test program." >&4
12478                 echo "Something's wrong, but I'll assume you use $db_prefixtype." >&4
12479         fi
12480         $rm -f try.*
12481         echo "Your version of Berkeley DB uses $db_prefixtype for prefix."
12482         ;;
12483 *)      db_prefixtype='size_t'
12484         ;;
12485 esac
12486
12487 : check for void type
12488 echo " "
12489 echo "Checking to see how well your C compiler groks the void type..." >&4
12490 case "$voidflags" in
12491 '')
12492         $cat >try.c <<'EOCP'
12493 #if TRY & 1
12494 void sub() {
12495 #else
12496 sub() {
12497 #endif
12498         extern void moo();      /* function returning void */
12499         void (*goo)();          /* ptr to func returning void */
12500 #if TRY & 8
12501         void *hue;              /* generic ptr */
12502 #endif
12503 #if TRY & 2
12504         void (*foo[10])();
12505 #endif
12506
12507 #if TRY & 4
12508         if(goo == moo) {
12509                 exit(0);
12510         }
12511 #endif
12512         exit(0);
12513 }
12514 int main() { sub(); }
12515 EOCP
12516         if $cc $ccflags -c -DTRY=$defvoidused try.c >.out 2>&1 ; then
12517                 voidflags=$defvoidused
12518         echo "Good.  It appears to support void to the level $package wants.">&4
12519                 if $contains warning .out >/dev/null 2>&1; then
12520                         echo "However, you might get some warnings that look like this:"
12521                         $cat .out
12522                 fi
12523         else
12524 echo "Hmm, your compiler has some difficulty with void. Checking further..." >&4
12525                 if $cc $ccflags -c -DTRY=1 try.c >/dev/null 2>&1; then
12526                         echo "It supports 1..."
12527                         if $cc $ccflags -c -DTRY=3 try.c >/dev/null 2>&1; then
12528                                 echo "It also supports 2..."
12529                                 if $cc $ccflags -c -DTRY=7 try.c >/dev/null 2>&1; then
12530                                         voidflags=7
12531                                         echo "And it supports 4 but not 8 definitely."
12532                                 else
12533                                         echo "It doesn't support 4..."
12534                                         if $cc $ccflags -c -DTRY=11 try.c >/dev/null 2>&1; then
12535                                                 voidflags=11
12536                                                 echo "But it supports 8."
12537                                         else
12538                                                 voidflags=3
12539                                                 echo "Neither does it support 8."
12540                                         fi
12541                                 fi
12542                         else
12543                                 echo "It does not support 2..."
12544                                 if $cc $ccflags -c -DTRY=13 try.c >/dev/null 2>&1; then
12545                                         voidflags=13
12546                                         echo "But it supports 4 and 8."
12547                                 else
12548                                         if $cc $ccflags -c -DTRY=5 try.c >/dev/null 2>&1; then
12549                                                 voidflags=5
12550                                                 echo "And it supports 4 but has not heard about 8."
12551                                         else
12552                                                 echo "However it supports 8 but not 4."
12553                                         fi
12554                                 fi
12555                         fi
12556                 else
12557                         echo "There is no support at all for void."
12558                         voidflags=0
12559                 fi
12560         fi
12561 esac
12562 case "$voidflags" in
12563 "$defvoidused") ;;
12564 *)      $cat >&4 <<'EOM'
12565   Support flag bits are:
12566     1: basic void declarations.
12567     2: arrays of pointers to functions returning void.
12568     4: operations between pointers to and addresses of void functions.
12569     8: generic void pointers.
12570 EOM
12571         dflt="$voidflags";
12572         rp="Your void support flags add up to what?"
12573         . ./myread
12574         voidflags="$ans"
12575         ;;
12576 esac
12577 $rm -f try.* .out
12578
12579
12580 : How can we generate normalized random numbers ?
12581 echo " "
12582 echo "Looking for a random number function..." >&4
12583 case "$randfunc" in
12584 '')
12585         if set drand48 val -f; eval $csym; $val; then
12586                 dflt="drand48"
12587                 echo "Good, found drand48()." >&4
12588         elif set random val -f; eval $csym; $val; then
12589                 dflt="random"
12590                 echo "OK, found random()." >&4
12591         else
12592                 dflt="rand"
12593                 echo "Yick, looks like I have to use rand()." >&4
12594         fi
12595         echo " "
12596         ;;
12597 *)
12598         dflt="$randfunc"
12599         ;;
12600 esac
12601 cont=true
12602
12603 case "$ccflags" in
12604 *-Dmy_rand=*|*-Dmy_srand=*)
12605         echo "Removing obsolete -Dmy_rand, -Dmy_srand, and -Drandbits from ccflags." >&4
12606         ccflags="`echo $ccflags | sed -e 's/-Dmy_rand=random/ /'`"
12607         ccflags="`echo $ccflags | sed -e 's/-Dmy_srand=srandom/ /'`"
12608         ccflags="`echo $ccflags | sed -e 's/-Drandbits=[0-9][0-9]*/ /'`"
12609         ;;
12610 esac
12611
12612 while $test "$cont"; do
12613         rp="Use which function to generate random numbers?"
12614         . ./myread
12615         if $test "$ans" = "$dflt"; then
12616                 : null
12617         else
12618                 randbits=''
12619         fi
12620         randfunc="$ans"
12621         if set $ans val -f; eval $csym; $val; then
12622                 cont=''
12623         else
12624                 dflt=y
12625                 rp="I cannot find function $ans. Use that name anyway?"
12626                 . ./myread
12627                 dflt=rand
12628                 case "$ans" in
12629                         [yY]*) cont='';;
12630                 esac
12631         fi
12632         case "$cont" in
12633         '')
12634                 case "$randfunc" in
12635                 drand48)
12636                         drand01="drand48()"
12637                         seedfunc="srand48"
12638                         randbits=48
12639                         randseedtype=long
12640                         ;;
12641                 rand|random)
12642                         case "$randbits" in
12643                         '')
12644 echo "Checking to see how many bits your $randfunc() function produces..." >&4
12645                                 $cat >try.c <<EOCP
12646 #$i_unistd I_UNISTD
12647 #$i_stdlib I_STDLIB
12648 #include <stdio.h>
12649 #ifdef I_UNISTD
12650 #  include <unistd.h>
12651 #endif
12652 #ifdef I_STDLIB
12653 #  include <stdlib.h>
12654 #endif
12655 int main()
12656 {
12657         register int i;
12658         register unsigned long tmp;
12659         register unsigned long max = 0L;
12660
12661         for (i = 1000; i; i--) {
12662                 tmp = (unsigned long) $randfunc();
12663                 if (tmp > max) max = tmp;
12664         }
12665         for (i = 0; max; i++)
12666                 max /= 2;
12667         printf("%d\n",i);
12668 }
12669 EOCP
12670                                 set try
12671                                 if eval $compile_ok; then
12672                                         dflt=`try`
12673                                 else
12674                                         dflt='?'
12675                                         echo "(I can't seem to compile the test program...)"
12676                                 fi
12677                                 ;;
12678                         *)
12679                                 dflt="$randbits"
12680                                 ;;
12681                         esac
12682                         rp="How many bits does your $randfunc() function produce?"
12683                         . ./myread
12684                         randbits="$ans"
12685                         $rm -f try.c try
12686                         drand01="($randfunc() / (double) ((unsigned long)1 << $randbits))"
12687                         seedfunc="s$randfunc"
12688                         randseedtype=unsigned
12689                         ;;
12690                 *)
12691                         dflt="31"
12692                         rp="How many bits does your $randfunc() function produce?"
12693                         . ./myread
12694                         randbits="$ans"
12695                         seedfunc="s$randfunc"
12696                         drand01="($randfunc() / (double) ((unsigned long)1 << $randbits))"
12697                         if set $seedfunc val -f; eval $csym; $val; then
12698                                 echo "(Using $seedfunc() to seed random generator)"
12699                         else
12700                                 echo "(Warning: no $seedfunc() to seed random generator)"
12701                                 seedfunc=rand
12702                         fi
12703                         randseedtype=unsigned
12704                         ;;
12705                 esac
12706                 ;;
12707         esac
12708 done
12709
12710 echo " "
12711 echo "Determining whether or not we are on an EBCDIC system..." >&4
12712 $cat >tebcdic.c <<'EOM'
12713 int main()
12714 {
12715   if ('M'==0xd4) return 0;
12716   return 1;
12717 }
12718 EOM
12719
12720 val=$undef
12721 set tebcdic
12722 if eval $compile_ok; then
12723         if ./tebcdic; then
12724                 echo "You have EBCDIC." >&4
12725                 val="$define"
12726         else
12727                 echo "Nope, no EBCDIC, probably ASCII or some ISO Latin." >&4
12728         fi
12729 else
12730         echo "I'm unable to compile the test program." >&4
12731         echo "I'll assume ASCII or some ISO Latin." >&4
12732 fi
12733 $rm -f tebcdic.c tebcdic
12734 set ebcdic
12735 eval $setvar
12736
12737 echo " "
12738 $cat >&4 <<EOM
12739 Checking how to flush all pending stdio output...
12740 EOM
12741 # I only know how to find the first 32 possibly open files on SunOS.
12742 # See also hints/sunos_4_1.sh and util.c  --AD
12743 case "$osname" in
12744 sunos) $echo '#define PERL_FFLUSH_ALL_FOPEN_MAX 32' > try.c ;;
12745 esac
12746 $cat >>try.c <<EOCP
12747 #include <stdio.h>
12748 #$i_unistd I_UNISTD
12749 #ifdef I_UNISTD
12750 # include <unistd.h>
12751 #endif
12752 #$d_sysconf HAS_SYSCONF
12753 #$d_stdio_stream_array HAS_STDIO_STREAM_ARRAY
12754 #ifdef HAS_STDIO_STREAM_ARRAY
12755 # define STDIO_STREAM_ARRAY $stdio_stream_array
12756 #endif
12757 int main() {
12758   FILE* p = fopen("try.out", "w");
12759 #ifdef TRY_FPUTC
12760   fputc('x', p);
12761 #else
12762 # ifdef TRY_FPRINTF
12763   fprintf(p, "x");
12764 # endif
12765 #endif
12766 #ifdef TRY_FFLUSH_NULL
12767   fflush(NULL);
12768 #endif
12769 #ifdef TRY_FFLUSH_ALL
12770   {
12771     long open_max = -1;
12772 # ifdef PERL_FFLUSH_ALL_FOPEN_MAX
12773     open_max = PERL_FFLUSH_ALL_FOPEN_MAX;
12774 # else
12775 #  if defined(HAS_SYSCONF) && defined(_SC_OPEN_MAX)
12776     open_max = sysconf(_SC_OPEN_MAX);
12777 #  else
12778 #   ifdef FOPEN_MAX
12779     open_max = FOPEN_MAX;
12780 #   else
12781 #    ifdef OPEN_MAX
12782     open_max = OPEN_MAX;
12783 #    else
12784 #     ifdef _NFILE
12785     open_max = _NFILE;
12786 #     endif
12787 #    endif
12788 #   endif
12789 #  endif
12790 # endif 
12791 # ifdef HAS_STDIO_STREAM_ARRAY
12792     if (open_max > 0) {
12793       long i;
12794       for (i = 0; i < open_max; i++)
12795             if (STDIO_STREAM_ARRAY[i]._file >= 0 &&
12796                 STDIO_STREAM_ARRAY[i]._file < open_max &&
12797                 STDIO_STREAM_ARRAY[i]._flag)
12798                 fflush(&STDIO_STREAM_ARRAY[i]);
12799     }   
12800   }
12801 # endif
12802 #endif
12803   _exit(42);
12804 }
12805 EOCP
12806 : first we have to find out how _not_ to flush
12807 if $test "X$fflushNULL" = X -o "X$fflushall" = X; then
12808     output=''
12809     set try -DTRY_FPUTC
12810     if eval $compile; then
12811             $rm -f try.out
12812             ./try$exe_ext 2>/dev/null
12813             if $test ! -s try.out -a "X$?" = X42; then
12814                 output=-DTRY_FPUTC
12815             fi
12816     fi
12817     case "$output" in
12818     '')
12819             set try -DTRY_FPRINTF
12820             $rm -f try.out
12821             if eval $compile; then
12822                     $rm -f try.out
12823                     ./try$exe_ext 2>/dev/null
12824                     if $test ! -s try.out -a "X$?" = X42; then
12825                         output=-DTRY_FPRINTF
12826                     fi
12827             fi
12828         ;;
12829     esac
12830 fi
12831 : check for fflush NULL behaviour
12832 case "$fflushNULL" in
12833 '')     set try -DTRY_FFLUSH_NULL $output
12834         if eval $compile; then
12835                 $rm -f try.out
12836                 ./try$exe_ext 2>/dev/null
12837                 code="$?"
12838                 if $test -s try.out -a "X$code" = X42; then
12839                         fflushNULL="`$cat try.out`"
12840                 else
12841                         if $test "X$code" != X42; then
12842                                 $cat >&4 <<EOM
12843 (If this test failed, don't worry, we'll try another method shortly.)
12844 EOM
12845                         fi
12846                 fi
12847         fi
12848         $rm -f core try.core core.try.*
12849         case "$fflushNULL" in
12850         x)      $cat >&4 <<EOM
12851 Your fflush(NULL) works okay for output streams.
12852 Let's see if it clobbers input pipes...
12853 EOM
12854 # As of mid-March 2000 all versions of Solaris appear to have a stdio
12855 # bug that improperly flushes the input end of pipes.  So we avoid the
12856 # autoflush on fork/system/exec support for now. :-(
12857 $cat >tryp.c <<EOCP
12858 #include <stdio.h>
12859 int
12860 main(int argc, char **argv)
12861 {
12862     char buf[1024];
12863     int i;
12864     char *bp = buf;
12865     while (1) {
12866         while ((i = getc(stdin)) != -1
12867                && (*bp++ = i) != '\n'
12868                && bp < &buf[1024])
12869         /* DO NOTHING */ ;
12870         *bp = '\0';
12871         fprintf(stdout, "%s", buf);
12872         fflush(NULL);
12873         if (i == -1)
12874             return 0;
12875         bp = buf;
12876     }
12877 }
12878 EOCP
12879                 fflushNULL="$define"
12880                 set tryp
12881                 if eval $compile; then
12882                     $rm -f tryp.out
12883                     $cat tryp.c | ./tryp$exe_ext 2>/dev/null > tryp.out
12884                     if cmp tryp.c tryp.out >/dev/null 2>&1; then
12885                        $cat >&4 <<EOM
12886 fflush(NULL) seems to behave okay with input streams.
12887 EOM
12888                         fflushNULL="$define"
12889                     else
12890                         $cat >&4 <<EOM
12891 Ouch, fflush(NULL) clobbers input pipes!  We will not use it.
12892 EOM
12893                         fflushNULL="$undef"
12894                     fi
12895                 fi
12896                 $rm -f core tryp.c tryp.core core.tryp.*
12897                 ;;
12898         '')     $cat >&4 <<EOM
12899 Your fflush(NULL) isn't working (contrary to ANSI C).
12900 EOM
12901                 fflushNULL="$undef"
12902                 ;;
12903         *)      $cat >&4 <<EOM
12904 Cannot figure out whether your fflush(NULL) works or not.
12905 I'm assuming it doesn't (contrary to ANSI C).
12906 EOM
12907                 fflushNULL="$undef"
12908                 ;;
12909         esac
12910         ;;
12911 $define|true|[yY]*)
12912         fflushNULL="$define"
12913         ;;
12914 *)
12915         fflushNULL="$undef"
12916         ;;
12917 esac
12918 : check explicit looping only if NULL did not work, and if the pipe
12919 : bug does not show up on an explicit flush too
12920 case "$fflushNULL" in
12921 "$undef")
12922         $cat >tryp.c <<EOCP
12923 #include <stdio.h>
12924 int
12925 main(int argc, char **argv)
12926 {
12927     char buf[1024];
12928     int i;
12929     char *bp = buf;
12930     while (1) {
12931         while ((i = getc(stdin)) != -1
12932                && (*bp++ = i) != '\n'
12933                && bp < &buf[1024])
12934         /* DO NOTHING */ ;
12935         *bp = '\0';
12936         fprintf(stdout, "%s", buf);
12937         fflush(stdin);
12938         if (i == -1)
12939             return 0;
12940         bp = buf;
12941     }
12942 }
12943 EOCP
12944         set tryp
12945         if eval $compile; then
12946             $rm -f tryp.out
12947             $cat tryp.c | ./tryp$exe_ext 2>/dev/null > tryp.out
12948             if cmp tryp.c tryp.out >/dev/null 2>&1; then
12949                $cat >&4 <<EOM
12950 Good, at least fflush(stdin) seems to behave okay when stdin is a pipe.
12951 EOM
12952                 : now check for fflushall behaviour
12953                 case "$fflushall" in
12954                 '')     set try -DTRY_FFLUSH_ALL $output
12955                         if eval $compile; then
12956                                 $cat >&4 <<EOM
12957 (Now testing the other method--but note that this also may fail.)
12958 EOM
12959                                 $rm -f try.out
12960                                 ./try$exe_ext 2>/dev/null
12961                                 if $test -s try.out -a "X$?" = X42; then
12962                                         fflushall="`$cat try.out`"
12963                                 fi
12964                         fi
12965                         $rm -f core try.core core.try.*
12966                         case "$fflushall" in
12967                         x)      $cat >&4 <<EOM
12968 Whew. Flushing explicitly all the stdio streams works.
12969 EOM
12970                                 fflushall="$define"
12971                                 ;;
12972                         '')     $cat >&4 <<EOM
12973 Sigh. Flushing explicitly all the stdio streams doesn't work.
12974 EOM
12975                                 fflushall="$undef"
12976                                 ;;
12977                         *)      $cat >&4 <<EOM
12978 Cannot figure out whether flushing stdio streams explicitly works or not.
12979 I'm assuming it doesn't.
12980 EOM
12981                                 fflushall="$undef"
12982                                 ;;
12983                         esac
12984                         ;;
12985                 "$define"|true|[yY]*)
12986                         fflushall="$define"
12987                         ;;
12988                 *)
12989                         fflushall="$undef"
12990                         ;;
12991                 esac
12992             else
12993                 $cat >&4 <<EOM
12994 All is futile.  Even fflush(stdin) clobbers input pipes!
12995 EOM
12996                 fflushall="$undef"
12997             fi
12998         else
12999             fflushall="$undef"
13000         fi
13001         $rm -f core tryp.c tryp.core core.tryp.*
13002         ;;
13003 *)      fflushall="$undef"
13004         ;;
13005 esac
13006
13007 case "$fflushNULL$fflushall" in
13008 undefundef)
13009         $cat <<EOM
13010 OK, I give up.  I cannot figure out how to flush pending stdio output.
13011 We won't be flushing handles at all before fork/exec/popen.
13012 EOM
13013         ;;
13014 esac
13015 $rm -f try.* try$exe_ext
13016
13017 : Store the full pathname to the ar program for use in the C program
13018 : Respect a hint or command line value for full_ar.
13019 case "$full_ar" in
13020 '') full_ar=$ar ;;
13021 esac
13022
13023 : Store the full pathname to the sed program for use in the C program
13024 full_sed=$sed
13025
13026 : see what type gids are declared as in the kernel
13027 echo " "
13028 echo "Looking for the type for group ids returned by getgid()."
13029 set gid_t gidtype xxx stdio.h sys/types.h
13030 eval $typedef
13031 case "$gidtype" in
13032 xxx)
13033         xxx=`./findhdr sys/user.h`
13034         set `grep 'groups\[NGROUPS\];' "$xxx" 2>/dev/null` unsigned short
13035         case $1 in
13036         unsigned) dflt="$1 $2" ;;
13037         *) dflt="$1" ;;
13038         esac
13039         ;;
13040 *) dflt="$gidtype";;
13041 esac
13042 case "$gidtype" in
13043 gid_t) echo "gid_t found." ;;
13044 *)      rp="What is the type for group ids returned by getgid()?"
13045         . ./myread
13046         gidtype="$ans"
13047         ;;
13048 esac
13049
13050 echo " "
13051 case "$gidtype" in
13052 *_t) zzz="$gidtype"     ;;
13053 *)   zzz="gid"          ;;
13054 esac
13055 echo "Checking the size of $zzz..." >&4 
13056 cat > try.c <<EOCP
13057 #include <sys/types.h>
13058 #include <stdio.h>
13059 int main() {
13060     printf("%d\n", (int)sizeof($gidtype));
13061     exit(0);
13062 }
13063 EOCP
13064 set try
13065 if eval $compile_ok; then
13066         yyy=`./try`
13067         case "$yyy" in
13068         '')     gidsize=4
13069                 echo "(I can't execute the test program--guessing $gidsize.)" >&4
13070                 ;;
13071         *)      gidsize=$yyy
13072                 echo "Your $zzz is $gidsize bytes long."
13073                 ;;
13074         esac
13075 else
13076         gidsize=4
13077         echo "(I can't compile the test program--guessing $gidsize.)" >&4
13078 fi
13079
13080
13081 echo " "
13082 case "$gidtype" in
13083 *_t) zzz="$gidtype"     ;;
13084 *)   zzz="gid"          ;;
13085 esac
13086 echo "Checking the sign of $zzz..." >&4 
13087 cat > try.c <<EOCP
13088 #include <sys/types.h>
13089 #include <stdio.h>
13090 int main() {
13091         $gidtype foo = -1;
13092         if (foo < 0)
13093                 printf("-1\n");
13094         else
13095                 printf("1\n");
13096 }
13097 EOCP
13098 set try
13099 if eval $compile; then
13100         yyy=`./try`
13101         case "$yyy" in
13102         '')     gidsign=1
13103                 echo "(I can't execute the test program--guessing unsigned.)" >&4
13104                 ;;
13105         *)      gidsign=$yyy
13106                 case "$gidsign" in
13107                  1) echo "Your $zzz is unsigned." ;;
13108                 -1) echo "Your $zzz is signed."   ;;
13109                 esac
13110                 ;;
13111         esac
13112 else
13113         gidsign=1
13114         echo "(I can't compile the test program--guessing unsigned.)" >&4
13115 fi
13116
13117
13118 echo " "
13119
13120 if $test X"$quadtype" != X; then
13121
13122 echo "Checking how to print 64-bit integers..." >&4
13123
13124 if $test X"$sPRId64" = X -a X"$quadtype" = Xint; then
13125         $cat >try.c <<'EOCP'
13126 #include <sys/types.h>
13127 #include <stdio.h>
13128 int main() {
13129   int q = 12345678901;
13130   printf("%ld\n", q);
13131 }
13132 EOCP
13133         set try
13134         if eval $compile; then
13135                 yyy=`./try$exe_ext`
13136                 case "$yyy" in
13137                 12345678901)
13138                         sPRId64='"d"'; sPRIi64='"i"'; sPRIu64='"u"';
13139                         sPRIo64='"o"'; sPRIx64='"x"'; sPRIX64='"X"';
13140                         echo "We will use %d."
13141                         ;;
13142                 esac
13143         fi
13144 fi
13145
13146 if $test X"$sPRId64" = X -a X"$quadtype" = Xlong; then
13147         $cat >try.c <<'EOCP'
13148 #include <sys/types.h>
13149 #include <stdio.h>
13150 int main() {
13151   long q = 12345678901;
13152   printf("%ld\n", q);
13153 }
13154 EOCP
13155         set try
13156         if eval $compile; then
13157                 yyy=`./try$exe_ext`
13158                 case "$yyy" in
13159                 12345678901)
13160                         sPRId64='"ld"'; sPRIi64='"li"'; sPRIu64='"lu"';
13161                         sPRIo64='"lo"'; sPRIx64='"lx"'; sPRIX64='"lX"';
13162                         echo "We will use %ld."
13163                         ;;
13164                 esac
13165         fi
13166 fi
13167
13168 if $test X"$sPRId64" = X -a X"$i_inttypes" = X"$define" -a X"$quadtype" = Xint64_t; then
13169         $cat >try.c <<'EOCP'
13170 #include <sys/types.h>
13171 #include <inttypes.h>
13172 #include <stdio.h>
13173 int main() {
13174   int64_t q = 12345678901;
13175   printf("%" PRId64 "\n", q);
13176 }
13177 EOCP
13178         set try
13179         if eval $compile; then
13180                 yyy=`./try$exe_ext`
13181                 case "$yyy" in
13182                 12345678901)
13183                         sPRId64=PRId64; sPRIi64=PRIi64; sPRIu64=PRIu64;
13184                         sPRIo64=PRIo64; sPRIx64=PRIx64; sPRIX64=PRIX64;
13185                         echo "We will use the C9X style."
13186                         ;;
13187                 esac
13188         fi
13189 fi
13190
13191 if $test X"$sPRId64" = X -a X"$quadtype" = X"long long"; then
13192         $cat >try.c <<'EOCP'
13193 #include <sys/types.h>
13194 #include <stdio.h>
13195 int main() {
13196   long long q = 12345678901LL; /* AIX cc requires the LL prefix. */
13197   printf("%lld\n", q);
13198 }
13199 EOCP
13200         set try
13201         if eval $compile; then
13202                 yyy=`./try$exe_ext`
13203                 case "$yyy" in
13204                 12345678901)
13205                         sPRId64='"lld"'; sPRIi64='"lli"'; sPRIu64='"llu"';
13206                         sPRIo64='"llo"'; sPRIx64='"llx"'; sPRIX64='"llX"';
13207                         echo "We will use the %lld style."
13208                         ;;
13209                 esac
13210         fi
13211 fi
13212
13213 if $test X"$sPRId64" = X -a X"$quadtype" != X; then
13214         $cat >try.c <<EOCP
13215 #include <sys/types.h>
13216 #include <stdio.h>
13217 int main() {
13218   $quadtype q = 12345678901;
13219   printf("%Ld\n", q);
13220 }
13221 EOCP
13222         set try
13223         if eval $compile; then
13224                 yyy=`./try$exe_ext`
13225                 case "$yyy" in
13226                 12345678901)
13227                         sPRId64='"Ld"'; sPRIi64='"Li"'; sPRIu64='"Lu"';
13228                         sPRIo64='"Lo"'; sPRIx64='"Lx"'; sPRIX64='"LX"';
13229                         echo "We will use %Ld."
13230                         ;;
13231                 esac
13232         fi
13233 fi
13234
13235 if $test X"$sPRId64" = X -a X"$quadtype" != X; then
13236         $cat >try.c <<EOCP
13237 #include <sys/types.h>
13238 #include <stdio.h>
13239 int main() {
13240   $quadtype q = 12345678901;
13241   printf("%qd\n", q);
13242 }
13243 EOCP
13244         set try
13245         if eval $compile; then
13246                 yyy=`./try$exe_ext`
13247                 case "$yyy" in
13248                 12345678901)
13249                         sPRId64='"qd"'; sPRIi64='"qi"'; sPRIu64='"qu"';
13250                         sPRIo64='"qo"'; sPRIx64='"qx"'; sPRIX64='"qX"';
13251                         echo "We will use %qd."
13252                         ;;
13253                 esac
13254         fi
13255 fi
13256
13257 if $test X"$sPRId64" = X; then
13258         echo "Cannot figure out how to print 64-bit integers." >&4
13259 fi
13260
13261 $rm -f try try.*
13262
13263 fi
13264
13265 case "$sPRId64" in
13266 '')     d_PRId64="$undef"; d_PRIi64="$undef"; d_PRIu64="$undef"; 
13267         d_PRIo64="$undef"; d_PRIx64="$undef"; d_PRIX64="$undef"; 
13268         ;;
13269 *)      d_PRId64="$define"; d_PRIi64="$define"; d_PRIu64="$define"; 
13270         d_PRIo64="$define"; d_PRIx64="$define"; d_PRIX64="$define"; 
13271         ;;
13272 esac
13273
13274
13275 echo " "
13276 $echo "Checking the format strings to be used for Perl's internal types..." >&4
13277
13278 if $test X"$ivsize" = X8; then
13279         ivdformat="$sPRId64"
13280         uvuformat="$sPRIu64"
13281         uvoformat="$sPRIo64"
13282         uvxformat="$sPRIx64"
13283         uvXformat="$sPRIX64"
13284 else
13285         if $test X"$ivsize" = X"$longsize"; then
13286                 ivdformat='"ld"'
13287                 uvuformat='"lu"'
13288                 uvoformat='"lo"'
13289                 uvxformat='"lx"'
13290                 uvXformat='"lX"'
13291         else
13292                 if $test X"$ivsize" = X"$intsize"; then
13293                         ivdformat='"d"'
13294                         uvuformat='"u"'
13295                         uvoformat='"o"'
13296                         uvxformat='"x"'
13297                         uvXformat='"X"'
13298                 else
13299                         : far out
13300                         if $test X"$ivsize" = X"$shortsize"; then
13301                                 ivdformat='"hd"'
13302                                 uvuformat='"hu"'
13303                                 uvoformat='"ho"'
13304                                 uvxformat='"hx"'
13305                                 uvXformat='"hX"'
13306                         fi
13307                 fi
13308         fi
13309 fi
13310
13311 if $test X"$uselongdouble" = X"$define" -a X"$d_longdbl" = X"$define" -a X"$d_PRIgldbl" = X"$define"; then
13312         nveformat="$sPRIeldbl"
13313         nvfformat="$sPRIfldbl"
13314         nvgformat="$sPRIgldbl"
13315         nvEformat="$sPRIEldbl"
13316         nvFformat="$sPRIFldbl"
13317         nvGformat="$sPRIGldbl"
13318 else
13319         nveformat='"e"'
13320         nvfformat='"f"'
13321         nvgformat='"g"'
13322         nvEformat='"E"'
13323         nvFformat='"F"'
13324         nvGformat='"G"'
13325 fi
13326
13327 case "$ivdformat" in
13328 '') echo "$0: Fatal: failed to find format strings, cannot continue." >& 4
13329     exit 1
13330     ;;
13331 esac
13332
13333
13334 echo " "
13335 $echo "Checking the format string to be used for gids..." >&4
13336
13337 case "$gidsign" in
13338 -1)     if $test X"$gidsize" = X"$ivsize"; then
13339                 gidformat="$ivdformat"
13340         else
13341                 if $test X"$gidsize" = X"$longsize"; then
13342                         gidformat='"ld"'
13343                 else
13344                         if $test X"$gidsize" = X"$intsize"; then
13345                                 gidformat='"d"'
13346                         else
13347                                 if $test X"$gidsize" = X"$shortsize"; then
13348                                         gidformat='"hd"'
13349                                 fi
13350                         fi
13351                 fi
13352         fi
13353         ;;
13354 *)      if $test X"$gidsize" = X"$uvsize"; then
13355                 gidformat="$uvuformat"
13356         else
13357                 if $test X"$gidsize" = X"$longsize"; then
13358                         gidformat='"lu"'
13359                 else
13360                         if $test X"$gidsize" = X"$intsize"; then
13361                                 gidformat='"u"'
13362                         else
13363                                 if $test X"$gidsize" = X"$shortsize"; then
13364                                         gidformat='"hu"'
13365                                 fi
13366                         fi
13367                 fi
13368         fi
13369         ;;
13370 esac
13371
13372 : see if getgroups exists
13373 set getgroups d_getgrps
13374 eval $inlibc
13375
13376 : see if setgroups exists
13377 set setgroups d_setgrps
13378 eval $inlibc
13379
13380
13381 : Find type of 2nd arg to 'getgroups()' and 'setgroups()'
13382 echo " "
13383 case "$d_getgrps$d_setgrps" in
13384 *define*)
13385         case "$groupstype" in
13386         '') dflt="$gidtype" ;;
13387         *)  dflt="$groupstype" ;;
13388         esac
13389         $cat <<EOM
13390 What type of pointer is the second argument to getgroups() and setgroups()?
13391 Usually this is the same as group ids, $gidtype, but not always.
13392
13393 EOM
13394         rp='What type pointer is the second argument to getgroups() and setgroups()?'
13395         . ./myread
13396         groupstype="$ans"
13397         ;;
13398 *)  groupstype="$gidtype";;
13399 esac
13400
13401 echo " "
13402 echo "Checking if your $make program sets \$(MAKE)..." >&4
13403 case "$make_set_make" in
13404 '')
13405         $sed 's/^X //' > testmake.mak << 'EOF'
13406 Xall:
13407 X       @echo 'maketemp="$(MAKE)"'
13408 EOF
13409         case "`$make -f testmake.mak 2>/dev/null`" in
13410         *maketemp=*) make_set_make='#' ;;
13411         *)      make_set_make="MAKE=$make" ;;
13412         esac
13413         $rm -f testmake.mak
13414         ;;
13415 esac
13416 case "$make_set_make" in
13417 '#') echo "Yup, it does.";;
13418 *) echo "Nope, it doesn't.";;
13419 esac
13420
13421 : see what type is used for mode_t
13422 rp="What is the type used for file modes for system calls (e.g. fchmod())?"
13423 set mode_t modetype int stdio.h sys/types.h
13424 eval $typedef_ask
13425
13426 : define a fucntion to check prototypes
13427 $cat > protochk <<EOSH
13428 $startsh
13429 cc="$cc"
13430 optimize="$optimize"
13431 ccflags="$ccflags"
13432 prototype="$prototype"
13433 define="$define"
13434 rm=$rm
13435 EOSH
13436
13437 $cat >> protochk <<'EOSH'
13438
13439 $rm -f try.c
13440 foo="$1"
13441 shift
13442 while test $# -ge 2; do
13443         case "$1" in
13444                 $define) echo "#include <$2>" >> try.c ;;
13445                 literal) echo "$2" >> try.c ;;
13446         esac
13447     shift 2
13448 done
13449 test "$prototype" = "$define"  && echo '#define CAN_PROTOTYPE' >> try.c
13450 cat >> try.c <<'EOCP'
13451 #ifdef CAN_PROTOTYPE
13452 #define _(args) args
13453 #else
13454 #define _(args) ()
13455 #endif
13456 EOCP
13457 echo "$foo" >> try.c
13458 echo 'int no_real_function_has_this_name _((void)) { return 0; }' >> try.c
13459 $cc $optimize $ccflags -c try.c > /dev/null 2>&1
13460 status=$?
13461 $rm -f try.[co]
13462 exit $status
13463 EOSH
13464 chmod +x protochk
13465 $eunicefix protochk
13466
13467 : see what type is used for size_t
13468 rp="What is the type used for the length parameter for string functions?"
13469 set size_t sizetype 'unsigned int' stdio.h sys/types.h
13470 eval $typedef_ask
13471
13472 : check for type of arguments to gethostbyaddr. 
13473 if test "X$netdb_host_type" = X -o "X$netdb_hlen_type" = X; then
13474         case "$d_gethbyaddr" in
13475         $define)
13476                 $cat <<EOM
13477
13478 Checking to see what type of arguments are accepted by gethostbyaddr().
13479 EOM
13480                 hdrs="$define sys/types.h
13481                         $d_socket sys/socket.h 
13482                         $i_niin netinet/in.h 
13483                         $i_netdb netdb.h
13484                         $i_unistd unistd.h"
13485                 : The first arg can 'char *' or 'void *'
13486                 : The second arg is some of integral type
13487                 for xxx in in_addr_t 'const void *' 'const char *' 'void *' 'char *'; do
13488                         for yyy in size_t long int; do
13489                                 case "$netdb_host_type" in
13490                                 '')     try="extern struct hostent *gethostbyaddr($xxx, $yyy, int);"
13491                                         if ./protochk "$try" $hdrs; then
13492                                                 echo "Your system accepts $xxx for the first arg."
13493                                                 echo "...and $yyy for the second arg."
13494                                                 netdb_host_type="$xxx"
13495                                                 netdb_hlen_type="$yyy"
13496                                         fi
13497                                         ;;
13498                                 esac
13499                         done
13500                 done
13501                 : In case none of those worked, prompt the user.
13502                 case "$netdb_host_type" in
13503                 '')     rp='What is the type for the 1st argument to gethostbyaddr?'
13504                         dflt='char *'
13505                         . ./myread
13506                         netdb_host_type=$ans
13507                         rp='What is the type for the 2nd argument to gethostbyaddr?'
13508                         dflt="$sizetype"
13509                         . ./myread
13510                         netdb_hlen_type=$ans
13511                         ;;
13512                 esac
13513                 ;;
13514         *)      : no gethostbyaddr, so pick harmless defaults
13515                 netdb_host_type='char *'
13516                 netdb_hlen_type="$sizetype"
13517                 ;;
13518         esac
13519         # Remove the "const" if needed. -- but then we'll have a 
13520         # prototype clash!
13521         # netdb_host_type=`echo "$netdb_host_type" | sed 's/^const //'`
13522 fi
13523
13524 : check for type of argument to gethostbyname. 
13525 if test "X$netdb_name_type" = X ; then
13526         case "$d_gethbyname" in
13527         $define)
13528                 $cat <<EOM
13529
13530 Checking to see what type of argument is accepted by gethostbyname().
13531 EOM
13532                 hdrs="$define sys/types.h
13533                         $d_socket sys/socket.h 
13534                         $i_niin netinet/in.h 
13535                         $i_netdb netdb.h
13536                         $i_unistd unistd.h"
13537                 for xxx in "const char *" "char *"; do
13538                         case "$netdb_name_type" in
13539                         '')     try="extern struct hostent *gethostbyname($xxx);"
13540                                 if ./protochk "$try" $hdrs; then
13541                                         echo "Your system accepts $xxx."
13542                                         netdb_name_type="$xxx"
13543                                 fi
13544                                 ;;
13545                         esac
13546                 done
13547                 : In case none of those worked, prompt the user.
13548                 case "$netdb_name_type" in
13549                 '')     rp='What is the type for the 1st argument to gethostbyname?'
13550                         dflt='char *'
13551                         . ./myread
13552                         netdb_name_type=$ans
13553                         ;;
13554                 esac
13555                 ;;
13556         *)      : no gethostbyname, so pick harmless default
13557                 netdb_name_type='char *'
13558                 ;;
13559         esac
13560 fi
13561
13562 : check for type of 1st argument to getnetbyaddr. 
13563 if test "X$netdb_net_type" = X ; then
13564         case "$d_getnbyaddr" in
13565         $define)
13566                 $cat <<EOM
13567
13568 Checking to see what type of 1st argument is accepted by getnetbyaddr().
13569 EOM
13570                 hdrs="$define sys/types.h
13571                         $d_socket sys/socket.h 
13572                         $i_niin netinet/in.h 
13573                         $i_netdb netdb.h
13574                         $i_unistd unistd.h"
13575                 for xxx in in_addr_t "unsigned long" long "unsigned int" int; do
13576                         case "$netdb_net_type" in
13577                         '')     try="extern struct netent *getnetbyaddr($xxx, int);"
13578                                 if ./protochk "$try" $hdrs; then
13579                                         echo "Your system accepts $xxx."
13580                                         netdb_net_type="$xxx"
13581                                 fi
13582                                 ;;
13583                         esac
13584                 done
13585                 : In case none of those worked, prompt the user.
13586                 case "$netdb_net_type" in
13587                 '')     rp='What is the type for the 1st argument to getnetbyaddr?'
13588                         dflt='long'
13589                         . ./myread
13590                         netdb_net_type=$ans
13591                         ;;
13592                 esac
13593                 ;;
13594         *)      : no getnetbyaddr, so pick harmless default
13595                 netdb_net_type='long'
13596                 ;;
13597         esac
13598 fi
13599 : locate the preferred pager for this system
13600 case "$pager" in
13601 '')
13602         dflt=''
13603         case "$pg" in
13604         /*) dflt=$pg;;
13605         esac
13606         case "$more" in
13607         /*) dflt=$more;;
13608         esac
13609         case "$less" in
13610         /*) dflt=$less;;
13611         esac
13612         case "$dflt" in
13613         '') dflt=/usr/ucb/more;;
13614         esac
13615         ;;
13616 *) dflt="$pager";;
13617 esac
13618 echo " "
13619 fn=f/
13620 rp='What pager is used on your system?'
13621 . ./getfile
13622 pager="$ans"
13623
13624 : see what type pids are declared as in the kernel
13625 rp="What is the type of process ids on this system?"
13626 set pid_t pidtype int stdio.h sys/types.h
13627 eval $typedef_ask
13628
13629 : Find earliest binary compatible site_perl subdirectory perl can use.
13630 case "$bincompat5005" in
13631 "$define") xs_apiversion='5.005' ;;
13632 *) xs_apiversion=$version ;;   # The current site_perl version.
13633 esac
13634 : Find earliest pure perl site_perl subdirectory perl can use.
13635 : The versioned directories started at 5.005.
13636 pm_apiversion='5.005'
13637
13638 : check for length of pointer
13639 echo " "
13640 case "$ptrsize" in
13641 '')
13642         echo "Checking to see how big your pointers are..." >&4
13643         if test "$voidflags" -gt 7; then
13644                 echo '#define VOID_PTR char *' > try.c
13645         else
13646                 echo '#define VOID_PTR void *' > try.c
13647         fi
13648         $cat >>try.c <<'EOCP'
13649 #include <stdio.h>
13650 int main()
13651 {
13652     printf("%d\n", (int)sizeof(VOID_PTR));
13653     exit(0);
13654 }
13655 EOCP
13656         set try
13657         if eval $compile_ok; then
13658                 ptrsize=`./try`
13659                 echo "Your pointers are $ptrsize bytes long."
13660         else
13661                 dflt='4'
13662                 echo "(I can't seem to compile the test program.  Guessing...)" >&4
13663                 rp="What is the size of a pointer (in bytes)?"
13664                 . ./myread
13665                 ptrsize="$ans"
13666         fi
13667         ;;
13668 esac
13669 $rm -f try.c try
13670
13671 : see if ar generates random libraries by itself
13672 echo " "
13673 echo "Checking how to generate random libraries on your machine..." >&4
13674 echo 'int bar1() { return bar2(); }' > bar1.c
13675 echo 'int bar2() { return 2; }' > bar2.c
13676 $cat > foo.c <<'EOP'
13677 int main() { printf("%d\n", bar1()); exit(0); }
13678 EOP
13679 $cc $ccflags -c bar1.c >/dev/null 2>&1
13680 $cc $ccflags -c bar2.c >/dev/null 2>&1
13681 $cc $ccflags -c foo.c >/dev/null 2>&1
13682 $ar rc bar$_a bar2$_o bar1$_o >/dev/null 2>&1
13683 if $cc $ccflags $ldflags -o foobar foo$_o bar$_a $libs > /dev/null 2>&1 &&
13684         ./foobar >/dev/null 2>&1; then
13685         echo "$ar appears to generate random libraries itself."
13686         orderlib=false
13687         ranlib=":"
13688 elif $ar ts bar$_a >/dev/null 2>&1 &&
13689         $cc $ccflags $ldflags -o foobar foo$_o bar$_a $libs > /dev/null 2>&1 &&
13690         ./foobar >/dev/null 2>&1; then
13691                 echo "a table of contents needs to be added with '$ar ts'."
13692                 orderlib=false
13693                 ranlib="$ar ts"
13694 else
13695         case "$ranlib" in
13696         :) ranlib='';;
13697         '')
13698                 ranlib=`./loc ranlib X /usr/bin /bin /usr/local/bin`
13699                 $test -f $ranlib || ranlib=''
13700                 ;;
13701         esac
13702         if $test -n "$ranlib"; then
13703                 echo "your system has '$ranlib'; we'll use that."
13704                 orderlib=false
13705         else
13706                 echo "your system doesn't seem to support random libraries"
13707                 echo "so we'll use lorder and tsort to order the libraries."
13708                 orderlib=true
13709                 ranlib=":"
13710         fi
13711 fi
13712 $rm -f foo* bar* 
13713
13714 : check for type of arguments to select. 
13715 case "$selecttype" in
13716 '') case "$d_select" in
13717         $define)
13718                 echo " "
13719                 $cat <<EOM
13720 Checking to see what type of arguments are accepted by select().
13721 EOM
13722                 hdrs="$define sys/types.h
13723                         $i_systime sys/time.h 
13724                         $i_sysselct sys/select.h
13725                         $d_socket sys/socket.h"
13726                 : The first arg can be int, unsigned, or size_t
13727                 : The last arg may or may not be 'const'
13728                 val=''
13729                 : void pointer has been seen but using that
13730                 : breaks the selectminbits test
13731                 for xxx in 'fd_set *' 'int *'; do
13732                         for nfd in 'int' 'size_t' 'unsigned long' 'unsigned' ; do
13733                                 for tmo in 'struct timeval *' 'const struct timeval *'; do
13734                                         case "$val" in
13735                                         '')     try="extern select _(($nfd, $xxx, $xxx, $xxx, $tmo));"
13736                                                 if ./protochk "$try" $hdrs; then
13737                                                         echo "Your system accepts $xxx."
13738                                                         val="$xxx"
13739                                                 fi
13740                                                 ;;
13741                                         esac
13742                                 done
13743                         done
13744                 done
13745                 case "$val" in
13746                 '')     rp='What is the type for the 2nd, 3rd, and 4th arguments to select?'
13747                         case "$d_fd_set" in
13748                                 $define) dflt="fd_set *" ;;
13749                                 *)              dflt="int *" ;;
13750                         esac
13751                         . ./myread
13752                         val=$ans
13753                         ;;
13754                 esac
13755                 selecttype="$val"
13756                 ;;
13757         *)      : no select, so pick a harmless default
13758                 selecttype='int *'
13759                 ;;
13760         esac
13761         ;;
13762 esac
13763
13764 : check for the select 'width'
13765 case "$selectminbits" in
13766 '') case "$d_select" in
13767         $define)
13768                 $cat <<EOM
13769
13770 Checking to see on how many bits at a time your select() operates...
13771 EOM
13772                 $cat >try.c <<EOCP
13773 #include <sys/types.h>
13774 #$i_time I_TIME
13775 #$i_systime I_SYS_TIME
13776 #$i_systimek I_SYS_TIME_KERNEL
13777 #ifdef I_TIME
13778 #   include <time.h>
13779 #endif
13780 #ifdef I_SYS_TIME
13781 #   ifdef I_SYS_TIME_KERNEL
13782 #       define KERNEL
13783 #   endif
13784 #   include <sys/time.h>
13785 #   ifdef I_SYS_TIME_KERNEL
13786 #       undef KERNEL
13787 #   endif
13788 #endif
13789 #$i_sysselct I_SYS_SELECT
13790 #ifdef I_SYS_SELECT
13791 #include <sys/select.h>
13792 #endif
13793 #$d_socket HAS_SOCKET
13794 #ifdef HAS_SOCKET
13795 #   include <sys/socket.h> /* Might include <sys/bsdtypes.h> */
13796 #endif
13797 #include <stdio.h>
13798 $selecttype b;
13799 #define S sizeof(*(b))
13800 #define MINBITS 64
13801 #define NBYTES (S * 8 > MINBITS ? S : MINBITS/8)
13802 #define NBITS  (NBYTES * 8)
13803 int main() {
13804     char s[NBYTES];
13805     struct timeval t;
13806     int i;
13807     FILE* fp;
13808     int fd;
13809
13810     fclose(stdin);
13811     fp = fopen("try.c", "r");
13812     if (fp == 0)
13813       exit(1);
13814     fd = fileno(fp);
13815     if (fd < 0)
13816       exit(2);
13817     b = ($selecttype)s;
13818     for (i = 0; i < NBITS; i++)
13819         FD_SET(i, b);
13820     t.tv_sec  = 0;
13821     t.tv_usec = 0;
13822     select(fd + 1, b, 0, 0, &t);
13823     for (i = NBITS - 1; i > fd && FD_ISSET(i, b); i--);
13824     printf("%d\n", i + 1);
13825     return 0;
13826 }
13827 EOCP
13828                 set try
13829                 if eval $compile_ok; then
13830                         selectminbits=`./try`
13831                         case "$selectminbits" in
13832                         '')     cat >&4 <<EOM
13833 Cannot figure out on how many bits at a time your select() operates.
13834 I'll play safe and guess it is 32 bits.
13835 EOM
13836                                 selectminbits=32
13837                                 bits="32 bits"
13838                                 ;;
13839                         1)      bits="1 bit" ;;
13840                         *)      bits="$selectminbits bits" ;;
13841                         esac
13842                         echo "Your select() operates on $bits at a time." >&4
13843                 else
13844                         rp='What is the minimum number of bits your select() operates on?'
13845                         case "$byteorder" in
13846                         1234|12345678)  dflt=32 ;;
13847                         *)              dflt=1  ;;
13848                         esac
13849                         . ./myread
13850                         val=$ans
13851                         selectminbits="$val"
13852                 fi
13853                 $rm -f try.* try
13854                 ;;
13855         *)      : no select, so pick a harmless default
13856                 selectminbits='32'
13857                 ;;
13858         esac
13859         ;;
13860 esac
13861
13862 : Trace out the files included by signal.h, then look for SIGxxx names.
13863 : Remove SIGARRAYSIZE used by HPUX.
13864 : Remove SIGSTKSIZE used by Linux.
13865 : Remove SIGSTKSZ used by Posix.
13866 : Remove SIGTYP void lines used by OS2.
13867 : Some cpps, like os390, dont give the file name anywhere
13868 if [ "X$fieldn" = X ]; then
13869         : Just make some guesses.  We check them later.
13870         xxx='/usr/include/signal.h /usr/include/sys/signal.h'
13871 else
13872         xxx=`echo '#include <signal.h>' |
13873         $cppstdin $cppminus $cppflags 2>/dev/null |
13874         $grep '^[       ]*#.*include' | 
13875         $awk "{print \\$$fieldn}" | $sed 's!"!!g' | $sort | $uniq`
13876 fi
13877 : Check this list of files to be sure we have parsed the cpp output ok.
13878 : This will also avoid potentially non-existent files, such 
13879 : as ../foo/bar.h
13880 xxxfiles=''
13881 for xx in $xxx /dev/null ; do
13882         $test -f "$xx" && xxxfiles="$xxxfiles $xx"
13883 done
13884 : If we have found no files, at least try signal.h
13885 case "$xxxfiles" in
13886 '')     xxxfiles=`./findhdr signal.h` ;;
13887 esac
13888 xxx=`awk '
13889 $1 ~ /^#define$/ && $2 ~ /^SIG[A-Z0-9]*$/ && $2 !~ /SIGARRAYSIZE/ && $2 !~ /SIGSTKSIZE/ && $2 !~ /SIGSTKSZ/ && $3 !~ /void/ {
13890         print substr($2, 4, 20)
13891 }
13892 $1 == "#" && $2 ~ /^define$/ && $3 ~ /^SIG[A-Z0-9]*$/ && $3 !~ /SIGARRAYSIZE/ && $4 !~ /void/ {
13893         print substr($3, 4, 20)
13894 }' $xxxfiles`
13895 : Append some common names just in case the awk scan failed.
13896 xxx="$xxx ABRT ALRM BUS CANCEL CHLD CLD CONT DIL EMT FPE"
13897 xxx="$xxx FREEZE HUP ILL INT IO IOT KILL LOST LWP PHONE"
13898 xxx="$xxx PIPE POLL PROF PWR QUIT RTMAX RTMIN SEGV STKFLT STOP"
13899 xxx="$xxx SYS TERM THAW TRAP TSTP TTIN TTOU URG USR1 USR2"
13900 xxx="$xxx USR3 USR4 VTALRM WAITING WINCH WIND WINDOW XCPU XFSZ"
13901
13902 : generate a few handy files for later
13903 $cat > signal.c <<'EOCP'
13904 #include <sys/types.h>
13905 #include <signal.h>
13906 #include <stdio.h>
13907 int main() {
13908
13909 /* Strange style to avoid deeply-nested #if/#else/#endif */
13910 #ifndef NSIG
13911 #  ifdef _NSIG
13912 #    define NSIG (_NSIG)
13913 #  endif
13914 #endif
13915
13916 #ifndef NSIG
13917 #  ifdef SIGMAX
13918 #    define NSIG (SIGMAX+1)
13919 #  endif
13920 #endif
13921
13922 #ifndef NSIG
13923 #  ifdef SIG_MAX
13924 #    define NSIG (SIG_MAX+1)
13925 #  endif
13926 #endif
13927
13928 #ifndef NSIG
13929 #  ifdef MAXSIG
13930 #    define NSIG (MAXSIG+1)
13931 #  endif
13932 #endif
13933
13934 #ifndef NSIG
13935 #  ifdef MAX_SIG
13936 #    define NSIG (MAX_SIG+1)
13937 #  endif
13938 #endif
13939
13940 #ifndef NSIG
13941 #  ifdef SIGARRAYSIZE
13942 #    define NSIG (SIGARRAYSIZE+1) /* Not sure of the +1 */
13943 #  endif
13944 #endif
13945
13946 #ifndef NSIG
13947 #  ifdef _sys_nsig
13948 #    define NSIG (_sys_nsig) /* Solaris 2.5 */
13949 #  endif
13950 #endif
13951
13952 /* Default to some arbitrary number that's big enough to get most
13953    of the common signals.
13954 */
13955 #ifndef NSIG
13956 #    define NSIG 50
13957 #endif
13958
13959 printf("NSIG %d\n", NSIG);
13960
13961 #ifndef JUST_NSIG
13962
13963 EOCP
13964
13965 echo $xxx | $tr ' ' $trnl | $sort | $uniq | $awk '
13966 {
13967         printf "#ifdef SIG"; printf $1; printf "\n"
13968         printf "printf(\""; printf $1; printf " %%d\\n\",SIG";
13969         printf $1; printf ");\n"
13970         printf "#endif\n"
13971 }
13972 END {
13973         printf "#endif /* JUST_NSIG */\n";
13974         printf "exit(0);\n}\n";
13975 }
13976 ' >>signal.c
13977 $cat >signal.awk <<'EOP'
13978 BEGIN { ndups = 0 }
13979 $1 ~ /^NSIG$/ { nsig = $2 }
13980 ($1 !~ /^NSIG$/) && (NF == 2) {
13981     if ($2 > maxsig) { maxsig = $2 }
13982     if (sig_name[$2]) {
13983         dup_name[ndups] = $1
13984         dup_num[ndups] = $2
13985         ndups++ 
13986     }
13987     else {
13988         sig_name[$2] = $1
13989         sig_num[$2] = $2
13990     }
13991 }
13992 END { 
13993     if (nsig == 0) {
13994         nsig = maxsig + 1
13995     }
13996     printf("NSIG %d\n", nsig);
13997     for (n = 1; n < nsig; n++) {
13998         if (sig_name[n]) {
13999             printf("%s %d\n", sig_name[n], sig_num[n])
14000         }
14001         else {
14002             printf("NUM%d %d\n", n, n) 
14003         }
14004     }
14005     for (n = 0; n < ndups; n++) {
14006         printf("%s %d\n", dup_name[n], dup_num[n])
14007     }
14008 }
14009 EOP
14010 $cat >signal_cmd <<EOS
14011 $startsh
14012 if $test -s signal.lst; then
14013     echo "Using your existing signal.lst file"
14014         exit 0
14015 fi
14016 xxx="$xxx"
14017 EOS
14018 $cat >>signal_cmd <<'EOS'
14019
14020 set signal
14021 if eval $compile_ok; then
14022         ./signal$_exe | $sort -n +1 | $uniq | $awk -f signal.awk >signal.lst
14023 else
14024         echo "(I can't seem be able to compile the whole test program)" >&4
14025         echo "(I'll try it in little pieces.)" >&4
14026         set signal -DJUST_NSIG
14027         if eval $compile_ok; then
14028                 ./signal$_exe > signal.nsg
14029                 $cat signal.nsg
14030         else
14031                 echo "I can't seem to figure out how many signals you have." >&4
14032                 echo "Guessing 50." >&4
14033                 echo 'NSIG 50' > signal.nsg
14034         fi
14035         : Now look at all the signal names, one at a time.
14036         for xx in `echo $xxx | $tr ' ' $trnl | $sort | $uniq`; do
14037                 $cat > signal.c <<EOCP
14038 #include <sys/types.h>
14039 #include <signal.h>
14040 #include <stdio.h>
14041 int main() {
14042 printf("$xx %d\n", SIG${xx});
14043 return 0;
14044 }
14045 EOCP
14046                 set signal
14047                 if eval $compile; then
14048                         echo "SIG${xx} found."
14049                         ./signal$_exe  >> signal.ls1
14050                 else
14051                         echo "SIG${xx} NOT found."
14052                 fi
14053         done
14054         if $test -s signal.ls1; then
14055                 $cat signal.nsg signal.ls1 |
14056                         $sort -n +1 | $uniq | $awk -f signal.awk >signal.lst
14057         fi
14058
14059 fi
14060 if $test -s signal.lst; then
14061         :
14062 else
14063         echo "(AAK! I can't compile the test programs -- Guessing)" >&4
14064         echo 'kill -l' >signal
14065         set X `csh -f <signal`
14066         $rm -f signal
14067         shift
14068         case $# in
14069         0) set HUP INT QUIT ILL TRAP ABRT EMT FPE KILL BUS SEGV SYS PIPE ALRM TERM;;
14070         esac
14071         echo $@ | $tr ' ' $trnl | \
14072             $awk '{ printf "%s %d\n", $1, ++s; }
14073                   END { printf "NSIG %d\n", ++s }' >signal.lst
14074 fi
14075 $rm -f signal.c signal$_exe signal$_o signal.nsg signal.ls1
14076 EOS
14077 chmod a+x signal_cmd
14078 $eunicefix signal_cmd
14079
14080 : generate list of signal names
14081 echo " "
14082 case "$sig_name_init" in
14083 '') doinit=yes ;;
14084 *)  case "$sig_num_init" in
14085     ''|*,*) doinit=yes ;;
14086     esac ;;
14087 esac
14088 case "$doinit" in
14089 yes)
14090         echo "Generating a list of signal names and numbers..." >&4
14091         . ./signal_cmd
14092         sig_count=`$awk '/^NSIG/ { printf "%d", $2 }' signal.lst`
14093         sig_name=`$awk 'BEGIN { printf "ZERO " }
14094                         !/^NSIG/ { printf "%s ", $1 }' signal.lst`
14095         sig_num=`$awk  'BEGIN { printf "0 " }
14096                         !/^NSIG/ { printf "%d ", $2 }' signal.lst`
14097         sig_name_init=`$awk 'BEGIN      { printf "\"ZERO\", " }
14098                              !/^NSIG/   { printf "\"%s\", ", $1 }
14099                              END        { printf "0\n" }' signal.lst`
14100         sig_num_init=`$awk  'BEGIN      { printf "0, " }
14101                              !/^NSIG/   { printf "%d, ", $2}
14102                              END        { printf "0\n"}' signal.lst`
14103         ;;
14104 esac
14105 echo "The following $sig_count signals are available:"
14106 echo " "
14107 echo $sig_name | $awk \
14108 'BEGIN { linelen = 0 }
14109 {
14110         for (i = 1; i <= NF; i++) {
14111                 name = "SIG" $i " "
14112                 linelen = linelen + length(name)
14113                 if (linelen > 70) {
14114                         printf "\n"
14115                         linelen = length(name)
14116                 }
14117                 printf "%s", name
14118         }
14119         printf "\n"
14120 }'
14121 $rm -f signal signal.c signal.awk signal.lst signal_cmd 
14122
14123 echo " "
14124 case "$sizetype" in
14125 *_t) zzz="$sizetype"    ;;
14126 *)   zzz="filesize"     ;;
14127 esac
14128 echo "Checking the size of $zzz..." >&4 
14129 cat > try.c <<EOCP
14130 #include <sys/types.h>
14131 #include <stdio.h>
14132 int main() {
14133     printf("%d\n", (int)sizeof($sizetype));
14134     exit(0);
14135 }
14136 EOCP
14137 set try
14138 if eval $compile_ok; then
14139         yyy=`./try`
14140         case "$yyy" in
14141         '')     sizesize=4
14142                 echo "(I can't execute the test program--guessing $sizesize.)" >&4
14143                 ;;
14144         *)      sizesize=$yyy
14145                 echo "Your $zzz size is $sizesize bytes."
14146                 ;;
14147         esac
14148 else
14149         sizesize=4
14150         echo "(I can't compile the test program--guessing $sizesize.)" >&4
14151 fi
14152
14153
14154 : check for socklen_t
14155 echo " "
14156 echo "Checking to see if you have socklen_t..." >&4
14157 $cat >try.c <<EOCP
14158 #include <sys/types.h>
14159 #$d_socket HAS_SOCKET
14160 #ifdef HAS_SOCKET
14161 #include <sys/socket.h>
14162 #endif
14163 int main() { socklen_t x = 16; }
14164 EOCP
14165 set try
14166 if eval $compile; then
14167         val="$define"
14168         echo "You have socklen_t."
14169 else
14170         val="$undef"
14171         echo "You do not have socklen_t."
14172         case "$sizetype" in
14173         size_t) echo "(You do have size_t, that might work. Some people are happy with just an int.)" ;;
14174         esac
14175 fi
14176 $rm -f try try.*
14177 set d_socklen_t
14178 eval $setvar
14179
14180 : check for type of the size argument to socket calls
14181 case "$d_socket" in
14182 "$define")
14183         $cat <<EOM
14184
14185 Checking to see what type is the last argument of accept().
14186 EOM
14187         hdrs="$define sys/types.h $d_socket sys/socket.h" 
14188         yyy=''
14189         case "$d_socklen_t" in
14190         "$define") yyy="$yyy socklen_t"
14191         esac
14192         yyy="$yyy $sizetype int long unsigned"
14193         for xxx in $yyy; do
14194                 case "$socksizetype" in
14195                 '')     try="extern int accept(int, struct sockaddr *, $xxx *);"
14196                         if ./protochk "$try" $hdrs; then
14197                                 echo "Your system accepts '$xxx *' for the last argument of accept()."
14198                                 socksizetype="$xxx"
14199                         fi
14200                         ;;
14201                 esac
14202         done
14203 : In case none of those worked, prompt the user.
14204         case "$socksizetype" in
14205         '')     rp='What is the type for socket address structure sizes?'
14206                 dflt='int'
14207                 . ./myread
14208                 socksizetype=$ans
14209                 ;;
14210         esac
14211         ;;
14212 *)      : no sockets, so pick relatively harmless default
14213         socksizetype='int'
14214         ;;
14215 esac
14216
14217 : see what type is used for signed size_t
14218 set ssize_t ssizetype int stdio.h sys/types.h
14219 eval $typedef
14220 dflt="$ssizetype"
14221 $cat > ssize.c <<EOM
14222 #include <stdio.h>
14223 #include <sys/types.h>
14224 #define Size_t $sizetype
14225 #define SSize_t $dflt
14226 int main()
14227 {
14228         if (sizeof(Size_t) == sizeof(SSize_t))
14229                 printf("$dflt\n");
14230         else if (sizeof(Size_t) == sizeof(int))
14231                 printf("int\n");
14232         else 
14233                 printf("long\n");
14234         exit(0);
14235 }
14236 EOM
14237 echo " "
14238 set ssize
14239 if eval $compile_ok && ./ssize > /dev/null; then
14240         ssizetype=`./ssize`
14241         echo "I'll be using $ssizetype for functions returning a byte count." >&4
14242 else
14243         $cat >&4 <<EOM
14244 Help! I can't compile and run the ssize_t test program: please enlighten me!
14245 (This is probably a misconfiguration in your system or libraries, and
14246 you really ought to fix it.  Still, I'll try anyway.)
14247
14248 I need a type that is the same size as $sizetype, but is guaranteed to
14249 be signed.  Common values are ssize_t, int and long.
14250
14251 EOM
14252         rp="What signed type is the same size as $sizetype?"
14253         . ./myread
14254         ssizetype="$ans"
14255 fi
14256 $rm -f ssize ssize.*
14257
14258 : see what type of char stdio uses.
14259 echo " "
14260 if $contains 'unsigned.*char.*_ptr;' `./findhdr stdio.h` >/dev/null 2>&1 ; then
14261         echo "Your stdio uses unsigned chars." >&4
14262         stdchar="unsigned char"
14263 else
14264         echo "Your stdio uses signed chars." >&4
14265         stdchar="char"
14266 fi
14267
14268 : see if time exists
14269 echo " "
14270 if test "X$d_time" = X -o X"$timetype" = X; then
14271     if set time val -f d_time; eval $csym; $val; then
14272                 echo 'time() found.' >&4
14273                 val="$define"
14274                 rp="What is the type returned by time() on this system?"
14275                 set time_t timetype long stdio.h sys/types.h
14276                 eval $typedef_ask
14277     else
14278                 echo 'time() not found, hope that will do.' >&4
14279                 val="$undef"
14280                 timetype='int';
14281     fi
14282     set d_time
14283     eval $setvar
14284 fi
14285
14286 : see what type uids are declared as in the kernel
14287 echo " "
14288 echo "Looking for the type for user ids returned by getuid()."
14289 set uid_t uidtype xxx stdio.h sys/types.h
14290 eval $typedef
14291 case "$uidtype" in
14292 xxx)
14293         xxx=`./findhdr sys/user.h`
14294         set `grep '_ruid;' "$xxx" 2>/dev/null` unsigned short
14295         case $1 in
14296         unsigned) dflt="$1 $2" ;;
14297         *) dflt="$1" ;;
14298         esac
14299         ;;
14300 *) dflt="$uidtype";;
14301 esac
14302 case "$uidtype" in
14303 uid_t)  echo "uid_t found." ;;
14304 *)      rp="What is the type for user ids returned by getuid()?"
14305         . ./myread
14306         uidtype="$ans"
14307         ;;
14308 esac
14309
14310 echo " "
14311 case "$uidtype" in
14312 *_t) zzz="$uidtype"     ;;
14313 *)   zzz="uid"          ;;
14314 esac
14315 echo "Checking the size of $zzz..." >&4 
14316 cat > try.c <<EOCP
14317 #include <sys/types.h>
14318 #include <stdio.h>
14319 int main() {
14320     printf("%d\n", (int)sizeof($uidtype));
14321     exit(0);
14322 }
14323 EOCP
14324 set try
14325 if eval $compile_ok; then
14326         yyy=`./try`
14327         case "$yyy" in
14328         '')     uidsize=4
14329                 echo "(I can't execute the test program--guessing $uidsize.)" >&4
14330                 ;;
14331         *)      uidsize=$yyy
14332                 echo "Your $zzz is $uidsize bytes long."
14333                 ;;
14334         esac
14335 else
14336         uidsize=4
14337         echo "(I can't compile the test program--guessing $uidsize.)" >&4
14338 fi
14339
14340 echo " "
14341 case "$uidtype" in
14342 *_t) zzz="$uidtype"     ;;
14343 *)   zzz="uid"          ;;
14344 esac
14345 echo "Checking the sign of $zzz..." >&4
14346 cat > try.c <<EOCP
14347 #include <sys/types.h>
14348 #include <stdio.h>
14349 int main() {
14350         $uidtype foo = -1;
14351         if (foo < 0)
14352                 printf("-1\n");
14353         else
14354                 printf("1\n");
14355 }
14356 EOCP
14357 set try
14358 if eval $compile; then
14359         yyy=`./try`
14360         case "$yyy" in
14361         '')     uidsign=1
14362                 echo "(I can't execute the test program--guessing unsigned.)" >&4
14363                 ;;
14364         *)      uidsign=$yyy
14365                 case "$uidsign" in
14366                  1) echo "Your $zzz is unsigned." ;;
14367                 -1) echo "Your $zzz is signed."   ;;
14368                 esac
14369                 ;;
14370         esac
14371 else
14372         uidsign=1
14373         echo "(I can't compile the test program--guessing unsigned.)" >&4
14374 fi
14375
14376
14377
14378 echo " "
14379 $echo "Checking the format string to be used for uids..." >&4
14380
14381 case "$uidsign" in
14382 -1)     if $test X"$uidsize" = X"$ivsize"; then
14383                 uidformat="$ivdformat"
14384         else
14385                 if $test X"$uidsize" = X"$longsize"; then
14386                         uidformat='"ld"'
14387                 else
14388                         if $test X"$uidsize" = X"$intsize"; then
14389                                 uidformat='"d"'
14390                         else
14391                                 if $test X"$uidsize" = X"$shortsize"; then
14392                                         uidformat='"hd"'
14393                                 fi
14394                         fi
14395                 fi
14396         fi
14397         ;;
14398 *)      if $test X"$uidsize" = X"$uvsize"; then
14399                 uidformat="$uvuformat"
14400         else
14401                 if $test X"$uidsize" = X"$longsize"; then
14402                         uidformat='"lu"'
14403                 else
14404                         if $test X"$uidsize" = X"$intsize"; then
14405                                 uidformat='"u"'
14406                         else
14407                                 if $test X"$uidsize" = X"$shortsize"; then
14408                                         uidformat='"hu"'
14409                                 fi
14410                         fi
14411                 fi
14412         fi
14413         ;;
14414 esac
14415
14416 : see if dbm.h is available
14417 : see if dbmclose exists
14418 set dbmclose d_dbmclose
14419 eval $inlibc
14420
14421 case "$d_dbmclose" in
14422 $define)
14423         set dbm.h i_dbm
14424         eval $inhdr
14425         case "$i_dbm" in
14426         $define)
14427                 val="$undef"
14428                 set i_rpcsvcdbm
14429                 eval $setvar
14430                 ;;
14431         *)      set rpcsvc/dbm.h i_rpcsvcdbm
14432                 eval $inhdr
14433                 ;;
14434         esac
14435         ;;
14436 *)      echo "We won't be including <dbm.h>"
14437         val="$undef"
14438         set i_dbm
14439         eval $setvar
14440         val="$undef"
14441         set i_rpcsvcdbm
14442         eval $setvar
14443         ;;
14444 esac
14445
14446 : see if this is a sys/file.h system
14447 val=''
14448 set sys/file.h val
14449 eval $inhdr
14450
14451 : do we need to include sys/file.h ?
14452 case "$val" in
14453 "$define")
14454         echo " "
14455         if $h_sysfile; then
14456                 val="$define"
14457                 echo "We'll be including <sys/file.h>." >&4
14458         else
14459                 val="$undef"
14460                 echo "We won't be including <sys/file.h>." >&4
14461         fi
14462         ;;
14463 *)
14464         h_sysfile=false
14465         ;;
14466 esac
14467 set i_sysfile
14468 eval $setvar
14469
14470 : see if fcntl.h is there
14471 val=''
14472 set fcntl.h val
14473 eval $inhdr
14474
14475 : see if we can include fcntl.h
14476 case "$val" in
14477 "$define")
14478         echo " "
14479         if $h_fcntl; then
14480                 val="$define"
14481                 echo "We'll be including <fcntl.h>." >&4
14482         else
14483                 val="$undef"
14484                 if $h_sysfile; then
14485         echo "We don't need to include <fcntl.h> if we include <sys/file.h>." >&4
14486                 else
14487                         echo "We won't be including <fcntl.h>." >&4
14488                 fi
14489         fi
14490         ;;
14491 *)
14492         h_fcntl=false
14493         val="$undef"
14494         ;;
14495 esac
14496 set i_fcntl
14497 eval $setvar
14498
14499 : see if this is a iconv.h system
14500 set iconv.h i_iconv
14501 eval $inhdr
14502
14503 : see if this is a ieeefp.h system
14504 set ieeefp.h i_ieeefp
14505 eval $inhdr
14506
14507 : see if this is a libutil.h system
14508 set libutil.h i_libutil
14509 eval $inhdr
14510
14511 : see if locale.h is available
14512 set locale.h i_locale
14513 eval $inhdr
14514
14515 : see if mach cthreads are available
14516 if test "X$usethreads" = "X$define"; then
14517         set mach/cthreads.h i_machcthr
14518         eval $inhdr
14519 else
14520         i_machcthr="$undef"
14521 fi
14522
14523
14524
14525 : see if this is a math.h system
14526 set math.h i_math
14527 eval $inhdr
14528
14529 : see if this is a mntent.h system
14530 set mntent.h i_mntent
14531 eval $inhdr
14532
14533 : see if ndbm.h is available
14534 set ndbm.h t_ndbm
14535 eval $inhdr
14536 case "$t_ndbm" in
14537 $define)
14538         : see if dbm_open exists
14539         set dbm_open d_dbm_open
14540         eval $inlibc
14541         case "$d_dbm_open" in
14542         $undef)
14543                 t_ndbm="$undef"
14544                 echo "We won't be including <ndbm.h>"
14545                 ;;
14546         esac
14547         ;;
14548 esac
14549 val="$t_ndbm"
14550 set i_ndbm
14551 eval $setvar
14552
14553 : see if net/errno.h is available
14554 val=''
14555 set net/errno.h val
14556 eval $inhdr
14557
14558 : Unfortunately, it causes problems on some systems.  Arrgh.
14559 case "$val" in
14560 $define)
14561         cat > try.c <<'EOM'
14562 #include <stdio.h>
14563 #include <errno.h>
14564 #include <net/errno.h>
14565 int func()
14566 {
14567         return ENOTSOCK;
14568 }
14569 EOM
14570         if $cc $ccflags -c try.c >/dev/null 2>&1; then
14571                 echo "We'll be including <net/errno.h>." >&4
14572         else
14573                 echo "We won't be including <net/errno.h>." >&4
14574                 val="$undef"
14575         fi
14576         $rm -f try.* try
14577         ;;
14578 esac
14579 set i_neterrno
14580 eval $setvar
14581
14582 : see if netinet/tcp.h is available
14583 set netinet/tcp.h i_netinettcp
14584 eval $inhdr
14585
14586 : see if this is a poll.h system
14587 set poll.h i_poll
14588 eval $inhdr
14589
14590 : see if this is a prot.h system
14591 set prot.h i_prot
14592 eval $inhdr
14593
14594 echo " "
14595 $echo "Guessing which symbols your C compiler and preprocessor define..." >&4 
14596 $cat <<'EOSH' > Cppsym.know
14597 a29k ABI64 aegis AES_SOURCE AIX AIX32 AIX370
14598 AIX41 AIX42 AIX43 AIX_SOURCE aixpc ALL_SOURCE
14599 alliant alpha am29000 AM29000 amiga AMIGAOS AMIX
14600 ansi ANSI_C_SOURCE apollo ardent atarist att386 att3b BeOS
14601 BIG_ENDIAN BIT_MSF bsd BSD bsd43 bsd4_2 bsd4_3 BSD4_3 bsd4_4
14602 BSD_4_3 BSD_4_4 BSD_NET2 BSD_TIME BSD_TYPES BSDCOMPAT bsdi
14603 bull c cadmus clipper CMU COFF COMPILER_VERSION
14604 concurrent convex cpu cray CRAY CRAYMPP ctix CX_UX
14605 CYGWIN DGUX DGUX_SOURCE DJGPP dmert DOLPHIN DPX2 DSO
14606 Dynix DynixPTX ELF encore EPI EXTENSIONS FILE_OFFSET_BITS
14607 FreeBSD GCC_NEW_VARARGS gcos gcx gimpel
14608 GNU_SOURCE GNUC GNUC_MINOR GO32 gould GOULD_PN
14609 H3050R H3050RX hbullx20 hcx host_mips
14610 hp200 hp300 hp700 HP700 hp800 hp9000
14611 hp9000s200 hp9000s300 hp9000s400 hp9000s500
14612 hp9000s700 hp9000s800 hp9k8 hp_osf hppa hpux HPUX_SOURCE
14613 i186 i286 i386 i486 i586 i686 i8086 i80960 i860 I960
14614 iAPX286 ibm ibm032 ibmesa IBMR2 ibmrt ILP32 ILP64
14615 INLINE_INTRINSICS INTRINSICS INT64 interdata is68k ksr1
14616 LANGUAGE_C LARGE_FILE_API LARGEFILE64_SOURCE
14617 LARGEFILE_SOURCE LFS64_LARGEFILE LFS_LARGEFILE
14618 Linux LITTLE_ENDIAN LONG64 LONG_DOUBLE LONG_LONG
14619 LONGDOUBLE LONGLONG LP64 luna luna88k Lynx
14620 M68000 m68k m88100 m88k M88KBCS_TARGET M_COFF
14621 M_I186 M_I286 M_I386 M_I8086 M_I86 M_I86SM M_SYS3
14622 M_SYS5 M_SYSIII M_SYSV M_UNIX M_XENIX MACH machine MachTen
14623 MATH_HAS_NO_SIDE_EFFECTS
14624 mc300 mc500 mc68000 mc68010 mc68020 mc68030 mc68040
14625 mc68060 mc68k mc68k32 mc700 mc88000 mc88100 merlin
14626 mert MiNT mips MIPS_FPSET MIPS_ISA MIPS_SIM MIPS_SZINT
14627 MIPS_SZLONG MIPS_SZPTR MIPSEB MIPSEL MODERN_C motorola
14628 mpeix MSDOS MTXINU MULTIMAX mvs MVS n16 ncl_el ncl_mr
14629 NetBSD news1500 news1700 news1800 news1900 news3700
14630 news700 news800 news900 NeXT NLS ns16000 ns32000
14631 ns32016 ns32332 ns32k nsc32000
14632 OCS88 OEMVS OpenBSD os OS2 OS390 osf OSF1 OSF_SOURCE
14633 pa_risc PA_RISC1_1 PA_RISC2_0 PARAGON parisc
14634 pc532 pdp11 PGC PIC plexus PORTAR posix
14635 POSIX1B_SOURCE POSIX2_SOURCE POSIX4_SOURCE
14636 POSIX_C_SOURCE POSIX_SOURCE POWER
14637 PROTOTYPES PWB pyr QNX R3000 REENTRANT RES Rhapsody RISC6000
14638 riscix riscos RT scs SCO sequent sgi SGI_SOURCE sinix
14639 SIZE_INT SIZE_LONG SIZE_PTR SOCKET_SOURCE SOCKETS_SOURCE
14640 sony sony_news sonyrisc sparc sparclite spectrum
14641 stardent stdc STDC_EXT stratos sun sun3 sun386
14642 Sun386i svr3 svr4 SVR4_2 SVR4_SOURCE svr5
14643 SX system SYSTYPE_BSD SYSTYPE_BSD43 SYSTYPE_BSD44
14644 SYSTYPE_SVR4 SYSTYPE_SVR5 SYSTYPE_SYSV SYSV SYSV3 SYSV4 SYSV5
14645 sysV68 sysV88 Tek4132 Tek4300 titan
14646 tower tower32 tower32_200 tower32_600 tower32_700
14647 tower32_800 tower32_850 tss
14648 u370 u3b u3b2 u3b20 u3b200 u3b20d u3b5
14649 ultrix UMAXV UnicomPBB UnicomPBD UNICOS UNICOSMK
14650 unix UNIX95 UNIX99 unixpc unos USGr4 USGr4_2
14651 Utek UTek UTS UWIN uxpm uxps vax venix VMESA vms xenix Xenix286
14652 XOPEN_SOURCE XOPEN_SOURCE_EXTENDED XPG2 XPG2_EXTENDED
14653 XPG3 XPG3_EXTENDED XPG4 XPG4_EXTENDED
14654 z8000
14655 EOSH
14656 # Maybe put other stuff here too.
14657 cat <<EOSH >>Cppsym.know
14658 $osname
14659 EOSH
14660 ./tr '[a-z]' '[A-Z]' < Cppsym.know > Cppsym.a
14661 ./tr '[A-Z]' '[a-z]' < Cppsym.know > Cppsym.b
14662 $cat Cppsym.know > Cppsym.c
14663 $cat Cppsym.a Cppsym.b Cppsym.c | $tr ' ' $trnl | sort | uniq > Cppsym.know
14664 $rm -f Cppsym.a Cppsym.b Cppsym.c
14665 cat <<EOSH > Cppsym
14666 $startsh
14667 if $test \$# -gt 0; then
14668     echo \$* | $tr " " "$trnl" | ./Cppsym.try > Cppsym.got
14669     if $test -s Cppsym.got; then
14670         $rm -f Cppsym.got
14671         exit 0
14672     fi
14673     $rm -f Cppsym.got
14674     exit 1
14675 else
14676     $tr " " "$trnl" | ./Cppsym.try
14677     exit 0
14678 fi
14679 EOSH
14680 chmod +x Cppsym
14681 $eunicefix Cppsym
14682 cat <<EOSH > Cppsym.try
14683 $startsh
14684 cat <<'EOCP' > try.c
14685 #include <stdio.h>
14686 int main() {
14687 EOCP
14688 $awk \\
14689 EOSH
14690 cat <<'EOSH' >> Cppsym.try
14691 'length($1) > 0 {
14692     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
14693     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
14694     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
14695     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
14696 }'       >> try.c
14697 echo '}' >> try.c
14698 EOSH
14699 cat <<EOSH >> Cppsym.try
14700 ccflags="$ccflags"
14701 case "$osname-$gccversion" in
14702 irix-) ccflags="\$ccflags -woff 1178" ;;
14703 os2-*) ccflags="\$ccflags -Zlinker /PM:VIO" ;;
14704 esac
14705 $cc $optimize \$ccflags $ldflags -o try try.c $libs && ./try$exe_ext
14706 EOSH
14707 chmod +x Cppsym.try
14708 $eunicefix Cppsym.try
14709 ./Cppsym < Cppsym.know > Cppsym.true
14710 : now check the C compiler for additional symbols
14711 postprocess_cc_v=''
14712 case "$osname" in
14713 aix) postprocess_cc_v="|$tr , ' '" ;;
14714 esac
14715 $cat >ccsym <<EOS
14716 $startsh
14717 $cat >tmp.c <<EOF
14718 extern int foo;
14719 EOF
14720 for i in \`$cc -v -c tmp.c 2>&1 $postprocess_cc_v\`
14721 do
14722         case "\$i" in
14723         -D*) echo "\$i" | $sed 's/^-D//';;
14724         -A*) $test "$gccversion" && echo "\$i" | $sed 's/^-A\(.*\)(\(.*\))/\1=\2/';;
14725         esac
14726 done
14727 $rm -f try.c
14728 EOS
14729 postprocess_cc_v=''
14730 chmod +x ccsym
14731 $eunicefix ccsym
14732 ./ccsym > ccsym1.raw
14733 if $test -s ccsym1.raw; then
14734        $sort ccsym1.raw | $uniq >ccsym.raw
14735 else
14736        mv ccsym1.raw ccsym.raw
14737 fi
14738
14739 $awk '/\=/ { print $0; next }
14740         { print $0"=1" }' ccsym.raw >ccsym.list
14741 $awk '/\=/ { print $0; next }
14742         { print $0"=1" }' Cppsym.true >ccsym.true
14743 $comm -13 ccsym.true ccsym.list >ccsym.own
14744 $comm -12 ccsym.true ccsym.list >ccsym.com
14745 $comm -23 ccsym.true ccsym.list >ccsym.cpp
14746 also=''
14747 if $test -z ccsym.raw; then
14748         echo "Your C compiler doesn't seem to define any symbols!" >&4
14749         echo " "
14750         echo "However, your C preprocessor defines the following symbols:"
14751         $cat Cppsym.true
14752         ccsymbols=''
14753         cppsymbols=`$cat Cppsym.true`
14754         cppsymbols=`echo $cppsymbols`
14755         cppccsymbols="$cppsymbols"
14756 else
14757         if $test -s ccsym.com; then
14758                 echo "Your C compiler and pre-processor define these symbols:"
14759                 $sed -e 's/\(..*\)=.*/\1/' ccsym.com
14760                 also='also '
14761                 symbols='ones'
14762                 cppccsymbols=`$cat ccsym.com`
14763                 cppccsymbols=`echo $cppccsymbols`
14764                 $test "$silent" || sleep 1
14765         fi
14766         if $test -s ccsym.cpp; then
14767                 $test "$also" && echo " "
14768                 echo "Your C pre-processor ${also}defines the following symbols:"
14769                 $sed -e 's/\(..*\)=.*/\1/' ccsym.cpp
14770                 also='further '
14771                 cppsymbols=`$cat ccsym.cpp`
14772                 cppsymbols=`echo $cppsymbols`
14773                 $test "$silent" || sleep 1
14774         fi
14775         if $test -s ccsym.own; then
14776                 $test "$also" && echo " "
14777                 echo "Your C compiler ${also}defines the following cpp symbols:"
14778                 $sed -e 's/\(..*\)=1/\1/' ccsym.own
14779                 $sed -e 's/\(..*\)=.*/\1/' ccsym.own | $uniq >>Cppsym.true
14780                 ccsymbols=`$cat ccsym.own`
14781                 ccsymbols=`echo $ccsymbols`
14782                 $test "$silent" || sleep 1
14783         fi
14784 fi
14785 $rm -f ccsym* Cppsym.*
14786
14787 : see if this is a termio system
14788 val="$undef"
14789 val2="$undef"
14790 val3="$undef"
14791 if $test `./findhdr termios.h`; then
14792         set tcsetattr i_termios
14793         eval $inlibc
14794         val3="$i_termios"
14795 fi
14796 echo " "
14797 case "$val3" in
14798 "$define") echo "You have POSIX termios.h... good!" >&4;;
14799 *) if ./Cppsym pyr; then
14800                 case "`/bin/universe`" in
14801                 ucb) if $test `./findhdr sgtty.h`; then
14802                                 val2="$define"
14803                                 echo "<sgtty.h> found." >&4
14804                         else
14805                                 echo "System is pyramid with BSD universe."
14806                                 echo "<sgtty.h> not found--you could have problems." >&4
14807                         fi;;
14808                 *) if $test `./findhdr termio.h`; then
14809                                 val="$define"
14810                                 echo "<termio.h> found." >&4
14811                         else
14812                                 echo "System is pyramid with USG universe."
14813                                 echo "<termio.h> not found--you could have problems." >&4
14814                         fi;;
14815                 esac
14816         elif ./usg; then
14817                 if $test `./findhdr termio.h`; then
14818                         echo "<termio.h> found." >&4
14819                         val="$define"
14820                 elif $test `./findhdr sgtty.h`; then
14821                         echo "<sgtty.h> found." >&4
14822                         val2="$define"
14823                 else
14824 echo "Neither <termio.h> nor <sgtty.h> found--you could have problems." >&4
14825                 fi
14826         else
14827                 if $test `./findhdr sgtty.h`; then
14828                         echo "<sgtty.h> found." >&4
14829                         val2="$define"
14830                 elif $test `./findhdr termio.h`; then
14831                         echo "<termio.h> found." >&4
14832                         val="$define"
14833                 else
14834 echo "Neither <sgtty.h> nor <termio.h> found--you could have problems." >&4
14835                 fi
14836         fi;;
14837 esac
14838 set i_termio; eval $setvar
14839 val=$val2; set i_sgtty; eval $setvar
14840 val=$val3; set i_termios; eval $setvar
14841
14842 : see if this is a shadow.h system
14843 set shadow.h i_shadow
14844 eval $inhdr
14845
14846 : see if this is a socks.h system
14847 set socks.h i_socks
14848 eval $inhdr
14849
14850 : see if stdarg is available
14851 echo " "
14852 if $test `./findhdr stdarg.h`; then
14853         echo "<stdarg.h> found." >&4
14854         valstd="$define"
14855 else
14856         echo "<stdarg.h> NOT found." >&4
14857         valstd="$undef"
14858 fi
14859
14860 : see if varags is available
14861 echo " "
14862 if $test `./findhdr varargs.h`; then
14863         echo "<varargs.h> found." >&4
14864 else
14865         echo "<varargs.h> NOT found, but that's ok (I hope)." >&4
14866 fi
14867
14868 : set up the varargs testing programs
14869 $cat > varargs.c <<EOP
14870 #ifdef I_STDARG
14871 #include <stdarg.h>
14872 #endif
14873 #ifdef I_VARARGS
14874 #include <varargs.h>
14875 #endif
14876
14877 #ifdef I_STDARG
14878 int f(char *p, ...)
14879 #else
14880 int f(va_alist)
14881 va_dcl
14882 #endif
14883 {
14884         va_list ap;
14885 #ifndef I_STDARG
14886         char *p;
14887 #endif
14888 #ifdef I_STDARG
14889         va_start(ap,p);
14890 #else
14891         va_start(ap);
14892         p = va_arg(ap, char *);
14893 #endif
14894         va_end(ap);
14895 }
14896 EOP
14897 $cat > varargs <<EOP
14898 $startsh
14899 if $cc -c $ccflags -D\$1 varargs.c >/dev/null 2>&1; then
14900         echo "true"
14901 else
14902         echo "false"
14903 fi
14904 $rm -f varargs$_o
14905 EOP
14906 chmod +x varargs
14907
14908 : now check which varargs header should be included
14909 echo " "
14910 i_varhdr=''
14911 case "$valstd" in
14912 "$define")
14913         if `./varargs I_STDARG`; then
14914                 val='stdarg.h'
14915         elif `./varargs I_VARARGS`; then
14916                 val='varargs.h'
14917         fi
14918         ;;
14919 *)
14920         if `./varargs I_VARARGS`; then
14921                 val='varargs.h'
14922         fi
14923         ;;
14924 esac
14925 case "$val" in
14926 '')
14927 echo "I could not find the definition for va_dcl... You have problems..." >&4
14928         val="$undef"; set i_stdarg; eval $setvar
14929         val="$undef"; set i_varargs; eval $setvar
14930         ;;
14931 *) 
14932         set i_varhdr
14933         eval $setvar
14934         case "$i_varhdr" in
14935         stdarg.h)
14936                 val="$define"; set i_stdarg; eval $setvar
14937                 val="$undef"; set i_varargs; eval $setvar
14938                 ;;
14939         varargs.h)
14940                 val="$undef"; set i_stdarg; eval $setvar
14941                 val="$define"; set i_varargs; eval $setvar
14942                 ;;
14943         esac
14944         echo "We'll include <$i_varhdr> to get va_dcl definition." >&4;;
14945 esac
14946 $rm -f varargs*
14947
14948 : see if stddef is available
14949 set stddef.h i_stddef
14950 eval $inhdr
14951
14952 : see if this is a sunmath.h system
14953 set sunmath.h i_sunmath
14954 eval $inhdr
14955
14956 : see if sys/access.h is available
14957 set sys/access.h i_sysaccess
14958 eval $inhdr
14959
14960 : see if ioctl defs are in sgtty, termio, sys/filio or sys/ioctl
14961 set sys/filio.h i_sysfilio
14962 eval $inhdr
14963 echo " "
14964 if $test `./findhdr sys/ioctl.h`; then
14965         val="$define"
14966         echo '<sys/ioctl.h> found.' >&4
14967 else
14968         val="$undef"
14969         if $test $i_sysfilio = "$define"; then
14970             echo '<sys/ioctl.h> NOT found.' >&4
14971         else
14972                 $test $i_sgtty = "$define" && xxx="sgtty.h"
14973                 $test $i_termio = "$define" && xxx="termio.h"
14974                 $test $i_termios = "$define" && xxx="termios.h"
14975 echo "No <sys/ioctl.h> found, assuming ioctl args are defined in <$xxx>." >&4
14976         fi
14977 fi
14978 set i_sysioctl
14979 eval $setvar
14980
14981
14982 : see if this is a syslog.h system
14983 set syslog.h i_syslog
14984 eval $inhdr
14985
14986
14987 : see if this is a sys/mode.h system
14988 set sys/mode.h i_sysmode
14989 eval $inhdr
14990
14991 : see if sys/resource.h has to be included
14992 set sys/resource.h i_sysresrc
14993 eval $inhdr
14994
14995 : see if sys/security.h is available
14996 set sys/security.h i_syssecrt
14997 eval $inhdr
14998
14999 : see if this is a sys/statvfs.h system
15000 set sys/statvfs.h i_sysstatvfs
15001 eval $inhdr
15002
15003 : see if this is a sys/uio.h system
15004 set sys/uio.h i_sysuio
15005 eval $inhdr
15006
15007 : see if this is a sys/un.h system
15008 set sys/un.h i_sysun
15009 eval $inhdr
15010
15011
15012 : see if this is a sys/utsname.h system
15013 set sys/utsname.h i_sysutsname
15014 eval $inhdr
15015
15016 : see if this is a syswait system
15017 set sys/wait.h i_syswait
15018 eval $inhdr
15019
15020 : see if this is a ustat.h system
15021 set ustat.h i_ustat
15022 eval $inhdr
15023
15024 : see if this is an utime system
15025 set utime.h i_utime
15026 eval $inhdr
15027
15028 : see if this is a values.h system
15029 set values.h i_values
15030 eval $inhdr
15031
15032 : see if this is a vfork system
15033 case "$d_vfork" in
15034 "$define")
15035         set vfork.h i_vfork
15036         eval $inhdr
15037         ;;
15038 *)
15039         i_vfork="$undef"
15040         ;;
15041 esac
15042
15043 : see if gdbm.h is available
15044 set gdbm.h t_gdbm
15045 eval $inhdr
15046 case "$t_gdbm" in
15047 $define)
15048         : see if gdbm_open exists
15049         set gdbm_open d_gdbm_open
15050         eval $inlibc
15051         case "$d_gdbm_open" in
15052         $undef)
15053                 t_gdbm="$undef"
15054                 echo "We won't be including <gdbm.h>"
15055                 ;;
15056         esac
15057         ;;
15058 esac
15059 val="$t_gdbm"
15060 set i_gdbm
15061 eval $setvar
15062
15063 echo " "
15064 echo "Looking for extensions..." >&4
15065 : If we are using the old config.sh, known_extensions may contain
15066 : old or inaccurate or duplicate values.
15067 known_extensions=''
15068 nonxs_extensions=''
15069 : We do not use find because it might not be available.
15070 : We do not just use MANIFEST because the user may have dropped
15071 : some additional extensions into the source tree and expect them
15072 : to be built.
15073
15074 : Function to recursively find available extensions, ignoring DynaLoader
15075 : NOTE: recursion limit of 10 to prevent runaway in case of symlink madness
15076 find_extensions='
15077     for xxx in *; do
15078        case "$xxx" in
15079            DynaLoader|dynaload) ;;
15080            *)
15081            if $test -f $xxx/$xxx.xs; then
15082                known_extensions="$known_extensions $1$xxx";
15083            elif $test -f $xxx/Makefile.PL; then
15084                nonxs_extensions="$nonxs_extensions $1$xxx";
15085            else
15086                if $test -d $xxx -a $# -lt 10; then
15087                    set $1$xxx/ $*;
15088                    cd $xxx;
15089                    eval $find_extensions;
15090                    cd ..;
15091                    shift;
15092                fi;
15093            fi
15094            ;;
15095        esac;
15096     done'
15097 tdir=`pwd`
15098 cd $rsrc/ext
15099 set X
15100 shift
15101 eval $find_extensions
15102 set X $nonxs_extensions
15103 shift
15104 nonxs_extensions="$*"
15105 set X $known_extensions
15106 shift
15107 known_extensions="$*"
15108 cd $tdir
15109
15110 : Now see which are supported on this system.
15111 avail_ext=''
15112 for xxx in $known_extensions ; do
15113         case "$xxx" in
15114         DB_File|db_file)
15115                 case "$i_db" in
15116                 $define) avail_ext="$avail_ext $xxx" ;;
15117                 esac
15118                 ;;
15119         GDBM_File|gdbm_fil)
15120                 case "$i_gdbm" in 
15121                 $define) avail_ext="$avail_ext $xxx" ;;
15122                 esac
15123                 ;;
15124         NDBM_File|ndbm_fil)
15125                 case "$i_ndbm" in
15126                 $define)
15127                     case "$osname-$use64bitint" in
15128                     hpux-define)
15129                         case "$libs" in
15130                         *-lndbm*) avail_ext="$avail_ext $xxx" ;;
15131                         esac
15132                         ;;
15133                     *) avail_ext="$avail_ext $xxx" ;;
15134                     esac
15135                     ;;
15136                 esac
15137                 ;;
15138         ODBM_File|odbm_fil) 
15139                 case "${i_dbm}${i_rpcsvcdbm}" in
15140                 *"${define}"*)
15141                     case "$osname-$use64bitint" in
15142                     hpux-define)
15143                         case "$libs" in
15144                         *-ldbm*) avail_ext="$avail_ext $xxx" ;;
15145                         esac
15146                         ;;
15147                     *) avail_ext="$avail_ext $xxx" ;;
15148                     esac
15149                     ;;
15150                 esac
15151                 ;;
15152         POSIX|posix)
15153                 case "$useposix" in
15154                 true|define|y) avail_ext="$avail_ext $xxx" ;;
15155                 esac
15156                 ;;
15157         Opcode|opcode)
15158                 case "$useopcode" in
15159                 true|define|y) avail_ext="$avail_ext $xxx" ;;
15160                 esac
15161                 ;;
15162         Socket|socket)
15163                 case "$d_socket" in 
15164                 true|$define|y) avail_ext="$avail_ext $xxx" ;;
15165                 esac
15166                 ;;
15167         Sys/Syslog|sys/syslog)
15168                 : XXX syslog requires socket
15169                 case "$d_socket" in 
15170                 true|$define|y) avail_ext="$avail_ext $xxx" ;;
15171                 esac
15172                 ;;
15173         Thread|thread)
15174                 case "$usethreads" in 
15175                 true|$define|y) avail_ext="$avail_ext $xxx" ;;
15176                 esac
15177                 ;;
15178         IPC/SysV|ipc/sysv)
15179                 : XXX Do we need a useipcsysv variable here
15180                 case "${d_msg}${d_sem}${d_shm}" in 
15181                 *"${define}"*) avail_ext="$avail_ext $xxx" ;;
15182                 esac
15183                 ;;
15184         *)      avail_ext="$avail_ext $xxx"
15185                 ;;
15186         esac
15187 done
15188
15189 set X $avail_ext
15190 shift
15191 avail_ext="$*"
15192
15193 : Now see which nonxs extensions are supported on this system.
15194 : For now assume all are.
15195 nonxs_ext=''
15196 for xxx in $nonxs_extensions ; do
15197         case "$xxx" in
15198         *)      nonxs_ext="$nonxs_ext $xxx"
15199                 ;;
15200         esac
15201 done
15202
15203 set X $nonxs_ext
15204 shift
15205 nonxs_ext="$*"
15206
15207 case $usedl in
15208 $define)
15209         $cat <<EOM
15210 A number of extensions are supplied with $package.  You may choose to
15211 compile these extensions for dynamic loading (the default), compile
15212 them into the $package executable (static loading), or not include
15213 them at all.  Answer "none" to include no extensions.
15214 Note that DynaLoader is always built and need not be mentioned here.
15215
15216 EOM
15217         case "$dynamic_ext" in
15218         '') dflt="$avail_ext" ;;
15219         *)      dflt="$dynamic_ext"
15220                 # Perhaps we are reusing an old out-of-date config.sh.
15221                 case "$hint" in
15222                 previous)
15223                         if test X"$dynamic_ext" != X"$avail_ext"; then
15224                                 $cat <<EOM
15225 NOTICE:  Your previous config.sh list may be incorrect. 
15226 The extensions now available to you are 
15227         ${avail_ext}
15228 but the default list from your previous config.sh is
15229         ${dynamic_ext} 
15230
15231 EOM
15232                         fi
15233                         ;;
15234                 esac
15235                 ;;
15236         esac
15237         case "$dflt" in
15238         '')     dflt=none;;
15239         esac
15240         rp="What extensions do you wish to load dynamically?"
15241         . ./myread
15242         case "$ans" in
15243         none) dynamic_ext=' ' ;;
15244         *) dynamic_ext="$ans" ;;
15245         esac
15246
15247         case "$static_ext" in
15248         '')
15249                 : Exclude those already listed in dynamic linking
15250                 dflt=''
15251                 for xxx in $avail_ext; do
15252                         case " $dynamic_ext " in
15253                         *" $xxx "*) ;;
15254                         *) dflt="$dflt $xxx" ;;
15255                         esac
15256                 done
15257                 set X $dflt
15258                 shift
15259                 dflt="$*"
15260                 ;;
15261         *)  dflt="$static_ext" 
15262                 ;;
15263         esac
15264
15265         case "$dflt" in
15266         '')     dflt=none;;
15267         esac
15268         rp="What extensions do you wish to load statically?"
15269         . ./myread
15270         case "$ans" in
15271         none) static_ext=' ' ;;
15272         *) static_ext="$ans" ;;
15273         esac
15274         ;;
15275 *)
15276         $cat <<EOM
15277 A number of extensions are supplied with $package.  Answer "none" 
15278 to include no extensions. 
15279 Note that DynaLoader is always built and need not be mentioned here.
15280
15281 EOM
15282         case "$static_ext" in
15283         '') dflt="$avail_ext" ;;
15284         *)      dflt="$static_ext"
15285                 # Perhaps we are reusing an old out-of-date config.sh.
15286                 case "$hint" in
15287                 previous)
15288                         if test X"$static_ext" != X"$avail_ext"; then
15289                                 $cat <<EOM
15290 NOTICE:  Your previous config.sh list may be incorrect. 
15291 The extensions now available to you are 
15292         ${avail_ext}
15293 but the default list from your previous config.sh is
15294         ${static_ext} 
15295
15296 EOM
15297                         fi
15298                         ;;
15299                 esac
15300                 ;;
15301         esac
15302         : Exclude those that are not xs extensions
15303         case "$dflt" in
15304         '')     dflt=none;;
15305         esac
15306         rp="What extensions do you wish to include?"
15307         . ./myread
15308         case "$ans" in
15309         none) static_ext=' ' ;;
15310         *) static_ext="$ans" ;;
15311         esac
15312         ;;
15313 esac
15314
15315 set X $dynamic_ext $static_ext $nonxs_ext
15316 shift
15317 extensions="$*"
15318
15319 : Remove build directory name from cppstdin so it can be used from
15320 : either the present location or the final installed location.
15321 echo " "
15322 : Get out of the UU directory to get correct path name.
15323 cd ..
15324 case "$cppstdin" in
15325 `pwd`/cppstdin)
15326         echo "Stripping down cppstdin path name"
15327         cppstdin=cppstdin
15328         ;;
15329 esac
15330 cd UU
15331
15332 : end of configuration questions
15333 echo " "
15334 echo "End of configuration questions."
15335 echo " "
15336
15337 : back to where it started
15338 if test -d ../UU; then
15339         cd ..
15340 fi
15341
15342 : configuration may be patched via a 'config.over' file
15343 if $test -f config.over; then
15344         echo " "
15345         dflt=y
15346         rp='I see a config.over file.  Do you wish to load it?'
15347         . UU/myread
15348         case "$ans" in
15349         n*) echo "OK, I'll ignore it.";;
15350         *)      . ./config.over
15351                 echo "Configuration override changes have been loaded."
15352                 ;;
15353         esac
15354 fi
15355
15356 : in case they want portability, strip down executable paths
15357 case "$d_portable" in
15358 "$define")
15359         echo " "
15360         echo "Stripping down executable paths..." >&4
15361         for file in $loclist $trylist; do
15362                 eval temp=\$$file
15363                 eval $file=`basename $temp`
15364         done
15365         ;;
15366 esac
15367
15368 : create config.sh file
15369 echo " "
15370 echo "Creating config.sh..." >&4
15371 $spitshell <<EOT >config.sh
15372 $startsh
15373 #
15374 # This file was produced by running the Configure script. It holds all the
15375 # definitions figured out by Configure. Should you modify one of these values,
15376 # do not forget to propagate your changes by running "Configure -der". You may
15377 # instead choose to run each of the .SH files by yourself, or "Configure -S".
15378 #
15379
15380 # Package name      : $package
15381 # Source directory  : $src
15382 # Configuration time: $cf_time
15383 # Configured by     : $cf_by
15384 # Target system     : $myuname
15385
15386 Author='$Author'
15387 Date='$Date'
15388 Header='$Header'
15389 Id='$Id'
15390 Locker='$Locker'
15391 Log='$Log'
15392 Mcc='$Mcc'
15393 RCSfile='$RCSfile'
15394 Revision='$Revision'
15395 Source='$Source'
15396 State='$State'
15397 _a='$_a'
15398 _exe='$_exe'
15399 _o='$_o'
15400 afs='$afs'
15401 alignbytes='$alignbytes'
15402 ansi2knr='$ansi2knr'
15403 aphostname='$aphostname'
15404 api_revision='$api_revision'
15405 api_subversion='$api_subversion'
15406 api_version='$api_version'
15407 api_versionstring='$api_versionstring'
15408 ar='$ar'
15409 archlib='$archlib'
15410 archlibexp='$archlibexp'
15411 archname64='$archname64'
15412 archname='$archname'
15413 archobjs='$archobjs'
15414 awk='$awk'
15415 baserev='$baserev'
15416 bash='$bash'
15417 bin='$bin'
15418 bincompat5005='$bincompat5005'
15419 binexp='$binexp'
15420 bison='$bison'
15421 byacc='$byacc'
15422 byteorder='$byteorder'
15423 c='$c'
15424 castflags='$castflags'
15425 cat='$cat'
15426 cc='$cc'
15427 cccdlflags='$cccdlflags'
15428 ccdlflags='$ccdlflags'
15429 ccflags='$ccflags'
15430 ccflags_uselargefiles='$ccflags_uselargefiles'
15431 ccname='$ccname'
15432 ccsymbols='$ccsymbols'
15433 cf_by='$cf_by'
15434 cf_email='$cf_email'
15435 cf_time='$cf_time'
15436 charsize='$charsize'
15437 chgrp='$chgrp'
15438 chmod='$chmod'
15439 chown='$chown'
15440 clocktype='$clocktype'
15441 comm='$comm'
15442 compress='$compress'
15443 contains='$contains'
15444 cp='$cp'
15445 cpio='$cpio'
15446 cpp='$cpp'
15447 cpp_stuff='$cpp_stuff'
15448 cppccsymbols='$cppccsymbols'
15449 cppflags='$cppflags'
15450 cpplast='$cpplast'
15451 cppminus='$cppminus'
15452 cpprun='$cpprun'
15453 cppstdin='$cppstdin'
15454 cppsymbols='$cppsymbols'
15455 crosscompile='$crosscompile'
15456 cryptlib='$cryptlib'
15457 csh='$csh'
15458 d_Gconvert='$d_Gconvert'
15459 d_PRIEldbl='$d_PRIEldbl'
15460 d_PRIFldbl='$d_PRIFldbl'
15461 d_PRIGldbl='$d_PRIGldbl'
15462 d_PRIX64='$d_PRIX64'
15463 d_PRId64='$d_PRId64'
15464 d_PRIeldbl='$d_PRIeldbl'
15465 d_PRIfldbl='$d_PRIfldbl'
15466 d_PRIgldbl='$d_PRIgldbl'
15467 d_PRIi64='$d_PRIi64'
15468 d_PRIo64='$d_PRIo64'
15469 d_PRIu64='$d_PRIu64'
15470 d_PRIx64='$d_PRIx64'
15471 d_SCNfldbl='$d_SCNfldbl'
15472 d_access='$d_access'
15473 d_accessx='$d_accessx'
15474 d_alarm='$d_alarm'
15475 d_archlib='$d_archlib'
15476 d_atolf='$d_atolf'
15477 d_atoll='$d_atoll'
15478 d_attribut='$d_attribut'
15479 d_bcmp='$d_bcmp'
15480 d_bcopy='$d_bcopy'
15481 d_bincompat5005='$d_bincompat5005'
15482 d_bsd='$d_bsd'
15483 d_bsdgetpgrp='$d_bsdgetpgrp'
15484 d_bsdsetpgrp='$d_bsdsetpgrp'
15485 d_bzero='$d_bzero'
15486 d_casti32='$d_casti32'
15487 d_castneg='$d_castneg'
15488 d_charvspr='$d_charvspr'
15489 d_chown='$d_chown'
15490 d_chroot='$d_chroot'
15491 d_chsize='$d_chsize'
15492 d_closedir='$d_closedir'
15493 d_const='$d_const'
15494 d_crypt='$d_crypt'
15495 d_csh='$d_csh'
15496 d_cuserid='$d_cuserid'
15497 d_dbl_dig='$d_dbl_dig'
15498 d_difftime='$d_difftime'
15499 d_dirnamlen='$d_dirnamlen'
15500 d_dlerror='$d_dlerror'
15501 d_dlopen='$d_dlopen'
15502 d_dlsymun='$d_dlsymun'
15503 d_dosuid='$d_dosuid'
15504 d_drand48proto='$d_drand48proto'
15505 d_dup2='$d_dup2'
15506 d_eaccess='$d_eaccess'
15507 d_endgrent='$d_endgrent'
15508 d_endhent='$d_endhent'
15509 d_endnent='$d_endnent'
15510 d_endpent='$d_endpent'
15511 d_endpwent='$d_endpwent'
15512 d_endsent='$d_endsent'
15513 d_eofnblk='$d_eofnblk'
15514 d_eunice='$d_eunice'
15515 d_fchmod='$d_fchmod'
15516 d_fchown='$d_fchown'
15517 d_fcntl='$d_fcntl'
15518 d_fd_macros='$d_fd_macros'
15519 d_fd_set='$d_fd_set'
15520 d_fds_bits='$d_fds_bits'
15521 d_fgetpos='$d_fgetpos'
15522 d_flexfnam='$d_flexfnam'
15523 d_flock='$d_flock'
15524 d_fork='$d_fork'
15525 d_fpathconf='$d_fpathconf'
15526 d_fpos64_t='$d_fpos64_t'
15527 d_frexpl='$d_frexpl'
15528 d_fs_data_s='$d_fs_data_s'
15529 d_fseeko='$d_fseeko'
15530 d_fsetpos='$d_fsetpos'
15531 d_fstatfs='$d_fstatfs'
15532 d_fstatvfs='$d_fstatvfs'
15533 d_ftello='$d_ftello'
15534 d_ftime='$d_ftime'
15535 d_getcwd='$d_getcwd'
15536 d_getespwnam='$d_getespwnam'
15537 d_getfsstat='$d_getfsstat'
15538 d_getgrent='$d_getgrent'
15539 d_getgrps='$d_getgrps'
15540 d_gethbyaddr='$d_gethbyaddr'
15541 d_gethbyname='$d_gethbyname'
15542 d_gethent='$d_gethent'
15543 d_gethname='$d_gethname'
15544 d_gethostprotos='$d_gethostprotos'
15545 d_getlogin='$d_getlogin'
15546 d_getmnt='$d_getmnt'
15547 d_getmntent='$d_getmntent'
15548 d_getnbyaddr='$d_getnbyaddr'
15549 d_getnbyname='$d_getnbyname'
15550 d_getnent='$d_getnent'
15551 d_getnetprotos='$d_getnetprotos'
15552 d_getpbyname='$d_getpbyname'
15553 d_getpbynumber='$d_getpbynumber'
15554 d_getpent='$d_getpent'
15555 d_getpgid='$d_getpgid'
15556 d_getpgrp2='$d_getpgrp2'
15557 d_getpgrp='$d_getpgrp'
15558 d_getppid='$d_getppid'
15559 d_getprior='$d_getprior'
15560 d_getprotoprotos='$d_getprotoprotos'
15561 d_getprpwnam='$d_getprpwnam'
15562 d_getpwent='$d_getpwent'
15563 d_getsbyname='$d_getsbyname'
15564 d_getsbyport='$d_getsbyport'
15565 d_getsent='$d_getsent'
15566 d_getservprotos='$d_getservprotos'
15567 d_getspnam='$d_getspnam'
15568 d_gettimeod='$d_gettimeod'
15569 d_gnulibc='$d_gnulibc'
15570 d_grpasswd='$d_grpasswd'
15571 d_hasmntopt='$d_hasmntopt'
15572 d_htonl='$d_htonl'
15573 d_iconv='$d_iconv'
15574 d_index='$d_index'
15575 d_inetaton='$d_inetaton'
15576 d_int64_t='$d_int64_t'
15577 d_isascii='$d_isascii'
15578 d_isnan='$d_isnan'
15579 d_isnanl='$d_isnanl'
15580 d_killpg='$d_killpg'
15581 d_lchown='$d_lchown'
15582 d_ldbl_dig='$d_ldbl_dig'
15583 d_link='$d_link'
15584 d_locconv='$d_locconv'
15585 d_lockf='$d_lockf'
15586 d_longdbl='$d_longdbl'
15587 d_longlong='$d_longlong'
15588 d_lseekproto='$d_lseekproto'
15589 d_lstat='$d_lstat'
15590 d_madvise='$d_madvise'
15591 d_mblen='$d_mblen'
15592 d_mbstowcs='$d_mbstowcs'
15593 d_mbtowc='$d_mbtowc'
15594 d_memchr='$d_memchr'
15595 d_memcmp='$d_memcmp'
15596 d_memcpy='$d_memcpy'
15597 d_memmove='$d_memmove'
15598 d_memset='$d_memset'
15599 d_mkdir='$d_mkdir'
15600 d_mkdtemp='$d_mkdtemp'
15601 d_mkfifo='$d_mkfifo'
15602 d_mkstemp='$d_mkstemp'
15603 d_mkstemps='$d_mkstemps'
15604 d_mktime='$d_mktime'
15605 d_mmap='$d_mmap'
15606 d_modfl='$d_modfl'
15607 d_mprotect='$d_mprotect'
15608 d_msg='$d_msg'
15609 d_msg_ctrunc='$d_msg_ctrunc'
15610 d_msg_dontroute='$d_msg_dontroute'
15611 d_msg_oob='$d_msg_oob'
15612 d_msg_peek='$d_msg_peek'
15613 d_msg_proxy='$d_msg_proxy'
15614 d_msgctl='$d_msgctl'
15615 d_msgget='$d_msgget'
15616 d_msgrcv='$d_msgrcv'
15617 d_msgsnd='$d_msgsnd'
15618 d_msync='$d_msync'
15619 d_munmap='$d_munmap'
15620 d_mymalloc='$d_mymalloc'
15621 d_nice='$d_nice'
15622 d_nv_preserves_uv='$d_nv_preserves_uv'
15623 d_nv_preserves_uv_bits='$d_nv_preserves_uv_bits'
15624 d_off64_t='$d_off64_t'
15625 d_old_pthread_create_joinable='$d_old_pthread_create_joinable'
15626 d_oldpthreads='$d_oldpthreads'
15627 d_oldsock='$d_oldsock'
15628 d_open3='$d_open3'
15629 d_pathconf='$d_pathconf'
15630 d_pause='$d_pause'
15631 d_perl_otherlibdirs='$d_perl_otherlibdirs'
15632 d_phostname='$d_phostname'
15633 d_pipe='$d_pipe'
15634 d_poll='$d_poll'
15635 d_portable='$d_portable'
15636 d_pthread_yield='$d_pthread_yield'
15637 d_pwage='$d_pwage'
15638 d_pwchange='$d_pwchange'
15639 d_pwclass='$d_pwclass'
15640 d_pwcomment='$d_pwcomment'
15641 d_pwexpire='$d_pwexpire'
15642 d_pwgecos='$d_pwgecos'
15643 d_pwpasswd='$d_pwpasswd'
15644 d_pwquota='$d_pwquota'
15645 d_qgcvt='$d_qgcvt'
15646 d_quad='$d_quad'
15647 d_readdir='$d_readdir'
15648 d_readlink='$d_readlink'
15649 d_rename='$d_rename'
15650 d_rewinddir='$d_rewinddir'
15651 d_rmdir='$d_rmdir'
15652 d_safebcpy='$d_safebcpy'
15653 d_safemcpy='$d_safemcpy'
15654 d_sanemcmp='$d_sanemcmp'
15655 d_sched_yield='$d_sched_yield'
15656 d_scm_rights='$d_scm_rights'
15657 d_seekdir='$d_seekdir'
15658 d_select='$d_select'
15659 d_sem='$d_sem'
15660 d_semctl='$d_semctl'
15661 d_semctl_semid_ds='$d_semctl_semid_ds'
15662 d_semctl_semun='$d_semctl_semun'
15663 d_semget='$d_semget'
15664 d_semop='$d_semop'
15665 d_setegid='$d_setegid'
15666 d_seteuid='$d_seteuid'
15667 d_setgrent='$d_setgrent'
15668 d_setgrps='$d_setgrps'
15669 d_sethent='$d_sethent'
15670 d_setlinebuf='$d_setlinebuf'
15671 d_setlocale='$d_setlocale'
15672 d_setnent='$d_setnent'
15673 d_setpent='$d_setpent'
15674 d_setpgid='$d_setpgid'
15675 d_setpgrp2='$d_setpgrp2'
15676 d_setpgrp='$d_setpgrp'
15677 d_setprior='$d_setprior'
15678 d_setproctitle='$d_setproctitle'
15679 d_setpwent='$d_setpwent'
15680 d_setregid='$d_setregid'
15681 d_setresgid='$d_setresgid'
15682 d_setresuid='$d_setresuid'
15683 d_setreuid='$d_setreuid'
15684 d_setrgid='$d_setrgid'
15685 d_setruid='$d_setruid'
15686 d_setsent='$d_setsent'
15687 d_setsid='$d_setsid'
15688 d_setvbuf='$d_setvbuf'
15689 d_sfio='$d_sfio'
15690 d_shm='$d_shm'
15691 d_shmat='$d_shmat'
15692 d_shmatprototype='$d_shmatprototype'
15693 d_shmctl='$d_shmctl'
15694 d_shmdt='$d_shmdt'
15695 d_shmget='$d_shmget'
15696 d_sigaction='$d_sigaction'
15697 d_sigsetjmp='$d_sigsetjmp'
15698 d_socket='$d_socket'
15699 d_socklen_t='$d_socklen_t'
15700 d_sockpair='$d_sockpair'
15701 d_socks5_init='$d_socks5_init'
15702 d_sqrtl='$d_sqrtl'
15703 d_statblks='$d_statblks'
15704 d_statfs_f_flags='$d_statfs_f_flags'
15705 d_statfs_s='$d_statfs_s'
15706 d_statvfs='$d_statvfs'
15707 d_stdio_cnt_lval='$d_stdio_cnt_lval'
15708 d_stdio_ptr_lval='$d_stdio_ptr_lval'
15709 d_stdio_stream_array='$d_stdio_stream_array'
15710 d_stdiobase='$d_stdiobase'
15711 d_stdstdio='$d_stdstdio'
15712 d_strchr='$d_strchr'
15713 d_strcoll='$d_strcoll'
15714 d_strctcpy='$d_strctcpy'
15715 d_strerrm='$d_strerrm'
15716 d_strerror='$d_strerror'
15717 d_strtod='$d_strtod'
15718 d_strtol='$d_strtol'
15719 d_strtold='$d_strtold'
15720 d_strtoll='$d_strtoll'
15721 d_strtoul='$d_strtoul'
15722 d_strtoull='$d_strtoull'
15723 d_strtouq='$d_strtouq'
15724 d_strxfrm='$d_strxfrm'
15725 d_suidsafe='$d_suidsafe'
15726 d_symlink='$d_symlink'
15727 d_syscall='$d_syscall'
15728 d_sysconf='$d_sysconf'
15729 d_sysernlst='$d_sysernlst'
15730 d_syserrlst='$d_syserrlst'
15731 d_system='$d_system'
15732 d_tcgetpgrp='$d_tcgetpgrp'
15733 d_tcsetpgrp='$d_tcsetpgrp'
15734 d_telldir='$d_telldir'
15735 d_telldirproto='$d_telldirproto'
15736 d_time='$d_time'
15737 d_times='$d_times'
15738 d_truncate='$d_truncate'
15739 d_tzname='$d_tzname'
15740 d_umask='$d_umask'
15741 d_uname='$d_uname'
15742 d_union_semun='$d_union_semun'
15743 d_ustat='$d_ustat'
15744 d_vendorarch='$d_vendorarch'
15745 d_vendorbin='$d_vendorbin'
15746 d_vendorlib='$d_vendorlib'
15747 d_vfork='$d_vfork'
15748 d_void_closedir='$d_void_closedir'
15749 d_voidsig='$d_voidsig'
15750 d_voidtty='$d_voidtty'
15751 d_volatile='$d_volatile'
15752 d_vprintf='$d_vprintf'
15753 d_wait4='$d_wait4'
15754 d_waitpid='$d_waitpid'
15755 d_wcstombs='$d_wcstombs'
15756 d_wctomb='$d_wctomb'
15757 d_xenix='$d_xenix'
15758 date='$date'
15759 db_hashtype='$db_hashtype'
15760 db_prefixtype='$db_prefixtype'
15761 defvoidused='$defvoidused'
15762 direntrytype='$direntrytype'
15763 dlext='$dlext'
15764 dlsrc='$dlsrc'
15765 doublesize='$doublesize'
15766 drand01='$drand01'
15767 dynamic_ext='$dynamic_ext'
15768 eagain='$eagain'
15769 ebcdic='$ebcdic'
15770 echo='$echo'
15771 egrep='$egrep'
15772 emacs='$emacs'
15773 eunicefix='$eunicefix'
15774 exe_ext='$exe_ext'
15775 expr='$expr'
15776 extensions='$extensions'
15777 fflushNULL='$fflushNULL'
15778 fflushall='$fflushall'
15779 find='$find'
15780 firstmakefile='$firstmakefile'
15781 flex='$flex'
15782 fpossize='$fpossize'
15783 fpostype='$fpostype'
15784 freetype='$freetype'
15785 full_ar='$full_ar'
15786 full_csh='$full_csh'
15787 full_sed='$full_sed'
15788 gccosandvers='$gccosandvers'
15789 gccversion='$gccversion'
15790 gidformat='$gidformat'
15791 gidsign='$gidsign'
15792 gidsize='$gidsize'
15793 gidtype='$gidtype'
15794 glibpth='$glibpth'
15795 grep='$grep'
15796 groupcat='$groupcat'
15797 groupstype='$groupstype'
15798 gzip='$gzip'
15799 h_fcntl='$h_fcntl'
15800 h_sysfile='$h_sysfile'
15801 hint='$hint'
15802 hostcat='$hostcat'
15803 huge='$huge'
15804 i16size='$i16size'
15805 i16type='$i16type'
15806 i32size='$i32size'
15807 i32type='$i32type'
15808 i64size='$i64size'
15809 i64type='$i64type'
15810 i8size='$i8size'
15811 i8type='$i8type'
15812 i_arpainet='$i_arpainet'
15813 i_bsdioctl='$i_bsdioctl'
15814 i_db='$i_db'
15815 i_dbm='$i_dbm'
15816 i_dirent='$i_dirent'
15817 i_dld='$i_dld'
15818 i_dlfcn='$i_dlfcn'
15819 i_fcntl='$i_fcntl'
15820 i_float='$i_float'
15821 i_gdbm='$i_gdbm'
15822 i_grp='$i_grp'
15823 i_iconv='$i_iconv'
15824 i_ieeefp='$i_ieeefp'
15825 i_inttypes='$i_inttypes'
15826 i_libutil='$i_libutil'
15827 i_limits='$i_limits'
15828 i_locale='$i_locale'
15829 i_machcthr='$i_machcthr'
15830 i_malloc='$i_malloc'
15831 i_math='$i_math'
15832 i_memory='$i_memory'
15833 i_mntent='$i_mntent'
15834 i_ndbm='$i_ndbm'
15835 i_netdb='$i_netdb'
15836 i_neterrno='$i_neterrno'
15837 i_netinettcp='$i_netinettcp'
15838 i_niin='$i_niin'
15839 i_poll='$i_poll'
15840 i_prot='$i_prot'
15841 i_pthread='$i_pthread'
15842 i_pwd='$i_pwd'
15843 i_rpcsvcdbm='$i_rpcsvcdbm'
15844 i_sfio='$i_sfio'
15845 i_sgtty='$i_sgtty'
15846 i_shadow='$i_shadow'
15847 i_socks='$i_socks'
15848 i_stdarg='$i_stdarg'
15849 i_stddef='$i_stddef'
15850 i_stdlib='$i_stdlib'
15851 i_string='$i_string'
15852 i_sunmath='$i_sunmath'
15853 i_sysaccess='$i_sysaccess'
15854 i_sysdir='$i_sysdir'
15855 i_sysfile='$i_sysfile'
15856 i_sysfilio='$i_sysfilio'
15857 i_sysin='$i_sysin'
15858 i_sysioctl='$i_sysioctl'
15859 i_syslog='$i_syslog'
15860 i_sysmman='$i_sysmman'
15861 i_sysmode='$i_sysmode'
15862 i_sysmount='$i_sysmount'
15863 i_sysndir='$i_sysndir'
15864 i_sysparam='$i_sysparam'
15865 i_sysresrc='$i_sysresrc'
15866 i_syssecrt='$i_syssecrt'
15867 i_sysselct='$i_sysselct'
15868 i_syssockio='$i_syssockio'
15869 i_sysstat='$i_sysstat'
15870 i_sysstatfs='$i_sysstatfs'
15871 i_sysstatvfs='$i_sysstatvfs'
15872 i_systime='$i_systime'
15873 i_systimek='$i_systimek'
15874 i_systimes='$i_systimes'
15875 i_systypes='$i_systypes'
15876 i_sysuio='$i_sysuio'
15877 i_sysun='$i_sysun'
15878 i_sysutsname='$i_sysutsname'
15879 i_sysvfs='$i_sysvfs'
15880 i_syswait='$i_syswait'
15881 i_termio='$i_termio'
15882 i_termios='$i_termios'
15883 i_time='$i_time'
15884 i_unistd='$i_unistd'
15885 i_ustat='$i_ustat'
15886 i_utime='$i_utime'
15887 i_values='$i_values'
15888 i_varargs='$i_varargs'
15889 i_varhdr='$i_varhdr'
15890 i_vfork='$i_vfork'
15891 ignore_versioned_solibs='$ignore_versioned_solibs'
15892 inc_version_list='$inc_version_list'
15893 inc_version_list_init='$inc_version_list_init'
15894 incpath='$incpath'
15895 inews='$inews'
15896 installarchlib='$installarchlib'
15897 installbin='$installbin'
15898 installman1dir='$installman1dir'
15899 installman3dir='$installman3dir'
15900 installprefix='$installprefix'
15901 installprefixexp='$installprefixexp'
15902 installprivlib='$installprivlib'
15903 installscript='$installscript'
15904 installsitearch='$installsitearch'
15905 installsitebin='$installsitebin'
15906 installsitelib='$installsitelib'
15907 installstyle='$installstyle'
15908 installusrbinperl='$installusrbinperl'
15909 installvendorarch='$installvendorarch'
15910 installvendorbin='$installvendorbin'
15911 installvendorlib='$installvendorlib'
15912 intsize='$intsize'
15913 ivdformat='$ivdformat'
15914 ivsize='$ivsize'
15915 ivtype='$ivtype'
15916 known_extensions='$known_extensions'
15917 ksh='$ksh'
15918 large='$large'
15919 ld='$ld'
15920 lddlflags='$lddlflags'
15921 ldflags='$ldflags'
15922 ldflags_uselargefiles='$ldflags_uselargefiles'
15923 ldlibpthname='$ldlibpthname'
15924 less='$less'
15925 lib_ext='$lib_ext'
15926 libc='$libc'
15927 libperl='$libperl'
15928 libpth='$libpth'
15929 libs='$libs'
15930 libsdirs='$libsdirs'
15931 libsfiles='$libsfiles'
15932 libsfound='$libsfound'
15933 libspath='$libspath'
15934 libswanted='$libswanted'
15935 libswanted_uselargefiles='$libswanted_uselargefiles'
15936 line='$line'
15937 lint='$lint'
15938 lkflags='$lkflags'
15939 ln='$ln'
15940 lns='$lns'
15941 locincpth='$locincpth'
15942 loclibpth='$loclibpth'
15943 longdblsize='$longdblsize'
15944 longlongsize='$longlongsize'
15945 longsize='$longsize'
15946 lp='$lp'
15947 lpr='$lpr'
15948 ls='$ls'
15949 lseeksize='$lseeksize'
15950 lseektype='$lseektype'
15951 mail='$mail'
15952 mailx='$mailx'
15953 make='$make'
15954 make_set_make='$make_set_make'
15955 mallocobj='$mallocobj'
15956 mallocsrc='$mallocsrc'
15957 malloctype='$malloctype'
15958 man1dir='$man1dir'
15959 man1direxp='$man1direxp'
15960 man1ext='$man1ext'
15961 man3dir='$man3dir'
15962 man3direxp='$man3direxp'
15963 man3ext='$man3ext'
15964 medium='$medium'
15965 mips_type='$mips_type'
15966 mkdir='$mkdir'
15967 mmaptype='$mmaptype'
15968 models='$models'
15969 modetype='$modetype'
15970 more='$more'
15971 multiarch='$multiarch'
15972 mv='$mv'
15973 myarchname='$myarchname'
15974 mydomain='$mydomain'
15975 myhostname='$myhostname'
15976 myuname='$myuname'
15977 n='$n'
15978 netdb_hlen_type='$netdb_hlen_type'
15979 netdb_host_type='$netdb_host_type'
15980 netdb_name_type='$netdb_name_type'
15981 netdb_net_type='$netdb_net_type'
15982 nm='$nm'
15983 nm_opt='$nm_opt'
15984 nm_so_opt='$nm_so_opt'
15985 nonxs_ext='$nonxs_ext'
15986 nroff='$nroff'
15987 nvEformat='$nvEformat'
15988 nvFformat='$nvFformat'
15989 nvGformat='$nvGformat'
15990 nveformat='$nveformat'
15991 nvfformat='$nvfformat'
15992 nvgformat='$nvgformat'
15993 nvsize='$nvsize'
15994 nvtype='$nvtype'
15995 o_nonblock='$o_nonblock'
15996 obj_ext='$obj_ext'
15997 old_pthread_create_joinable='$old_pthread_create_joinable'
15998 optimize='$optimize'
15999 orderlib='$orderlib'
16000 osname='$osname'
16001 osvers='$osvers'
16002 otherlibdirs='$otherlibdirs'
16003 package='$package'
16004 pager='$pager'
16005 passcat='$passcat'
16006 patchlevel='$patchlevel'
16007 path_sep='$path_sep'
16008 perl5='$perl5'
16009 perl='$perl'
16010 perladmin='$perladmin'
16011 perlpath='$perlpath'
16012 pg='$pg'
16013 phostname='$phostname'
16014 pidtype='$pidtype'
16015 plibpth='$plibpth'
16016 pm_apiversion='$pm_apiversion'
16017 pmake='$pmake'
16018 pr='$pr'
16019 prefix='$prefix'
16020 prefixexp='$prefixexp'
16021 privlib='$privlib'
16022 privlibexp='$privlibexp'
16023 prototype='$prototype'
16024 ptrsize='$ptrsize'
16025 quadkind='$quadkind'
16026 quadtype='$quadtype'
16027 randbits='$randbits'
16028 randfunc='$randfunc'
16029 randseedtype='$randseedtype'
16030 ranlib='$ranlib'
16031 rd_nodata='$rd_nodata'
16032 revision='$revision'
16033 rm='$rm'
16034 rmail='$rmail'
16035 runnm='$runnm'
16036 sPRIEldbl='$sPRIEldbl'
16037 sPRIFldbl='$sPRIFldbl'
16038 sPRIGldbl='$sPRIGldbl'
16039 sPRIX64='$sPRIX64'
16040 sPRId64='$sPRId64'
16041 sPRIeldbl='$sPRIeldbl'
16042 sPRIfldbl='$sPRIfldbl'
16043 sPRIgldbl='$sPRIgldbl'
16044 sPRIi64='$sPRIi64'
16045 sPRIo64='$sPRIo64'
16046 sPRIu64='$sPRIu64'
16047 sPRIx64='$sPRIx64'
16048 sSCNfldbl='$sSCNfldbl'
16049 sched_yield='$sched_yield'
16050 scriptdir='$scriptdir'
16051 scriptdirexp='$scriptdirexp'
16052 sed='$sed'
16053 seedfunc='$seedfunc'
16054 selectminbits='$selectminbits'
16055 selecttype='$selecttype'
16056 sendmail='$sendmail'
16057 sh='$sh'
16058 shar='$shar'
16059 sharpbang='$sharpbang'
16060 shmattype='$shmattype'
16061 shortsize='$shortsize'
16062 shrpenv='$shrpenv'
16063 shsharp='$shsharp'
16064 sig_count='$sig_count'
16065 sig_name='$sig_name'
16066 sig_name_init='$sig_name_init'
16067 sig_num='$sig_num'
16068 sig_num_init='$sig_num_init'
16069 signal_t='$signal_t'
16070 sitearch='$sitearch'
16071 sitearchexp='$sitearchexp'
16072 sitebin='$sitebin'
16073 sitebinexp='$sitebinexp'
16074 sitelib='$sitelib'
16075 sitelib_stem='$sitelib_stem'
16076 sitelibexp='$sitelibexp'
16077 siteprefix='$siteprefix'
16078 siteprefixexp='$siteprefixexp'
16079 sizesize='$sizesize'
16080 sizetype='$sizetype'
16081 sleep='$sleep'
16082 smail='$smail'
16083 small='$small'
16084 so='$so'
16085 sockethdr='$sockethdr'
16086 socketlib='$socketlib'
16087 socksizetype='$socksizetype'
16088 sort='$sort'
16089 spackage='$spackage'
16090 spitshell='$spitshell'
16091 split='$split'
16092 src='$src'
16093 ssizetype='$ssizetype'
16094 startperl='$startperl'
16095 startsh='$startsh'
16096 static_ext='$static_ext'
16097 stdchar='$stdchar'
16098 stdio_base='$stdio_base'
16099 stdio_bufsiz='$stdio_bufsiz'
16100 stdio_cnt='$stdio_cnt'
16101 stdio_filbuf='$stdio_filbuf'
16102 stdio_ptr='$stdio_ptr'
16103 stdio_stream_array='$stdio_stream_array'
16104 strings='$strings'
16105 submit='$submit'
16106 subversion='$subversion'
16107 sysman='$sysman'
16108 tail='$tail'
16109 tar='$tar'
16110 tbl='$tbl'
16111 tee='$tee'
16112 test='$test'
16113 timeincl='$timeincl'
16114 timetype='$timetype'
16115 touch='$touch'
16116 tr='$tr'
16117 trnl='$trnl'
16118 troff='$troff'
16119 u16size='$u16size'
16120 u16type='$u16type'
16121 u32size='$u32size'
16122 u32type='$u32type'
16123 u64size='$u64size'
16124 u64type='$u64type'
16125 u8size='$u8size'
16126 u8type='$u8type'
16127 uidformat='$uidformat'
16128 uidsign='$uidsign'
16129 uidsize='$uidsize'
16130 uidtype='$uidtype'
16131 uname='$uname'
16132 uniq='$uniq'
16133 uquadtype='$uquadtype'
16134 use5005threads='$use5005threads'
16135 use64bitall='$use64bitall'
16136 use64bitint='$use64bitint'
16137 usedl='$usedl'
16138 useithreads='$useithreads'
16139 uselargefiles='$uselargefiles'
16140 uselongdouble='$uselongdouble'
16141 usemorebits='$usemorebits'
16142 usemultiplicity='$usemultiplicity'
16143 usemymalloc='$usemymalloc'
16144 usenm='$usenm'
16145 useopcode='$useopcode'
16146 useperlio='$useperlio'
16147 useposix='$useposix'
16148 usesfio='$usesfio'
16149 useshrplib='$useshrplib'
16150 usesocks='$usesocks'
16151 usethreads='$usethreads'
16152 usevendorprefix='$usevendorprefix'
16153 usevfork='$usevfork'
16154 usrinc='$usrinc'
16155 uuname='$uuname'
16156 uvXformat='$uvXformat'
16157 uvoformat='$uvoformat'
16158 uvsize='$uvsize'
16159 uvtype='$uvtype'
16160 uvuformat='$uvuformat'
16161 uvxformat='$uvxformat'
16162 vendorarch='$vendorarch'
16163 vendorarchexp='$vendorarchexp'
16164 vendorbin='$vendorbin'
16165 vendorbinexp='$vendorbinexp'
16166 vendorlib='$vendorlib'
16167 vendorlib_stem='$vendorlib_stem'
16168 vendorlibexp='$vendorlibexp'
16169 vendorprefix='$vendorprefix'
16170 vendorprefixexp='$vendorprefixexp'
16171 version='$version'
16172 vi='$vi'
16173 voidflags='$voidflags'
16174 xlibpth='$xlibpth'
16175 xs_apiversion='$xs_apiversion'
16176 zcat='$zcat'
16177 zip='$zip'
16178 EOT
16179
16180 : Add in command line options if available
16181 $test -f UU/cmdline.opt && $cat UU/cmdline.opt >> config.sh
16182
16183 : add special variables
16184 $test -f $src/patchlevel.h && \
16185 awk '/^#define[         ]+PERL_/ {printf "%s=%s\n",$2,$3}' $src/patchlevel.h >>config.sh
16186 echo "CONFIGDOTSH=true" >>config.sh
16187
16188 : propagate old symbols
16189 if $test -f UU/config.sh; then
16190         <UU/config.sh sort | uniq >UU/oldconfig.sh
16191         sed -n 's/^\([a-zA-Z_0-9]*\)=.*/\1/p' config.sh config.sh UU/oldconfig.sh |\
16192         sort | uniq -u >UU/oldsyms
16193         set X `cat UU/oldsyms`
16194         shift
16195         case $# in
16196         0) ;;
16197         *)
16198                 cat <<EOM
16199 Hmm...You had some extra variables I don't know about...I'll try to keep 'em...
16200 EOM
16201                 echo "# Variables propagated from previous config.sh file." >>config.sh
16202                 for sym in `cat UU/oldsyms`; do
16203                         echo "    Propagating $hint variable "'$'"$sym..."
16204                         eval 'tmp="$'"${sym}"'"'
16205                         echo "$tmp" | \
16206                                 sed -e "s/'/'\"'\"'/g" -e "s/^/$sym='/" -e "s/$/'/" >>config.sh
16207                 done
16208                 ;;
16209         esac
16210 fi
16211
16212 : Finish up by extracting the .SH files
16213 case "$alldone" in
16214 exit)
16215         $rm -rf UU
16216         echo "Done."
16217         exit 0
16218         ;;
16219 cont)
16220         ;;
16221 '')
16222         dflt=''
16223         nostick=true
16224         $cat <<EOM
16225
16226 If you'd like to make any changes to the config.sh file before I begin
16227 to configure things, do it as a shell escape now (e.g. !vi config.sh).
16228
16229 EOM
16230         rp="Press return or use a shell escape to edit config.sh:"
16231         . UU/myread
16232         nostick=''
16233         case "$ans" in
16234         '') ;;
16235         *) : in case they cannot read
16236                 sh 1>&4 -c "$ans";;
16237         esac
16238         ;;
16239 esac
16240
16241 : if this fails, just run all the .SH files by hand
16242 . ./config.sh
16243
16244 echo " "
16245 exec 1>&4
16246 . ./UU/extract
16247
16248 if $contains '^depend:' [Mm]akefile >/dev/null 2>&1; then
16249         dflt=y
16250         case "$silent" in
16251         true) ;;
16252         *)
16253                 $cat <<EOM
16254
16255 Now you need to generate make dependencies by running "$make depend".
16256 You might prefer to run it in background: "$make depend > makedepend.out &"
16257 It can take a while, so you might not want to run it right now.
16258
16259 EOM
16260                 ;;
16261         esac
16262         rp="Run $make depend now?"
16263         . UU/myread
16264         case "$ans" in
16265         y*)
16266                 $make depend && echo "Now you must run a $make."
16267                 ;;
16268         *)
16269                 echo "You must run '$make depend' then '$make'."
16270                 ;;
16271         esac
16272 elif test -f [Mm]akefile; then
16273         echo " "
16274         echo "Now you must run a $make."
16275 else
16276         echo "Done."
16277 fi
16278
16279 if $test -f Policy.sh; then
16280     $cat <<EOM
16281
16282 If you compile $package on a different machine or from a different object
16283 directory, copy the Policy.sh file from this object directory to the
16284 new one before you run Configure -- this will help you with most of
16285 the policy defaults.
16286
16287 EOM
16288 fi
16289 if $test -f config.msg; then
16290     echo "Hmm.  I also noted the following information while running:"
16291     echo " "
16292     $cat config.msg >&4
16293     $rm -f config.msg
16294 fi
16295 $rm -f kit*isdone ark*isdone
16296 $rm -rf UU
16297
16298 : End of Configure
16299