This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
several more tweaks to configure.com
[perl5.git] / Configure
1 #! /bin/sh
2 #
3 # If these # comments don't work, trim them. Don't worry about any other
4 # shell scripts, Configure will trim # comments from them for you.
5 #
6 # (If you are trying to port this package to a machine without sh,
7 # I would suggest you have a look at the prototypical config_h.SH file
8 # and edit it to reflect your system. Some packages may include samples
9 # of config.h for certain machines, so you might look for one of those.)
10 #
11 # Yes, you may rip this off to use in other distribution packages. This
12 # script belongs to the public domain and cannot be copyrighted.
13 #
14 # (Note: this Configure script was generated automatically. Rather than
15 # working with this copy of Configure, you may wish to get metaconfig.
16 # The dist-3.0 package (which contains metaconfig) was posted in
17 # comp.sources.misc and is available on CPAN under authors/id/RAM so
18 # you may fetch it yourself from your nearest archive site.)
19 #
20
21 # $Id: Head.U,v 3.0.1.9 1997/02/28 15:02:09 ram Exp $
22 #
23 # Generated on Tue Aug 22 21:15:59 EET DST 2000 [metaconfig 3.0 PL70]
24 # (with additional metaconfig patches by perlbug@perl.com)
25
26 cat >/tmp/c1$$ <<EOF
27 ARGGGHHHH!!!!!
28
29 SCO csh still thinks true is false.  Write to SCO today and tell them that next
30 year Configure ought to "rm /bin/csh" unless they fix their blasted shell. :-)
31
32 (Actually, Configure ought to just patch csh in place.  Hmm.  Hmmmmm.  All
33 we'd have to do is go in and swap the && and || tokens, wherever they are.)
34
35 [End of diatribe. We now return you to your regularly scheduled programming...]
36 EOF
37 cat >/tmp/c2$$ <<EOF
38
39 OOPS!  You naughty creature!  You didn't run Configure with sh!
40 I will attempt to remedy the situation by running sh for you...
41 EOF
42
43 true || cat /tmp/c1$$ /tmp/c2$$
44 true || exec sh $0 $argv:q
45
46 (exit $?0) || cat /tmp/c2$$
47 (exit $?0) || exec sh $0 $argv:q
48 rm -f /tmp/c1$$ /tmp/c2$$
49
50 : compute my invocation name
51 me=$0
52 case "$0" in
53 */*)
54         me=`echo $0 | sed -e 's!.*/\(.*\)!\1!' 2>/dev/null`
55         test "$me" || me=$0
56         ;;
57 esac
58
59 : Proper separator for the PATH environment variable
60 p_=:
61 : On OS/2 this directory should exist if this is not floppy only system :-]
62 if test -d c:/. ; then
63     if test -n "$OS2_SHELL"; then
64                 p_=\;
65                 PATH=`cmd /c "echo %PATH%" | tr '\\\\' / `
66                 OS2_SHELL=`cmd /c "echo %OS2_SHELL%" | tr '\\\\' / | tr '[A-Z]' '[a-z]'`
67         elif test -n "$DJGPP"; then
68                 p_=\;
69         fi
70 fi
71
72 : Proper PATH setting
73 paths='/bin /usr/bin /usr/local/bin /usr/ucb /usr/local /usr/lbin'
74 paths="$paths /opt/bin /opt/local/bin /opt/local /opt/lbin"
75 paths="$paths /usr/5bin /etc /usr/gnu/bin /usr/new /usr/new/bin /usr/nbin"
76 paths="$paths /opt/gnu/bin /opt/new /opt/new/bin /opt/nbin"
77 paths="$paths /sys5.3/bin /sys5.3/usr/bin /bsd4.3/bin /bsd4.3/usr/ucb"
78 paths="$paths /bsd4.3/usr/bin /usr/bsd /bsd43/bin /usr/ccs/bin"
79 paths="$paths /etc /usr/lib /usr/ucblib /lib /usr/ccs/lib"
80 paths="$paths /sbin /usr/sbin /usr/libexec"
81
82 for p in $paths
83 do
84         case "$p_$PATH$p_" in
85         *$p_$p$p_*) ;;
86         *) test -d $p && PATH=$PATH$p_$p ;;
87         esac
88 done
89
90 PATH=.$p_$PATH
91 export PATH
92
93 : shall we be using ksh?
94 inksh=''
95 needksh=''
96 avoidksh=''
97 newsh=/bin/ksh
98 changesh=''
99 if (PATH=.; alias -x) >/dev/null 2>&1; then
100                 inksh=true
101 fi
102 if test -f /hp-ux -a -f /bin/ksh; then
103         needksh='to avoid sh bug in "here document" expansion'
104 fi
105 if test -d /usr/lpp -a -f /usr/bin/bsh -a -f /usr/bin/uname; then
106         if test X`/usr/bin/uname -v` = X4; then
107                 avoidksh="to avoid AIX 4's /bin/sh"
108                 newsh=/usr/bin/bsh
109         fi
110 fi
111 if test -f /osf_boot -a -f /usr/sbin/setld; then
112         if test X`/usr/bin/uname -s` = XOSF1; then
113                 avoidksh="to avoid Digital UNIX' ksh"
114                 newsh=/bin/sh
115                 unset BIN_SH # if this is 'xpg4' sh will start up ksh
116         fi
117 fi
118 case "$inksh/$needksh" in
119 /[a-z]*)
120                 ENV=''
121                 changesh=true
122                 reason="$needksh"
123         ;;
124 esac
125 case "$inksh/$avoidksh" in
126 true/[a-z]*)
127         changesh=true
128         reason="$avoidksh"
129         ;;
130 esac
131 case "$inksh/$needksh-$avoidksh-" in
132 true/--)
133                 cat <<EOM
134 (I see you are using the Korn shell.  Some ksh's blow up on $me,
135 mainly on older exotic systems.  If yours does, try the Bourne shell instead.)
136 EOM
137         ;;
138 esac
139 case "$changesh" in
140 true)
141         echo "(Feeding myself to $newsh $reason.)"
142         case "$0" in
143         Configure|*/Configure) exec $newsh $0 "$@";;
144         *) exec $newsh Configure "$@";;
145         esac
146         ;;
147 esac
148
149 : if needed set CDPATH to a harmless value that is not chatty
150 : avoid bash 2.02 problems with empty CDPATH.
151 case "$CDPATH" in
152 '')     ;;
153 *)      case "$SHELL" in
154         *bash*) CDPATH='.' ;;
155         *)              CDPATH='' ;;
156         esac
157         ;;
158 esac
159 : Configure runs within the UU subdirectory
160 test -d UU || mkdir UU
161 cd UU && rm -f ./*
162
163 ccsymbols=''
164 cppccsymbols=''
165 cppsymbols=''
166 dynamic_ext=''
167 extensions=''
168 known_extensions=''
169 nonxs_ext=''
170 static_ext=''
171 useopcode=''
172 useposix=''
173 d_bsd=''
174 d_eunice=''
175 d_xenix=''
176 eunicefix=''
177 Mcc=''
178 ar=''
179 awk=''
180 bash=''
181 bison=''
182 byacc=''
183 cat=''
184 chgrp=''
185 chmod=''
186 chown=''
187 comm=''
188 compress=''
189 cp=''
190 cpio=''
191 cpp=''
192 csh=''
193 date=''
194 echo=''
195 egrep=''
196 emacs=''
197 expr=''
198 find=''
199 flex=''
200 grep=''
201 gzip=''
202 inews=''
203 ksh=''
204 less=''
205 line=''
206 lint=''
207 ln=''
208 lp=''
209 lpr=''
210 ls=''
211 mail=''
212 mailx=''
213 make=''
214 mkdir=''
215 more=''
216 mv=''
217 nm=''
218 nroff=''
219 perl=''
220 pg=''
221 pmake=''
222 pr=''
223 rm=''
224 rmail=''
225 sed=''
226 sendmail=''
227 shar=''
228 sleep=''
229 smail=''
230 sort=''
231 submit=''
232 tail=''
233 tar=''
234 tbl=''
235 tee=''
236 test=''
237 touch=''
238 tr=''
239 troff=''
240 uname=''
241 uniq=''
242 uuname=''
243 vi=''
244 zcat=''
245 zip=''
246 full_ar=''
247 full_sed=''
248 libswanted=''
249 hint=''
250 myuname=''
251 osname=''
252 osvers=''
253 Author=''
254 Date=''
255 Header=''
256 Id=''
257 Locker=''
258 Log=''
259 RCSfile=''
260 Revision=''
261 Source=''
262 State=''
263 _a=''
264 _exe=''
265 _o=''
266 archobjs=''
267 exe_ext=''
268 firstmakefile=''
269 lib_ext=''
270 obj_ext=''
271 path_sep=''
272 afs=''
273 alignbytes=''
274 ansi2knr=''
275 archlib=''
276 archlibexp=''
277 d_archlib=''
278 installarchlib=''
279 archname=''
280 myarchname=''
281 d_atolf=''
282 d_atoll=''
283 baserev=''
284 bin=''
285 binexp=''
286 installbin=''
287 bincompat5005=''
288 d_bincompat5005=''
289 byteorder=''
290 cc=''
291 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_sqrtl=''
528 d_statblks=''
529 d_statfs_f_flags=''
530 d_statfs_s=''
531 d_fstatvfs=''
532 d_statvfs=''
533 d_stdio_cnt_lval=''
534 d_stdio_ptr_lval=''
535 d_stdiobase=''
536 d_stdstdio=''
537 stdio_base=''
538 stdio_bufsiz=''
539 stdio_cnt=''
540 stdio_filbuf=''
541 stdio_ptr=''
542 d_index=''
543 d_strchr=''
544 d_strcoll=''
545 d_strctcpy=''
546 d_strerrm=''
547 d_strerror=''
548 d_sysernlst=''
549 d_syserrlst=''
550 d_strtod=''
551 d_strtol=''
552 d_strtold=''
553 d_strtoll=''
554 d_strtoul=''
555 d_strtoull=''
556 d_strtouq=''
557 d_strxfrm=''
558 d_symlink=''
559 d_syscall=''
560 d_sysconf=''
561 d_system=''
562 d_tcgetpgrp=''
563 d_tcsetpgrp=''
564 d_telldirproto=''
565 d_time=''
566 timetype=''
567 clocktype=''
568 d_times=''
569 d_truncate=''
570 d_tzname=''
571 d_umask=''
572 d_semctl_semid_ds=''
573 d_semctl_semun=''
574 d_union_semun=''
575 d_ustat=''
576 d_vfork=''
577 usevfork=''
578 d_voidsig=''
579 signal_t=''
580 d_volatile=''
581 d_charvspr=''
582 d_vprintf=''
583 d_wait4=''
584 d_waitpid=''
585 d_wcstombs=''
586 d_wctomb=''
587 dlext=''
588 cccdlflags=''
589 ccdlflags=''
590 dlsrc=''
591 ld=''
592 lddlflags=''
593 usedl=''
594 doublesize=''
595 ebcdic=''
596 fflushNULL=''
597 fflushall=''
598 fpossize=''
599 fpostype=''
600 gccosandvers=''
601 gccversion=''
602 gidformat=''
603 gidsign=''
604 gidsize=''
605 gidtype=''
606 groupstype=''
607 h_fcntl=''
608 h_sysfile=''
609 i_arpainet=''
610 db_hashtype=''
611 db_prefixtype=''
612 i_db=''
613 i_dbm=''
614 i_rpcsvcdbm=''
615 d_dirnamlen=''
616 direntrytype=''
617 i_dirent=''
618 i_dld=''
619 i_dlfcn=''
620 i_fcntl=''
621 i_float=''
622 i_gdbm=''
623 d_grpasswd=''
624 i_grp=''
625 i_iconv=''
626 i_ieeefp=''
627 i_inttypes=''
628 i_libutil=''
629 i_limits=''
630 i_locale=''
631 i_machcthr=''
632 i_malloc=''
633 i_math=''
634 i_memory=''
635 i_mntent=''
636 i_ndbm=''
637 i_netdb=''
638 i_neterrno=''
639 i_netinettcp=''
640 i_niin=''
641 i_sysin=''
642 i_poll=''
643 i_prot=''
644 i_pthread=''
645 d_pwage=''
646 d_pwchange=''
647 d_pwclass=''
648 d_pwcomment=''
649 d_pwexpire=''
650 d_pwgecos=''
651 d_pwpasswd=''
652 d_pwquota=''
653 i_pwd=''
654 i_sfio=''
655 i_shadow=''
656 i_socks=''
657 i_stddef=''
658 i_stdlib=''
659 i_string=''
660 strings=''
661 i_sunmath=''
662 i_sysaccess=''
663 i_sysdir=''
664 i_sysfile=''
665 d_voidtty=''
666 i_bsdioctl=''
667 i_sysfilio=''
668 i_sysioctl=''
669 i_syssockio=''
670 i_syslog=''
671 i_sysmman=''
672 i_sysmode=''
673 i_sysmount=''
674 i_sysndir=''
675 i_sysparam=''
676 i_sysresrc=''
677 i_syssecrt=''
678 i_sysselct=''
679 i_sysstat=''
680 i_sysstatfs=''
681 i_sysstatvfs=''
682 i_systimes=''
683 i_systypes=''
684 i_sysuio=''
685 i_sysun=''
686 i_sysutsname=''
687 i_sysvfs=''
688 i_syswait=''
689 i_sgtty=''
690 i_termio=''
691 i_termios=''
692 i_systime=''
693 i_systimek=''
694 i_time=''
695 timeincl=''
696 i_unistd=''
697 i_ustat=''
698 i_utime=''
699 i_values=''
700 i_stdarg=''
701 i_varargs=''
702 i_varhdr=''
703 i_vfork=''
704 inc_version_list=''
705 inc_version_list_init=''
706 installprefix=''
707 installprefixexp=''
708 installstyle=''
709 installusrbinperl=''
710 intsize=''
711 longsize=''
712 shortsize=''
713 libc=''
714 ldlibpthname=''
715 libperl=''
716 shrpenv=''
717 useshrplib=''
718 glibpth=''
719 libpth=''
720 loclibpth=''
721 plibpth=''
722 xlibpth=''
723 ignore_versioned_solibs=''
724 libs=''
725 libsdirs=''
726 libsfiles=''
727 libsfound=''
728 libspath=''
729 lns=''
730 d_PRIEldbl=''
731 d_PRIFldbl=''
732 d_PRIGldbl=''
733 d_PRIeldbl=''
734 d_PRIfldbl=''
735 d_PRIgldbl=''
736 sPRIEldbl=''
737 sPRIFldbl=''
738 sPRIGldbl=''
739 sPRIeldbl=''
740 sPRIfldbl=''
741 sPRIgldbl=''
742 lseeksize=''
743 lseektype=''
744 make_set_make=''
745 d_mymalloc=''
746 freetype=''
747 mallocobj=''
748 mallocsrc=''
749 malloctype=''
750 usemymalloc=''
751 installman1dir=''
752 man1dir=''
753 man1direxp=''
754 man1ext=''
755 installman3dir=''
756 man3dir=''
757 man3direxp=''
758 man3ext=''
759 huge=''
760 large=''
761 medium=''
762 models=''
763 small=''
764 split=''
765 modetype=''
766 multiarch=''
767 mydomain=''
768 myhostname=''
769 phostname=''
770 c=''
771 n=''
772 d_eofnblk=''
773 eagain=''
774 o_nonblock=''
775 rd_nodata=''
776 netdb_hlen_type=''
777 netdb_host_type=''
778 netdb_name_type=''
779 netdb_net_type=''
780 groupcat=''
781 hostcat=''
782 passcat=''
783 orderlib=''
784 ranlib=''
785 d_perl_otherlibdirs=''
786 otherlibdirs=''
787 package=''
788 spackage=''
789 pager=''
790 api_revision=''
791 api_subversion=''
792 api_version=''
793 api_versionstring=''
794 patchlevel=''
795 revision=''
796 subversion=''
797 version=''
798 perl5=''
799 perladmin=''
800 perlpath=''
801 d_nv_preserves_uv=''
802 d_nv_preserves_uv_bits=''
803 i16size=''
804 i16type=''
805 i32size=''
806 i32type=''
807 i64size=''
808 i64type=''
809 i8size=''
810 i8type=''
811 ivsize=''
812 ivtype=''
813 nvsize=''
814 nvtype=''
815 u16size=''
816 u16type=''
817 u32size=''
818 u32type=''
819 u64size=''
820 u64type=''
821 u8size=''
822 u8type=''
823 uvsize=''
824 uvtype=''
825 ivdformat=''
826 nvEformat=''
827 nvFformat=''
828 nvGformat=''
829 nveformat=''
830 nvfformat=''
831 nvgformat=''
832 uvXformat=''
833 uvoformat=''
834 uvuformat=''
835 uvxformat=''
836 pidtype=''
837 prefix=''
838 prefixexp=''
839 installprivlib=''
840 privlib=''
841 privlibexp=''
842 prototype=''
843 ptrsize=''
844 d_PRIX64=''
845 d_PRId64=''
846 d_PRIi64=''
847 d_PRIo64=''
848 d_PRIu64=''
849 d_PRIx64=''
850 sPRIX64=''
851 sPRId64=''
852 sPRIi64=''
853 sPRIo64=''
854 sPRIu64=''
855 sPRIx64=''
856 d_quad=''
857 quadkind=''
858 quadtype=''
859 uquadtype=''
860 drand01=''
861 randbits=''
862 randfunc=''
863 randseedtype=''
864 seedfunc=''
865 installscript=''
866 scriptdir=''
867 scriptdirexp=''
868 selectminbits=''
869 selecttype=''
870 sh=''
871 sig_count=''
872 sig_name=''
873 sig_name_init=''
874 sig_num=''
875 sig_num_init=''
876 installsitearch=''
877 sitearch=''
878 sitearchexp=''
879 installsitebin=''
880 sitebin=''
881 sitebinexp=''
882 installsitelib=''
883 sitelib=''
884 sitelib_stem=''
885 sitelibexp=''
886 siteprefix=''
887 siteprefixexp=''
888 sizesize=''
889 sizetype=''
890 so=''
891 socksizetype=''
892 sharpbang=''
893 shsharp=''
894 spitshell=''
895 src=''
896 ssizetype=''
897 startperl=''
898 startsh=''
899 stdchar=''
900 d_stdio_stream_array=''
901 stdio_stream_array=''
902 sysman=''
903 trnl=''
904 uidformat=''
905 uidsign=''
906 uidsize=''
907 uidtype=''
908 archname64=''
909 use64bitall=''
910 use64bitint=''
911 ccflags_uselargefiles=''
912 ldflags_uselargefiles=''
913 libswanted_uselargefiles=''
914 uselargefiles=''
915 uselongdouble=''
916 usemorebits=''
917 usemultiplicity=''
918 nm_opt=''
919 nm_so_opt=''
920 runnm=''
921 usenm=''
922 useperlio=''
923 usesocks=''
924 d_oldpthreads=''
925 use5005threads=''
926 useithreads=''
927 usethreads=''
928 incpath=''
929 mips_type=''
930 usrinc=''
931 d_vendorarch=''
932 installvendorarch=''
933 vendorarch=''
934 vendorarchexp=''
935 d_vendorbin=''
936 installvendorbin=''
937 vendorbin=''
938 vendorbinexp=''
939 d_vendorlib=''
940 installvendorlib=''
941 vendorlib=''
942 vendorlib_stem=''
943 vendorlibexp=''
944 usevendorprefix=''
945 vendorprefix=''
946 vendorprefixexp=''
947 defvoidused=''
948 voidflags=''
949 pm_apiversion=''
950 xs_apiversion=''
951 CONFIG=''
952
953 define='define'
954 undef='undef'
955 smallmach='pdp11 i8086 z8000 i80286 iAPX286'
956 rmlist=''
957
958 : We must find out about Eunice early
959 eunicefix=':'
960 if test -f /etc/unixtovms; then
961         eunicefix=/etc/unixtovms
962 fi
963 if test -f /etc/unixtovms.exe; then
964         eunicefix=/etc/unixtovms.exe
965 fi
966
967 i_whoami=''
968 : set useposix=false in your hint file to disable the POSIX extension.
969 useposix=true
970 : set useopcode=false in your hint file to disable the Opcode extension.
971 useopcode=true
972 : Trailing extension.  Override this in a hint file, if needed.
973 _exe=''
974 : Extra object files, if any, needed on this platform.
975 archobjs=''
976 : Possible local include directories to search.
977 : Set locincpth to "" in a hint file to defeat local include searches.
978 locincpth="/usr/local/include /opt/local/include /usr/gnu/include"
979 locincpth="$locincpth /opt/gnu/include /usr/GNU/include /opt/GNU/include"
980 :
981 : no include file wanted by default
982 inclwanted=''
983
984 groupstype=''
985 : change the next line if compiling for Xenix/286 on Xenix/386
986 xlibpth='/usr/lib/386 /lib/386'
987 : Possible local library directories to search.
988 loclibpth="/usr/local/lib /opt/local/lib /usr/gnu/lib"
989 loclibpth="$loclibpth /opt/gnu/lib /usr/GNU/lib /opt/GNU/lib"
990
991 : general looking path for locating libraries
992 glibpth="/usr/lib/large /lib /usr/lib $xlibpth"
993 glibpth="$glibpth /lib/large /usr/lib/small /lib/small"
994 glibpth="$glibpth /usr/ccs/lib /usr/ucblib /usr/local/lib"
995 test -f /usr/shlib/libc.so && glibpth="/usr/shlib $glibpth"
996 test -f /shlib/libc.so     && glibpth="/shlib $glibpth"
997
998 : Private path used by Configure to find libraries.  Its value
999 : is prepended to libpth. This variable takes care of special
1000 : machines, like the mips.  Usually, it should be empty.
1001 plibpth=''
1002
1003 : default library list
1004 libswanted=''
1005 : some systems want to use only the non-versioned libso:s
1006 ignore_versioned_solibs=''
1007 ccflags_uselargefiles=''
1008 ldflags_uselargefiles=''
1009 libswanted_uselargefiles=''
1010 : set usemultiplicity on the Configure command line to enable multiplicity.
1011 : set usesocks on the Configure command line to enable socks.
1012 : set usethreads on the Configure command line to enable threads.
1013 : full support for void wanted by default
1014 defvoidused=15
1015
1016 : List of libraries we want.
1017 : If anyone needs -lnet, put it in a hint file.
1018 libswanted='sfio socket bind inet nsl nm ndbm gdbm dbm db malloc dl'
1019 libswanted="$libswanted dld ld sun m c cposix posix"
1020 libswanted="$libswanted ndir dir crypt sec"
1021 libswanted="$libswanted ucb bsd BSD PW x iconv util"
1022 : We probably want to search /usr/shlib before most other libraries.
1023 : This is only used by the lib/ExtUtils/MakeMaker.pm routine extliblist.
1024 glibpth=`echo " $glibpth " | sed -e 's! /usr/shlib ! !'`
1025 glibpth="/usr/shlib $glibpth"
1026 : Do not use vfork unless overridden by a hint file.
1027 usevfork=false
1028
1029 : Find the basic shell for Bourne shell scripts
1030 case "$sh" in
1031 '')
1032         case "$SYSTYPE" in
1033         *bsd*|sys5*) xxx="/$SYSTYPE/bin/sh";;
1034         *) xxx='/bin/sh';;
1035         esac
1036         if test -f "$xxx"; then
1037                 sh="$xxx"
1038         else
1039                 : Build up a list and do a single loop so we can 'break' out.
1040                 pth=`echo $PATH | sed -e "s/$p_/ /g"`
1041                 for xxx in sh bash ksh pdksh ash; do
1042                         for p in $pth; do
1043                                 try="$try ${p}/${xxx}"
1044                         done
1045                 done
1046                 for xxx in $try; do
1047                         if test -f "$xxx"; then
1048                                 sh="$xxx";
1049                                 break
1050                         elif test -f "$xxx.exe"; then
1051                                 sh="$xxx";
1052                                 break
1053                         fi
1054                 done
1055         fi
1056         ;;
1057 esac
1058
1059 case "$sh" in
1060 '')     cat <<EOM >&2
1061 $me:  Fatal Error:  I can't find a Bourne Shell anywhere.  
1062
1063 Usually it's in /bin/sh.  How did you even get this far?
1064 Please contact me (Perl Maintainers) at perlbug@perl.com and 
1065 we'll try to straighten this all out.
1066 EOM
1067         exit 1
1068         ;;
1069 esac
1070
1071 : see if sh knows # comments
1072 if `$sh -c '#' >/dev/null 2>&1`; then
1073         shsharp=true
1074         spitshell=cat
1075         xcat=/bin/cat
1076         test -f $xcat || xcat=/usr/bin/cat
1077         echo "#!$xcat" >try
1078         $eunicefix try
1079         chmod +x try
1080         ./try > today
1081         if test -s today; then
1082                 sharpbang='#!'
1083         else
1084                 echo "#! $xcat" > try
1085                 $eunicefix try
1086                 chmod +x try
1087                 ./try > today
1088                 if test -s today; then
1089                         sharpbang='#! '
1090                 else
1091                         sharpbang=': use '
1092                 fi
1093         fi
1094 else
1095         echo " "
1096         echo "Your $sh doesn't grok # comments--I will strip them later on."
1097         shsharp=false
1098         cd ..
1099         echo "exec grep -v '^[  ]*#'" >spitshell
1100         chmod +x spitshell
1101         $eunicefix spitshell
1102         spitshell=`pwd`/spitshell
1103         cd UU
1104         echo "I presume that if # doesn't work, #! won't work either!"
1105         sharpbang=': use '
1106 fi
1107 rm -f try today
1108
1109 : figure out how to guarantee sh startup
1110 case "$startsh" in
1111 '') startsh=${sharpbang}${sh} ;;
1112 *)
1113 esac
1114 cat >try <<EOSS
1115 $startsh
1116 set abc
1117 test "$?abc" != 1
1118 EOSS
1119
1120 chmod +x try
1121 $eunicefix try
1122 if ./try; then
1123         : echo "Yup, it does."
1124 else
1125         echo "Hmm... '$startsh' does not guarantee sh startup..."
1126         echo "You may have to fix up the shell scripts to make sure $sh runs them."
1127 fi
1128 rm -f try
1129
1130
1131 : Save command line options in file UU/cmdline.opt for later use in
1132 : generating config.sh.
1133 cat > cmdline.opt <<EOSH
1134 # Configure command line arguments.
1135 config_arg0='$0'
1136 config_args='$*'
1137 config_argc=$#
1138 EOSH
1139 argn=1
1140 for arg in "$@"; do
1141         cat >>cmdline.opt <<EOSH
1142 config_arg$argn='$arg'
1143 EOSH
1144         argn=`expr $argn + 1`
1145 done
1146
1147 : produce awk script to parse command line options
1148 cat >options.awk <<'EOF'
1149 BEGIN {
1150         optstr = "A:dD:eEf:hKOrsSU:V";  # getopt-style specification
1151
1152         len = length(optstr);
1153         for (i = 1; i <= len; i++) {
1154                 c = substr(optstr, i, 1);
1155                 if (i < len) a = substr(optstr, i + 1, 1); else a = "";
1156                 if (a == ":") {
1157                         arg[c] = 1;
1158                         i++;
1159                 }
1160                 opt[c] = 1;
1161         }
1162 }
1163 {
1164         expect = 0;
1165         str = $0;
1166         if (substr(str, 1, 1) != "-") {
1167                 printf("'%s'\n", str);
1168                 next;
1169         }
1170         len = length($0);
1171         for (i = 2; i <= len; i++) {
1172                 c = substr(str, i, 1);
1173                 if (!opt[c]) {
1174                         printf("-%s\n", substr(str, i));
1175                         next;
1176                 }
1177                 printf("-%s\n", c);
1178                 if (arg[c]) {
1179                         if (i < len)
1180                                 printf("'%s'\n", substr(str, i + 1));
1181                         else
1182                                 expect = 1;
1183                         next;
1184                 }
1185         }
1186 }
1187 END {
1188         if (expect)
1189                 print "?";
1190 }
1191 EOF
1192
1193 : process the command line options
1194 set X `for arg in "$@"; do echo "X$arg"; done |
1195         sed -e s/X// | awk -f options.awk`
1196 eval "set $*"
1197 shift
1198 rm -f options.awk
1199
1200 : set up default values
1201 fastread=''
1202 reuseval=false
1203 config_sh=''
1204 alldone=''
1205 error=''
1206 silent=''
1207 extractsh=''
1208 override=''
1209 knowitall=''
1210 rm -f optdef.sh posthint.sh
1211 cat >optdef.sh <<EOS
1212 $startsh
1213 EOS
1214
1215
1216 : option parsing
1217 while test $# -gt 0; do
1218         case "$1" in
1219         -d) shift; fastread=yes;;
1220         -e) shift; alldone=cont;;
1221         -f)
1222                 shift
1223                 cd ..
1224                 if test -r "$1"; then
1225                         config_sh="$1"
1226                 else
1227                         echo "$me: cannot read config file $1." >&2
1228                         error=true
1229                 fi
1230                 cd UU
1231                 shift;;
1232         -h) shift; error=true;;
1233         -r) shift; reuseval=true;;
1234         -s) shift; silent=true; realsilent=true;;
1235         -E) shift; alldone=exit;;
1236         -K) shift; knowitall=true;;
1237         -O) shift; override=true;;
1238         -S) shift; silent=true; extractsh=true;;
1239         -D)
1240                 shift
1241                 case "$1" in
1242                 *=)
1243                         echo "$me: use '-U symbol=', not '-D symbol='." >&2
1244                         echo "$me: ignoring -D $1" >&2
1245                         ;;
1246                 *=*) echo "$1" | \
1247                                 sed -e "s/'/'\"'\"'/g" -e "s/=\(.*\)/='\1'/" >> optdef.sh;;
1248                 *) echo "$1='define'" >> optdef.sh;;
1249                 esac
1250                 shift
1251                 ;;
1252         -U)
1253                 shift
1254                 case "$1" in
1255                 *=) echo "$1" >> optdef.sh;;
1256                 *=*)
1257                         echo "$me: use '-D symbol=val', not '-U symbol=val'." >&2
1258                         echo "$me: ignoring -U $1" >&2
1259                         ;;
1260                 *) echo "$1='undef'" >> optdef.sh;;
1261                 esac
1262                 shift
1263                 ;;
1264         -A)
1265             shift
1266             xxx=''
1267             yyy="$1"
1268             zzz=''
1269             uuu=undef
1270             case "$yyy" in
1271             *=*) zzz=`echo $yyy|sed 's!=.*!!'`
1272                  case "$zzz" in
1273                  *:*) zzz='' ;;
1274                  *)   xxx=append
1275                       zzz=" "`echo $yyy|sed 's!^[^=]*=!!'` 
1276                       yyy=`echo $yyy|sed 's!=.*!!'` ;;
1277                  esac
1278                  ;;
1279             esac
1280             case "$xxx" in
1281             '')  case "$yyy" in
1282                  *:*) xxx=`echo $yyy|sed 's!:.*!!'`
1283                       yyy=`echo $yyy|sed 's!^[^:]*:!!'`
1284                       zzz=`echo $yyy|sed 's!^[^=]*=!!'`
1285                       yyy=`echo $yyy|sed 's!=.*!!'` ;;
1286                  *)   xxx=`echo $yyy|sed 's!:.*!!'`
1287                       yyy=`echo $yyy|sed 's!^[^:]*:!!'` ;;
1288                  esac
1289                  ;;       
1290             esac
1291             case "$xxx" in
1292             append)
1293                 echo "$yyy=\"\${$yyy}$zzz\""    >> posthint.sh ;;
1294             clear)
1295                 echo "$yyy=''"                  >> posthint.sh ;;
1296             define)
1297                 case "$zzz" in
1298                 '') zzz=define ;;
1299                 esac
1300                 echo "$yyy='$zzz'"              >> posthint.sh ;;
1301             eval)
1302                 echo "eval \"$yyy=$zzz\""       >> posthint.sh ;;
1303             prepend)
1304                 echo "$yyy=\"$zzz\${$yyy}\""    >> posthint.sh ;;
1305             undef)
1306                 case "$zzz" in
1307                 '') zzz="$uuu" ;;
1308                 esac
1309                 echo "$yyy=$zzz"                >> posthint.sh ;;
1310             *)  echo "$me: unknown -A command '$xxx', ignoring -A $1" >&2 ;;
1311             esac
1312             shift
1313             ;;
1314         -V) echo "$me generated by metaconfig 3.0 PL70." >&2
1315             exit 0;;
1316         --) break;;
1317         -*) echo "$me: unknown option $1" >&2; shift; error=true;;
1318         *) break;;
1319         esac
1320 done
1321
1322 case "$error" in
1323 true)
1324         cat >&2 <<EOM
1325 Usage: $me [-dehrsEKOSV] [-f config.sh] [-D symbol] [-D symbol=value]
1326                  [-U symbol] [-U symbol=] [-A command:symbol...]
1327   -d : use defaults for all answers.
1328   -e : go on without questioning past the production of config.sh.
1329   -f : specify an alternate default configuration file.
1330   -h : print this help message and exit (with an error status).
1331   -r : reuse C symbols value if possible (skips costly nm extraction).
1332   -s : silent mode, only echoes questions and essential information.
1333   -D : define symbol to have some value:
1334          -D symbol         symbol gets the value 'define'
1335          -D symbol=value   symbol gets the value 'value'
1336   -E : stop at the end of questions, after having produced config.sh.
1337   -K : do not use unless you know what you are doing.
1338   -O : let -D and -U override definitions from loaded configuration file.
1339   -S : perform variable substitutions on all .SH files (can mix with -f)
1340   -U : undefine symbol:
1341          -U symbol    symbol gets the value 'undef'
1342          -U symbol=   symbol gets completely empty
1343   -A : manipulate symbol after the platform specific hints have been applied:
1344          -A symbol=value                append " "value to symbol
1345          -A append:symbol=value         append value to symbol
1346          -A define:symbol=value         define symbol to have value
1347          -A clear:symbol                define symbol to be ''
1348          -A define:symbol               define symbol to be 'define'
1349          -A eval:symbol=value           define symbol to be eval of value
1350          -A prepend:symbol=value        prepend value to symbol
1351          -A undef:symbol                define symbol to be 'undef'
1352          -A undef:symbol=               define symbol to be ''
1353   -V : print version number and exit (with a zero status).
1354 EOM
1355         exit 1
1356         ;;
1357 esac
1358
1359 : Sanity checks
1360 case "$fastread$alldone" in
1361 yescont|yesexit) ;;
1362 *)
1363         case "$extractsh" in
1364         true) ;;
1365         *)
1366                 if test ! -t 0; then
1367                         echo "Say 'sh Configure', not 'sh <Configure'"
1368                         exit 1
1369                 fi
1370                 ;;
1371         esac
1372         ;;
1373 esac
1374
1375 exec 4>&1
1376 case "$silent" in
1377 true) exec 1>/dev/null;;
1378 esac
1379
1380 : run the defines and the undefines, if any, but leave the file out there...
1381 touch optdef.sh
1382 . ./optdef.sh
1383 : create the posthint manipulation script and leave the file out there...
1384 touch posthint.sh
1385
1386 : set package name
1387 package=perl5
1388 first=`echo $package | sed -e 's/^\(.\).*/\1/'`
1389 last=`echo $package | sed -e 's/^.\(.*\)/\1/'`
1390 case "`echo AbyZ | tr '[:lower:]' '[:upper:]' 2>/dev/null`" in
1391 ABYZ) spackage=`echo $first | tr '[:lower:]' '[:upper:]'`$last;;
1392 *) spackage=`echo $first | tr '[a-z]' '[A-Z]'`$last;;
1393 esac
1394
1395 : Some greps do not return status, grrr.
1396 echo "grimblepritz" >grimble
1397 if grep blurfldyick grimble >/dev/null 2>&1 ; then
1398         contains=contains
1399 elif grep grimblepritz grimble >/dev/null 2>&1 ; then
1400         contains=grep
1401 else
1402         contains=contains
1403 fi
1404 rm -f grimble
1405 : the following should work in any shell
1406 case "$contains" in
1407 contains*)
1408         echo " "
1409         echo "AGH!  Grep doesn't return a status.  Attempting remedial action."
1410         cat >contains <<'EOSS'
1411 grep "$1" "$2" >.greptmp && cat .greptmp && test -s .greptmp
1412 EOSS
1413 chmod +x contains
1414 esac
1415
1416 : Find the path to the source tree
1417 case "$src" in
1418 '') case "$0" in
1419     */*) src=`echo $0 | sed -e 's%/[^/][^/]*$%%'`
1420          case "$src" in
1421          /*)    ;;
1422          *)     src=`cd ../$src && pwd` ;;
1423          esac
1424          ;;
1425     *)   src='.';;
1426     esac;;
1427 esac
1428 case "$src" in
1429 '')     src=/
1430         rsrc=/
1431         ;;
1432 /*) rsrc="$src";;
1433 *) rsrc="../$src";;
1434 esac
1435 if test -f $rsrc/Configure && \
1436         $contains "^package=$package$" $rsrc/Configure >/dev/null 2>&1
1437 then
1438    : found it, so we are ok.
1439 else
1440         rsrc=''
1441         for src in . .. ../.. ../../.. ../../../..; do
1442                 if test -f ../$src/Configure && \
1443                         $contains "^package=$package$" ../$src/Configure >/dev/null 2>&1
1444                 then
1445                         rsrc=../$src
1446                         break
1447                 fi
1448         done
1449 fi
1450 case "$rsrc" in
1451 '')
1452         cat <<EOM >&4
1453
1454 Sorry, I can't seem to locate the source dir for $package.  Please start
1455 Configure with an explicit path -- i.e. /some/path/Configure.
1456
1457 EOM
1458         exit 1
1459         ;;
1460 ../.)   rsrc='..';;
1461 *)
1462         echo " "
1463         echo "Sources for $package found in \"$src\"." >&4
1464         ;;
1465 esac
1466
1467 : script used to extract .SH files with variable substitutions
1468 cat >extract <<'EOS'
1469 CONFIGDOTSH=true
1470 echo "Doing variable substitutions on .SH files..."
1471 if test -f $src/MANIFEST; then
1472         set x `awk '{print $1}' <$src/MANIFEST | grep '\.SH$'`
1473 else
1474         echo "(Looking for .SH files under the source directory.)"
1475         set x `(cd $src; find . -name "*.SH" -print)`
1476 fi
1477 shift
1478 case $# in
1479 0) set x `(cd $src; echo *.SH)`; shift;;
1480 esac
1481 if test ! -f $src/$1; then
1482         shift
1483 fi
1484 mkdir_p='
1485 name=$1;
1486 create="";
1487 while test $name; do
1488         if test ! -d "$name"; then
1489                 create="$name $create";
1490                 name=`echo $name | sed -e "s|^[^/]*$||"`;
1491                 name=`echo $name | sed -e "s|\(.*\)/.*|\1|"`;
1492         else
1493                 name="";
1494         fi;
1495 done;
1496 for file in $create; do
1497         mkdir $file;
1498 done
1499 '
1500 for file in $*; do
1501         case "$src" in
1502         ".")
1503                 case "$file" in
1504                 */*)
1505                         dir=`expr X$file : 'X\(.*\)/'`
1506                         file=`expr X$file : 'X.*/\(.*\)'`
1507                         (cd $dir && . ./$file)
1508                         ;;
1509                 *)
1510                         . ./$file
1511                         ;;
1512                 esac
1513                 ;;
1514         *)
1515                 case "$file" in
1516                 */*)
1517                         dir=`expr X$file : 'X\(.*\)/'`
1518                         file=`expr X$file : 'X.*/\(.*\)'`
1519                         (set x $dir; shift; eval $mkdir_p)
1520                         sh <$src/$dir/$file
1521                         ;;
1522                 *)
1523                         sh <$src/$file
1524                         ;;
1525                 esac
1526                 ;;
1527         esac
1528 done
1529 if test -f $src/config_h.SH; then
1530         if test ! -f config.h; then
1531         : oops, they left it out of MANIFEST, probably, so do it anyway.
1532         . $src/config_h.SH
1533         fi
1534 fi
1535 EOS
1536
1537 : extract files and exit if asked to do so
1538 case "$extractsh" in
1539 true)
1540         case "$realsilent" in
1541         true) ;;
1542         *) exec 1>&4;;
1543         esac
1544         case "$config_sh" in
1545         '') config_sh='config.sh';;
1546         esac
1547         echo " "
1548         echo "Fetching answers from $config_sh..."
1549         cd ..
1550         . $config_sh
1551         test "$override" && . ./optdef.sh
1552         echo " "
1553         . UU/extract
1554         rm -rf UU
1555         echo "Done."
1556         exit 0
1557         ;;
1558 esac
1559
1560 : Eunice requires " " instead of "", can you believe it
1561 echo " "
1562 : Here we go...
1563 echo "Beginning of configuration questions for $package."
1564
1565 trap 'echo " "; test -d ../UU && rm -rf X $rmlist; exit 1' 1 2 3 15
1566
1567 : first determine how to suppress newline on echo command
1568 echo " "
1569 echo "Checking echo to see how to suppress newlines..."
1570 (echo "hi there\c" ; echo " ") >.echotmp
1571 if $contains c .echotmp >/dev/null 2>&1 ; then
1572         echo "...using -n."
1573         n='-n'
1574         c=''
1575 else
1576         cat <<'EOM'
1577 ...using \c
1578 EOM
1579         n=''
1580         c='\c'
1581 fi
1582 echo $n "The star should be here-->$c"
1583 echo '*'
1584 rm -f .echotmp
1585
1586 : Now test for existence of everything in MANIFEST
1587 echo " "
1588 if test -f $rsrc/MANIFEST; then
1589         echo "First let's make sure your kit is complete.  Checking..." >&4
1590         awk '$1 !~ /PACK[A-Z]+/ {print $1}' $rsrc/MANIFEST | split -50
1591         rm -f missing
1592         tmppwd=`pwd`
1593         for filelist in x??; do
1594                 (cd $rsrc; ls `cat $tmppwd/$filelist` >/dev/null 2>>$tmppwd/missing)
1595         done
1596         if test -s missing; then
1597                 cat missing >&4
1598                 cat >&4 <<'EOM'
1599
1600 THIS PACKAGE SEEMS TO BE INCOMPLETE.
1601
1602 You have the option of continuing the configuration process, despite the
1603 distinct possibility that your kit is damaged, by typing 'y'es.  If you
1604 do, don't blame me if something goes wrong.  I advise you to type 'n'o
1605 and contact the author (perlbug@perl.com).
1606
1607 EOM
1608                 echo $n "Continue? [n] $c" >&4
1609                 read ans
1610                 case "$ans" in
1611                 y*)
1612                         echo "Continuing..." >&4
1613                         rm -f missing
1614                         ;;
1615                 *)
1616                         echo "ABORTING..." >&4
1617                         kill $$
1618                         ;;
1619                 esac
1620         else
1621                 echo "Looks good..."
1622         fi
1623 else
1624         echo "There is no MANIFEST file.  I hope your kit is complete !"
1625 fi
1626 rm -f missing x??
1627
1628 echo " "
1629 : Find the appropriate value for a newline for tr
1630 if test -n "$DJGPP"; then
1631        trnl='\012'
1632 fi
1633 if test X"$trnl" = X; then
1634         case "`echo foo|tr '\n' x 2>/dev/null`" in
1635         foox) trnl='\n' ;;
1636         esac
1637 fi
1638 if test X"$trnl" = X; then
1639         case "`echo foo|tr '\012' x 2>/dev/null`" in
1640         foox) trnl='\012' ;;
1641         esac
1642 fi
1643 if test X"$trnl" = X; then
1644         cat <<EOM >&2
1645
1646 $me: Fatal Error: cannot figure out how to translate newlines with 'tr'.
1647
1648 EOM
1649         exit 1
1650 fi
1651
1652 : compute the number of columns on the terminal for proper question formatting
1653 case "$COLUMNS" in
1654 '') COLUMNS='80';;
1655 esac
1656
1657 : set up the echo used in my read
1658 myecho="case \"\$xxxm\" in
1659 '') echo $n \"\$rp $c\" >&4;;
1660 *) case \"\$rp\" in
1661         '') echo $n \"[\$xxxm] $c\";;
1662         *)
1663                 if test \`echo \"\$rp [\$xxxm]  \" | wc -c\` -ge $COLUMNS; then
1664                         echo \"\$rp\" >&4
1665                         echo $n \"[\$xxxm] $c\" >&4
1666                 else
1667                         echo $n \"\$rp [\$xxxm] $c\" >&4
1668                 fi
1669                 ;;
1670         esac;;
1671 esac"
1672
1673 : now set up to do reads with possible shell escape and default assignment
1674 cat <<EOSC >myread
1675 $startsh
1676 xxxm=\$dflt
1677 $myecho
1678 ans='!'
1679 case "\$fastread" in
1680 yes) case "\$dflt" in
1681         '') ;;
1682         *) ans='';
1683                 case "\$silent-\$rp" in
1684                 true-) ;;
1685                 *) echo " " >&4;;
1686                 esac;;
1687         esac;;
1688 *) case "\$silent" in
1689         true) case "\$rp" in
1690                 '') ans='';;
1691                 esac;;
1692         esac;;
1693 esac
1694 while expr "X\$ans" : "X!" >/dev/null; do
1695         read answ
1696         set x \$xxxm
1697         shift
1698         aok=''; eval "ans=\\"\$answ\\"" && aok=y
1699         case  "\$answ" in
1700         "!")
1701                 sh 1>&4
1702                 echo " "
1703                 $myecho
1704                 ;;
1705         !*)
1706                 set x \`expr "X\$ans" : "X!\(.*\)\$"\`
1707                 shift
1708                 sh 1>&4 -c "\$*"
1709                 echo " "
1710                 $myecho
1711                 ;;
1712         "\$ans")
1713                 case "\$ans" in
1714                 \\&*)
1715                         set x \`expr "X\$ans" : "X&\(.*\)\$"\`
1716                         shift
1717                         case "\$1" in
1718                         -d)
1719                                 fastread=yes
1720                                 echo "(OK, I'll run with -d after this question.)" >&4
1721                                 ;;
1722                         -*)
1723                                 echo "*** Sorry, \$1 not supported yet." >&4
1724                                 ;;
1725                         esac
1726                         $myecho
1727                         ans=!
1728                         ;;
1729                 esac;;
1730         *)
1731                 case "\$aok" in
1732                 y)
1733                         echo "*** Substitution done -- please confirm."
1734                         xxxm="\$ans"
1735                         ans=\`echo $n "\$ans$c" | tr '$trnl' ' '\`
1736                         xxxm="\$ans"
1737                         ans=!
1738                         ;;
1739                 *)
1740                         echo "*** Error -- try again."
1741                         ans=!
1742                         ;;
1743                 esac
1744                 $myecho
1745                 ;;
1746         esac
1747         case "\$ans\$xxxm\$nostick" in
1748         '')
1749                 ans=!
1750                 $myecho
1751                 ;;
1752         esac
1753 done
1754 case "\$ans" in
1755 '') ans="\$xxxm";;
1756 esac
1757 EOSC
1758
1759 : create .config dir to save info across Configure sessions
1760 test -d ../.config || mkdir ../.config
1761 cat >../.config/README <<EOF
1762 This directory created by Configure to save information that should
1763 persist across sessions for $package.
1764
1765 You may safely delete it if you wish.
1766 EOF
1767
1768 xpatchlevel=`awk '/define[      ]+PERL_VERSION/ {print $3}' $rsrc/patchlevel.h`
1769 case "$usedevel" in
1770 $define|true|[yY]*) ;;
1771 *) case "$xpatchlevel" in
1772    *[13579])
1773         cat >&4 <<EOH
1774 *** WHOA THERE!!! ***
1775
1776     This is an UNSTABLE DEVELOPMENT release.
1777     (The patchlevel, $xpatchlevel, is odd--as opposed to even,
1778      and that signifies a development release.  If you want a
1779      maintenance release, you want an even-numbered release.)
1780
1781     Do ***NOT*** install this into production use.
1782     Data corruption and crashes are possible.
1783
1784     It is most seriously suggested that you do not continue any further
1785     unless you want to help in developing and debugging Perl.
1786
1787 EOH
1788         rp='Do you really want to continue?'
1789         dflt='n'
1790         . ./myread
1791         case "$ans" in
1792         [yY]) echo >&4 "Okay, continuing." ;;
1793         *) echo >&4 "Okay, bye."
1794            exit 1
1795            ;;
1796         esac
1797         ;;
1798     esac
1799     ;;
1800 esac
1801
1802 : general instructions
1803 needman=true
1804 firsttime=true
1805 user=`(logname) 2>/dev/null`
1806 case "$user" in
1807 '') user=`whoami 2>&1`;;
1808 esac
1809 if $contains "^$user\$" ../.config/instruct >/dev/null 2>&1; then
1810         firsttime=false
1811         echo " "
1812         rp='Would you like to see the instructions?'
1813         dflt=n
1814         . ./myread
1815         case "$ans" in
1816         [yY]*) ;;
1817         *) needman=false;;
1818         esac
1819 fi
1820 if $needman; then
1821         cat <<EOH
1822
1823 This installation shell script will examine your system and ask you questions
1824 to determine how the perl5 package should be installed. If you get
1825 stuck on a question, you may use a ! shell escape to start a subshell or
1826 execute a command.  Many of the questions will have default answers in square
1827 brackets; typing carriage return will give you the default.
1828
1829 On some of the questions which ask for file or directory names you are allowed
1830 to use the ~name construct to specify the login directory belonging to "name",
1831 even if you don't have a shell which knows about that.  Questions where this is
1832 allowed will be marked "(~name ok)".
1833
1834 EOH
1835         rp=''
1836         dflt='Type carriage return to continue'
1837         . ./myread
1838         cat <<'EOH'
1839
1840 The prompter used in this script allows you to use shell variables and
1841 backticks in your answers.  You may use $1, $2, etc...  to refer to the words
1842 in the default answer, as if the default line was a set of arguments given to a
1843 script shell.  This means you may also use $* to repeat the whole default line,
1844 so you do not have to re-type everything to add something to the default.
1845
1846 Everytime there is a substitution, you will have to confirm.  If there is an
1847 error (e.g. an unmatched backtick), the default answer will remain unchanged
1848 and you will be prompted again.
1849
1850 If you are in a hurry, you may run 'Configure -d'.  This will bypass nearly all
1851 the questions and use the computed defaults (or the previous answers if there
1852 was already a config.sh file). Type 'Configure -h' for a list of options.
1853 You may also start interactively and then answer '& -d' at any prompt to turn
1854 on the non-interactive behaviour for the remainder of the execution.
1855
1856 EOH
1857         . ./myread
1858         cat <<EOH
1859
1860 Much effort has been expended to ensure that this shell script will run on any
1861 Unix system.  If despite that it blows up on yours, your best bet is to edit
1862 Configure and run it again.  If you can't run Configure for some reason,
1863 you'll have to generate a config.sh file by hand.  Whatever problems you
1864 have, let me (perlbug@perl.com) know how I blew it.
1865
1866 This installation script affects things in two ways:
1867
1868 1) it may do direct variable substitutions on some of the files included
1869    in this kit.
1870 2) it builds a config.h file for inclusion in C programs.  You may edit
1871    any of these files as the need arises after running this script.
1872
1873 If you make a mistake on a question, there is no easy way to back up to it
1874 currently.  The easiest thing to do is to edit config.sh and rerun all the SH
1875 files.  Configure will offer to let you do this before it runs the SH files.
1876
1877 EOH
1878         dflt='Type carriage return to continue'
1879         . ./myread
1880         case "$firsttime" in
1881         true) echo $user >>../.config/instruct;;
1882         esac
1883 fi
1884
1885 : find out where common programs are
1886 echo " "
1887 echo "Locating common programs..." >&4
1888 cat <<EOSC >loc
1889 $startsh
1890 case \$# in
1891 0) exit 1;;
1892 esac
1893 thing=\$1
1894 shift
1895 dflt=\$1
1896 shift
1897 for dir in \$*; do
1898         case "\$thing" in
1899         .)
1900         if test -d \$dir/\$thing; then
1901                 echo \$dir
1902                 exit 0
1903         fi
1904         ;;
1905         *)
1906         for thisthing in \$dir/\$thing; do
1907                 : just loop through to pick last item
1908         done
1909         if test -f \$thisthing; then
1910                 echo \$thisthing
1911                 exit 0
1912         elif test -f \$dir/\$thing.exe; then
1913                 if test -n "$DJGPP"; then
1914                         echo \$dir/\$thing.exe
1915                 else
1916                         : on Eunice apparently
1917                         echo \$dir/\$thing
1918                 fi
1919                 exit 0
1920         fi
1921         ;;
1922         esac
1923 done
1924 echo \$dflt
1925 exit 1
1926 EOSC
1927 chmod +x loc
1928 $eunicefix loc
1929 loclist="
1930 awk
1931 cat
1932 comm
1933 cp
1934 echo
1935 expr
1936 grep
1937 ls
1938 make
1939 mkdir
1940 rm
1941 sed
1942 sort
1943 touch
1944 tr
1945 uniq
1946 "
1947 trylist="
1948 Mcc
1949 ar
1950 byacc
1951 cpp
1952 csh
1953 date
1954 egrep
1955 gzip
1956 less
1957 ln
1958 more
1959 nm
1960 nroff
1961 pg
1962 test
1963 uname
1964 zip
1965 "
1966 pth=`echo $PATH | sed -e "s/$p_/ /g"`
1967 pth="$pth /lib /usr/lib"
1968 for file in $loclist; do
1969         eval xxx=\$$file
1970         case "$xxx" in
1971         /*|?:[\\/]*)
1972                 if test -f "$xxx"; then
1973                         : ok
1974                 else
1975                         echo "WARNING: no $xxx -- ignoring your setting for $file." >&4
1976                         xxx=`./loc $file $file $pth`
1977                 fi
1978                 ;;
1979         '') xxx=`./loc $file $file $pth`;;
1980         *) xxx=`./loc $xxx $xxx $pth`;;
1981         esac
1982         eval $file=$xxx
1983         eval _$file=$xxx
1984         case "$xxx" in
1985         /*)
1986                 echo $file is in $xxx.
1987                 ;;
1988         ?:[\\/]*)
1989                 echo $file is in $xxx.
1990                 ;;
1991         *)
1992                 echo "I don't know where '$file' is, and my life depends on it." >&4
1993                 echo "Go find a public domain implementation or fix your PATH setting!" >&4
1994                 exit 1
1995                 ;;
1996         esac
1997 done
1998 echo " "
1999 echo "Don't worry if any of the following aren't found..."
2000 say=offhand
2001 for file in $trylist; do
2002         eval xxx=\$$file
2003         case "$xxx" in
2004         /*|?:[\\/]*)
2005                 if test -f "$xxx"; then
2006                         : ok
2007                 else
2008                         echo "WARNING: no $xxx -- ignoring your setting for $file." >&4
2009                         xxx=`./loc $file $file $pth`
2010                 fi
2011                 ;;
2012         '') xxx=`./loc $file $file $pth`;;
2013         *) xxx=`./loc $xxx $xxx $pth`;;
2014         esac
2015         eval $file=$xxx
2016         eval _$file=$xxx
2017         case "$xxx" in
2018         /*)
2019                 echo $file is in $xxx.
2020                 ;;
2021         ?:[\\/]*)
2022                 echo $file is in $xxx.
2023                 ;;
2024         *)
2025                 echo "I don't see $file out there, $say."
2026                 say=either
2027                 ;;
2028         esac
2029 done
2030 case "$egrep" in
2031 egrep)
2032         echo "Substituting grep for egrep."
2033         egrep=$grep
2034         ;;
2035 esac
2036 case "$ln" in
2037 ln)
2038         echo "Substituting cp for ln."
2039         ln=$cp
2040         ;;
2041 esac
2042 case "$test" in
2043 test)
2044         echo "Hopefully test is built into your sh."
2045         ;;
2046 *)
2047         if `sh -c "PATH= test true" >/dev/null 2>&1`; then
2048                 echo "Using the test built into your sh."
2049                 test=test
2050                 _test=test
2051         fi
2052         ;;
2053 esac
2054 case "$echo" in
2055 echo)
2056         echo "Hopefully echo is built into your sh."
2057         ;;
2058 '') ;;
2059 *)
2060         echo " "
2061 echo "Checking compatibility between $echo and builtin echo (if any)..." >&4
2062         $echo $n "hi there$c" >foo1
2063         echo $n "hi there$c" >foo2
2064         if cmp foo1 foo2 >/dev/null 2>&1; then
2065                 echo "They are compatible.  In fact, they may be identical."
2066         else
2067                 case "$n" in
2068                 '-n') n='' c='\c';;
2069                 *) n='-n' c='';;
2070                 esac
2071                 cat <<FOO
2072 They are not compatible!  You are probably running ksh on a non-USG system.
2073 I'll have to use $echo instead of the builtin, since Bourne shell doesn't
2074 have echo built in and we may have to run some Bourne shell scripts.  That
2075 means I'll have to use '$n$c' to suppress newlines now.  Life is ridiculous.
2076
2077 FOO
2078                 $echo $n "The star should be here-->$c"
2079                 $echo "*"
2080         fi
2081         $rm -f foo1 foo2
2082         ;;
2083 esac
2084
2085 cat <<EOS >checkcc
2086 $startsh
2087 EOS
2088 cat <<'EOSC' >>checkcc
2089 case "$cc" in
2090 '') ;;
2091 *)  $rm -f try try.*
2092     $cat >try.c <<EOM
2093 int main(int argc, char *argv[]) {
2094   return 0;
2095 }
2096 EOM
2097     if $cc -o try try.c; then
2098        :
2099     else
2100         echo "Uh-oh, the C compiler '$cc' doesn't seem to be working." >&4
2101         despair=yes
2102         trygcc=yes
2103         case "$cc" in
2104         *gcc*) trygcc=no ;;
2105         esac
2106         case "`$cc -v -c try.c 2>&1`" in
2107         *gcc*) trygcc=no ;;
2108         esac
2109         if $test X"$trygcc" = Xyes; then
2110             if gcc -o try -c try.c; then
2111                 echo " "
2112                 echo "You seem to have a working gcc, though." >&4
2113                 rp="Would you like to use it?"
2114                 dflt=y
2115                 if $test -f myread; then
2116                     . ./myread
2117                 else
2118                     if $test -f UU/myread; then
2119                         . ./UU/myread
2120                     else
2121                         echo "Cannot find myread, sorry.  Aborting." >&2
2122                         exit 1
2123                     fi
2124                 fi  
2125                 case "$ans" in
2126                 [yY]*) cc=gcc; ccflags=''; despair=no ;;
2127                 esac
2128             fi
2129         fi
2130         if $test X"$despair" = Xyes; then
2131             echo "You need to find a working C compiler." >&4
2132             echo "I cannot continue any further, aborting." >&4
2133             exit 1
2134         fi
2135     fi
2136     $rm -f try try.*
2137     ;;
2138 esac
2139 EOSC
2140
2141 : determine whether symbolic links are supported
2142 echo " "
2143 $touch blurfl
2144 if $ln -s blurfl sym > /dev/null 2>&1 ; then
2145         echo "Symbolic links are supported." >&4
2146         lns="$ln -s"
2147 else
2148         echo "Symbolic links are NOT supported." >&4
2149         lns="$ln"
2150 fi
2151 $rm -f blurfl sym
2152
2153 : see whether [:lower:] and [:upper:] are supported character classes
2154 echo " "
2155 case "`echo AbyZ | $tr '[:lower:]' '[:upper:]' 2>/dev/null`" in
2156 ABYZ)
2157         echo "Good, your tr supports [:lower:] and [:upper:] to convert case." >&4
2158         up='[:upper:]'
2159         low='[:lower:]'
2160         ;;
2161 *)      # There is a discontinuity in EBCDIC between 'I' and 'J'
2162         # (0xc9 and 0xd1), therefore that is a nice testing point.
2163         if test "X$up" = X -o "X$low" = X; then
2164             case "`echo IJ | $tr '[I-J]' '[i-j]' 2>/dev/null`" in
2165             ij) up='[A-Z]'
2166                 low='[a-z]'
2167                 ;;
2168             esac
2169         fi
2170         if test "X$up" = X -o "X$low" = X; then
2171             case "`echo IJ | $tr I-J i-j 2>/dev/null`" in
2172             ij) up='A-Z'
2173                 low='a-z'
2174                 ;;
2175             esac
2176         fi
2177         if test "X$up" = X -o "X$low" = X; then
2178             case "`echo IJ | od -x 2>/dev/null`" in
2179             *C9D1*|*c9d1*)
2180                 echo "Hey, this might be EBCDIC." >&4
2181                 if test "X$up" = X -o "X$low" = X; then
2182                     case "`echo IJ | $tr '[A-IJ-RS-Z]' '[a-ij-rs-z]' 2>/dev/null`" in
2183                     ij) up='[A-IJ-RS-Z]'
2184                         low='[a-ij-rs-z]'
2185                         ;;
2186                     esac
2187                 fi
2188                 if test "X$up" = X -o "X$low" = X; then
2189                     case "`echo IJ | $tr A-IJ-RS-Z a-ij-rs-z 2>/dev/null`" in
2190                     ij) up='A-IJ-RS-Z'
2191                         low='a-ij-rs-z'
2192                         ;;
2193                     esac
2194                 fi
2195                 ;;
2196             esac
2197         fi
2198 esac
2199 case "`echo IJ | $tr \"$up\" \"$low\" 2>/dev/null`" in
2200 ij)
2201     echo "Using $up and $low to convert case." >&4
2202     ;;
2203 *)
2204     echo "I don't know how to translate letters from upper to lower case." >&4
2205     echo "Your tr is not acting any way I know of." >&4
2206     exit 1
2207     ;;
2208 esac
2209 : set up the translation script tr, must be called with ./tr of course
2210 cat >tr <<EOSC
2211 $startsh
2212 case "\$1\$2" in
2213 '[A-Z][a-z]') exec $tr '$up' '$low';;
2214 '[a-z][A-Z]') exec $tr '$low' '$up';;
2215 esac
2216 exec $tr "\$@"
2217 EOSC
2218 chmod +x tr
2219 $eunicefix tr
2220
2221 : Try to determine whether config.sh was made on this system
2222 case "$config_sh" in
2223 '')
2224 myuname=`$uname -a 2>/dev/null`
2225 $test -z "$myuname" && myuname=`hostname 2>/dev/null`
2226 # tr '[A-Z]' '[a-z]' would not work in EBCDIC
2227 # because the A-Z/a-z are not consecutive.
2228 myuname=`echo $myuname | $sed -e 's/^[^=]*=//' -e 's/\///g' | \
2229         ./tr '[A-Z]' '[a-z]' | $tr $trnl ' '`
2230 newmyuname="$myuname"
2231 dflt=n
2232 case "$knowitall" in
2233 '')
2234         if test -f ../config.sh; then
2235                 if $contains myuname= ../config.sh >/dev/null 2>&1; then
2236                         eval "`grep myuname= ../config.sh`"
2237                 fi
2238                 if test "X$myuname" = "X$newmyuname"; then
2239                         dflt=y
2240                 fi
2241         fi
2242         ;;
2243 *) dflt=y;;
2244 esac
2245
2246 : Get old answers from old config file if Configure was run on the
2247 : same system, otherwise use the hints.
2248 hint=default
2249 cd ..
2250 if test -f config.sh; then
2251         echo " "
2252         rp="I see a config.sh file.  Shall I use it to set the defaults?"
2253         . UU/myread
2254         case "$ans" in
2255         n*|N*) echo "OK, I'll ignore it."; mv config.sh config.sh.old;;
2256         *)  echo "Fetching default answers from your old config.sh file..." >&4
2257                 tmp_n="$n"
2258                 tmp_c="$c"
2259                 tmp_sh="$sh"
2260                 . ./config.sh
2261                 cp config.sh UU
2262                 n="$tmp_n"
2263                 c="$tmp_c"
2264                 : Older versions did not always set $sh.  Catch re-use of such
2265                 : an old config.sh.
2266                 case "$sh" in
2267                 '') sh="$tmp_sh" ;;
2268                 esac
2269                 hint=previous
2270                 ;;
2271         esac
2272 fi
2273 . ./UU/checkcc
2274 if test ! -f config.sh; then
2275         $cat <<EOM
2276
2277 First time through, eh?  I have some defaults handy for some systems
2278 that need some extra help getting the Configure answers right:
2279
2280 EOM
2281         (cd $src/hints; ls -C *.sh) | $sed 's/\.sh/   /g' >&4
2282         dflt=''
2283         : Half the following guesses are probably wrong... If you have better
2284         : tests or hints, please send them to perlbug@perl.com
2285         : The metaconfig authors would also appreciate a copy...
2286         $test -f /irix && osname=irix
2287         $test -f /xenix && osname=sco_xenix
2288         $test -f /dynix && osname=dynix
2289         $test -f /dnix && osname=dnix
2290         $test -f /lynx.os && osname=lynxos
2291         $test -f /unicos && osname=unicos && osvers=`$uname -r`
2292         $test -f /unicosmk && osname=unicosmk && osvers=`$uname -r`
2293         $test -f /unicosmk.ar && osname=unicosmk && osvers=`$uname -r`
2294         $test -f /bin/mips && /bin/mips && osname=mips
2295         $test -d /NextApps && set X `hostinfo | grep 'NeXT Mach.*:' | \
2296                 $sed -e 's/://' -e 's/\./_/'` && osname=next && osvers=$4
2297         $test -d /usr/apollo/bin && osname=apollo
2298         $test -f /etc/saf/_sactab && osname=svr4
2299         $test -d /usr/include/minix && osname=minix
2300         if $test -d /MachTen -o -d /MachTen_Folder; then
2301                 osname=machten
2302                 if $test -x /sbin/version; then
2303                         osvers=`/sbin/version | $awk '{print $2}' |
2304                         $sed -e 's/[A-Za-z]$//'`
2305                 elif $test -x /usr/etc/version; then
2306                         osvers=`/usr/etc/version | $awk '{print $2}' |
2307                         $sed -e 's/[A-Za-z]$//'`
2308                 else
2309                         osvers="$2.$3"
2310                 fi
2311         fi
2312
2313         $test -f /sys/posix.dll &&
2314                 $test -f /usr/bin/what &&
2315                 set X `/usr/bin/what /sys/posix.dll` &&
2316                 $test "$3" = UWIN &&
2317                 osname=uwin &&
2318                 osvers="$5"
2319
2320         if $test -f $uname; then
2321                 set X $myuname
2322                 shift
2323
2324                 case "$5" in
2325                 fps*) osname=fps ;;
2326                 mips*)
2327                         case "$4" in
2328                         umips) osname=umips ;;
2329                         *) osname=mips ;;
2330                         esac;;
2331                 [23]100) osname=mips ;;
2332                 next*) osname=next ;;
2333                 i386*)
2334                         tmp=`/bin/uname -X 2>/dev/null|awk '/3\.2v[45]/{ print $(NF) }'`
2335                         if $test "$tmp" != "" -a "$3" = "3.2" -a -f '/etc/systemid'; then
2336                                 osname='sco'
2337                                 osvers=$tmp
2338                         elif $test -f /etc/kconfig; then
2339                                 osname=isc
2340                                 if test "$lns" = "$ln -s"; then
2341                                         osvers=4
2342                                 elif $contains _SYSV3 /usr/include/stdio.h > /dev/null 2>&1 ; then
2343                                         osvers=3
2344                                 elif $contains _POSIX_SOURCE /usr/include/stdio.h > /dev/null 2>&1 ; then
2345                                         osvers=2
2346                                 fi
2347                         fi
2348                         tmp=''
2349                         ;;
2350                 pc*)
2351                         if test -n "$DJGPP"; then
2352                                 osname=dos
2353                                 osvers=djgpp
2354                         fi
2355                         ;;
2356                 esac
2357
2358                 case "$1" in
2359                 aix) osname=aix
2360                         tmp=`( (oslevel) 2>/dev/null || echo "not found") 2>&1`
2361                         case "$tmp" in
2362                         'not found') osvers="$4"."$3" ;;
2363                         '<3240'|'<>3240') osvers=3.2.0 ;;
2364                         '=3240'|'>3240'|'<3250'|'<>3250') osvers=3.2.4 ;;
2365                         '=3250'|'>3250') osvers=3.2.5 ;;
2366                         *) osvers=$tmp;;
2367                         esac
2368                         ;;
2369                 bsd386) osname=bsd386
2370                         osvers=`$uname -r`
2371                         ;;
2372                 cygwin*) osname=cygwin
2373                         osvers="$3"
2374                         ;;
2375                 *dc.osx) osname=dcosx
2376                         osvers="$3"
2377                         ;;
2378                 dnix) osname=dnix
2379                         osvers="$3"
2380                         ;;
2381                 domainos) osname=apollo
2382                         osvers="$3"
2383                         ;;
2384                 dgux) osname=dgux 
2385                         osvers="$3"
2386                         ;;
2387                 dynixptx*) osname=dynixptx
2388                         osvers=`echo "$4"|sed 's/^v//'`
2389                         ;;
2390                 freebsd) osname=freebsd 
2391                         osvers="$3" ;;
2392                 genix) osname=genix ;;
2393                 hp*) osname=hpux 
2394                         osvers=`echo "$3" | $sed 's,.*\.\([0-9]*\.[0-9]*\),\1,'`
2395                         ;;
2396                 irix*) osname=irix
2397                         case "$3" in
2398                         4*) osvers=4 ;;
2399                         5*) osvers=5 ;;
2400                         *)      osvers="$3" ;;
2401                         esac
2402                         ;;
2403                 linux) osname=linux
2404                         case "$3" in
2405                         *)      osvers="$3" ;;
2406                         esac
2407                         ;;
2408                 MiNT) osname=mint
2409                         ;;
2410                 netbsd*) osname=netbsd
2411                         osvers="$3"
2412                         ;;
2413                 news-os) osvers="$3"
2414                         case "$3" in
2415                         4*) osname=newsos4 ;;
2416                         *) osname=newsos ;;
2417                         esac
2418                         ;;
2419                 next*) osname=next ;;
2420                 POSIX-BC | posix-bc ) osname=posix-bc
2421                         osvers="$3"
2422                         ;;
2423                 powerux | power_ux | powermax_os | powermaxos | \
2424                 powerunix | power_unix) osname=powerux
2425                         osvers="$3"
2426                         ;;
2427                 qnx) osname=qnx
2428                         osvers="$4"
2429                         ;;
2430                 solaris) osname=solaris
2431                         case "$3" in
2432                         5*) osvers=`echo $3 | $sed 's/^5/2/g'` ;;
2433                         *)      osvers="$3" ;;
2434                         esac
2435                         ;;
2436                 sunos) osname=sunos
2437                         case "$3" in
2438                         5*) osname=solaris
2439                                 osvers=`echo $3 | $sed 's/^5/2/g'` ;;
2440                         *)      osvers="$3" ;;
2441                         esac
2442                         ;;
2443                 titanos) osname=titanos
2444                         case "$3" in
2445                         1*) osvers=1 ;;
2446                         2*) osvers=2 ;;
2447                         3*) osvers=3 ;;
2448                         4*) osvers=4 ;;
2449                         *)      osvers="$3" ;;
2450                         esac
2451                         ;;
2452                 ultrix) osname=ultrix
2453                         osvers="$3"
2454                         ;;
2455                 osf1|mls+)      case "$5" in
2456                                 alpha)
2457                                         osname=dec_osf
2458                                         osvers=`sizer -v | awk '{print $3}' |  tr '[A-Z]' '[a-z]' | sed 's/^[xvt]//'`
2459                                         case "$osvers" in
2460                                         [1-9].[0-9]*) ;;
2461                                         *) osvers=`echo "$3" | sed 's/^[xvt]//'` ;;
2462                                         esac
2463                                         ;;
2464                         hp*)    osname=hp_osf1  ;;
2465                         mips)   osname=mips_osf1 ;;
2466                         esac
2467                         ;;
2468                 unixware) osname=svr5
2469                         osvers="$4"
2470                         ;;
2471                 uts) osname=uts
2472                         osvers="$3"
2473                         ;;
2474                 $2) case "$osname" in
2475                         *isc*) ;;
2476                         *freebsd*) ;;
2477                         svr*)
2478                                 : svr4.x or possibly later
2479                                 case "svr$3" in 
2480                                 ${osname}*)
2481                                         osname=svr$3
2482                                         osvers=$4
2483                                         ;;
2484                                 esac
2485                                 case "$osname" in
2486                                 svr4.0)
2487                                         : Check for ESIX
2488                                         if test -f /stand/boot ; then
2489                                                 eval `grep '^INITPROG=[a-z/0-9]*$' /stand/boot`
2490                                                 if test -n "$INITPROG" -a -f "$INITPROG"; then
2491                         isesix=`strings -a $INITPROG|grep 'ESIX SYSTEM V/386 Release 4.0'`
2492                                                         if test -n "$isesix"; then
2493                                                                 osname=esix4
2494                                                         fi
2495                                                 fi
2496                                         fi
2497                                         ;;
2498                                 esac
2499                                 ;;
2500                         *)      if test -f /etc/systemid; then
2501                                         osname=sco
2502                                         set `echo $3 | $sed 's/\./ /g'` $4
2503                                         if $test -f $src/hints/sco_$1_$2_$3.sh; then
2504                                                 osvers=$1.$2.$3
2505                                         elif $test -f $src/hints/sco_$1_$2.sh; then
2506                                                 osvers=$1.$2
2507                                         elif $test -f $src/hints/sco_$1.sh; then
2508                                                 osvers=$1
2509                                         fi
2510                                 else
2511                                         case "$osname" in
2512                                         '') : Still unknown.  Probably a generic Sys V.
2513                                                 osname="sysv"
2514                                                 osvers="$3"
2515                                                 ;;
2516                                         esac
2517                                 fi
2518                                 ;;
2519                         esac
2520                         ;;
2521                 *)      case "$osname" in
2522                         '') : Still unknown.  Probably a generic BSD.
2523                                 osname="$1"
2524                                 osvers="$3"
2525                                 ;;
2526                         esac
2527                         ;;
2528                 esac
2529         else
2530                 if test -f /vmunix -a -f $src/hints/news_os.sh; then
2531                         (what /vmunix | UU/tr '[A-Z]' '[a-z]') > UU/kernel.what 2>&1
2532                         if $contains news-os UU/kernel.what >/dev/null 2>&1; then
2533                                 osname=news_os
2534                         fi
2535                         $rm -f UU/kernel.what
2536                 elif test -d c:/.; then
2537                         set X $myuname
2538                         osname=os2
2539                         osvers="$5"
2540                 fi
2541         fi
2542         
2543         : Now look for a hint file osname_osvers, unless one has been
2544         : specified already.
2545         case "$hintfile" in
2546         ''|' ')
2547                 file=`echo "${osname}_${osvers}" | $sed -e 's%\.%_%g' -e 's%_$%%'`
2548                 : Also try without trailing minor version numbers.
2549                 xfile=`echo $file | $sed -e 's%_[^_]*$%%'`
2550                 xxfile=`echo $xfile | $sed -e 's%_[^_]*$%%'`
2551                 xxxfile=`echo $xxfile | $sed -e 's%_[^_]*$%%'`
2552                 xxxxfile=`echo $xxxfile | $sed -e 's%_[^_]*$%%'`
2553                 case "$file" in
2554                 '') dflt=none ;;
2555                 *)  case "$osvers" in
2556                         '') dflt=$file
2557                                 ;;
2558                         *)  if $test -f $src/hints/$file.sh ; then
2559                                         dflt=$file
2560                                 elif $test -f $src/hints/$xfile.sh ; then
2561                                         dflt=$xfile
2562                                 elif $test -f $src/hints/$xxfile.sh ; then
2563                                         dflt=$xxfile
2564                                 elif $test -f $src/hints/$xxxfile.sh ; then
2565                                         dflt=$xxxfile
2566                                 elif $test -f $src/hints/$xxxxfile.sh ; then
2567                                         dflt=$xxxxfile
2568                                 elif $test -f "$src/hints/${osname}.sh" ; then
2569                                         dflt="${osname}"
2570                                 else
2571                                         dflt=none
2572                                 fi
2573                                 ;;
2574                         esac
2575                         ;;
2576                 esac
2577                 if $test -f Policy.sh ; then
2578                         case "$dflt" in
2579                         *Policy*) ;;
2580                         none) dflt="Policy" ;;
2581                         *) dflt="Policy $dflt" ;;
2582                         esac
2583                 fi
2584                 ;;
2585         *)
2586                 dflt=`echo $hintfile | $sed 's/\.sh$//'`
2587                 ;;
2588         esac
2589
2590         if $test -f Policy.sh ; then
2591                 $cat <<EOM
2592
2593 There's also a Policy hint file available, which should make the
2594 site-specific (policy) questions easier to answer.
2595 EOM
2596
2597         fi
2598
2599         $cat <<EOM
2600
2601 You may give one or more space-separated answers, or "none" if appropriate.
2602 A well-behaved OS will have no hints, so answering "none" or just "Policy"
2603 is a good thing.  DO NOT give a wrong version or a wrong OS.
2604
2605 EOM
2606
2607         rp="Which of these apply, if any?"
2608         . UU/myread
2609         tans=$ans
2610         for file in $tans; do
2611                 if $test X$file = XPolicy -a -f Policy.sh; then
2612                         . Policy.sh
2613                         $cat Policy.sh >> UU/config.sh
2614                 elif $test -f $src/hints/$file.sh; then
2615                         . $src/hints/$file.sh
2616                         $cat $src/hints/$file.sh >> UU/config.sh
2617                 elif $test X$tans = X -o X$tans = Xnone ; then
2618                         : nothing
2619                 else
2620                         : Give one chance to correct a possible typo.
2621                         echo "$file.sh does not exist"
2622                         dflt=$file
2623                         rp="hint to use instead?"
2624                         . UU/myread
2625                         for file in $ans; do
2626                                 if $test -f "$src/hints/$file.sh"; then
2627                                         . $src/hints/$file.sh
2628                                         $cat $src/hints/$file.sh >> UU/config.sh
2629                                 elif $test X$ans = X -o X$ans = Xnone ; then
2630                                         : nothing
2631                                 else
2632                                         echo "$file.sh does not exist -- ignored."
2633                                 fi
2634                         done
2635                 fi
2636         done
2637
2638         hint=recommended
2639         : Remember our hint file for later.
2640         if $test -f "$src/hints/$file.sh" ; then
2641                 hintfile="$file"
2642         else
2643                 hintfile=''
2644         fi
2645 fi
2646 cd UU
2647 ;;
2648 *)
2649         echo " "
2650         echo "Fetching default answers from $config_sh..." >&4
2651         tmp_n="$n"
2652         tmp_c="$c"
2653         cd ..
2654         cp $config_sh config.sh 2>/dev/null
2655         chmod +w config.sh
2656         . ./config.sh
2657         cd UU
2658         cp ../config.sh .
2659         n="$tmp_n"
2660         c="$tmp_c"
2661         hint=previous
2662         ;;
2663 esac
2664 test "$override" && . ./optdef.sh
2665 myuname="$newmyuname"
2666
2667 : Restore computed paths
2668 for file in $loclist $trylist; do
2669         eval $file="\$_$file"
2670 done
2671
2672 cat << EOM
2673
2674 Configure uses the operating system name and version to set some defaults.
2675 The default value is probably right if the name rings a bell. Otherwise,
2676 since spelling matters for me, either accept the default or answer "none"
2677 to leave it blank.
2678
2679 EOM
2680 case "$osname" in
2681         ''|' ')
2682                 case "$hintfile" in
2683                 ''|' '|none) dflt=none ;;
2684                 *)  dflt=`echo $hintfile | $sed -e 's/\.sh$//' -e 's/_.*$//'` ;;
2685                 esac
2686                 ;;
2687         *) dflt="$osname" ;;
2688 esac
2689 rp="Operating system name?"
2690 . ./myread
2691 case "$ans" in
2692 none)  osname='' ;;
2693 *) osname=`echo "$ans" | $sed -e 's/[   ][      ]*/_/g' | ./tr '[A-Z]' '[a-z]'`;;
2694 esac
2695 echo " "
2696 case "$osvers" in
2697         ''|' ')
2698                 case "$hintfile" in
2699                 ''|' '|none) dflt=none ;;
2700                 *)      dflt=`echo $hintfile | $sed -e 's/\.sh$//' -e 's/^[^_]*//'`
2701                         dflt=`echo $dflt | $sed -e 's/^_//' -e 's/_/./g'`
2702                         case "$dflt" in
2703                         ''|' ') dflt=none ;;
2704                         esac
2705                         ;;
2706                 esac
2707                 ;;
2708         *) dflt="$osvers" ;;
2709 esac
2710 rp="Operating system version?"
2711 . ./myread
2712 case "$ans" in
2713 none)  osvers='' ;;
2714 *) osvers="$ans" ;;
2715 esac
2716
2717
2718 . ./posthint.sh
2719
2720 : who configured the system
2721 cf_time=`LC_ALL=C; LANGUAGE=C; export LC_ALL; export LANGUAGE; $date 2>&1`
2722 cf_by=`(logname) 2>/dev/null`
2723 case "$cf_by" in
2724 "")
2725         cf_by=`(whoami) 2>/dev/null`
2726         case "$cf_by" in
2727         "") cf_by=unknown ;;
2728         esac ;;
2729 esac
2730
2731 : set up the script used to warn in case of inconsistency
2732 cat <<EOS >whoa
2733 $startsh
2734 EOS
2735 cat <<'EOSC' >>whoa
2736 dflt=y
2737 echo " "
2738 echo "*** WHOA THERE!!! ***" >&4
2739 echo "    The $hint value for \$$var on this machine was \"$was\"!" >&4
2740 rp="    Keep the $hint value?"
2741 . ./myread
2742 case "$ans" in
2743 y) td=$was; tu=$was;;
2744 esac
2745 EOSC
2746
2747 : function used to set $1 to $val
2748 setvar='var=$1; eval "was=\$$1"; td=$define; tu=$undef;
2749 case "$val$was" in
2750 $define$undef) . ./whoa; eval "$var=\$td";;
2751 $undef$define) . ./whoa; eval "$var=\$tu";;
2752 *) eval "$var=$val";;
2753 esac'
2754
2755 case "$usethreads" in
2756 $define|true|[yY]*)     dflt='y';;
2757 *) dflt='n';;
2758 esac
2759 cat <<EOM
2760
2761 Perl can be built to take advantage of threads on some systems.
2762 To do so, Configure can be run with -Dusethreads.
2763
2764 Note that threading is a highly experimental feature, and
2765 some known race conditions still remain.  If you choose to try
2766 it, be very sure to not actually deploy it for production
2767 purposes.  README.threads has more details, and is required
2768 reading if you enable threads.
2769
2770 If this doesn't make any sense to you, just accept the default '$dflt'.
2771 EOM
2772 rp='Build a threading Perl?'
2773 . ./myread
2774 case "$ans" in
2775 y|Y)    val="$define" ;;
2776 *)      val="$undef" ;;
2777 esac
2778 set usethreads
2779 eval $setvar
2780
2781 case "$usethreads" in
2782 $define)
2783         $cat <<EOM
2784
2785 As of 5.5.640, Perl has two different internal threading implementations,
2786 the 5.005 version (5005threads) and an interpreter-based version
2787 (ithreads) that has one interpreter per thread.  Both are very 
2788 experimental.  This arrangement exists to help developers work out
2789 which one is better.
2790
2791 If you're a casual user, you probably don't want interpreter-threads
2792 at this time.  There doesn't yet exist a way to create threads from
2793 within Perl in this model, i.e., "use Thread;" will NOT work.
2794 EOM
2795         : Default to ithreads unless overridden on command line or with
2796         : old config.sh
2797         dflt='y'
2798         case "$use5005threads" in
2799                 $define|true|[yY]*) dflt='n';;
2800         esac
2801         case "$useithreads" in
2802                 $undef|false|[nN]*) dflt='n';;
2803         esac
2804         rp='Use interpreter-based ithreads?'
2805         . ./myread
2806         case "$ans" in
2807         y|Y)    val="$define" ;;
2808         *)      val="$undef" ;;
2809         esac
2810         set useithreads
2811         eval $setvar
2812         : Now set use5005threads to the opposite value.
2813         case "$useithreads" in
2814         $define) val="$undef" ;;
2815         *) val="$define" ;;
2816         esac
2817         set use5005threads
2818         eval $setvar
2819         ;;
2820 *)
2821         useithreads="$undef"
2822         use5005threads="$undef"
2823         ;;
2824 esac
2825
2826 case "$d_oldpthreads" in
2827 '')     : Configure tests would be welcome here.  For now, assume undef.
2828         val="$undef" ;;
2829 *)      val="$d_oldpthreads" ;;
2830 esac
2831 set d_oldpthreads
2832 eval $setvar
2833
2834
2835 case "$usethreads" in
2836 "$define"|true|[yY]*)
2837 : Look for a hint-file generated 'call-back-unit'.  If the
2838 : user has specified that a threading perl is to be built,
2839 : we may need to set or change some other defaults.
2840         if $test -f usethreads.cbu; then
2841                 echo "Your platform has some specific hints for threaded builds, using them..."
2842                 . ./usethreads.cbu
2843         else
2844                 $cat <<EOM
2845 (Your platform doesn't have any specific hints for threaded builds.
2846  Assuming POSIX threads, then.)
2847 EOM
2848         fi
2849         ;;
2850 esac
2851
2852 cat <<EOM
2853
2854 Perl can be built so that multiple Perl interpreters can coexist
2855 within the same Perl executable.
2856 EOM
2857
2858 case "$useithreads" in
2859 $define)
2860         cat <<EOM
2861 This multiple interpreter support is required for interpreter-based threads.
2862 EOM
2863         val="$define"
2864         ;;
2865 *)      case "$usemultiplicity" in
2866         $define|true|[yY]*)     dflt='y';;
2867         *) dflt='n';;
2868         esac
2869         echo " "
2870         echo "If this doesn't make any sense to you, just accept the default '$dflt'."
2871         rp='Build Perl for multiplicity?'
2872         . ./myread
2873         case "$ans" in
2874         y|Y)    val="$define" ;;
2875         *)      val="$undef" ;;
2876         esac
2877         ;;
2878 esac
2879 set usemultiplicity
2880 eval $setvar
2881
2882 : determine where manual pages are on this system
2883 echo " "
2884 case "$sysman" in
2885 '') 
2886         syspath='/usr/man/man1 /usr/man/mann /usr/man/manl /usr/man/local/man1'
2887         syspath="$syspath /usr/man/u_man/man1 /usr/share/man/man1"
2888         syspath="$syspath /usr/catman/u_man/man1 /usr/man/l_man/man1"
2889         syspath="$syspath /usr/local/man/u_man/man1 /usr/local/man/l_man/man1"
2890         syspath="$syspath /usr/man/man.L /local/man/man1 /usr/local/man/man1"
2891         sysman=`./loc . /usr/man/man1 $syspath`
2892         ;;
2893 esac
2894 if $test -d "$sysman"; then
2895         echo "System manual is in $sysman." >&4
2896 else
2897         echo "Could not find manual pages in source form." >&4
2898 fi
2899
2900 : see what memory models we can support
2901 case "$models" in
2902 '')
2903         $cat >pdp11.c <<'EOP'
2904 int main() {
2905 #ifdef pdp11
2906         exit(0);
2907 #else
2908         exit(1);
2909 #endif
2910 }
2911 EOP
2912         case "$cc" in
2913         '') modelcc="$cc" ;;
2914         *) modelcc="cc" ;;
2915         esac
2916         ( $modelcc -o pdp11 pdp11.c ) >/dev/null 2>&1
2917         if $test -f pdp11 && ./pdp11 2>/dev/null; then
2918                 dflt='unsplit split'
2919         else
2920                 tans=`./loc . X /lib/small /lib/large /usr/lib/small /usr/lib/large /lib/medium /usr/lib/medium /lib/huge`
2921                 case "$tans" in
2922                 X) dflt='none';;
2923                 *) if $test -d /lib/small || $test -d /usr/lib/small; then
2924                                 dflt='small'
2925                         else
2926                                 dflt=''
2927                         fi
2928                         if $test -d /lib/medium || $test -d /usr/lib/medium; then
2929                                 dflt="$dflt medium"
2930                         fi
2931                         if $test -d /lib/large || $test -d /usr/lib/large; then
2932                                 dflt="$dflt large"
2933                         fi
2934                         if $test -d /lib/huge || $test -d /usr/lib/huge; then
2935                                 dflt="$dflt huge"
2936                         fi
2937                 esac
2938         fi;;
2939 *) dflt="$models";;
2940 esac
2941 $cat <<EOM
2942  
2943 Some systems have different model sizes.  On most systems they are called
2944 small, medium, large, and huge.  On the PDP11 they are called unsplit and
2945 split.  If your system doesn't support different memory models, say "none".
2946 If you wish to force everything to one memory model, say "none" here and
2947 put the appropriate flags later when it asks you for other cc and ld flags.
2948 Venix systems may wish to put "none" and let the compiler figure things out.
2949 (In the following question multiple model names should be space separated.)
2950
2951 The default for most systems is "none".
2952
2953 EOM
2954 rp="Which memory models are supported?"
2955 . ./myread
2956 models="$ans"
2957
2958 case "$models" in
2959 none)
2960         small=''
2961         medium=''
2962         large=''
2963         huge=''
2964         unsplit=''
2965         split=''
2966         ;;
2967 *split)
2968         case "$split" in
2969         '') if $contains '\-i' $sysman/ld.1 >/dev/null 2>&1 || \
2970                          $contains '\-i' $sysman/cc.1 >/dev/null 2>&1; then
2971                         dflt='-i'
2972                 else
2973                         dflt='none'
2974                 fi;;
2975         *) dflt="$split";;
2976         esac
2977         rp="What flag indicates separate I and D space?"
2978         . ./myread
2979         tans="$ans"
2980         case "$tans" in
2981         none) tans='';;
2982         esac
2983         split="$tans"
2984         unsplit='';;
2985 *large*|*small*|*medium*|*huge*)
2986         case "$models" in
2987         *large*)
2988                 case "$large" in
2989                 '') dflt='-Ml';;
2990                 *) dflt="$large";;
2991                 esac
2992         rp="What flag indicates large model?"
2993         . ./myread
2994         tans="$ans"
2995         case "$tans" in
2996         none) tans='';
2997         esac
2998         large="$tans";;
2999         *) large='';;
3000         esac
3001         case "$models" in
3002         *huge*) case "$huge" in
3003                 '') dflt='-Mh';;
3004                 *) dflt="$huge";;
3005                 esac
3006                 rp="What flag indicates huge model?"
3007                 . ./myread
3008                 tans="$ans"
3009                 case "$tans" in
3010                 none) tans='';
3011                 esac
3012                 huge="$tans";;
3013         *) huge="$large";;
3014         esac
3015         case "$models" in
3016         *medium*) case "$medium" in
3017                 '') dflt='-Mm';;
3018                 *) dflt="$medium";;
3019                 esac
3020                 rp="What flag indicates medium model?"
3021                 . ./myread
3022                 tans="$ans"
3023                 case "$tans" in
3024                 none) tans='';
3025                 esac
3026                 medium="$tans";;
3027         *) medium="$large";;
3028         esac
3029         case "$models" in
3030         *small*) case "$small" in
3031                 '') dflt='none';;
3032                 *) dflt="$small";;
3033                 esac
3034                 rp="What flag indicates small model?"
3035                 . ./myread
3036                 tans="$ans"
3037                 case "$tans" in
3038                 none) tans='';
3039                 esac
3040                 small="$tans";;
3041         *) small='';;
3042         esac
3043         ;;
3044 *)
3045         echo "Unrecognized memory models--you may have to edit Makefile.SH" >&4
3046         ;;
3047 esac
3048 $rm -f pdp11.* pdp11
3049
3050 : make some quick guesses about what we are up against
3051 echo " "
3052 $echo $n "Hmm...  $c"
3053 echo exit 1 >bsd
3054 echo exit 1 >usg
3055 echo exit 1 >v7
3056 echo exit 1 >osf1
3057 echo exit 1 >eunice
3058 echo exit 1 >xenix
3059 echo exit 1 >venix
3060 echo exit 1 >os2
3061 d_bsd="$undef"
3062 $cat /usr/include/signal.h /usr/include/sys/signal.h >foo 2>/dev/null
3063 if test -f /osf_boot || $contains 'OSF/1' /usr/include/ctype.h >/dev/null 2>&1
3064 then
3065         echo "Looks kind of like an OSF/1 system, but we'll see..."
3066         echo exit 0 >osf1
3067 elif test `echo abc | tr a-z A-Z` = Abc ; then
3068         xxx=`./loc addbib blurfl $pth`
3069         if $test -f $xxx; then
3070         echo "Looks kind of like a USG system with BSD features, but we'll see..."
3071                 echo exit 0 >bsd
3072                 echo exit 0 >usg
3073         else
3074                 if $contains SIGTSTP foo >/dev/null 2>&1 ; then
3075                         echo "Looks kind of like an extended USG system, but we'll see..."
3076                 else
3077                         echo "Looks kind of like a USG system, but we'll see..."
3078                 fi
3079                 echo exit 0 >usg
3080         fi
3081 elif $contains SIGTSTP foo >/dev/null 2>&1 ; then
3082         echo "Looks kind of like a BSD system, but we'll see..."
3083         d_bsd="$define"
3084         echo exit 0 >bsd
3085 else
3086         echo "Looks kind of like a Version 7 system, but we'll see..."
3087         echo exit 0 >v7
3088 fi
3089 case "$eunicefix" in
3090 *unixtovms*)
3091         $cat <<'EOI'
3092 There is, however, a strange, musty smell in the air that reminds me of
3093 something...hmm...yes...I've got it...there's a VMS nearby, or I'm a Blit.
3094 EOI
3095         echo exit 0 >eunice
3096         d_eunice="$define"
3097 : it so happens the Eunice I know will not run shell scripts in Unix format
3098         ;;
3099 *)
3100         echo " "
3101         echo "Congratulations.  You aren't running Eunice."
3102         d_eunice="$undef"
3103         ;;
3104 esac
3105 : Detect OS2.  The p_ variable is set above in the Head.U unit.
3106 case "$p_" in
3107 :) ;;
3108 *)
3109         $cat <<'EOI'
3110 I have the feeling something is not exactly right, however...don't tell me...
3111 lemme think...does HAL ring a bell?...no, of course, you're only running OS/2!
3112 EOI
3113         echo exit 0 >os2
3114         ;;
3115 esac
3116 if test -f /xenix; then
3117         echo "Actually, this looks more like a XENIX system..."
3118         echo exit 0 >xenix
3119         d_xenix="$define"
3120 else
3121         echo " "
3122         echo "It's not Xenix..."
3123         d_xenix="$undef"
3124 fi
3125 chmod +x xenix
3126 $eunicefix xenix
3127 if test -f /venix; then
3128         echo "Actually, this looks more like a VENIX system..."
3129         echo exit 0 >venix
3130 else
3131         echo " "
3132         if ./xenix; then
3133                 : null
3134         else
3135                 echo "Nor is it Venix..."
3136         fi
3137 fi
3138 chmod +x bsd usg v7 osf1 eunice xenix venix os2
3139 $eunicefix bsd usg v7 osf1 eunice xenix venix os2
3140 $rm -f foo
3141
3142 : see if we need a special compiler
3143 echo " "
3144 if ./usg; then
3145         case "$cc" in
3146         '') case "$Mcc" in
3147                 /*) dflt='Mcc';;
3148                 *) case "$large" in
3149                         -M*) dflt='cc';;
3150                         *)      if $contains '\-M' $sysman/cc.1 >/dev/null 2>&1 ; then
3151                                         if $contains '\-M' $sysman/cpp.1 >/dev/null 2>&1; then
3152                                                 dflt='cc'
3153                                         else
3154                                                 dflt='cc -M'
3155                                         fi
3156                                 else
3157                                         dflt='cc'
3158                                 fi;;
3159                         esac;;
3160                 esac;;
3161         *)  dflt="$cc";;
3162         esac
3163         case "$dflt" in
3164         *M*)    $cat <<'EOM'
3165 On some older systems the default C compiler will not resolve multiple global
3166 references that happen to have the same name.  On some such systems the "Mcc"
3167 command may be used to force these to be resolved.  On other systems a "cc -M"
3168 command is required.  (Note that the -M flag on other systems indicates a
3169 memory model to use!) If you have the Gnu C compiler, you might wish to use
3170 that instead.
3171
3172 EOM
3173         ;;
3174         esac
3175         rp="Use which C compiler?"
3176         . ./myread
3177         cc="$ans"
3178 else
3179         case "$cc" in
3180         '') dflt=cc;;
3181         *) dflt="$cc";;
3182         esac
3183         rp="Use which C compiler?"
3184         . ./myread
3185         cc="$ans"
3186 fi
3187 : Look for a hint-file generated 'call-back-unit'.  Now that the
3188 : user has specified the compiler, we may need to set or change some
3189 : other defaults.
3190 if $test -f cc.cbu; then
3191     . ./cc.cbu
3192 fi
3193 . ./checkcc
3194
3195 echo " "
3196 echo "Checking for GNU cc in disguise and/or its version number..." >&4
3197 $cat >gccvers.c <<EOM
3198 #include <stdio.h>
3199 int main() {
3200 #ifdef __GNUC__
3201 #ifdef __VERSION__
3202         printf("%s\n", __VERSION__);
3203 #else
3204         printf("%s\n", "1");
3205 #endif
3206 #endif
3207         exit(0);
3208 }
3209 EOM
3210 if $cc $ldflags -o gccvers gccvers.c; then
3211         gccversion=`./gccvers`
3212         case "$gccversion" in
3213         '') echo "You are not using GNU cc." ;;
3214         *)  echo "You are using GNU cc $gccversion."
3215             ;;
3216         esac
3217 else
3218         echo " "
3219         echo "*** WHOA THERE!!! ***" >&4
3220         echo "    Your C compiler \"$cc\" doesn't seem to be working!" >&4
3221         case "$knowitall" in
3222         '')
3223         echo "    You'd better start hunting for one and let me know about it." >&4
3224                 exit 1
3225                 ;;
3226         esac
3227 fi
3228 $rm -f gccvers*
3229 case "$gccversion" in
3230 1*) cpp=`./loc gcc-cpp $cpp $pth` ;;
3231 esac
3232 case "$gccversion" in
3233 '') gccosandvers='' ;;
3234 *) gccshortvers=`echo "$gccversion"|sed 's/ .*//'`
3235    gccosandvers=`$cc -v 2>&1|grep '/specs$'|sed "s!.*/[^-/]*-[^-/]*-\([^-/]*\)/$gccshortvers/specs!\1!"`
3236    gccshortvers=''
3237    case "$gccosandvers" in
3238    $osname) gccosandvers='' ;; # linux gccs seem to have no linux osvers, grr
3239    $osname$osvers) ;; # looking good
3240    $osname*) cat <<EOM >&4
3241
3242 *** WHOA THERE!!! ***
3243
3244     Your gcc has not been compiled for the exact release of
3245     your operating system ($gccosandvers versus $osname$osvers).
3246
3247     In general it is a good idea to keep gcc synchronized with
3248     the operating system because otherwise serious problems
3249     may ensue when trying to compile software, like Perl.
3250
3251     I'm trying to be optimistic here, though, and will continue.
3252     If later during the configuration and build icky compilation
3253     problems appear (headerfile conflicts being the most common
3254     manifestation), I suggest reinstalling the gcc to match
3255     your operating system release.
3256
3257 EOM
3258       ;;
3259    *) gccosandvers='' ;; # failed to parse, better be silent
3260    esac
3261    ;;
3262 esac
3263
3264
3265
3266
3267 : see how we invoke the C preprocessor
3268 echo " "
3269 echo "Now, how can we feed standard input to your C preprocessor..." >&4
3270 cat <<'EOT' >testcpp.c
3271 #define ABC abc
3272 #define XYZ xyz
3273 ABC.XYZ
3274 EOT
3275 cd ..
3276 if test ! -f cppstdin; then
3277         if test "X$osname" = "Xaix" -a "X$gccversion" = X; then
3278                 # AIX cc -E doesn't show the absolute headerfile
3279                 # locations but we'll cheat by using the -M flag.
3280                 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
3281         else
3282                 echo 'cat >.$$.c; '"$cc"' -E ${1+"$@"} .$$.c; rm .$$.c' >cppstdin
3283         fi
3284 else
3285         echo "Keeping your $hint cppstdin wrapper."
3286 fi
3287 chmod 755 cppstdin
3288 wrapper=`pwd`/cppstdin
3289 ok='false'
3290 cd UU
3291
3292 if $test "X$cppstdin" != "X" && \
3293         $cppstdin $cppminus <testcpp.c >testcpp.out 2>&1 && \
3294         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
3295 then
3296         echo "You used to use $cppstdin $cppminus so we'll use that again."
3297         case "$cpprun" in
3298         '') echo "But let's see if we can live without a wrapper..." ;;
3299         *)
3300                 if $cpprun $cpplast <testcpp.c >testcpp.out 2>&1 && \
3301                         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
3302                 then
3303                         echo "(And we'll use $cpprun $cpplast to preprocess directly.)"
3304                         ok='true'
3305                 else
3306                         echo "(However, $cpprun $cpplast does not work, let's see...)"
3307                 fi
3308                 ;;
3309         esac
3310 else
3311         case "$cppstdin" in
3312         '') ;;
3313         *)
3314                 echo "Good old $cppstdin $cppminus does not seem to be of any help..."
3315                 ;;
3316         esac
3317 fi
3318
3319 if $ok; then
3320         : nothing
3321 elif echo 'Maybe "'"$cc"' -E" will work...'; \
3322         $cc -E <testcpp.c >testcpp.out 2>&1; \
3323         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3324         echo "Yup, it does."
3325         x_cpp="$cc -E"
3326         x_minus='';
3327 elif echo 'Nope...maybe "'"$cc"' -E -" will work...'; \
3328         $cc -E - <testcpp.c >testcpp.out 2>&1; \
3329         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3330         echo "Yup, it does."
3331         x_cpp="$cc -E"
3332         x_minus='-';
3333 elif echo 'Nope...maybe "'"$cc"' -P" will work...'; \
3334         $cc -P <testcpp.c >testcpp.out 2>&1; \
3335         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3336         echo "Yipee, that works!"
3337         x_cpp="$cc -P"
3338         x_minus='';
3339 elif echo 'Nope...maybe "'"$cc"' -P -" will work...'; \
3340         $cc -P - <testcpp.c >testcpp.out 2>&1; \
3341         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3342         echo "At long last!"
3343         x_cpp="$cc -P"
3344         x_minus='-';
3345 elif echo 'No such luck, maybe "'$cpp'" will work...'; \
3346         $cpp <testcpp.c >testcpp.out 2>&1; \
3347         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3348         echo "It works!"
3349         x_cpp="$cpp"
3350         x_minus='';
3351 elif echo 'Nixed again...maybe "'$cpp' -" will work...'; \
3352         $cpp - <testcpp.c >testcpp.out 2>&1; \
3353         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3354         echo "Hooray, it works!  I was beginning to wonder."
3355         x_cpp="$cpp"
3356         x_minus='-';
3357 elif echo 'Uh-uh.  Time to get fancy.  Trying a wrapper...'; \
3358         $wrapper <testcpp.c >testcpp.out 2>&1; \
3359         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3360         x_cpp="$wrapper"
3361         x_minus=''
3362         echo "Eureka!"
3363 else
3364         dflt=''
3365         rp="No dice.  I can't find a C preprocessor.  Name one:"
3366         . ./myread
3367         x_cpp="$ans"
3368         x_minus=''
3369         $x_cpp <testcpp.c >testcpp.out 2>&1
3370         if $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3371                 echo "OK, that will do." >&4
3372         else
3373 echo "Sorry, I can't get that to work.  Go find one and rerun Configure." >&4
3374                 exit 1
3375         fi
3376 fi
3377
3378 case "$ok" in
3379 false)
3380         cppstdin="$x_cpp"
3381         cppminus="$x_minus"
3382         cpprun="$x_cpp"
3383         cpplast="$x_minus"
3384         set X $x_cpp
3385         shift
3386         case "$1" in
3387         "$cpp")
3388                 echo "Perhaps can we force $cc -E using a wrapper..."
3389                 if $wrapper <testcpp.c >testcpp.out 2>&1; \
3390                         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
3391                 then
3392                         echo "Yup, we can."
3393                         cppstdin="$wrapper"
3394                         cppminus='';
3395                 else
3396                         echo "Nope, we'll have to live without it..."
3397                 fi
3398                 ;;
3399         esac
3400         case "$cpprun" in
3401         "$wrapper")
3402                 cpprun=''
3403                 cpplast=''
3404                 ;;
3405         esac
3406         ;;
3407 esac
3408
3409 case "$cppstdin" in
3410 "$wrapper"|'cppstdin') ;;
3411 *) $rm -f $wrapper;;
3412 esac
3413 $rm -f testcpp.c testcpp.out
3414
3415 : decide how portable to be.  Allow command line overrides.
3416 case "$d_portable" in
3417 "$undef") ;;
3418 *)      d_portable="$define" ;;
3419 esac
3420
3421 : set up shell script to do ~ expansion
3422 cat >filexp <<EOSS
3423 $startsh
3424 : expand filename
3425 case "\$1" in
3426  ~/*|~)
3427         echo \$1 | $sed "s|~|\${HOME-\$LOGDIR}|"
3428         ;;
3429  ~*)
3430         if $test -f /bin/csh; then
3431                 /bin/csh -f -c "glob \$1"
3432                 failed=\$?
3433                 echo ""
3434                 exit \$failed
3435         else
3436                 name=\`$expr x\$1 : '..\([^/]*\)'\`
3437                 dir=\`$sed -n -e "/^\${name}:/{s/^[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:\([^:]*\).*"'\$'"/\1/" -e p -e q -e '}' </etc/passwd\`
3438                 if $test ! -d "\$dir"; then
3439                         me=\`basename \$0\`
3440                         echo "\$me: can't locate home directory for: \$name" >&2
3441                         exit 1
3442                 fi
3443                 case "\$1" in
3444                 */*)
3445                         echo \$dir/\`$expr x\$1 : '..[^/]*/\(.*\)'\`
3446                         ;;
3447                 *)
3448                         echo \$dir
3449                         ;;
3450                 esac
3451         fi
3452         ;;
3453 *)
3454         echo \$1
3455         ;;
3456 esac
3457 EOSS
3458 chmod +x filexp
3459 $eunicefix filexp
3460
3461 : now set up to get a file name
3462 cat <<EOS >getfile
3463 $startsh
3464 EOS
3465 cat <<'EOSC' >>getfile
3466 tilde=''
3467 fullpath=''
3468 already=''
3469 skip=''
3470 none_ok=''
3471 exp_file=''
3472 nopath_ok=''
3473 orig_rp="$rp"
3474 orig_dflt="$dflt"
3475 case "$gfpth" in
3476 '') gfpth='.' ;;
3477 esac
3478
3479 case "$fn" in
3480 *\(*)
3481         expr $fn : '.*(\(.*\)).*' | tr ',' $trnl >getfile.ok
3482         fn=`echo $fn | sed 's/(.*)//'`
3483         ;;
3484 esac
3485
3486 case "$fn" in
3487 *:*)
3488         loc_file=`expr $fn : '.*:\(.*\)'`
3489         fn=`expr $fn : '\(.*\):.*'`
3490         ;;
3491 esac
3492
3493 case "$fn" in
3494 *~*) tilde=true;;
3495 esac
3496 case "$fn" in
3497 */*) fullpath=true;;
3498 esac
3499 case "$fn" in
3500 *+*) skip=true;;
3501 esac
3502 case "$fn" in
3503 *n*) none_ok=true;;
3504 esac
3505 case "$fn" in
3506 *e*) exp_file=true;;
3507 esac
3508 case "$fn" in
3509 *p*) nopath_ok=true;;
3510 esac
3511
3512 case "$fn" in
3513 *f*) type='File';;
3514 *d*) type='Directory';;
3515 *l*) type='Locate';;
3516 esac
3517
3518 what="$type"
3519 case "$what" in
3520 Locate) what='File';;
3521 esac
3522
3523 case "$exp_file" in
3524 '')
3525         case "$d_portable" in
3526         "$define") ;;
3527         *) exp_file=true;;
3528         esac
3529         ;;
3530 esac
3531
3532 cd ..
3533 while test "$type"; do
3534         redo=''
3535         rp="$orig_rp"
3536         dflt="$orig_dflt"
3537         case "$tilde" in
3538         true) rp="$rp (~name ok)";;
3539         esac
3540         . UU/myread
3541         if test -f UU/getfile.ok && \
3542                 $contains "^$ans\$" UU/getfile.ok >/dev/null 2>&1
3543         then
3544                 value="$ans"
3545                 ansexp="$ans"
3546                 break
3547         fi
3548         case "$ans" in
3549         none)
3550                 value=''
3551                 ansexp=''
3552                 case "$none_ok" in
3553                 true) type='';;
3554                 esac
3555                 ;;
3556         *)
3557                 case "$tilde" in
3558                 '') value="$ans"
3559                         ansexp="$ans";;
3560                 *)
3561                         value=`UU/filexp $ans`
3562                         case $? in
3563                         0)
3564                                 if test "$ans" != "$value"; then
3565                                         echo "(That expands to $value on this system.)"
3566                                 fi
3567                                 ;;
3568                         *) value="$ans";;
3569                         esac
3570                         ansexp="$value"
3571                         case "$exp_file" in
3572                         '') value="$ans";;
3573                         esac
3574                         ;;
3575                 esac
3576                 case "$fullpath" in
3577                 true)
3578                         case "$ansexp" in
3579                         /*) value="$ansexp" ;;
3580                         [a-zA-Z]:/*) value="$ansexp" ;;
3581                         *)
3582                                 redo=true
3583                                 case "$already" in
3584                                 true)
3585                                 echo "I shall only accept a full path name, as in /bin/ls." >&4
3586                                 echo "Use a ! shell escape if you wish to check pathnames." >&4
3587                                         ;;
3588                                 *)
3589                                 echo "Please give a full path name, starting with slash." >&4
3590                                         case "$tilde" in
3591                                         true)
3592                                 echo "Note that using ~name is ok provided it expands well." >&4
3593                                                 already=true
3594                                                 ;;
3595                                         esac
3596                                 esac
3597                                 ;;
3598                         esac
3599                         ;;
3600                 esac
3601                 case "$redo" in
3602                 '')
3603                         case "$type" in
3604                         File)
3605                                 for fp in $gfpth; do
3606                                         if test "X$fp" = X.; then
3607                                             pf="$ansexp"
3608                                         else    
3609                                             pf="$fp/$ansexp"
3610                                         fi
3611                                         if test -f "$pf"; then
3612                                                 type=''
3613                                         elif test -r "$pf" || (test -h "$pf") >/dev/null 2>&1
3614                                         then
3615                                                 echo "($value is not a plain file, but that's ok.)"
3616                                                 type=''
3617                                         fi
3618                                         if test X"$type" = X; then
3619                                             value="$pf"
3620                                             break
3621                                         fi
3622                                 done
3623                                 ;;
3624                         Directory)
3625                                 for fp in $gfpth; do
3626                                         if test "X$fp" = X.; then
3627                                             dir="$ans"
3628                                             direxp="$ansexp"
3629                                         else    
3630                                             dir="$fp/$ansexp"
3631                                             direxp="$fp/$ansexp"
3632                                         fi
3633                                         if test -d "$direxp"; then
3634                                                 type=''
3635                                                 value="$dir"
3636                                                 break
3637                                         fi
3638                                 done
3639                                 ;;
3640                         Locate)
3641                                 if test -d "$ansexp"; then
3642                                         echo "(Looking for $loc_file in directory $value.)"
3643                                         value="$value/$loc_file"
3644                                         ansexp="$ansexp/$loc_file"
3645                                 fi
3646                                 if test -f "$ansexp"; then
3647                                         type=''
3648                                 fi
3649                                 case "$nopath_ok" in
3650                                 true)   case "$value" in
3651                                         */*) ;;
3652                                         *)      echo "Assuming $value will be in people's path."
3653                                                 type=''
3654                                                 ;;
3655                                         esac
3656                                         ;;
3657                                 esac
3658                                 ;;
3659                         esac
3660
3661                         case "$skip" in
3662                         true) type='';
3663                         esac
3664
3665                         case "$type" in
3666                         '') ;;
3667                         *)
3668                                 if test "$fastread" = yes; then
3669                                         dflt=y
3670                                 else
3671                                         dflt=n
3672                                 fi
3673                                 rp="$what $value doesn't exist.  Use that name anyway?"
3674                                 . UU/myread
3675                                 dflt=''
3676                                 case "$ans" in
3677                                 y*) type='';;
3678                                 *) echo " ";;
3679                                 esac
3680                                 ;;
3681                         esac
3682                         ;;
3683                 esac
3684                 ;;
3685         esac
3686 done
3687 cd UU
3688 ans="$value"
3689 rp="$orig_rp"
3690 dflt="$orig_dflt"
3691 rm -f getfile.ok
3692 test "X$gfpthkeep" != Xy && gfpth=""
3693 EOSC
3694
3695 : What should the include directory be ?
3696 echo " "
3697 $echo $n "Hmm...  $c"
3698 dflt='/usr/include'
3699 incpath=''
3700 mips_type=''
3701 if $test -f /bin/mips && /bin/mips; then
3702         echo "Looks like a MIPS system..."
3703         $cat >usr.c <<'EOCP'
3704 #ifdef SYSTYPE_BSD43
3705 /bsd43
3706 #endif
3707 EOCP
3708         if cc -E usr.c > usr.out && $contains / usr.out >/dev/null 2>&1; then
3709                 dflt='/bsd43/usr/include'
3710                 incpath='/bsd43'
3711                 mips_type='BSD 4.3'
3712         else
3713                 mips_type='System V'
3714         fi
3715         $rm -f usr.c usr.out
3716         echo "and you're compiling with the $mips_type compiler and libraries."
3717         xxx_prompt=y
3718         echo "exit 0" >mips
3719 else
3720         echo "Doesn't look like a MIPS system."
3721         xxx_prompt=n
3722         echo "exit 1" >mips
3723 fi
3724 chmod +x mips
3725 $eunicefix mips
3726 case "$usrinc" in
3727 '') ;;
3728 *) dflt="$usrinc";;
3729 esac
3730 case "$xxx_prompt" in
3731 y)      fn=d/
3732         echo " "
3733         rp='Where are the include files you want to use?'
3734         . ./getfile
3735         usrinc="$ans"
3736         ;;
3737 *)      usrinc="$dflt"
3738         ;;
3739 esac
3740
3741 : Set private lib path
3742 case "$plibpth" in
3743 '') if ./mips; then
3744                 plibpth="$incpath/usr/lib /usr/local/lib /usr/ccs/lib"
3745         fi;;
3746 esac
3747 case "$libpth" in
3748 ' ') dlist='';;
3749 '') dlist="$loclibpth $plibpth $glibpth";;
3750 *) dlist="$libpth";;
3751 esac
3752
3753 : Now check and see which directories actually exist, avoiding duplicates
3754 libpth=''
3755 for xxx in $dlist
3756 do
3757     if $test -d $xxx; then
3758                 case " $libpth " in
3759                 *" $xxx "*) ;;
3760                 *) libpth="$libpth $xxx";;
3761                 esac
3762     fi
3763 done
3764 $cat <<'EOM'
3765
3766 Some systems have incompatible or broken versions of libraries.  Among
3767 the directories listed in the question below, please remove any you
3768 know not to be holding relevant libraries, and add any that are needed.
3769 Say "none" for none.
3770
3771 EOM
3772 case "$libpth" in
3773 '') dflt='none';;
3774 *)
3775         set X $libpth
3776         shift
3777         dflt=${1+"$@"}
3778         ;;
3779 esac
3780 rp="Directories to use for library searches?"
3781 . ./myread
3782 case "$ans" in
3783 none) libpth=' ';;
3784 *) libpth="$ans";;
3785 esac
3786
3787 : compute shared library extension
3788 case "$so" in
3789 '')
3790         if xxx=`./loc libc.sl X $libpth`; $test -f "$xxx"; then
3791                 dflt='sl'
3792         else
3793                 dflt='so'
3794         fi
3795         ;;
3796 *) dflt="$so";;
3797 esac
3798 $cat <<EOM
3799
3800 On some systems, shared libraries may be available.  Answer 'none' if
3801 you want to suppress searching of shared libraries for the remainder
3802 of this configuration.
3803
3804 EOM
3805 rp='What is the file extension used for shared libraries?'
3806 . ./myread
3807 so="$ans"
3808
3809 : Define several unixisms.
3810 : Hints files or command line option can be used to override them.
3811 : The convoluted testing is in case hints files set either the old
3812 : or the new name.
3813 case "$_exe" in
3814 '')     case "$exe_ext" in
3815     '') ;;
3816         *)      _exe="$exe_ext" ;;
3817         esac
3818         ;;
3819 esac
3820 case "$_a" in
3821 '')     case "$lib_ext" in
3822     '') _a='.a';;
3823         *)      _a="$lib_ext" ;;
3824         esac
3825         ;;
3826 esac
3827 case "$_o" in
3828 '') case "$obj_ext" in
3829         '')     _o='.o';;
3830         *)      _o="$obj_ext";;
3831         esac
3832         ;;
3833 esac
3834 case "$p_" in
3835 '') case "$path_sep" in
3836         '')     p_=':';;
3837         *)      p_="$path_sep";;
3838         esac
3839         ;;
3840 esac
3841 exe_ext=$_exe
3842 lib_ext=$_a
3843 obj_ext=$_o
3844 path_sep=$p_
3845
3846 : Which makefile gets called first.  This is used by make depend.
3847 case "$firstmakefile" in
3848 '') firstmakefile='makefile';;
3849 esac
3850
3851 case "$usesocks" in
3852 $define|true|[yY]*)     dflt='y';;
3853 *) dflt='n';;
3854 esac
3855 cat <<EOM
3856
3857 Perl can be built to use the SOCKS proxy protocol library.  To do so,
3858 Configure must be run with -Dusesocks.
3859
3860 If this doesn't make any sense to you, just accept the default '$dflt'.
3861 EOM
3862 rp='Build Perl for SOCKS?'
3863 . ./myread
3864 case "$ans" in
3865 y|Y)    val="$define" ;;     
3866 *)      val="$undef" ;;
3867 esac
3868 set usesocks
3869 eval $setvar
3870
3871 : Looking for optional libraries
3872 echo " "
3873 echo "Checking for optional libraries..." >&4
3874 case "$libs" in
3875 ' '|'') dflt='';;
3876 *) dflt="$libs";;
3877 esac
3878 case "$libswanted" in
3879 '') libswanted='c_s';;
3880 esac
3881 case "$usesocks" in
3882 "$define") libswanted="$libswanted socks5 socks5_sh" ;;
3883 esac
3884 libsfound=''
3885 libsfiles=''
3886 libsdirs=''
3887 libspath=''
3888 for thisdir in $libpth $xlibpth; do
3889   test -d $thisdir && libspath="$libspath $thisdir"
3890 done
3891 for thislib in $libswanted; do
3892         for thisdir in $libspath; do
3893             xxx=''
3894             if $test ! -f "$xxx" -a "X$ignore_versioned_solibs" = "X"; then
3895                 xxx=`ls $thisdir/lib$thislib.$so.[0-9] 2>/dev/null|tail -1`
3896                 $test -f "$xxx" && eval $libscheck
3897                 $test -f "$xxx" && libstyle=shared
3898             fi
3899             if test ! -f "$xxx"; then
3900                 xxx=$thisdir/lib$thislib.$so
3901                 $test -f "$xxx" && eval $libscheck
3902                 $test -f "$xxx" && libstyle=shared
3903             fi  
3904             if test ! -f "$xxx"; then
3905                 xxx=$thisdir/lib$thislib$_a
3906                 $test -f "$xxx" && eval $libscheck
3907                 $test -f "$xxx" && libstyle=static
3908             fi
3909             if test ! -f "$xxx"; then
3910                 xxx=$thisdir/$thislib$_a
3911                 $test -f "$xxx" && eval $libscheck
3912                 $test -f "$xxx" && libstyle=static
3913             fi
3914             if test ! -f "$xxx"; then
3915                 xxx=$thisdir/lib${thislib}_s$_a
3916                 $test -f "$xxx" && eval $libscheck
3917                 $test -f "$xxx" && libstyle=static
3918                 $test -f "$xxx" && thislib=${thislib}_s
3919             fi
3920             if test ! -f "$xxx"; then
3921                 xxx=$thisdir/Slib$thislib$_a
3922                 $test -f "$xxx" && eval $libscheck
3923                 $test -f "$xxx" && libstyle=static
3924             fi
3925             if $test -f "$xxx"; then
3926                 case "$libstyle" in
3927                 shared) echo "Found -l$thislib (shared)." ;;
3928                 static) echo "Found -l$thislib." ;;
3929                 *)      echo "Found -l$thislib ($libstyle)." ;;
3930                 esac
3931                 case " $dflt " in
3932                 *"-l$thislib "*);;
3933                 *) dflt="$dflt -l$thislib"
3934                    libsfound="$libsfound $xxx"
3935                    yyy=`basename $xxx`
3936                    libsfiles="$libsfiles $yyy"
3937                    yyy=`echo $xxx|$sed -e "s%/$yyy\\$%%"`
3938                    case " $libsdirs " in
3939                    *" $yyy "*) ;;
3940                    *) libsdirs="$libsdirs $yyy" ;;
3941                    esac
3942                    ;;
3943                 esac
3944                 break
3945             fi  
3946         done
3947         if $test ! -f "$xxx"; then
3948             echo "No -l$thislib."
3949         fi
3950 done
3951 set X $dflt
3952 shift
3953 dflt="$*"
3954 case "$libs" in
3955 '') dflt="$dflt";;
3956 *) dflt="$libs";;
3957 esac
3958 case "$dflt" in
3959 ' '|'') dflt='none';;
3960 esac
3961
3962 $cat <<EOM
3963
3964 In order to compile $package on your machine, a number of libraries
3965 are usually needed.  Include any other special libraries here as well.
3966 Say "none" for none.  The default list is almost always right.
3967 EOM
3968
3969 echo " "
3970 rp="What libraries to use?"
3971 . ./myread
3972 case "$ans" in
3973 none) libs=' ';;
3974 *) libs="$ans";;
3975 esac
3976
3977 : determine optimization, if desired, or use for debug flag also
3978 case "$optimize" in
3979 ' '|$undef) dflt='none';;
3980 '') dflt='-O';;
3981 *) dflt="$optimize";;
3982 esac
3983 $cat <<EOH
3984
3985 By default, $package compiles with the -O flag to use the optimizer.
3986 Alternately, you might want to use the symbolic debugger, which uses
3987 the -g flag (on traditional Unix systems).  Either flag can be
3988 specified here.  To use neither flag, specify the word "none".
3989
3990 EOH
3991 rp="What optimizer/debugger flag should be used?"
3992 . ./myread
3993 optimize="$ans"
3994 case "$optimize" in
3995 'none') optimize=" ";;
3996 esac
3997
3998 dflt=''
3999 : We will not override a previous value, but we might want to
4000 : augment a hint file
4001 case "$hint" in
4002 default|recommended)
4003         case "$gccversion" in
4004         1*) dflt='-fpcc-struct-return' ;;
4005         esac
4006         case "$optimize" in
4007         *-g*) dflt="$dflt -DDEBUGGING";;
4008         esac
4009         case "$gccversion" in
4010         2*) if test -d /etc/conf/kconfig.d &&
4011                         $contains _POSIX_VERSION $usrinc/sys/unistd.h >/dev/null 2>&1
4012                 then
4013                         dflt="$dflt -posix"
4014                 fi
4015                 ;;
4016         esac
4017         case "$gccversion" in
4018         1*) ;;
4019         2.[0-8]*) ;;
4020         ?*)     echo " "
4021                 echo "Checking if your compiler accepts -fno-strict-aliasing" 2>&1
4022                 echo 'int main(void) { return 0; }' > gcctest.c
4023                 if $cc -O2 -fno-strict-aliasing -o gcctest gcctest.c; then
4024                         echo "Yes, it does." 2>&1
4025                         case "$ccflags" in
4026                         *strict-aliasing*) 
4027                                 echo "Leaving current flags $ccflags alone." 2>&1
4028                                 ;;
4029                         *) dflt="$dflt -fno-strict-aliasing" ;;
4030                         esac
4031                 else
4032                         echo "Nope, it doesn't, but that's ok." 2>&1
4033                 fi
4034                 ;;
4035         esac
4036         ;;
4037 esac
4038
4039 case "$mips_type" in
4040 *BSD*|'') inclwanted="$locincpth $usrinc";;
4041 *) inclwanted="$locincpth $inclwanted $usrinc/bsd";;
4042 esac
4043 for thisincl in $inclwanted; do
4044         if $test -d $thisincl; then
4045                 if $test x$thisincl != x$usrinc; then
4046                         case "$dflt" in
4047                         *$thisincl*);;
4048                         *) dflt="$dflt -I$thisincl";;
4049                         esac
4050                 fi
4051         fi
4052 done
4053
4054 inctest='if $contains $2 $usrinc/$1 >/dev/null 2>&1; then
4055         xxx=true;
4056 elif $contains $2 $usrinc/sys/$1 >/dev/null 2>&1; then
4057         xxx=true;
4058 else
4059         xxx=false;
4060 fi;
4061 if $xxx; then
4062         case "$dflt" in
4063         *$2*);;
4064         *) dflt="$dflt -D$2";;
4065         esac;
4066 fi'
4067
4068 set signal.h LANGUAGE_C; eval $inctest
4069
4070 case "$usesocks" in
4071 $define)
4072         ccflags="$ccflags -DSOCKS"
4073         ;;
4074 esac
4075
4076 case "$hint" in
4077 default|recommended) dflt="$ccflags $dflt" ;;
4078 *) dflt="$ccflags";;
4079 esac
4080
4081 case "$dflt" in
4082 ''|' ') dflt=none;;
4083 esac
4084 $cat <<EOH
4085
4086 Your C compiler may want other flags.  For this question you should include
4087 -I/whatever and -DWHATEVER flags and any other flags used by the C compiler,
4088 but you should NOT include libraries or ld flags like -lwhatever.  If you
4089 want $package to honor its debug switch, you should include -DDEBUGGING here.
4090 Your C compiler might also need additional flags, such as -D_POSIX_SOURCE.
4091
4092 To use no flags, specify the word "none".
4093
4094 EOH
4095 set X $dflt
4096 shift
4097 dflt=${1+"$@"}
4098 rp="Any additional cc flags?"
4099 . ./myread
4100 case "$ans" in
4101 none) ccflags='';;
4102 *) ccflags="$ans";;
4103 esac
4104
4105 : the following weeds options from ccflags that are of no interest to cpp
4106 cppflags="$ccflags"
4107 case "$gccversion" in
4108 1*) cppflags="$cppflags -D__GNUC__"
4109 esac
4110 case "$mips_type" in
4111 '');;
4112 *BSD*) cppflags="$cppflags -DSYSTYPE_BSD43";;
4113 esac
4114 case "$cppflags" in
4115 '');;
4116 *)
4117         echo " "
4118         echo "Let me guess what the preprocessor flags are..." >&4
4119         set X $cppflags
4120         shift
4121         cppflags=''
4122         $cat >cpp.c <<'EOM'
4123 #define BLURFL foo
4124
4125 BLURFL xx LFRULB
4126 EOM
4127         previous=''
4128         for flag in $*
4129         do
4130                 case "$flag" in
4131                 -*) ftry="$flag";;
4132                 *) ftry="$previous $flag";;
4133                 esac
4134                 if $cppstdin -DLFRULB=bar $cppflags $ftry $cppminus <cpp.c \
4135                         >cpp1.out 2>/dev/null && \
4136                         $cpprun -DLFRULB=bar $cppflags $ftry $cpplast <cpp.c \
4137                         >cpp2.out 2>/dev/null && \
4138                         $contains 'foo.*xx.*bar' cpp1.out >/dev/null 2>&1 && \
4139                         $contains 'foo.*xx.*bar' cpp2.out >/dev/null 2>&1
4140                 then
4141                         cppflags="$cppflags $ftry"
4142                         previous=''
4143                 else
4144                         previous="$flag"
4145                 fi
4146         done
4147         set X $cppflags
4148         shift
4149         cppflags=${1+"$@"}
4150         case "$cppflags" in
4151         *-*)  echo "They appear to be: $cppflags";;
4152         esac
4153         $rm -f cpp.c cpp?.out
4154         ;;
4155 esac
4156
4157 : flags used in final linking phase
4158 case "$ldflags" in
4159 '') if ./venix; then
4160                 dflt='-i -z'
4161         else
4162                 dflt=''
4163         fi
4164         case "$ccflags" in
4165         *-posix*) dflt="$dflt -posix" ;;
4166         esac
4167         ;;
4168 *) dflt="$ldflags";;
4169 esac
4170
4171 : Try to guess additional flags to pick up local libraries.
4172 for thislibdir in $libpth; do
4173         case " $loclibpth " in
4174         *" $thislibdir "*)
4175                 case "$dflt " in 
4176                 *"-L$thislibdir "*) ;;
4177                 *)  dflt="$dflt -L$thislibdir" ;;
4178                 esac
4179                 ;;
4180         esac
4181 done
4182
4183 case "$dflt" in
4184 '') dflt='none' ;;
4185 esac
4186
4187 $cat <<EOH
4188
4189 Your C linker may need flags.  For this question you should
4190 include -L/whatever and any other flags used by the C linker, but you
4191 should NOT include libraries like -lwhatever.
4192
4193 Make sure you include the appropriate -L/path flags if your C linker
4194 does not normally search all of the directories you specified above,
4195 namely
4196         $libpth
4197 To use no flags, specify the word "none".
4198
4199 EOH
4200
4201 rp="Any additional ld flags (NOT including libraries)?"
4202 . ./myread
4203 case "$ans" in
4204 none) ldflags='';;
4205 *) ldflags="$ans";;
4206 esac
4207 rmlist="$rmlist pdp11"
4208
4209 : coherency check
4210 echo " "
4211 echo "Checking your choice of C compiler and flags for coherency..." >&4
4212 $cat > try.c <<'EOF'
4213 #include <stdio.h>
4214 int main() { printf("Ok\n"); exit(0); }
4215 EOF
4216 set X $cc $optimize $ccflags -o try $ldflags try.c $libs
4217 shift
4218 $cat >try.msg <<'EOM'
4219 I've tried to compile and run the following simple program:
4220
4221 EOM
4222 $cat try.c >> try.msg
4223
4224 $cat >> try.msg <<EOM
4225
4226 I used the command:
4227
4228         $*
4229         ./try
4230
4231 and I got the following output:
4232
4233 EOM
4234 dflt=y
4235 if sh -c "$cc $optimize $ccflags -o try $ldflags try.c $libs" >>try.msg 2>&1; then
4236         if sh -c './try' >>try.msg 2>&1; then
4237                 xxx=`./try`
4238                 case "$xxx" in
4239                 "Ok") dflt=n ;;
4240                 *)      echo 'The program compiled OK, but produced no output.' >> try.msg
4241                         case " $libs " in
4242                         *" -lsfio "*)
4243                                 cat >> try.msg <<'EOQS'
4244 If $libs contains -lsfio, and sfio is mis-configured, then it
4245 sometimes (apparently) runs and exits with a 0 status, but with no
4246 output!  It may have to do with sfio's use of _exit vs. exit.
4247
4248 EOQS
4249                                 rp="You have a big problem.  Shall I abort Configure"
4250                                 dflt=y
4251                                 ;;
4252                         esac
4253                         ;;
4254                 esac
4255         else
4256                 echo "The program compiled OK, but exited with status $?." >>try.msg
4257                 rp="You have a problem.  Shall I abort Configure"
4258                 dflt=y
4259         fi
4260 else
4261         echo "I can't compile the test program." >>try.msg
4262         rp="You have a BIG problem.  Shall I abort Configure"
4263         dflt=y
4264 fi
4265 case "$dflt" in
4266 y)
4267         $cat try.msg >&4
4268         case "$knowitall" in
4269         '')
4270                 echo "(The supplied flags or libraries might be incorrect.)"
4271                 ;;
4272         *) dflt=n;;
4273         esac
4274         echo " "
4275         . ./myread
4276         case "$ans" in
4277         n*|N*) ;;
4278         *)      echo "Ok.  Stopping Configure." >&4
4279                 exit 1
4280                 ;;
4281         esac
4282         ;;
4283 n) echo "OK, that should do.";;
4284 esac
4285 $rm -f try try.* core
4286
4287 : define an is-a-typedef? function
4288 typedef='type=$1; var=$2; def=$3; shift; shift; shift; inclist=$@;
4289 case "$inclist" in
4290 "") inclist="sys/types.h";;
4291 esac;
4292 eval "varval=\$$var";
4293 case "$varval" in
4294 "")
4295         $rm -f temp.c;
4296         for inc in $inclist; do
4297                 echo "#include <$inc>" >>temp.c;
4298         done;
4299         echo "#ifdef $type" >> temp.c;
4300         echo "printf(\"We have $type\");" >> temp.c;
4301         echo "#endif" >> temp.c;
4302         $cppstdin $cppflags $cppminus < temp.c >temp.E 2>/dev/null;
4303         if $contains $type temp.E >/dev/null 2>&1; then
4304                 eval "$var=\$type";
4305         else
4306                 eval "$var=\$def";
4307         fi;
4308         $rm -f temp.?;;
4309 *) eval "$var=\$varval";;
4310 esac'
4311
4312 : define an is-a-typedef? function that prompts if the type is not available.
4313 typedef_ask='type=$1; var=$2; def=$3; shift; shift; shift; inclist=$@;
4314 case "$inclist" in
4315 "") inclist="sys/types.h";;
4316 esac;
4317 eval "varval=\$$var";
4318 case "$varval" in
4319 "")
4320         $rm -f temp.c;
4321         for inc in $inclist; do
4322                 echo "#include <$inc>" >>temp.c;
4323         done;
4324         echo "#ifdef $type" >> temp.c;
4325         echo "printf(\"We have $type\");" >> temp.c;
4326         echo "#endif" >> temp.c;
4327         $cppstdin $cppflags $cppminus < temp.c >temp.E 2>/dev/null;
4328         echo " " ;
4329         echo "$rp" | $sed -e "s/What is/Looking for/" -e "s/?/./";
4330         if $contains $type temp.E >/dev/null 2>&1; then
4331                 echo "$type found." >&4;
4332                 eval "$var=\$type";
4333         else
4334                 echo "$type NOT found." >&4;
4335                 dflt="$def";
4336                 . ./myread ;
4337                 eval "$var=\$ans";
4338         fi;
4339         $rm -f temp.?;;
4340 *) eval "$var=\$varval";;
4341 esac'
4342
4343 : define a shorthand compile call
4344 compile='
4345 mc_file=$1;
4346 shift;
4347 $cc $optimize $ccflags $ldflags -o ${mc_file} $* ${mc_file}.c $libs > /dev/null 2>&1;'
4348 : define a shorthand compile call for compilations that should be ok.
4349 compile_ok='
4350 mc_file=$1;
4351 shift;
4352 $cc $optimize $ccflags $ldflags -o ${mc_file} $* ${mc_file}.c $libs;'
4353
4354 : check for lengths of integral types
4355 echo " "
4356 case "$intsize" in
4357 '')
4358         echo "Checking to see how big your integers are..." >&4
4359         $cat >intsize.c <<'EOCP'
4360 #include <stdio.h>
4361 int main()
4362 {
4363         printf("intsize=%d;\n", (int)sizeof(int));
4364         printf("longsize=%d;\n", (int)sizeof(long));
4365         printf("shortsize=%d;\n", (int)sizeof(short));
4366         exit(0);
4367 }
4368 EOCP
4369         set intsize
4370         if eval $compile_ok && ./intsize > /dev/null; then
4371                 eval `./intsize`
4372                 echo "Your integers are $intsize bytes long."
4373                 echo "Your long integers are $longsize bytes long."
4374                 echo "Your short integers are $shortsize bytes long."
4375         else
4376                 $cat >&4 <<EOM
4377 !
4378 Help! I can't compile and run the intsize test program: please enlighten me!
4379 (This is probably a misconfiguration in your system or libraries, and
4380 you really ought to fix it.  Still, I'll try anyway.)
4381 !
4382 EOM
4383                 dflt=4
4384                 rp="What is the size of an integer (in bytes)?"
4385                 . ./myread
4386                 intsize="$ans"
4387                 dflt=$intsize
4388                 rp="What is the size of a long integer (in bytes)?"
4389                 . ./myread
4390                 longsize="$ans"
4391                 dflt=2
4392                 rp="What is the size of a short integer (in bytes)?"
4393                 . ./myread
4394                 shortsize="$ans"
4395         fi
4396         ;;
4397 esac
4398 $rm -f intsize intsize.*
4399
4400 : see what type lseek is declared as in the kernel
4401 rp="What is the type used for lseek's offset on this system?"
4402 set off_t lseektype long stdio.h sys/types.h
4403 eval $typedef_ask
4404
4405 echo " "
4406 echo "Checking to see how big your file offsets are..." >&4
4407 $cat >try.c <<EOCP
4408 #include <sys/types.h>
4409 #include <stdio.h>
4410 int main()
4411 {
4412     printf("%d\n", (int)sizeof($lseektype));
4413     return(0); 
4414 }
4415 EOCP
4416 set try
4417 if eval $compile_ok; then
4418         lseeksize=`./try`
4419         echo "Your file offsets are $lseeksize bytes long."
4420 else
4421         dflt=$longsize
4422         echo " "
4423         echo "(I can't seem to compile the test program.  Guessing...)"
4424         rp="What is the size of your file offsets (in bytes)?"
4425         . ./myread
4426         lseeksize="$ans"
4427 fi
4428 $rm -f try.c try
4429
4430 : see what type file positions are declared as in the library
4431 rp="What is the type for file position used by fsetpos()?"
4432 set fpos_t fpostype long stdio.h sys/types.h
4433 eval $typedef_ask
4434
4435 echo " "
4436 case "$fpostype" in
4437 *_t) zzz="$fpostype"    ;;
4438 *)   zzz="fpos_t"       ;;
4439 esac
4440 echo "Checking the size of $zzz..." >&4 
4441 cat > try.c <<EOCP
4442 #include <sys/types.h>
4443 #include <stdio.h>
4444 int main() {
4445     printf("%d\n", (int)sizeof($fpostype));
4446     exit(0);
4447 }
4448 EOCP
4449 set try
4450 if eval $compile_ok; then
4451         yyy=`./try`
4452         case "$yyy" in
4453         '')     fpossize=4
4454                 echo "(I can't execute the test program--guessing $fpossize.)" >&4
4455                 ;;
4456         *)      fpossize=$yyy
4457                 echo "Your $zzz is $fpossize bytes long."
4458                 ;;
4459         esac
4460 else
4461         dflt="$longsize"
4462         echo " " >&4
4463         echo "(I can't compile the test program.  Guessing...)" >&4
4464         rp="What is the size of your file positions (in bytes)?"
4465         . ./myread
4466         fpossize="$ans"
4467 fi
4468
4469
4470
4471 # Backward compatibility (uselfs is deprecated).
4472 case "$uselfs" in
4473 "$define"|true|[yY]*)
4474         cat <<EOM >&4
4475
4476 *** Configure -Duselfs is deprecated, using -Duselargefiles instead.
4477 EOM
4478         uselargefiles="$define"
4479         ;;
4480 esac                          
4481
4482 case "$lseeksize:$fpossize" in
4483 8:8) cat <<EOM
4484
4485 You can have files larger than 2 gigabytes.
4486 EOM
4487    val="$define" ;;
4488 *)    case "$uselargefiles" in
4489    "$undef"|false|[nN]*) dflt='n' ;;
4490    *)   dflt='y' ;;
4491    esac
4492    cat <<EOM
4493
4494 Perl can be built to understand large files (files larger than 2 gigabytes)
4495 on some systems.  To do so, Configure can be run with -Duselargefiles.
4496
4497 If this doesn't make any sense to you, just accept the default '$dflt'.
4498 EOM
4499    rp='Try to understand large files, if available?'
4500    . ./myread
4501    case "$ans" in
4502    y|Y)         val="$define" ;;
4503    *)           val="$undef"  ;;
4504    esac
4505    ;;
4506 esac
4507 set uselargefiles
4508 eval $setvar
4509 case "$uselargefiles" in
4510 "$define")
4511 : Look for a hint-file generated 'call-back-unit'.  If the
4512 : user has specified that a large files perl is to be built,
4513 : we may need to set or change some other defaults.
4514         if $test -f uselargefiles.cbu; then
4515                 echo "Your platform has some specific hints for large file builds, using them..."
4516                 . ./uselargefiles.cbu
4517                 echo " "
4518                 echo "Rechecking to see how big your file offsets are..." >&4
4519                 $cat >try.c <<EOCP
4520 #include <sys/types.h>
4521 #include <stdio.h>
4522 int main()
4523 {
4524     printf("%d\n", (int)sizeof($lseektype));
4525     return(0); 
4526 }
4527 EOCP
4528                 set try
4529                 if eval $compile_ok; then
4530                         lseeksize=`./try`
4531                         $echo "Your file offsets are now $lseeksize bytes long."
4532                 else
4533                         dflt="$lseeksize"
4534                         echo " "
4535                         echo "(I can't seem to compile the test program.  Guessing...)"
4536                         rp="What is the size of your file offsets (in bytes)?"
4537                         . ./myread
4538                         lseeksize="$ans"
4539                 fi
4540                 case "$fpostype" in
4541                 *_t) zzz="$fpostype"    ;;
4542                 *)   zzz="fpos_t"       ;;
4543                 esac
4544                 $echo $n "Rechecking the size of $zzz...$c" >&4 
4545                 $cat > try.c <<EOCP
4546 #include <sys/types.h>
4547 #include <stdio.h>
4548 int main() {
4549     printf("%d\n", (int)sizeof($fpostype));
4550     exit(0);
4551 }
4552 EOCP
4553                 set try
4554                 if eval $compile_ok; then
4555                         yyy=`./try`
4556                         dflt="$lseeksize"
4557                         case "$yyy" in
4558                         '')     echo " "
4559                                 echo "(I can't execute the test program--guessing $fpossize.)" >&4
4560                                 ;;
4561                         *)      fpossize=$yyy
4562                                 echo " $fpossize bytes." >&4
4563                                 ;;
4564                         esac
4565                 else
4566                         dflt="$fpossize"
4567                         echo " "
4568                         echo "(I can't compile the test program.  Guessing...)" >&4
4569                         rp="What is the size of your file positions (in bytes)?"
4570                         . ./myread
4571                         fpossize="$ans"
4572                 fi
4573                 $rm -f try.c try
4574         fi
4575         ;;
4576 esac
4577
4578
4579 case "$usemorebits" in
4580 "$define"|true|[yY]*)
4581         use64bitint="$define"
4582         uselongdouble="$define"
4583         usemorebits="$define"
4584         ;;
4585 *)      usemorebits="$undef"
4586         ;;
4587 esac
4588
4589
4590 case "$uselonglong" in
4591 "$define"|true|[yY]*)
4592         cat <<EOM >&4
4593
4594 *** Configure -Duselonglong is deprecated, using -Duse64bitint instead.
4595 EOM
4596         use64bitint="$define"
4597         ;;
4598 esac                          
4599 case "$use64bits" in
4600 "$define"|true|[yY]*)
4601         cat <<EOM >&4
4602
4603 *** Configure -Duse64bits is deprecated, using -Duse64bitint instead.
4604 EOM
4605         use64bitint="$define"
4606         ;;
4607 esac                          
4608 case "$use64bitints" in
4609 "$define"|true|[yY]*)
4610         cat <<EOM >&4
4611
4612 *** There is no Configure -Duse64bitints, using -Duse64bitint instead.
4613 EOM
4614         use64bitint="$define"
4615         ;;
4616 esac                          
4617 case "$use64bitsint" in
4618 "$define"|true|[yY]*)
4619         cat <<EOM >&4
4620
4621 *** There is no Configure -Duse64bitsint, using -Duse64bitint instead.
4622 EOM
4623         use64bitint="$define"
4624         ;;
4625 esac                          
4626 case "$uselonglongs" in
4627 "$define"|true|[yY]*)
4628         cat <<EOM >&4
4629
4630 *** There is no Configure -Duselonglongs, using -Duse64bitint instead.
4631 EOM
4632         use64bitint="$define"
4633         ;;
4634 esac                          
4635 case "$use64bitsall" in
4636 "$define"|true|[yY]*)
4637         cat <<EOM >&4
4638
4639 *** There is no Configure -Duse64bitsall, using -Duse64bitall instead.
4640 EOM
4641         use64bitall="$define"
4642         ;;
4643 esac                          
4644
4645 case "$ccflags" in
4646 *-DUSE_LONG_LONG*|*-DUSE_64_BIT_INT*|*-DUSE_64_BIT_ALL*) use64bitint="$define";;
4647 esac
4648 case "$use64bitall" in
4649 "$define"|true|[yY]*) use64bitint="$define" ;;
4650 esac
4651
4652 case "$longsize" in
4653 8) cat <<EOM
4654
4655 You have natively 64-bit long integers.
4656 EOM
4657    val="$define"
4658    ;;
4659 *) case "$use64bitint" in
4660    "$define"|true|[yY]*) dflt='y';;
4661    *) dflt='n';;
4662    esac
4663    cat <<EOM
4664
4665 Perl can be built to take advantage of 64-bit integer types
4666 on some systems.  To do so, Configure can be run with -Duse64bitint.
4667 Choosing this option will most probably introduce binary incompatibilities.
4668
4669 If this doesn't make any sense to you, just accept the default '$dflt'.
4670 EOM
4671    rp='Try to use 64-bit integers, if available?'
4672    . ./myread
4673    case "$ans" in
4674    [yY]*) val="$define" ;;
4675    *)     val="$undef"  ;;
4676    esac
4677    ;;
4678 esac
4679 set use64bitint
4680 eval $setvar
4681
4682 case "$use64bitall" in
4683 "$define"|true|[yY]*) dflt='y' ;;
4684 *) case "$longsize" in
4685    8) dflt='y' ;;
4686    *) dflt='n' ;;
4687    esac
4688    ;;
4689 esac    
4690 cat <<EOM
4691
4692 You may also choose to try maximal 64-bitness.  It means using as much
4693 64-bitness as possible on the platform.  This in turn means even more
4694 binary incompatibilities.  On the other hand, your platform may not
4695 have any more 64-bitness available than what you already have chosen.
4696
4697 If this doesn't make any sense to you, just accept the default '$dflt'.
4698 EOM
4699 rp='Try to use maximal 64-bit support, if available?'
4700 . ./myread
4701 case "$ans" in
4702 [yY]*) val="$define" ;;
4703 *)     val="$undef"  ;;
4704 esac
4705 set use64bitall
4706 eval $setvar
4707 case "$use64bitall" in
4708 "$define")
4709         case "$use64bitint" in
4710         "$undef")
4711                 cat <<EOM
4712
4713 Since you have chosen a maximally 64-bit build, I'm also turning on
4714 the use of 64-bit integers.
4715 EOM
4716                 use64bitint="$define" ;;
4717         esac
4718         ;;
4719 esac
4720
4721 case "$use64bitint" in
4722 "$define"|true|[yY]*)
4723 : Look for a hint-file generated 'call-back-unit'.  If the
4724 : user has specified that a 64-bit perl is to be built,
4725 : we may need to set or change some other defaults.
4726         if $test -f use64bitint.cbu; then
4727                 echo "Your platform has some specific hints for 64-bit integers, using them..."
4728                 . ./use64bitint.cbu
4729         fi
4730         case "$longsize" in
4731         4) case "$archname64" in
4732            '') archname64=64int ;;
4733            esac
4734            ;;
4735         esac
4736         ;;
4737 esac
4738
4739 case "$use64bitall" in
4740 "$define"|true|[yY]*)
4741 : Look for a hint-file generated 'call-back-unit'.  If the
4742 : user has specified that a maximally 64-bit perl is to be built,
4743 : we may need to set or change some other defaults.
4744         if $test -f use64bitall.cbu; then
4745                 echo "Your platform has some specific hints for 64-bit builds, using them..."
4746                 . ./use64bitall.cbu
4747         fi
4748         case "$longsize" in
4749         4) case "$archname64" in
4750            ''|64int) archname64=64all ;;
4751            esac
4752            ;;
4753         esac
4754         ;;
4755 esac
4756
4757 : determine the architecture name
4758 echo " "
4759 if xxx=`./loc arch blurfl $pth`; $test -f "$xxx"; then
4760         tarch=`arch`"-$osname"
4761 elif xxx=`./loc uname blurfl $pth`; $test -f "$xxx" ; then
4762         if uname -m > tmparch 2>&1 ; then
4763                 tarch=`$sed -e 's/ *$//' -e 's/ /_/g' \
4764                         -e 's/$/'"-$osname/" tmparch`
4765         else
4766                 tarch="$osname"
4767         fi
4768         $rm -f tmparch
4769 else
4770         tarch="$osname"
4771 fi
4772 case "$myarchname" in
4773 ''|"$tarch") ;;
4774 *)
4775         echo "(Your architecture name used to be $myarchname.)"
4776         archname=''
4777         ;;
4778 esac
4779 myarchname="$tarch"
4780 case "$archname" in
4781 '') dflt="$tarch";;
4782 *) dflt="$archname";;
4783 esac
4784 rp='What is your architecture name'
4785 . ./myread
4786 archname="$ans"
4787 case "$usethreads" in
4788 $define)
4789         echo "Threads selected." >&4
4790         case "$archname" in
4791         *-thread*) echo "...and architecture name already has -thread." >&4
4792                 ;;
4793         *)      archname="$archname-thread"
4794                 echo "...setting architecture name to $archname." >&4
4795                 ;;
4796         esac
4797         ;;
4798 esac
4799 case "$usemultiplicity" in
4800 $define)
4801         echo "Multiplicity selected." >&4
4802         case "$archname" in
4803         *-multi*) echo "...and architecture name already has -multi." >&4
4804                 ;;
4805         *)      archname="$archname-multi"
4806                 echo "...setting architecture name to $archname." >&4
4807                 ;;
4808         esac
4809         ;;
4810 esac
4811 case "$use64bitint" in
4812 $define)
4813         case "$archname64" in
4814         '')
4815                 ;;
4816         *)
4817                 case "$archname" in
4818                 *-$archname64*) echo "...and architecture name already has $archname64." >&4
4819                         ;;
4820                 *)      archname="$archname-$archname64"
4821                         echo "...setting architecture name to $archname." >&4
4822                         ;;
4823                 esac
4824                 ;;
4825         esac
4826 esac
4827
4828 : determine root of directory hierarchy where package will be installed.
4829 case "$prefix" in
4830 '')
4831         dflt=`./loc . /usr/local /usr/local /local /opt /usr`
4832         ;;
4833 *)
4834         dflt="$prefix"
4835         ;;
4836 esac
4837 $cat <<EOM
4838
4839 By default, $package will be installed in $dflt/bin, manual pages
4840 under $dflt/man, etc..., i.e. with $dflt as prefix for all
4841 installation directories. Typically this is something like /usr/local.
4842 If you wish to have binaries under /usr/bin but other parts of the
4843 installation under /usr/local, that's ok: you will be prompted
4844 separately for each of the installation directories, the prefix being
4845 only used to set the defaults.
4846
4847 EOM
4848 fn=d~
4849 rp='Installation prefix to use?'
4850 . ./getfile
4851 oldprefix=''
4852 case "$prefix" in
4853 '') ;;
4854 *)
4855         case "$ans" in
4856         "$prefix") ;;
4857         *) oldprefix="$prefix";;
4858         esac
4859         ;;
4860 esac
4861 prefix="$ans"
4862 prefixexp="$ansexp"
4863
4864 : is AFS running?
4865 echo " "
4866 case "$afs" in
4867 $define|true)   afs=true ;;
4868 $undef|false)   afs=false ;;
4869 *)      if test -d /afs; then
4870                 afs=true
4871         else
4872                 afs=false
4873         fi
4874         ;;
4875 esac
4876 if $afs; then
4877         echo "AFS may be running... I'll be extra cautious then..." >&4
4878 else
4879         echo "AFS does not seem to be running..." >&4
4880 fi
4881
4882 : determine installation prefix for where package is to be installed.
4883 if $afs; then 
4884 $cat <<EOM
4885
4886 Since you are running AFS, I need to distinguish the directory in which
4887 files will reside from the directory in which they are installed (and from
4888 which they are presumably copied to the former directory by occult means).
4889
4890 EOM
4891         case "$installprefix" in
4892         '') dflt=`echo $prefix | sed 's#^/afs/#/afs/.#'`;;
4893         *) dflt="$installprefix";;
4894         esac
4895 else
4896 $cat <<EOM
4897
4898 In some special cases, particularly when building $package for distribution,
4899 it is convenient to distinguish between the directory in which files should 
4900 be installed from the directory ($prefix) in which they 
4901 will eventually reside.  For most users, these two directories are the same.
4902
4903 EOM
4904         case "$installprefix" in
4905         '') dflt=$prefix ;;
4906         *) dflt=$installprefix;;
4907         esac
4908 fi
4909 fn=d~
4910 rp='What installation prefix should I use for installing files?'
4911 . ./getfile
4912 installprefix="$ans"
4913 installprefixexp="$ansexp"
4914
4915 : set the prefixit variable, to compute a suitable default value
4916 prefixit='case "$3" in
4917 ""|none)
4918         case "$oldprefix" in
4919         "") eval "$1=\"\$$2\"";;
4920         *)
4921                 case "$3" in
4922                 "") eval "$1=";;
4923                 none)
4924                         eval "tp=\"\$$2\"";
4925                         case "$tp" in
4926                         ""|" ") eval "$1=\"\$$2\"";;
4927                         *) eval "$1=";;
4928                         esac;;
4929                 esac;;
4930         esac;;
4931 *)
4932         eval "tp=\"$oldprefix-\$$2-\""; eval "tp=\"$tp\"";
4933         case "$tp" in
4934         --|/*--|\~*--) eval "$1=\"$prefix/$3\"";;
4935         /*-$oldprefix/*|\~*-$oldprefix/*)
4936                 eval "$1=\`echo \$$2 | sed \"s,^$oldprefix,$prefix,\"\`";;
4937         *) eval "$1=\"\$$2\"";;
4938         esac;;
4939 esac'
4940
4941
4942 : get the patchlevel
4943 echo " "
4944 echo "Getting the current patchlevel..." >&4
4945 if $test -r $rsrc/patchlevel.h;then
4946         revision=`awk '/define[         ]+PERL_REVISION/ {print $3}' $rsrc/patchlevel.h`
4947         patchlevel=`awk '/define[       ]+PERL_VERSION/ {print $3}' $rsrc/patchlevel.h`
4948         subversion=`awk '/define[       ]+PERL_SUBVERSION/ {print $3}' $rsrc/patchlevel.h`
4949         api_revision=`awk '/define[     ]+PERL_API_REVISION/ {print $3}' $rsrc/patchlevel.h`
4950         api_version=`awk '/define[      ]+PERL_API_VERSION/ {print $3}' $rsrc/patchlevel.h`
4951         api_subversion=`awk '/define[   ]+PERL_API_SUBVERSION/ {print $3}' $rsrc/patchlevel.h`
4952 else
4953         revision=0
4954         patchlevel=0
4955         subversion=0
4956         api_revision=0
4957         api_version=0
4958         api_subversion=0
4959 fi
4960 $echo $n "(You have $package revision $revision" $c
4961 $echo $n " patchlevel $patchlevel" $c
4962 test 0 -eq "$subversion" || $echo $n " subversion $subversion" $c
4963 echo ".)"
4964 case "$osname" in
4965 dos|vms)
4966         : XXX Should be a Configure test for double-dots in filenames.
4967         version=`echo $revision $patchlevel $subversion | \
4968                  $awk '{ printf "%d_%d_%d\n", $1, $2, $3 }'`
4969         api_versionstring=`echo $api_revision $api_version $api_subversion | \
4970                  $awk '{ printf "%d_%d_%d\n", $1, $2, $3 }'`
4971         ;;
4972 *)
4973         version=`echo $revision $patchlevel $subversion | \
4974                  $awk '{ printf "%d.%d.%d\n", $1, $2, $3 }'`
4975         api_versionstring=`echo $api_revision $api_version $api_subversion | \
4976                  $awk '{ printf "%d.%d.%d\n", $1, $2, $3 }'`
4977         ;;
4978 esac
4979 : Special case the 5.005_xx maintenance series, which used 5.005
4980 : without any subversion label as a subdirectory in $sitelib
4981 if test "${api_revision}${api_version}${api_subversion}" = "550"; then
4982         api_versionstring='5.005'
4983 fi
4984
4985 : determine installation style
4986 : For now, try to deduce it from prefix unless it is already set.
4987 : Reproduce behavior of 5.005 and earlier, maybe drop that in 5.7.
4988 case "$installstyle" in
4989 '')     case "$prefix" in
4990                 *perl*) dflt='lib';;
4991                 *) dflt='lib/perl5' ;;
4992         esac
4993         ;;
4994 *)      dflt="$installstyle" ;;
4995 esac
4996 : Probably not worth prompting for this since we prompt for all
4997 : the directories individually, and the prompt would be too long and
4998 : confusing anyway.
4999 installstyle=$dflt
5000
5001 : determine where private library files go
5002 : Usual default is /usr/local/lib/perl5/$version.
5003 : Also allow things like /opt/perl/lib/$version, since 
5004 : /opt/perl/lib/perl5... would be redundant.
5005 : The default "style" setting is made in installstyle.U
5006 case "$installstyle" in
5007 *lib/perl5*) set dflt privlib lib/$package/$version ;;
5008 *)       set dflt privlib lib/$version ;;
5009 esac
5010 eval $prefixit
5011 $cat <<EOM
5012
5013 There are some auxiliary files for $package that need to be put into a
5014 private library directory that is accessible by everyone.
5015
5016 EOM
5017 fn=d~+
5018 rp='Pathname where the private library files will reside?'
5019 . ./getfile
5020 privlib="$ans"
5021 privlibexp="$ansexp"
5022 : Change installation prefix, if necessary.
5023 if $test X"$prefix" != X"$installprefix"; then
5024         installprivlib=`echo $privlibexp | sed "s#^$prefix#$installprefix#"`
5025 else
5026         installprivlib="$privlibexp"
5027 fi
5028
5029 : set the prefixup variable, to restore leading tilda escape
5030 prefixup='case "$prefixexp" in
5031 "$prefix") ;;
5032 *) eval "$1=\`echo \$$1 | sed \"s,^$prefixexp,$prefix,\"\`";;
5033 esac'
5034
5035 : determine where public architecture dependent libraries go
5036 set archlib archlib
5037 eval $prefixit
5038 : privlib default is /usr/local/lib/$package/$version
5039 : archlib default is /usr/local/lib/$package/$version/$archname
5040 : privlib may have an optional trailing /share.
5041 tdflt=`echo $privlib | $sed 's,/share$,,'`
5042 tdflt=$tdflt/$archname
5043 case "$archlib" in
5044 '')     dflt=$tdflt
5045         ;;
5046 *)      dflt="$archlib"
5047     ;;
5048 esac
5049 $cat <<EOM
5050
5051 $spackage contains architecture-dependent library files.  If you are
5052 sharing libraries in a heterogeneous environment, you might store
5053 these files in a separate location.  Otherwise, you can just include
5054 them with the rest of the public library files.
5055
5056 EOM
5057 fn=d+~
5058 rp='Where do you want to put the public architecture-dependent libraries?'
5059 . ./getfile
5060 archlib="$ans"
5061 archlibexp="$ansexp"
5062 if $test X"$archlib" = X"$privlib"; then
5063         d_archlib="$undef"
5064 else
5065         d_archlib="$define"
5066 fi
5067 : Change installation prefix, if necessary.
5068 if $test X"$prefix" != X"$installprefix"; then
5069         installarchlib=`echo $archlibexp | sed "s#^$prefix#$installprefix#"`
5070 else
5071         installarchlib="$archlibexp"
5072 fi
5073
5074
5075 : Binary compatibility with 5.005 is not possible for builds
5076 : with advanced features
5077 case "$usethreads$usemultiplicity" in
5078 *define*)
5079         bincompat5005="$undef"
5080         d_bincompat5005="$undef"
5081         ;;
5082 *)      $cat <<EOM
5083
5084 This version of Perl can be compiled for binary compatibility with 5.005.
5085 If you decide to do so, you will be able to continue using most of the
5086 extensions that were compiled for Perl 5.005.
5087
5088 EOM
5089         case "$bincompat5005$d_bincompat5005" in
5090         *"$undef"*) dflt=n ;;
5091         *) dflt=y ;;
5092         esac
5093         rp='Binary compatibility with Perl 5.005?'
5094         . ./myread
5095         case "$ans" in
5096         y*) val="$define" ;;
5097         *)  val="$undef" ;;
5098         esac
5099         set d_bincompat5005
5100         eval $setvar
5101         case "$d_bincompat5005" in
5102         "$define")
5103                 bincompat5005="$define"
5104                 ;;
5105         *)      bincompat5005="$undef"
5106                 d_bincompat5005="$undef"
5107                 ;;
5108         esac
5109         ;;
5110 esac
5111
5112
5113 : see if setuid scripts can be secure
5114 $cat <<EOM
5115
5116 Some kernels have a bug that prevents setuid #! scripts from being
5117 secure.  Some sites have disabled setuid #! scripts because of this.
5118
5119 First let's decide if your kernel supports secure setuid #! scripts.
5120 (If setuid #! scripts would be secure but have been disabled anyway,
5121 don't say that they are secure if asked.)
5122
5123 EOM
5124
5125 val="$undef"
5126 if $test -d /dev/fd; then
5127         echo "#!$ls" >reflect
5128         chmod +x,u+s reflect
5129         ./reflect >flect 2>&1
5130         if $contains "/dev/fd" flect >/dev/null; then
5131                 echo "Congratulations, your kernel has secure setuid scripts!" >&4
5132                 val="$define"
5133         else
5134                 $cat <<EOM
5135 If you are not sure if they are secure, I can check but I'll need a
5136 username and password different from the one you are using right now.
5137 If you don't have such a username or don't want me to test, simply
5138 enter 'none'.
5139
5140 EOM
5141                 rp='Other username to test security of setuid scripts with?'
5142                 dflt='none'
5143                 . ./myread
5144                 case "$ans" in
5145                 n|none)
5146                         case "$d_suidsafe" in
5147                         '')     echo "I'll assume setuid scripts are *not* secure." >&4
5148                                 dflt=n;;
5149                         "$undef")
5150                                 echo "Well, the $hint value is *not* secure." >&4
5151                                 dflt=n;;
5152                         *)      echo "Well, the $hint value *is* secure." >&4
5153                                 dflt=y;;
5154                         esac
5155                         ;;
5156                 *)
5157                         $rm -f reflect flect
5158                         echo "#!$ls" >reflect
5159                         chmod +x,u+s reflect
5160                         echo >flect
5161                         chmod a+w flect
5162                         echo '"su" will (probably) prompt you for '"$ans's password."
5163                         su $ans -c './reflect >flect'
5164                         if $contains "/dev/fd" flect >/dev/null; then
5165                                 echo "Okay, it looks like setuid scripts are secure." >&4
5166                                 dflt=y
5167                         else
5168                                 echo "I don't think setuid scripts are secure." >&4
5169                                 dflt=n
5170                         fi
5171                         ;;
5172                 esac
5173                 rp='Does your kernel have *secure* setuid scripts?'
5174                 . ./myread
5175                 case "$ans" in
5176                 [yY]*)  val="$define";;
5177                 *)      val="$undef";;
5178                 esac
5179         fi
5180 else
5181         echo "I don't think setuid scripts are secure (no /dev/fd directory)." >&4
5182         echo "(That's for file descriptors, not floppy disks.)"
5183         val="$undef"
5184 fi
5185 set d_suidsafe
5186 eval $setvar
5187
5188 $rm -f reflect flect
5189
5190 : now see if they want to do setuid emulation
5191 echo " "
5192 val="$undef"
5193 case "$d_suidsafe" in
5194 "$define")
5195         val="$undef"
5196         echo "No need to emulate SUID scripts since they are secure here." >& 4
5197         ;;
5198 *)
5199         $cat <<EOM
5200 Some systems have disabled setuid scripts, especially systems where
5201 setuid scripts cannot be secure.  On systems where setuid scripts have
5202 been disabled, the setuid/setgid bits on scripts are currently
5203 useless.  It is possible for $package to detect those bits and emulate
5204 setuid/setgid in a secure fashion.  This emulation will only work if
5205 setuid scripts have been disabled in your kernel.
5206
5207 EOM
5208         case "$d_dosuid" in
5209         "$define") dflt=y ;;
5210         *) dflt=n ;;
5211         esac
5212         rp="Do you want to do setuid/setgid emulation?"
5213         . ./myread
5214         case "$ans" in
5215         [yY]*)  val="$define";;
5216         *)      val="$undef";;
5217         esac
5218         ;;
5219 esac
5220 set d_dosuid
5221 eval $setvar
5222
5223 : determine filename position in cpp output
5224 echo " "
5225 echo "Computing filename position in cpp output for #include directives..." >&4
5226 echo '#include <stdio.h>' > foo.c
5227 $cat >fieldn <<EOF
5228 $startsh
5229 $cppstdin $cppflags $cppminus <foo.c 2>/dev/null | \
5230 $grep '^[       ]*#.*stdio\.h' | \
5231 while read cline; do
5232         pos=1
5233         set \$cline
5234         while $test \$# -gt 0; do
5235                 if $test -r \`echo \$1 | $tr -d '"'\`; then
5236                         echo "\$pos"
5237                         exit 0
5238                 fi
5239                 shift
5240                 pos=\`expr \$pos + 1\`
5241         done
5242 done
5243 EOF
5244 chmod +x fieldn
5245 fieldn=`./fieldn`
5246 $rm -f foo.c fieldn
5247 case $fieldn in
5248 '') pos='???';;
5249 1) pos=first;;
5250 2) pos=second;;
5251 3) pos=third;;
5252 *) pos="${fieldn}th";;
5253 esac
5254 echo "Your cpp writes the filename in the $pos field of the line."
5255
5256 : locate header file
5257 $cat >findhdr <<EOF
5258 $startsh
5259 wanted=\$1
5260 name=''
5261 for usrincdir in $usrinc
5262 do
5263         if test -f \$usrincdir/\$wanted; then
5264                 echo "\$usrincdir/\$wanted"
5265                 exit 0
5266         fi
5267 done
5268 awkprg='{ print \$$fieldn }'
5269 echo "#include <\$wanted>" > foo\$\$.c
5270 $cppstdin $cppminus $cppflags < foo\$\$.c 2>/dev/null | \
5271 $grep "^[       ]*#.*\$wanted" | \
5272 while read cline; do
5273         name=\`echo \$cline | $awk "\$awkprg" | $tr -d '"'\`
5274         case "\$name" in
5275         *[/\\\\]\$wanted) echo "\$name"; exit 1;;
5276         *[\\\\/]\$wanted) echo "\$name"; exit 1;;
5277         *) exit 2;;
5278         esac;
5279 done;
5280 #
5281 # status = 0: grep returned 0 lines, case statement not executed
5282 # status = 1: headerfile found
5283 # status = 2: while loop executed, no headerfile found
5284 #
5285 status=\$?
5286 $rm -f foo\$\$.c;
5287 if test \$status -eq 1; then
5288         exit 0;
5289 fi
5290 exit 1
5291 EOF
5292 chmod +x findhdr
5293
5294 : define an alternate in-header-list? function
5295 inhdr='echo " "; td=$define; tu=$undef; yyy=$@;
5296 cont=true; xxf="echo \"<\$1> found.\" >&4";
5297 case $# in 2) xxnf="echo \"<\$1> NOT found.\" >&4";;
5298 *) xxnf="echo \"<\$1> NOT found, ...\" >&4";;
5299 esac;
5300 case $# in 4) instead=instead;; *) instead="at last";; esac;
5301 while $test "$cont"; do
5302         xxx=`./findhdr $1`
5303         var=$2; eval "was=\$$2";
5304         if $test "$xxx" && $test -r "$xxx";
5305         then eval $xxf;
5306         eval "case \"\$$var\" in $undef) . ./whoa; esac"; eval "$var=\$td";
5307                 cont="";
5308         else eval $xxnf;
5309         eval "case \"\$$var\" in $define) . ./whoa; esac"; eval "$var=\$tu"; fi;
5310         set $yyy; shift; shift; yyy=$@;
5311         case $# in 0) cont="";;
5312         2) xxf="echo \"but I found <\$1> $instead.\" >&4";
5313                 xxnf="echo \"and I did not find <\$1> either.\" >&4";;
5314         *) xxf="echo \"but I found <\$1\> instead.\" >&4";
5315                 xxnf="echo \"there is no <\$1>, ...\" >&4";;
5316         esac;
5317 done;
5318 while $test "$yyy";
5319 do set $yyy; var=$2; eval "was=\$$2";
5320         eval "case \"\$$var\" in $define) . ./whoa; esac"; eval "$var=\$tu";
5321         set $yyy; shift; shift; yyy=$@;
5322 done'
5323
5324 : see if this is a malloc.h system
5325 set malloc.h i_malloc
5326 eval $inhdr
5327
5328 : see if stdlib is available
5329 set stdlib.h i_stdlib
5330 eval $inhdr
5331
5332 : determine which malloc to compile in
5333 echo " "
5334 case "$usemymalloc" in
5335 ''|[yY]*|true|$define)  dflt='y' ;;
5336 *)      dflt='n' ;;
5337 esac
5338 rp="Do you wish to attempt to use the malloc that comes with $package?"
5339 . ./myread
5340 usemymalloc="$ans"
5341 case "$ans" in
5342 y*|true)
5343         usemymalloc='y'
5344         mallocsrc='malloc.c'
5345         mallocobj="malloc$_o"
5346         d_mymalloc="$define"
5347         case "$libs" in
5348         *-lmalloc*)
5349                 : Remove malloc from list of libraries to use
5350                 echo "Removing unneeded -lmalloc from library list" >&4
5351                 set `echo X $libs | $sed -e 's/-lmalloc / /' -e 's/-lmalloc$//'`
5352                 shift
5353                 libs="$*"
5354                 echo "libs = $libs" >&4
5355                 ;;
5356         esac
5357         ;;
5358 *)
5359         usemymalloc='n'
5360         mallocsrc=''
5361         mallocobj=''
5362         d_mymalloc="$undef"
5363         ;;
5364 esac
5365
5366 : compute the return types of malloc and free
5367 echo " "
5368 $cat >malloc.c <<END
5369 #$i_malloc I_MALLOC
5370 #$i_stdlib I_STDLIB
5371 #include <stdio.h>
5372 #include <sys/types.h>
5373 #ifdef I_MALLOC
5374 #include <malloc.h>
5375 #endif
5376 #ifdef I_STDLIB
5377 #include <stdlib.h>
5378 #endif
5379 #ifdef TRY_MALLOC
5380 void *malloc();
5381 #endif
5382 #ifdef TRY_FREE
5383 void free();
5384 #endif
5385 END
5386 case "$malloctype" in
5387 '')
5388         if $cc $ccflags -c -DTRY_MALLOC malloc.c >/dev/null 2>&1; then
5389                 malloctype='void *'
5390         else
5391                 malloctype='char *'
5392         fi
5393         ;;
5394 esac
5395 echo "Your system wants malloc to return '$malloctype', it would seem." >&4
5396
5397 case "$freetype" in
5398 '')
5399         if $cc $ccflags -c -DTRY_FREE malloc.c >/dev/null 2>&1; then
5400                 freetype='void'
5401         else
5402                 freetype='int'
5403         fi
5404         ;;
5405 esac
5406 echo "Your system uses $freetype free(), it would seem." >&4
5407 $rm -f malloc.[co]
5408 $cat <<EOM
5409
5410 After $package is installed, you may wish to install various
5411 add-on modules and utilities.  Typically, these add-ons will
5412 be installed under $prefix with the rest
5413 of this package.  However, you may wish to install such add-ons
5414 elsewhere under a different prefix.
5415
5416 If you do not wish to put everything under a single prefix, that's
5417 ok.  You will be prompted for the individual locations; this siteprefix
5418 is only used to suggest the defaults.
5419
5420 The default should be fine for most people.
5421
5422 EOM
5423 fn=d~+
5424 rp='Installation prefix to use for add-on modules and utilities?'
5425 : XXX Here might be another good place for an installstyle setting.
5426 case "$siteprefix" in
5427 '') dflt=$prefix ;;
5428 *)  dflt=$siteprefix ;;
5429 esac
5430 . ./getfile
5431 : XXX Prefixit unit does not yet support siteprefix and vendorprefix
5432 oldsiteprefix=''
5433 case "$siteprefix" in
5434 '') ;;
5435 *)      case "$ans" in
5436         "$prefix") ;;
5437         *) oldsiteprefix="$prefix";;
5438         esac
5439         ;;
5440 esac
5441 siteprefix="$ans"
5442 siteprefixexp="$ansexp"
5443
5444 : determine where site specific libraries go.
5445 : Usual default is /usr/local/lib/perl5/site_perl/$version
5446 : The default "style" setting is made in installstyle.U
5447 : XXX No longer works with Prefixit stuff.
5448 prog=`echo $package | $sed 's/-*[0-9.]*$//'`
5449 case "$sitelib" in
5450 '') case "$installstyle" in
5451         *lib/perl5*) dflt=$siteprefix/lib/$package/site_$prog/$version ;;
5452         *)       dflt=$siteprefix/lib/site_$prog/$version ;;
5453         esac
5454         ;;
5455 *)      dflt="$sitelib"
5456         ;;
5457 esac
5458 $cat <<EOM
5459
5460 The installation process will create a directory for
5461 site-specific extensions and modules.  Most users find it convenient
5462 to place all site-specific files in this directory rather than in the
5463 main distribution directory.
5464
5465 EOM
5466 fn=d~+
5467 rp='Pathname for the site-specific library files?'
5468 . ./getfile
5469 sitelib="$ans"
5470 sitelibexp="$ansexp"
5471 sitelib_stem=`echo "$sitelibexp" | sed "s,/$version$,,"`
5472 : Change installation prefix, if necessary.
5473 if $test X"$prefix" != X"$installprefix"; then
5474         installsitelib=`echo $sitelibexp | $sed "s#^$prefix#$installprefix#"`
5475 else
5476         installsitelib="$sitelibexp"
5477 fi
5478
5479 : determine where site specific architecture-dependent libraries go.
5480 : sitelib  default is /usr/local/lib/perl5/site_perl/$version
5481 : sitearch default is /usr/local/lib/perl5/site_perl/$version/$archname
5482 : sitelib may have an optional trailing /share.
5483 case "$sitearch" in
5484 '')     dflt=`echo $sitelib | $sed 's,/share$,,'`
5485         dflt="$dflt/$archname"
5486         ;;
5487 *)      dflt="$sitearch"
5488         ;;
5489 esac
5490 set sitearch sitearch none
5491 eval $prefixit
5492 $cat <<EOM
5493
5494 The installation process will also create a directory for
5495 architecture-dependent site-specific extensions and modules.
5496
5497 EOM
5498 fn=d~+
5499 rp='Pathname for the site-specific architecture-dependent library files?'
5500 . ./getfile
5501 sitearch="$ans"
5502 sitearchexp="$ansexp"
5503 : Change installation prefix, if necessary.
5504 if $test X"$prefix" != X"$installprefix"; then
5505         installsitearch=`echo $sitearchexp | sed "s#^$prefix#$installprefix#"`
5506 else
5507         installsitearch="$sitearchexp"
5508 fi
5509
5510 $cat <<EOM
5511
5512 The installation process will also create a directory for
5513 vendor-supplied add-ons.  Vendors who supply perl with their system
5514 may find it convenient to place all vendor-supplied files in this
5515 directory rather than in the main distribution directory.  This will
5516 ease upgrades between binary-compatible maintenance versions of perl.
5517
5518 Of course you may also use these directories in whatever way you see
5519 fit.  For example, you might use them to access modules shared over a
5520 company-wide network.
5521
5522 The default answer should be fine for most people.
5523 This causes further questions about vendor add-ons to be skipped
5524 and no vendor-specific directories will be configured for perl.
5525
5526 EOM
5527 rp='Do you want to configure vendor-specific add-on directories?'
5528 case "$usevendorprefix" in
5529 define|true|[yY]*) dflt=y ;;
5530 *)      : User may have set vendorprefix directly on Configure command line.
5531         case "$vendorprefix" in
5532         ''|' ') dflt=n ;;
5533         *)      dflt=y ;;
5534         esac
5535         ;;
5536 esac
5537 . ./myread
5538 case "$ans" in
5539 [yY]*)  fn=d~+
5540         rp='Installation prefix to use for vendor-supplied add-ons?'
5541         case "$vendorprefix" in
5542         '') dflt='' ;;
5543         *)  dflt=$vendorprefix ;;
5544         esac
5545         . ./getfile
5546         : XXX Prefixit unit does not yet support siteprefix and vendorprefix
5547         oldvendorprefix=''
5548         case "$vendorprefix" in
5549         '') ;;
5550         *)      case "$ans" in
5551                 "$prefix") ;;
5552                 *) oldvendorprefix="$prefix";;
5553                 esac
5554                 ;;
5555         esac
5556         usevendorprefix="$define"
5557         vendorprefix="$ans"
5558         vendorprefixexp="$ansexp"
5559         ;;
5560 *)      usevendorprefix="$undef"
5561         vendorprefix=''
5562         vendorprefixexp=''
5563         ;;
5564 esac
5565
5566 case "$vendorprefix" in
5567 '')     d_vendorlib="$undef"
5568         vendorlib=''
5569         vendorlibexp=''
5570         ;;
5571 *)      d_vendorlib="$define"
5572         : determine where vendor-supplied modules go.
5573         : Usual default is /usr/local/lib/perl5/vendor_perl/$version
5574         case "$vendorlib" in
5575         '')
5576                 prog=`echo $package | $sed 's/-*[0-9.]*$//'`
5577                 case "$installstyle" in
5578                 *lib/perl5*) dflt=$vendorprefix/lib/$package/vendor_$prog/$version ;;
5579                 *)           dflt=$vendorprefix/lib/vendor_$prog/$version ;;
5580                 esac
5581                 ;;
5582         *)      dflt="$vendorlib"
5583                 ;;
5584         esac
5585         fn=d~+
5586         rp='Pathname for the vendor-supplied library files?'
5587         . ./getfile
5588         vendorlib="$ans"
5589         vendorlibexp="$ansexp"
5590         ;;
5591 esac
5592 vendorlib_stem=`echo "$vendorlibexp" | sed "s,/$version$,,"`
5593 : Change installation prefix, if necessary.
5594 if $test X"$prefix" != X"$installprefix"; then
5595         installvendorlib=`echo $vendorlibexp | $sed "s#^$prefix#$installprefix#"`
5596 else
5597         installvendorlib="$vendorlibexp"
5598 fi
5599
5600 case "$vendorprefix" in
5601 '')     d_vendorarch="$undef"
5602         vendorarch=''
5603         vendorarchexp=''
5604         ;;
5605 *)      d_vendorarch="$define"
5606         : determine where vendor-supplied architecture-dependent libraries go.
5607         : vendorlib  default is /usr/local/lib/perl5/vendor_perl/$version
5608         : vendorarch default is /usr/local/lib/perl5/vendor_perl/$version/$archname
5609         : vendorlib may have an optional trailing /share.
5610         case "$vendorarch" in
5611         '')     dflt=`echo $vendorlib | $sed 's,/share$,,'`
5612                 dflt="$dflt/$archname"
5613                 ;;
5614         *)      dflt="$vendorarch" ;;
5615         esac
5616         fn=d~+
5617         rp='Pathname for vendor-supplied architecture-dependent files?'
5618         . ./getfile
5619         vendorarch="$ans"
5620         vendorarchexp="$ansexp"
5621         ;;
5622 esac
5623 : Change installation prefix, if necessary.
5624 if $test X"$prefix" != X"$installprefix"; then
5625         installvendorarch=`echo $vendorarchexp | sed "s#^$prefix#$installprefix#"`
5626 else
5627         installvendorarch="$vendorarchexp"
5628 fi
5629
5630 : Final catch-all directories to search
5631 $cat <<EOM
5632
5633 Lastly, you can have perl look in other directories for extensions and
5634 modules in addition to those already specified.
5635 These directories will be searched after 
5636         $sitearch 
5637         $sitelib 
5638 EOM
5639 test X"$vendorlib" != "X" && echo '     ' $vendorlib
5640 test X"$vendorarch" != "X" && echo '    ' $vendorarch
5641 echo ' '
5642 case "$otherlibdirs" in
5643 ''|' ') dflt='none' ;;
5644 *)      dflt="$otherlibdirs" ;;
5645 esac
5646 $cat <<EOM
5647 Enter a colon-separated set of extra paths to include in perl's @INC
5648 search path, or enter 'none' for no extra paths.
5649
5650 EOM
5651
5652 rp='Colon-separated list of additional directories for perl to search?'
5653 . ./myread
5654 case "$ans" in
5655 ' '|''|none)    otherlibdirs=' ' ;;     
5656 *)      otherlibdirs="$ans" ;;
5657 esac
5658 case "$otherlibdirs" in
5659 ' ') val=$undef ;;
5660 *)      val=$define ;;
5661 esac
5662 set d_perl_otherlibdirs
5663 eval $setvar
5664
5665 : Cruising for prototypes
5666 echo " "
5667 echo "Checking out function prototypes..." >&4
5668 $cat >prototype.c <<'EOCP'
5669 int main(int argc, char *argv[]) {
5670         exit(0);}
5671 EOCP
5672 if $cc $ccflags -c prototype.c >prototype.out 2>&1 ; then
5673         echo "Your C compiler appears to support function prototypes."
5674         val="$define"
5675 else
5676         echo "Your C compiler doesn't seem to understand function prototypes."
5677         val="$undef"
5678 fi
5679 set prototype
5680 eval $setvar
5681 $rm -f prototype*
5682
5683 case "$prototype" in
5684 "$define") ;;
5685 *)      ansi2knr='ansi2knr'
5686         echo " "
5687         cat <<EOM >&4
5688
5689 $me:  FATAL ERROR:
5690 This version of $package can only be compiled by a compiler that 
5691 understands function prototypes.  Unfortunately, your C compiler 
5692         $cc $ccflags
5693 doesn't seem to understand them.  Sorry about that.
5694
5695 If GNU cc is available for your system, perhaps you could try that instead.  
5696
5697 Eventually, we hope to support building Perl with pre-ANSI compilers.
5698 If you would like to help in that effort, please contact <perlbug@perl.org>.
5699
5700 Aborting Configure now.
5701 EOM
5702         exit 2
5703         ;;
5704 esac
5705
5706 : determine where public executables go
5707 echo " "
5708 set dflt bin bin
5709 eval $prefixit
5710 fn=d~
5711 rp='Pathname where the public executables will reside?'
5712 . ./getfile
5713 if $test "X$ansexp" != "X$binexp"; then
5714         installbin=''
5715 fi
5716 bin="$ans"
5717 binexp="$ansexp"
5718 : Change installation prefix, if necessary.
5719 : XXX Bug? -- ignores Configure -Dinstallprefix setting.
5720 if $test X"$prefix" != X"$installprefix"; then
5721         installbin=`echo $binexp | sed "s#^$prefix#$installprefix#"`
5722 else
5723         installbin="$binexp"
5724 fi
5725
5726 : Find perl5.005 or later.
5727 echo "Looking for a previously installed perl5.005 or later... "
5728 case "$perl5" in
5729 '')     for tdir in `echo "$binexp:$PATH" | $sed "s/$path_sep/ /g"`; do
5730                 : Check if this perl is recent and can load a simple module
5731                 if $test -x $tdir/perl && $tdir/perl -Mless -e 'use 5.005;' >/dev/null 2>&1; then
5732                         perl5=$tdir/perl
5733                         break;
5734                 elif $test -x $tdir/perl5 && $tdir/perl5 -Mless -e 'use 5.005;' >/dev/null 2>&1; then
5735                         perl5=$tdir/perl
5736                         break;
5737                 fi
5738         done
5739         ;;
5740 *)      perl5="$perl5"
5741         ;;
5742 esac
5743 case "$perl5" in
5744 '')     echo "None found.  That's ok.";;
5745 *)      echo "Using $perl5." ;;
5746 esac
5747
5748 : Determine list of previous versions to include in @INC
5749 $cat > getverlist <<EOPL
5750 #!$perl5 -w
5751 use File::Basename;
5752 \$api_versionstring = "$api_versionstring";
5753 \$version = "$version";
5754 \$stem = "$sitelib_stem";
5755 \$archname = "$archname";
5756 EOPL
5757         $cat >> getverlist <<'EOPL'
5758 # Can't have leading @ because metaconfig interprets it as a command!
5759 ;@inc_version_list=();
5760 # XXX Redo to do opendir/readdir? 
5761 if (-d $stem) {
5762     chdir($stem);
5763     ;@candidates = glob("5.*");
5764 }
5765 else {
5766     ;@candidates = ();
5767 }
5768
5769 # XXX ToDo:  These comparisons must be reworked when two-digit
5770 # subversions come along, so that 5.7.10 compares as greater than
5771 # 5.7.3!  By that time, hope that 5.6.x is sufficiently
5772 # widespread that we can use the built-in version vectors rather
5773 # than reinventing them here.  For 5.6.0, however, we must
5774 # assume this script will likely be run by 5.005_0x.  --AD 1/2000.
5775 foreach $d (@candidates) {
5776     if ($d lt $version) {
5777         if ($d ge $api_versionstring) {
5778             unshift(@inc_version_list, grep { -d } "$d/$archname", $d);
5779         }
5780         elsif ($d ge "5.005") {
5781             unshift(@inc_version_list, grep { -d } $d);
5782         }
5783     }
5784     else {
5785         # Skip newer version.  I.e. don't look in
5786         # 5.7.0 if we're installing 5.6.1.
5787     }
5788 }
5789
5790 if (@inc_version_list) {
5791     print join(' ', @inc_version_list);
5792 }
5793 else {
5794     # Blank space to preserve value for next Configure run.
5795     print " ";
5796 }
5797 EOPL
5798 chmod +x getverlist
5799 case "$inc_version_list" in
5800 '')     if test -x "$perl5"; then
5801                 dflt=`$perl5 getverlist`
5802         else
5803                 dflt='none'
5804         fi
5805         ;;
5806 $undef) dflt='none' ;;
5807 *)  dflt="$inc_version_list" ;;
5808 esac
5809 case "$dflt" in
5810 ''|' ') dflt=none ;;
5811 esac
5812 case "$dflt" in
5813 5.005) case "$bincompat5005" in
5814        $define|true|[yY]*) ;;
5815        *) dflt=none ;;
5816        esac
5817        ;;
5818 esac
5819 $cat <<'EOM'
5820
5821 In order to ease the process of upgrading, this version of perl 
5822 can be configured to use modules built and installed with earlier 
5823 versions of perl that were installed under $prefix.  Specify here
5824 the list of earlier versions that this version of perl should check.
5825 If Configure detected no earlier versions of perl installed under
5826 $prefix, then the list will be empty.  Answer 'none' to tell perl
5827 to not search earlier versions.
5828
5829 The default should almost always be sensible, so if you're not sure,
5830 just accept the default.
5831 EOM
5832
5833 rp='List of earlier versions to include in @INC?'
5834 . ./myread
5835 case "$ans" in
5836 [Nn]one|''|' ') inc_version_list=' ' ;;
5837 *) inc_version_list="$ans" ;;
5838 esac
5839 case "$inc_version_list" in
5840 ''|' ') 
5841         inc_version_list_init='0';;
5842 *)      inc_version_list_init=`echo $inc_version_list |
5843                 $sed -e 's/^/"/' -e 's/ /","/g' -e 's/$/",0/'`
5844         ;;
5845 esac
5846 $rm -f getverlist
5847
5848 : determine whether to install perl also as /usr/bin/perl
5849
5850 echo " "
5851 if $test -d /usr/bin -a "X$installbin" != X/usr/bin; then
5852         $cat <<EOM
5853 Many scripts expect perl to be installed as /usr/bin/perl.
5854 I can install the perl you are about to compile also as /usr/bin/perl
5855 (in addition to $installbin/perl).
5856 EOM
5857         case "$installusrbinperl" in
5858         "$undef"|[nN]*) dflt='n';;
5859         *)              dflt='y';;
5860         esac
5861         rp="Do you want to install perl as /usr/bin/perl?"
5862         . ./myread
5863         case "$ans" in
5864         [yY]*)  val="$define";;
5865         *)      val="$undef" ;;
5866         esac
5867 else
5868         val="$undef"
5869 fi
5870 set installusrbinperl
5871 eval $setvar
5872
5873 echo " "
5874 echo "Checking for GNU C Library..." >&4
5875 cat >gnulibc.c <<EOM
5876 #include <stdio.h>
5877 int main()
5878 {
5879 #ifdef __GLIBC__
5880     exit(0);
5881 #else
5882     exit(1);
5883 #endif
5884 }
5885 EOM
5886 set gnulibc
5887 if eval $compile_ok && ./gnulibc; then
5888         val="$define"
5889         echo "You are using the GNU C Library"
5890 else
5891         val="$undef"
5892         echo "You are not using the GNU C Library"
5893 fi
5894 $rm -f gnulibc*
5895 set d_gnulibc
5896 eval $setvar
5897
5898 : see if nm is to be used to determine whether a symbol is defined or not
5899 case "$usenm" in
5900 '')
5901         dflt=''
5902         case "$d_gnulibc" in
5903         "$define")
5904                 echo " "
5905                 echo "nm probably won't work on the GNU C Library." >&4
5906                 dflt=n
5907                 ;;
5908         esac
5909         case "$dflt" in
5910         '') 
5911                 if $test "$osname" = aix -a ! -f /lib/syscalls.exp; then
5912                         echo " "
5913                         echo "Whoops!  This is an AIX system without /lib/syscalls.exp!" >&4
5914                         echo "'nm' won't be sufficient on this sytem." >&4
5915                         dflt=n
5916                 fi
5917                 ;;
5918         esac
5919         case "$dflt" in
5920         '') dflt=`$egrep 'inlibc|csym' $rsrc/Configure | wc -l 2>/dev/null`
5921                 if $test $dflt -gt 20; then
5922                         dflt=y
5923                 else
5924                         dflt=n
5925                 fi
5926                 ;;
5927         esac
5928         ;;
5929 *)
5930         case "$usenm" in
5931         true|$define) dflt=y;;
5932         *) dflt=n;;
5933         esac
5934         ;;
5935 esac
5936 $cat <<EOM
5937
5938 I can use $nm to extract the symbols from your C libraries. This
5939 is a time consuming task which may generate huge output on the disk (up
5940 to 3 megabytes) but that should make the symbols extraction faster. The
5941 alternative is to skip the 'nm' extraction part and to compile a small
5942 test program instead to determine whether each symbol is present. If
5943 you have a fast C compiler and/or if your 'nm' output cannot be parsed,
5944 this may be the best solution.
5945
5946 You probably shouldn't let me use 'nm' if you are using the GNU C Library.
5947
5948 EOM
5949 rp="Shall I use $nm to extract C symbols from the libraries?"
5950 . ./myread
5951 case "$ans" in
5952 [Nn]*) usenm=false;;
5953 *) usenm=true;;
5954 esac
5955
5956 runnm=$usenm
5957 case "$reuseval" in
5958 true) runnm=false;;
5959 esac
5960
5961 : nm options which may be necessary
5962 case "$nm_opt" in
5963 '') if $test -f /mach_boot; then
5964                 nm_opt=''       # Mach
5965         elif $test -d /usr/ccs/lib; then
5966                 nm_opt='-p'     # Solaris (and SunOS?)
5967         elif $test -f /dgux; then
5968                 nm_opt='-p'     # DG-UX
5969         elif $test -f /lib64/rld; then
5970                 nm_opt='-p'     # 64-bit Irix
5971         else
5972                 nm_opt=''
5973         fi;;
5974 esac
5975
5976 : nm options which may be necessary for shared libraries but illegal
5977 : for archive libraries.  Thank you, Linux.
5978 case "$nm_so_opt" in
5979 '')     case "$myuname" in
5980         *linux*)
5981                 if $nm --help | $grep 'dynamic' > /dev/null 2>&1; then
5982                         nm_so_opt='--dynamic'
5983                 fi
5984                 ;;
5985         esac
5986         ;;
5987 esac
5988
5989 case "$runnm" in
5990 true)
5991 : get list of predefined functions in a handy place
5992 echo " "
5993 case "$libc" in
5994 '') libc=unknown
5995         case "$libs" in
5996         *-lc_s*) libc=`./loc libc_s$_a $libc $libpth`
5997         esac
5998         ;;
5999 esac
6000 libnames='';
6001 case "$libs" in
6002 '') ;;
6003 *)  for thislib in $libs; do
6004         case "$thislib" in
6005         -lc|-lc_s)
6006                 : Handle C library specially below.
6007                 ;;
6008         -l*)
6009                 thislib=`echo $thislib | $sed -e 's/^-l//'`
6010                 if try=`./loc lib$thislib.$so.'*' X $libpth`; $test -f "$try"; then
6011                         :
6012                 elif try=`./loc lib$thislib.$so X $libpth`; $test -f "$try"; then
6013                         :
6014                 elif try=`./loc lib$thislib$_a X $libpth`; $test -f "$try"; then
6015                         :
6016                 elif try=`./loc $thislib$_a X $libpth`; $test -f "$try"; then
6017                         :
6018                 elif try=`./loc lib$thislib X $libpth`; $test -f "$try"; then
6019                         :
6020                 elif try=`./loc $thislib X $libpth`; $test -f "$try"; then
6021                         :
6022                 elif try=`./loc Slib$thislib$_a X $xlibpth`; $test -f "$try"; then
6023                         :
6024                 else
6025                         try=''
6026                 fi
6027                 libnames="$libnames $try"
6028                 ;;
6029         *) libnames="$libnames $thislib" ;;
6030         esac
6031         done
6032         ;;
6033 esac
6034 xxx=normal
6035 case "$libc" in
6036 unknown)
6037         set /lib/libc.$so
6038         for xxx in $libpth; do
6039                 $test -r $1 || set $xxx/libc.$so
6040                 : The messy sed command sorts on library version numbers.
6041                 $test -r $1 || \
6042                         set `echo blurfl; echo $xxx/libc.$so.[0-9]* | \
6043                         tr ' ' $trnl | egrep -v '\.[A-Za-z]*$' | $sed -e '
6044                                 h
6045                                 s/[0-9][0-9]*/0000&/g
6046                                 s/0*\([0-9][0-9][0-9][0-9][0-9]\)/\1/g
6047                                 G
6048                                 s/\n/ /' | \
6049                          sort | $sed -e 's/^.* //'`
6050                 eval set \$$#
6051         done
6052         $test -r $1 || set /usr/ccs/lib/libc.$so
6053         $test -r $1 || set /lib/libsys_s$_a
6054         ;;
6055 *)
6056         set blurfl
6057         ;;
6058 esac
6059 if $test -r "$1"; then
6060         echo "Your (shared) C library seems to be in $1."
6061         libc="$1"
6062 elif $test -r /lib/libc && $test -r /lib/clib; then
6063         echo "Your C library seems to be in both /lib/clib and /lib/libc."
6064         xxx=apollo
6065         libc='/lib/clib /lib/libc'
6066         if $test -r /lib/syslib; then
6067                 echo "(Your math library is in /lib/syslib.)"
6068                 libc="$libc /lib/syslib"
6069         fi
6070 elif $test -r "$libc" || (test -h "$libc") >/dev/null 2>&1; then
6071         echo "Your C library seems to be in $libc, as you said before."
6072 elif $test -r $incpath/usr/lib/libc$_a; then
6073         libc=$incpath/usr/lib/libc$_a;
6074         echo "Your C library seems to be in $libc.  That's fine."
6075 elif $test -r /lib/libc$_a; then
6076         libc=/lib/libc$_a;
6077         echo "Your C library seems to be in $libc.  You're normal."
6078 else
6079         if tans=`./loc libc$_a blurfl/dyick $libpth`; $test -r "$tans"; then
6080                 :
6081         elif tans=`./loc libc blurfl/dyick $libpth`; $test -r "$tans"; then
6082                 libnames="$libnames "`./loc clib blurfl/dyick $libpth`
6083         elif tans=`./loc clib blurfl/dyick $libpth`; $test -r "$tans"; then
6084                 :
6085         elif tans=`./loc Slibc$_a blurfl/dyick $xlibpth`; $test -r "$tans"; then
6086                 :
6087         elif tans=`./loc Mlibc$_a blurfl/dyick $xlibpth`; $test -r "$tans"; then
6088                 :
6089         else
6090                 tans=`./loc Llibc$_a blurfl/dyick $xlibpth`
6091         fi
6092         if $test -r "$tans"; then
6093                 echo "Your C library seems to be in $tans, of all places."
6094                 libc=$tans
6095         else
6096                 libc='blurfl'
6097         fi
6098 fi
6099 if $test $xxx = apollo -o -r "$libc" || (test -h "$libc") >/dev/null 2>&1; then
6100         dflt="$libc"
6101         cat <<EOM
6102
6103 If the guess above is wrong (which it might be if you're using a strange
6104 compiler, or your machine supports multiple models), you can override it here.
6105
6106 EOM
6107 else
6108         dflt=''
6109         echo $libpth | tr ' ' $trnl | sort | uniq > libpath
6110         cat >&4 <<EOM
6111 I can't seem to find your C library.  I've looked in the following places:
6112
6113 EOM
6114         $sed 's/^/      /' libpath
6115         cat <<EOM
6116
6117 None of these seems to contain your C library. I need to get its name...
6118
6119 EOM
6120 fi
6121 fn=f
6122 rp='Where is your C library?'
6123 . ./getfile
6124 libc="$ans"
6125
6126 echo " "
6127 echo $libc $libnames | tr ' ' $trnl | sort | uniq > libnames
6128 set X `cat libnames`
6129 shift
6130 xxx=files
6131 case $# in 1) xxx=file; esac
6132 echo "Extracting names from the following $xxx for later perusal:" >&4
6133 echo " "
6134 $sed 's/^/      /' libnames >&4
6135 echo " "
6136 $echo $n "This may take a while...$c" >&4
6137
6138 for file in $*; do
6139         case $file in
6140         *$so*) $nm $nm_so_opt $nm_opt $file 2>/dev/null;;
6141         *) $nm $nm_opt $file 2>/dev/null;;
6142         esac
6143 done >libc.tmp
6144
6145 $echo $n ".$c"
6146 $grep fprintf libc.tmp > libc.ptf
6147 xscan='eval "<libc.ptf $com >libc.list"; $echo $n ".$c" >&4'
6148 xrun='eval "<libc.tmp $com >libc.list"; echo "done" >&4'
6149 xxx='[ADTSIW]'
6150 if com="$sed -n -e 's/__IO//' -e 's/^.* $xxx  *_[_.]*//p' -e 's/^.* $xxx  *//p'";\
6151         eval $xscan;\
6152         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
6153                 eval $xrun
6154 elif com="$sed -n -e 's/^__*//' -e 's/^\([a-zA-Z_0-9$]*\).*xtern.*/\1/p'";\
6155         eval $xscan;\
6156         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
6157                 eval $xrun
6158 elif com="$sed -n -e '/|UNDEF/d' -e '/FUNC..GL/s/^.*|__*//p'";\
6159         eval $xscan;\
6160         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
6161                 eval $xrun
6162 elif com="$sed -n -e 's/^.* D __*//p' -e 's/^.* D //p'";\
6163         eval $xscan;\
6164         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
6165                 eval $xrun
6166 elif com="$sed -n -e 's/^_//' -e 's/^\([a-zA-Z_0-9]*\).*xtern.*text.*/\1/p'";\
6167         eval $xscan;\
6168         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
6169                 eval $xrun
6170 elif com="$sed -n -e 's/^.*|FUNC |GLOB .*|//p'";\
6171         eval $xscan;\
6172         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
6173                 eval $xrun
6174 elif com="$grep '|' | $sed -n -e '/|COMMON/d' -e '/|DATA/d' \
6175                                 -e '/ file/d' -e 's/^\([^       ]*\).*/\1/p'";\
6176         eval $xscan;\
6177         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
6178                 eval $xrun
6179 elif com="$sed -n -e 's/^.*|FUNC |GLOB .*|//p' -e 's/^.*|FUNC |WEAK .*|//p'";\
6180         eval $xscan;\
6181         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
6182                 eval $xrun
6183 elif com="$sed -n -e 's/^__//' -e '/|Undef/d' -e '/|Proc/s/ .*//p'";\
6184         eval $xscan;\
6185         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
6186                 eval $xrun
6187 elif com="$sed -n -e 's/^.*|Proc .*|Text *| *//p'";\
6188         eval $xscan;\
6189         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
6190                 eval $xrun
6191 elif com="$sed -n -e '/Def. Text/s/.* \([^ ]*\)\$/\1/p'";\
6192         eval $xscan;\
6193         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
6194                 eval $xrun
6195 elif com="$sed -n -e 's/^[-0-9a-f ]*_\(.*\)=.*/\1/p'";\
6196         eval $xscan;\
6197         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
6198                 eval $xrun
6199 elif com="$sed -n -e 's/.*\.text n\ \ \ \.//p'";\
6200         eval $xscan;\
6201         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
6202                 eval $xrun
6203 elif com="sed -n -e 's/^__.*//' -e 's/[       ]*D[    ]*[0-9]*.*//p'";\
6204         eval $xscan;\
6205         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
6206                 eval $xrun
6207 else
6208         $nm -p $* 2>/dev/null >libc.tmp
6209         $grep fprintf libc.tmp > libc.ptf
6210         if com="$sed -n -e 's/^.* [ADTSIW]  *_[_.]*//p' -e 's/^.* [ADTSIW] //p'";\
6211                 eval $xscan; $contains '^fprintf$' libc.list >/dev/null 2>&1
6212         then
6213                 nm_opt='-p'
6214                 eval $xrun
6215         else
6216                 echo " "
6217                 echo "$nm didn't seem to work right. Trying $ar instead..." >&4
6218                 com=''
6219                 if $ar t $libc > libc.tmp && $contains '^fprintf$' libc.tmp >/dev/null 2>&1; then
6220                         for thisname in $libnames $libc; do
6221                                 $ar t $thisname >>libc.tmp
6222                         done
6223                         $sed -e "s/\\$_o\$//" < libc.tmp > libc.list
6224                         echo "Ok." >&4
6225                 elif test "X$osname" = "Xos2" && $ar tv $libc > libc.tmp; then
6226                         # Repeat libc to extract forwarders to DLL entries too
6227                         for thisname in $libnames $libc; do
6228                                 $ar tv $thisname >>libc.tmp
6229                                 # Revision 50 of EMX has bug in $ar.
6230                                 # it will not extract forwarders to DLL entries
6231                                 # Use emximp which will extract exactly them.
6232                                 emximp -o tmp.imp $thisname \
6233                                     2>/dev/null && \
6234                                     $sed -e 's/^\([_a-zA-Z0-9]*\) .*$/\1/p' \
6235                                     < tmp.imp >>libc.tmp
6236                                 $rm tmp.imp
6237                         done
6238                         $sed -e "s/\\$_o\$//" -e 's/^ \+//' < libc.tmp > libc.list
6239                         echo "Ok." >&4
6240                 else
6241                         echo "$ar didn't seem to work right." >&4
6242                         echo "Maybe this is a Cray...trying bld instead..." >&4
6243                         if bld t $libc | $sed -e 's/.*\///' -e "s/\\$_o:.*\$//" > libc.list
6244                         then
6245                                 for thisname in $libnames; do
6246                                         bld t $libnames | \
6247                                         $sed -e 's/.*\///' -e "s/\\$_o:.*\$//" >>libc.list
6248                                         $ar t $thisname >>libc.tmp
6249                                 done
6250                                 echo "Ok." >&4
6251                         else
6252                                 echo "That didn't work either.  Giving up." >&4
6253                                 exit 1
6254                         fi
6255                 fi
6256         fi
6257 fi
6258 nm_extract="$com"
6259 if $test -f /lib/syscalls.exp; then
6260         echo " "
6261         echo "Also extracting names from /lib/syscalls.exp for good ole AIX..." >&4
6262         $sed -n 's/^\([^        ]*\)[   ]*syscall[0-9]*$/\1/p' /lib/syscalls.exp >>libc.list
6263 fi
6264 ;;
6265 esac
6266 $rm -f libnames libpath
6267
6268 : see if dld is available
6269 set dld.h i_dld
6270 eval $inhdr
6271
6272 : is a C symbol defined?
6273 csym='tlook=$1;
6274 case "$3" in
6275 -v) tf=libc.tmp; tc=""; tdc="";;
6276 -a) tf=libc.tmp; tc="[0]"; tdc="[]";;
6277 *) tlook="^$1\$"; tf=libc.list; tc="()"; tdc="()";;
6278 esac;
6279 tx=yes;
6280 case "$reuseval-$4" in
6281 true-) ;;
6282 true-*) tx=no; eval "tval=\$$4"; case "$tval" in "") tx=yes;; esac;;
6283 esac;
6284 case "$tx" in
6285 yes)
6286         case "$runnm" in
6287         true)
6288                 if $contains $tlook $tf >/dev/null 2>&1;
6289                 then tval=true;
6290                 else tval=false;
6291                 fi;;
6292         *)
6293                 echo "int main() { extern short $1$tdc; printf(\"%hd\", $1$tc); }" > t.c;
6294                 if $cc $optimize $ccflags $ldflags -o t t.c $libs >/dev/null 2>&1;
6295                 then tval=true;
6296                 else tval=false;
6297                 fi;
6298                 $rm -f t t.c;;
6299         esac;;
6300 *)
6301         case "$tval" in
6302         $define) tval=true;;
6303         *) tval=false;;
6304         esac;;
6305 esac;
6306 eval "$2=$tval"'
6307
6308 : define an is-in-libc? function
6309 inlibc='echo " "; td=$define; tu=$undef;
6310 sym=$1; var=$2; eval "was=\$$2";
6311 tx=yes;
6312 case "$reuseval$was" in
6313 true) ;;
6314 true*) tx=no;;
6315 esac;
6316 case "$tx" in
6317 yes)
6318         set $sym tres -f;
6319         eval $csym;
6320         case "$tres" in
6321         true)
6322                 echo "$sym() found." >&4;
6323                 case "$was" in $undef) . ./whoa; esac; eval "$var=\$td";;
6324         *)
6325                 echo "$sym() NOT found." >&4;
6326                 case "$was" in $define) . ./whoa; esac; eval "$var=\$tu";;
6327         esac;;
6328 *)
6329         case "$was" in
6330         $define) echo "$sym() found." >&4;;
6331         *) echo "$sym() NOT found." >&4;;
6332         esac;;
6333 esac'
6334
6335 : see if dlopen exists
6336 xxx_runnm="$runnm"
6337 runnm=false
6338 set dlopen d_dlopen
6339 eval $inlibc
6340 runnm="$xxx_runnm"
6341
6342 : determine which dynamic loading, if any, to compile in
6343 echo " "
6344 dldir="ext/DynaLoader"
6345 case "$usedl" in
6346 $define|y|true)
6347         dflt='y'
6348         usedl="$define"
6349         ;;
6350 $undef|n|false)
6351         dflt='n'
6352         usedl="$undef"
6353         ;;
6354 *) 
6355         dflt='n'
6356         case "$d_dlopen" in
6357             $define) dflt='y' ;;
6358         esac
6359         case "$i_dld" in
6360             $define) dflt='y' ;;
6361         esac
6362         : Does a dl_xxx.xs file exist for this operating system
6363         $test -f $rsrc/$dldir/dl_${osname}.xs && dflt='y'
6364         ;;
6365 esac
6366 rp="Do you wish to use dynamic loading?"
6367 . ./myread
6368 usedl="$ans"
6369 case "$ans" in
6370 y*) usedl="$define"
6371         case "$dlsrc" in
6372         '')
6373                 if $test -f $rsrc/$dldir/dl_${osname}.xs ; then
6374                         dflt="$dldir/dl_${osname}.xs"
6375                 elif $test "$d_dlopen" = "$define" ; then
6376                         dflt="$dldir/dl_dlopen.xs"
6377                 elif $test "$i_dld" = "$define" ; then
6378                         dflt="$dldir/dl_dld.xs"
6379                 else
6380                         dflt=''
6381                 fi
6382                 ;;
6383         *)      dflt="$dldir/$dlsrc"
6384                 ;;
6385         esac
6386     echo "The following dynamic loading files are available:"
6387         : Can not go over to $dldir because getfile has path hard-coded in.
6388         tdir=`pwd`; cd $rsrc; $ls -C $dldir/dl*.xs; cd $tdir
6389         rp="Source file to use for dynamic loading"
6390         fn="fne"
6391         gfpth="$src"
6392         . ./getfile
6393         usedl="$define"
6394         : emulate basename
6395         dlsrc=`echo $ans | $sed -e 's%.*/\([^/]*\)$%\1%'`
6396
6397         $cat << EOM
6398
6399 Some systems may require passing special flags to $cc -c to
6400 compile modules that will be used to create a shared library.
6401 To use no flags, say "none".
6402
6403 EOM
6404     case "$cccdlflags" in
6405     '') case "$gccversion" in
6406                 '') case "$osname" in
6407                         hpux)   dflt='+z' ;;
6408                         next)   dflt='none' ;;
6409                         irix*)  dflt='-KPIC' ;;
6410                         svr4*|esix*|solaris) dflt='-KPIC' ;;
6411                         sunos)  dflt='-pic' ;;
6412                         *)      dflt='none' ;;
6413                     esac
6414                         ;;
6415                 *)  case "$osname" in
6416                         svr4*|esix*|solaris) dflt='-fPIC' ;;
6417                         *)      dflt='-fpic' ;;
6418                     esac ;;
6419             esac ;;
6420         ' ') dflt='none' ;;
6421     *)  dflt="$cccdlflags" ;;
6422     esac
6423     rp="Any special flags to pass to $cc -c to compile shared library modules?"
6424     . ./myread
6425     case "$ans" in
6426     none) cccdlflags=' ' ;;
6427     *) cccdlflags="$ans" ;;
6428     esac
6429
6430     cat << EOM
6431
6432 Some systems use ld to create libraries that can be dynamically loaded,
6433 while other systems (such as those using ELF) use $cc.
6434
6435 EOM
6436         case "$ld" in
6437         '')     $cat >try.c <<'EOM'
6438 /* Test for whether ELF binaries are produced */
6439 #include <fcntl.h>
6440 #include <stdlib.h>
6441 int main() {
6442         char b[4];
6443         int i = open("a.out",O_RDONLY);
6444         if(i == -1) 
6445                 exit(1); /* fail */
6446         if(read(i,b,4)==4 && b[0]==127 && b[1]=='E' && b[2]=='L' && b[3]=='F')
6447                 exit(0); /* succeed (yes, it's ELF) */
6448         else
6449                 exit(1); /* fail */
6450 }
6451 EOM
6452                 if $cc $ccflags try.c >/dev/null 2>&1 && ./a.out; then
6453                         cat <<EOM
6454 You appear to have ELF support.  I'll use $cc to build dynamic libraries.
6455 EOM
6456                         dflt="$cc"
6457                 else
6458                         echo "I'll use ld to build dynamic libraries."
6459                         dflt='ld'
6460                 fi
6461                 rm -f try.c a.out
6462                 ;;
6463         *)      dflt="$ld"
6464                 ;;
6465         esac
6466
6467     rp="What command should be used to create dynamic libraries?"
6468     . ./myread
6469         ld="$ans"
6470
6471     cat << EOM
6472
6473 Some systems may require passing special flags to $ld to create a
6474 library that can be dynamically loaded.  If your ld flags include
6475 -L/other/path options to locate libraries outside your loader's normal
6476 search path, you may need to specify those -L options here as well.  To
6477 use no flags, say "none".
6478
6479 EOM
6480     case "$lddlflags" in
6481     '') case "$osname" in
6482                         beos) dflt='-nostart' ;;
6483                         hpux) dflt='-b';
6484                               case "$gccversion" in
6485                               '') dflt="$dflt +vnocompatwarnings" ;;
6486                               esac
6487                               ;;        
6488                         linux|irix*)    dflt='-shared' ;;
6489                         next)  dflt='none' ;;
6490                         solaris) dflt='-G' ;;
6491                         sunos) dflt='-assert nodefinitions' ;;
6492                         svr4*|esix*) dflt="-G $ldflags" ;;
6493                 *)     dflt='none' ;;
6494                         esac
6495                         ;;
6496     *) dflt="$lddlflags" ;;
6497     esac
6498
6499         : Try to guess additional flags to pick up local libraries.
6500         : Be careful not to append to a plain 'none'
6501         case "$dflt" in
6502         none) dflt='' ;;
6503         esac
6504         for thisflag in $ldflags; do
6505                 case "$thisflag" in
6506                 -L*)
6507                         case " $dflt " in
6508                         *" $thisflag "*) ;;
6509                         *) dflt="$dflt $thisflag" ;;
6510                         esac
6511                         ;;
6512                 esac
6513         done
6514
6515         case "$dflt" in
6516         ''|' ') dflt='none' ;;
6517         esac
6518
6519     rp="Any special flags to pass to $ld to create a dynamically loaded library?"
6520     . ./myread
6521     case "$ans" in
6522     none) lddlflags=' ' ;;
6523     *) lddlflags="$ans" ;;
6524     esac
6525
6526         cat <<EOM
6527
6528 Some systems may require passing special flags to $cc to indicate that
6529 the resulting executable will use dynamic linking.  To use no flags,
6530 say "none".
6531
6532 EOM
6533     case "$ccdlflags" in
6534     '') case "$osname" in
6535                 hpux)   dflt='-Wl,-E' ;;
6536                 linux)  dflt='-rdynamic' ;;
6537                 next)   dflt='none' ;;
6538                 sunos)  dflt='none' ;;
6539                 *)      dflt='none' ;;
6540             esac ;;
6541     ' ')  dflt='none' ;;
6542     *)  dflt="$ccdlflags" ;;
6543     esac
6544     rp="Any special flags to pass to $cc to use dynamic linking?"
6545     . ./myread
6546     case "$ans" in
6547     none) ccdlflags=' ' ;;
6548     *) ccdlflags="$ans" ;;
6549     esac
6550     ;;
6551 *)  usedl="$undef"
6552         ld='ld'
6553     dlsrc='dl_none.xs'
6554     lddlflags=''
6555     ccdlflags=''
6556     ;;
6557 esac
6558
6559 also=''
6560 case "$usedl" in
6561 $undef)
6562         # No dynamic loading being used, so don't bother even to prompt.
6563         useshrplib='false'
6564         ;;
6565 *)      case "$useshrplib" in
6566         '')     case "$osname" in
6567                 svr4*|dgux|dynixptx|esix|powerux|beos|cygwin*)
6568                         dflt=y
6569                         also='Building a shared libperl is required for dynamic loading to work on your system.'
6570                         ;;
6571                 next*)
6572                         case "$osvers" in
6573                         4*)     dflt=y
6574                                 also='Building a shared libperl is needed for MAB support.'
6575                                 ;;
6576                         *)      dflt=n
6577                                 ;;
6578                         esac
6579                         ;;
6580                 *)      dflt=n
6581                         ;;
6582                 esac
6583                 ;;
6584         $define|true|[Yy]*)
6585                 dflt=y
6586                 ;;
6587         *)      dflt=n
6588                 ;;
6589         esac
6590         $cat << EOM
6591
6592 The perl executable is normally obtained by linking perlmain.c with
6593 libperl${_a}, any static extensions (usually just DynaLoader), and
6594 any other libraries needed on this system (such as -lm, etc.).  Since
6595 your system supports dynamic loading, it is probably possible to build
6596 a shared libperl.$so.  If you will have more than one executable linked
6597 to libperl.$so, this will significantly reduce the size of each
6598 executable, but it may have a noticeable affect on performance.  The
6599 default is probably sensible for your system.
6600 $also
6601
6602 EOM
6603         rp="Build a shared libperl.$so (y/n)"
6604         . ./myread
6605         case "$ans" in
6606         true|$define|[Yy]*)
6607                 useshrplib='true'  ;;
6608         *)      useshrplib='false' ;;
6609         esac
6610         ;;
6611 esac
6612
6613 case "$useshrplib" in
6614 true)
6615         case "$libperl" in
6616         '')
6617                 # Figure out a good name for libperl.so.  Since it gets stored in
6618                 # a version-specific architecture-dependent library, the version
6619                 # number isn't really that important, except for making cc/ld happy.
6620                 #
6621                 # A name such as libperl.so.3.1
6622                 majmin="libperl.$so.$patchlevel.$subversion"
6623                 # A name such as libperl.so.301
6624                 majonly=`echo $patchlevel $subversion |
6625                         $awk '{printf "%d%02d", $1, $2}'`
6626                 majonly=libperl.$so.$majonly
6627                 # I'd prefer to keep the os-specific stuff here to a minimum, and
6628                 # rely on figuring it out from the naming of libc.
6629                 case "${osname}${osvers}" in
6630                 next4*)
6631                         dflt=libperl.5.$so
6632                         # XXX How handle the --version stuff for MAB?
6633                         ;;
6634                 linux*)  # ld won't link with a bare -lperl otherwise.
6635                         dflt=libperl.$so
6636                         ;;
6637                 cygwin*) # include version
6638                         dflt=`echo libperl$version | sed -e 's/\./_/g'`$lib_ext
6639                         ;;
6640                 *)      # Try to guess based on whether libc has major.minor.
6641                         case "$libc" in
6642                         *libc.$so.[0-9]*.[0-9]*) dflt=$majmin ;;
6643                         *libc.$so.[0-9]*) dflt=$majonly ;;
6644                         *)      dflt=libperl.$so ;;
6645                         esac
6646                         ;;
6647                 esac
6648                 ;;
6649         *)      dflt=$libperl
6650                 ;;
6651         esac
6652         cat << EOM
6653
6654 I need to select a good name for the shared libperl.  If your system uses
6655 library names with major and minor numbers, then you might want something
6656 like $majmin.  Alternatively, if your system uses a single version
6657 number for shared libraries, then you might want to use $majonly.
6658 Or, your system might be quite happy with a simple libperl.$so.
6659
6660 Since the shared libperl will get installed into a version-specific
6661 architecture-dependent directory, the version number of the shared perl
6662 library probably isn't important, so the default should be o.k.
6663
6664 EOM
6665         rp='What name do you want to give to the shared libperl?'
6666         . ./myread
6667         libperl=$ans
6668         echo "Ok, I'll use $libperl"
6669         ;;
6670 *)
6671         libperl="libperl${_a}"
6672         ;;
6673 esac
6674
6675 # Detect old use of shrpdir via undocumented Configure -Dshrpdir
6676 case "$shrpdir" in
6677 '') ;;
6678 *)      $cat >&4 <<EOM
6679 WARNING:  Use of the shrpdir variable for the installation location of
6680 the shared $libperl is not supported.  It was never documented and
6681 will not work in this version.  Let me (perlbug@perl.com)
6682 know of any problems this may cause.
6683
6684 EOM
6685         case "$shrpdir" in
6686         "$archlibexp/CORE")
6687                 $cat >&4 <<EOM
6688 But your current setting of $shrpdir is
6689 the default anyway, so it's harmless.
6690 EOM
6691                 ;;
6692         *)
6693                 $cat >&4 <<EOM
6694 Further, your current attempted setting of $shrpdir
6695 conflicts with the value of $archlibexp/CORE
6696 that installperl will use.
6697 EOM
6698                 ;;
6699         esac
6700         ;;
6701 esac
6702
6703 # How will the perl executable find the installed shared $libperl?
6704 # Add $xxx to ccdlflags.
6705 # If we can't figure out a command-line option, use $shrpenv to
6706 # set env LD_RUN_PATH.  The main perl makefile uses this.
6707 shrpdir=$archlibexp/CORE
6708 xxx=''
6709 tmp_shrpenv=''
6710 if "$useshrplib"; then
6711     case "$osname" in 
6712         aix)
6713                 # We'll set it in Makefile.SH...
6714                 ;;
6715         solaris|netbsd)
6716                 xxx="-R $shrpdir"
6717                 ;;
6718         freebsd)
6719                 xxx="-Wl,-R$shrpdir"
6720                 ;;
6721         linux|irix*|dec_osf)
6722                 xxx="-Wl,-rpath,$shrpdir"
6723                 ;;
6724         next)
6725                 # next doesn't like the default...
6726                 ;;
6727         beos)
6728                 # beos doesn't like the default, either.
6729                 ;;
6730         hpux*)
6731                 # hpux doesn't like the default, either.
6732                 tmp_shrpenv="env LDOPTS=\"+s +b${shrpdir}\""
6733                 ;;
6734         *)
6735                 tmp_shrpenv="env LD_RUN_PATH=$shrpdir"
6736                 ;;
6737         esac
6738         case "$xxx" in
6739         '') ;;
6740         *)      
6741                 # Only add $xxx if it isn't already in ccdlflags.
6742                 case " $ccdlflags " in
6743                 *" $xxx "*)     ;;
6744                 *)      ccdlflags="$ccdlflags $xxx"
6745                         cat <<EOM >&4
6746
6747 Adding $xxx to the flags
6748 passed to $ld so that the perl executable will find the 
6749 installed shared $libperl.
6750
6751 EOM
6752                         ;;
6753                 esac
6754                 ;;
6755         esac
6756 fi
6757 # Fix ccdlflags in AIX for building external extensions.
6758 # (For building Perl itself bare -bE:perl.exp is needed,
6759 #  Makefile.SH takes care of this.)
6760 case "$osname" in
6761 aix) ccdlflags="$ccdlflags -bE:$installarchlib/CORE/perl.exp" ;;
6762 esac
6763 # Respect a hint or command-line value.
6764 case "$shrpenv" in
6765 '') shrpenv="$tmp_shrpenv" ;;
6766 esac
6767 case "$ldlibpthname" in
6768 '')     ldlibpthname=LD_LIBRARY_PATH ;;
6769 none)   ldlibpthname='' ;;
6770 esac
6771
6772 : determine where manual pages go
6773 set man1dir man1dir none
6774 eval $prefixit
6775 $cat <<EOM
6776
6777 $spackage has manual pages available in source form.
6778 EOM
6779 case "$nroff" in
6780 nroff)
6781         echo "However, you don't have nroff, so they're probably useless to you."
6782         case "$man1dir" in
6783         '') man1dir="none";;
6784         esac;;
6785 esac
6786 echo "If you don't want the manual sources installed, answer 'none'."
6787 case "$man1dir" in
6788 ' ') dflt=none
6789         ;;
6790 '')
6791         lookpath="$prefixexp/man/man1 $prefixexp/man/l_man/man1"
6792         lookpath="$lookpath $prefixexp/man/p_man/man1"
6793         lookpath="$lookpath $prefixexp/man/u_man/man1"
6794         lookpath="$lookpath $prefixexp/man/man.1"
6795         case "$sysman" in
6796         */?_man*)       dflt=`./loc . $prefixexp/l_man/man1 $lookpath` ;;
6797         *)      dflt=`./loc . $prefixexp/man/man1 $lookpath` ;;
6798         esac
6799         set dflt
6800         eval $prefixup
6801         ;;
6802 *)  dflt="$man1dir"
6803         ;;
6804 esac
6805 echo " "
6806 fn=dn+~
6807 rp="Where do the main $spackage manual pages (source) go?"
6808 . ./getfile
6809 if $test "X$man1direxp" != "X$ansexp"; then
6810         installman1dir=''
6811 fi
6812 man1dir="$ans"
6813 man1direxp="$ansexp"
6814 case "$man1dir" in
6815 '')     man1dir=' '
6816         installman1dir='';;
6817 esac
6818
6819 : Change installation prefix, if necessary.
6820 if $test X"$prefix" != X"$installprefix"; then
6821         installman1dir=`echo $man1direxp | $sed "s#^$prefix#$installprefix#"`
6822 else
6823         installman1dir="$man1direxp"
6824 fi
6825
6826 : What suffix to use on installed man pages
6827
6828 case "$man1dir" in
6829 ' ')
6830         man1ext='0'
6831         ;;
6832 *)
6833         rp="What suffix should be used for the main $spackage man pages?"
6834         case "$man1ext" in
6835         '')     case "$man1dir" in
6836                 *1)  dflt=1 ;;
6837                 *1p) dflt=1p ;;
6838                 *1pm) dflt=1pm ;;
6839                 *l) dflt=l;;
6840                 *n) dflt=n;;
6841                 *o) dflt=o;;
6842                 *p) dflt=p;;
6843                 *C) dflt=C;;
6844                 *L) dflt=L;;
6845                 *L1) dflt=L1;;
6846                 *) dflt=1;;
6847                 esac
6848                 ;;
6849         *)      dflt="$man1ext";;
6850         esac
6851         . ./myread
6852         man1ext="$ans"
6853         ;;
6854 esac
6855
6856 : see if we can have long filenames
6857 echo " "
6858 first=123456789abcdef
6859 $rm -f $first
6860 if (echo hi >$first) 2>/dev/null; then
6861         if $test -f 123456789abcde; then
6862                 echo 'You cannot have filenames longer than 14 characters.  Sigh.' >&4
6863                 val="$undef"
6864         else
6865                 echo 'You can have filenames longer than 14 characters.'>&4
6866                 val="$define"
6867         fi
6868 else
6869         $cat <<'EOM'
6870 You can't have filenames longer than 14 chars.
6871 You can't even think about them!
6872 EOM
6873         val="$undef"
6874 fi 
6875 set d_flexfnam
6876 eval $setvar
6877 $rm -rf 123456789abcde*
6878
6879 : determine where library module manual pages go
6880 set man3dir man3dir none
6881 eval $prefixit
6882 $cat <<EOM
6883
6884 $spackage has manual pages for many of the library modules.
6885 EOM
6886
6887 case "$nroff" in
6888 nroff)
6889         $cat <<'EOM'
6890 However, you don't have nroff, so they're probably useless to you.
6891 EOM
6892         case "$man3dir" in
6893         '') man3dir="none";;
6894         esac;;
6895 esac
6896
6897 case "$d_flexfnam" in
6898 undef)
6899         $cat <<'EOM'
6900 However, your system can't handle the long file names like File::Basename.3. 
6901 EOM
6902         case "$man3dir" in
6903         '') man3dir="none";;
6904         esac;;
6905 esac
6906
6907 echo "If you don't want the manual sources installed, answer 'none'."
6908 prog=`echo $package | $sed 's/-*[0-9.]*$//'`
6909 case "$man3dir" in
6910 '')     dflt=`echo "$man1dir" | $sed -e 's/man1/man3/g' -e 's/man\.1/man\.3/g'`
6911         if $test -d "$privlib/man/man3"; then
6912                 cat <<EOM >&4
6913
6914 WARNING:  Previous versions of perl installed man3 pages into
6915 $privlib/man/man3.  This version will suggest a 
6916 new default of $dflt.  
6917 EOM
6918                 tdflt=$dflt
6919                 dflt='n'
6920                 rp='Do you wish to preserve the old behavior?(y/n)'
6921                 . ./myread
6922                 case "$ans" in
6923                 y*) dflt="$privlib/man/man3" ;;
6924                 *)  dflt=$tdflt ;;
6925                 esac
6926     fi
6927         ;;
6928 *)      dflt="$man3dir" ;;
6929 esac
6930 case "$dflt" in
6931 ' ') dflt=none ;;
6932 esac
6933 echo " "
6934 fn=dn+~
6935 rp="Where do the $package library man pages (source) go?"
6936 . ./getfile
6937 man3dir="$ans"
6938 man3direxp="$ansexp"
6939 case "$man3dir" in
6940 '')     man3dir=' '
6941         installman3dir='';;
6942 esac
6943
6944 : Change installation prefix, if necessary.
6945 if $test X"$prefix" != X"$installprefix"; then
6946         installman3dir=`echo $man3direxp | $sed "s#^$prefix#$installprefix#"`
6947 else
6948         installman3dir="$man3direxp"
6949 fi
6950
6951 : What suffix to use on installed man pages
6952 case "$man3dir" in
6953 ' ')
6954         man3ext='0'
6955         ;;
6956 *)
6957         rp="What suffix should be used for the $package library man pages?"
6958         case "$man3ext" in
6959         '')     case "$man3dir" in
6960                 *3)  dflt=3 ;;
6961                 *3p) dflt=3p ;;
6962                 *3pm) dflt=3pm ;;
6963                 *l) dflt=l;;
6964                 *n) dflt=n;;
6965                 *o) dflt=o;;
6966                 *p) dflt=p;;
6967                 *C) dflt=C;;
6968                 *L) dflt=L;;
6969                 *L3) dflt=L3;;
6970                 *) dflt=3;;
6971                 esac
6972                 ;;
6973         *)      dflt="$man3ext";;
6974         esac
6975         . ./myread
6976         man3ext="$ans"
6977         ;;
6978 esac
6979
6980 : see if we have to deal with yellow pages, now NIS.
6981 if $test -d /usr/etc/yp || $test -d /etc/yp; then
6982         if $test -f /usr/etc/nibindd; then
6983                 echo " "
6984                 echo "I'm fairly confident you're on a NeXT."
6985                 echo " "
6986                 rp='Do you get the hosts file via NetInfo?'
6987                 dflt=y
6988                 case "$hostcat" in
6989                 nidump*) ;;
6990                 '') ;;
6991                 *) dflt=n;;
6992                 esac
6993                 . ./myread
6994                 case "$ans" in
6995                 y*) hostcat='nidump hosts .';;
6996                 *)      case "$hostcat" in
6997                         nidump*) hostcat='';;
6998                         esac
6999                         ;;
7000                 esac
7001         fi
7002         case "$hostcat" in
7003         nidump*) ;;
7004         *)
7005                 case "$hostcat" in
7006                 *ypcat*) dflt=y;;
7007                 '') if $contains '^\+' /etc/passwd >/dev/null 2>&1; then
7008                                 dflt=y
7009                         else
7010                                 dflt=n
7011                         fi;;
7012                 *) dflt=n;;
7013                 esac
7014                 echo " "
7015                 rp='Are you getting the hosts file via yellow pages?'
7016                 . ./myread
7017                 case "$ans" in
7018                 y*) hostcat='ypcat hosts';;
7019                 *) hostcat='cat /etc/hosts';;
7020                 esac
7021                 ;;
7022         esac
7023 fi
7024 case "$hostcat" in
7025 '') test -f /etc/hosts && hostcat='cat /etc/hosts';;
7026 esac
7027 case "$groupcat" in
7028 '') test -f /etc/group && groupcat='cat /etc/group';;
7029 esac
7030 case "$passcat" in
7031 '') test -f /etc/passwd && passcat='cat /etc/passwd';;
7032 esac
7033
7034 : now get the host name
7035 echo " "
7036 echo "Figuring out host name..." >&4
7037 case "$myhostname" in
7038 '') cont=true
7039         echo 'Maybe "hostname" will work...'
7040         if tans=`sh -c hostname 2>&1` ; then
7041                 myhostname=$tans
7042                 phostname=hostname
7043                 cont=''
7044         fi
7045         ;;
7046 *) cont='';;
7047 esac
7048 if $test "$cont"; then
7049         if ./xenix; then
7050                 echo 'Oh, dear.  Maybe "/etc/systemid" is the key...'
7051                 if tans=`cat /etc/systemid 2>&1` ; then
7052                         myhostname=$tans
7053                         phostname='cat /etc/systemid'
7054                         echo "Whadyaknow.  Xenix always was a bit strange..."
7055                         cont=''
7056                 fi
7057         elif $test -r /etc/systemid; then
7058                 echo "(What is a non-Xenix system doing with /etc/systemid?)"
7059         fi
7060 fi
7061 if $test "$cont"; then
7062         echo 'No, maybe "uuname -l" will work...'
7063         if tans=`sh -c 'uuname -l' 2>&1` ; then
7064                 myhostname=$tans
7065                 phostname='uuname -l'
7066         else
7067                 echo 'Strange.  Maybe "uname -n" will work...'
7068                 if tans=`sh -c 'uname -n' 2>&1` ; then
7069                         myhostname=$tans
7070                         phostname='uname -n'
7071                 else
7072                         echo 'Oh well, maybe I can mine it out of whoami.h...'
7073                         if tans=`sh -c $contains' sysname $usrinc/whoami.h' 2>&1` ; then
7074                                 myhostname=`echo "$tans" | $sed 's/^.*"\(.*\)"/\1/'`
7075                                 phostname="sed -n -e '"'/sysname/s/^.*\"\\(.*\\)\"/\1/{'"' -e p -e q -e '}' <$usrinc/whoami.h"
7076                         else
7077                                 case "$myhostname" in
7078                                 '') echo "Does this machine have an identity crisis or something?"
7079                                         phostname='';;
7080                                 *)
7081                                         echo "Well, you said $myhostname before..."
7082                                         phostname='echo $myhostname';;
7083                                 esac
7084                         fi
7085                 fi
7086         fi
7087 fi
7088 : you do not want to know about this
7089 set $myhostname
7090 myhostname=$1
7091
7092 : verify guess
7093 if $test "$myhostname" ; then
7094         dflt=y
7095         rp='Your host name appears to be "'$myhostname'".'" Right?"
7096         . ./myread
7097         case "$ans" in
7098         y*) ;;
7099         *) myhostname='';;
7100         esac
7101 fi
7102
7103 : bad guess or no guess
7104 while $test "X$myhostname" = X ; do
7105         dflt=''
7106         rp="Please type the (one word) name of your host:"
7107         . ./myread
7108         myhostname="$ans"
7109 done
7110
7111 : translate upper to lower if necessary
7112 case "$myhostname" in
7113 *[A-Z]*)
7114         echo "(Normalizing case in your host name)"
7115         myhostname=`echo $myhostname | ./tr '[A-Z]' '[a-z]'`
7116         ;;
7117 esac
7118
7119 case "$myhostname" in
7120 *.*)
7121         dflt=`expr "X$myhostname" : "X[^.]*\(\..*\)"`
7122         myhostname=`expr "X$myhostname" : "X\([^.]*\)\."`
7123         echo "(Trimming domain name from host name--host name is now $myhostname)"
7124         ;;
7125 *) case "$mydomain" in
7126         '')
7127                 {
7128                         test "X$hostcat" = "Xypcat hosts" &&
7129                         ypmatch "$myhostname" hosts 2>/dev/null |\
7130                                 $sed -e 's/[     ]*#.*//; s/$/ /' > hosts && \
7131                         $test -s hosts
7132                 } || {
7133                         test "X$hostcat" != "X" &&
7134                         $hostcat | $sed -n -e "s/[       ]*#.*//; s/\$/ /
7135                                         /[       ]$myhostname[  . ]/p" > hosts
7136                 }
7137                 tmp_re="[       . ]"
7138                 $test x`$awk "/[0-9].*[  ]$myhostname$tmp_re/ { sum++ }
7139                              END { print sum }" hosts` = x1 || tmp_re="[         ]"
7140                 dflt=.`$awk "/[0-9].*[   ]$myhostname$tmp_re/ {for(i=2; i<=NF;i++) print \\\$i}" \
7141                         hosts | $sort | $uniq | \
7142                         $sed -n -e "s/$myhostname\.\([-a-zA-Z0-9_.]\)/\1/p"`
7143                 case `$echo X$dflt` in
7144                 X*\ *)  echo "(Several hosts in /etc/hosts matched hostname)"
7145                         dflt=.
7146                         ;;
7147                 X.) echo "(You do not have fully-qualified names in /etc/hosts)"
7148                         ;;
7149                 esac
7150                 case "$dflt" in
7151                 .)
7152                         tans=`./loc resolv.conf X /etc /usr/etc`
7153                         if $test -f "$tans"; then
7154                                 echo "(Attempting domain name extraction from $tans)"
7155                                 dflt=.`$sed -n -e 's/   / /g' \
7156                                   -e 's/^search  *\([^ ]*\).*/\1/p' $tans \
7157                                   | ./tr '[A-Z]' '[a-z]' 2>/dev/null`
7158                                 case "$dflt" in
7159                                 .) dflt=.`$sed -n -e 's/        / /g' \
7160                                      -e 's/^domain  *\([^ ]*\).*/\1/p' $tans \
7161                                      | ./tr '[A-Z]' '[a-z]' 2>/dev/null`
7162                                         ;;
7163                                 esac
7164                         fi
7165                         ;;
7166                 esac
7167                 case "$dflt" in
7168                 .) echo "(No help from resolv.conf either -- attempting clever guess)"
7169                         dflt=.`sh -c domainname 2>/dev/null`
7170                         case "$dflt" in
7171                         '') dflt='.';;
7172                         .nis.*|.yp.*|.main.*) dflt=`echo $dflt | $sed -e 's/^\.[^.]*//'`;;
7173                         esac
7174                         ;;
7175                 esac
7176                 case "$dflt" in
7177                 .) echo "(Lost all hope -- silly guess then)"
7178                         dflt='.uucp'
7179                         ;;
7180                 esac
7181                 $rm -f hosts
7182                 ;;
7183         *) dflt="$mydomain";;
7184         esac;;
7185 esac
7186 echo " "
7187 rp="What is your domain name?"
7188 . ./myread
7189 tans="$ans"
7190 case "$ans" in
7191 '') ;;
7192 .*) ;;
7193 *) tans=".$tans";;
7194 esac
7195 mydomain="$tans"
7196
7197 : translate upper to lower if necessary
7198 case "$mydomain" in
7199 *[A-Z]*)
7200         echo "(Normalizing case in your domain name)"
7201         mydomain=`echo $mydomain | ./tr '[A-Z]' '[a-z]'`
7202         ;;
7203 esac
7204
7205 : a little sanity check here
7206 case "$phostname" in
7207 '') ;;
7208 *)
7209         case `$phostname | ./tr '[A-Z]' '[a-z]'` in
7210         $myhostname$mydomain|$myhostname) ;;
7211         *)
7212                 case "$phostname" in
7213                 sed*)
7214                         echo "(That doesn't agree with your whoami.h file, by the way.)"
7215                         ;;
7216                 *)
7217                         echo "(That doesn't agree with your $phostname command, by the way.)"
7218                         ;;
7219                 esac
7220         ;;
7221         esac
7222         ;;
7223 esac
7224
7225 $cat <<EOM
7226
7227 I need to get your e-mail address in Internet format if possible, i.e.
7228 something like user@host.domain. Please answer accurately since I have
7229 no easy means to double check it. The default value provided below
7230 is most probably close to reality but may not be valid from outside
7231 your organization...
7232
7233 EOM
7234 cont=x
7235 while test "$cont"; do
7236         case "$cf_email" in
7237         '') dflt="$cf_by@$myhostname$mydomain";;
7238         *) dflt="$cf_email";;
7239         esac
7240         rp='What is your e-mail address?'
7241         . ./myread
7242         cf_email="$ans"
7243         case "$cf_email" in
7244         *@*.*) cont='' ;;
7245         *)
7246                 rp='Address does not look like an Internet one.  Use it anyway?'
7247                 case "$fastread" in
7248                 yes) dflt=y ;;
7249                 *) dflt=n ;;
7250                 esac
7251                 . ./myread
7252                 case "$ans" in
7253                 y*) cont='' ;;
7254                 *) echo " " ;;
7255                 esac
7256                 ;;
7257         esac
7258 done
7259
7260 $cat <<EOM
7261
7262 If you or somebody else will be maintaining perl at your site, please
7263 fill in the correct e-mail address here so that they may be contacted
7264 if necessary. Currently, the "perlbug" program included with perl
7265 will send mail to this address in addition to perlbug@perl.com. You may
7266 enter "none" for no administrator.
7267
7268 EOM
7269 case "$perladmin" in
7270 '') dflt="$cf_email";;
7271 *) dflt="$perladmin";;
7272 esac
7273 rp='Perl administrator e-mail address'
7274 . ./myread
7275 perladmin="$ans"
7276
7277 : figure out how to guarantee perl startup
7278 case "$startperl" in
7279 '')
7280         case "$sharpbang" in
7281         *!)
7282                 $cat <<EOH
7283
7284 I can use the #! construct to start perl on your system. This will
7285 make startup of perl scripts faster, but may cause problems if you
7286 want to share those scripts and perl is not in a standard place
7287 ($binexp/perl) on all your platforms. The alternative is to force
7288 a shell by starting the script with a single ':' character.
7289
7290 EOH
7291                 dflt="$binexp/perl"
7292                 rp='What shall I put after the #! to start up perl ("none" to not use #!)?'
7293                 . ./myread
7294                 case "$ans" in
7295                 none)   startperl=": # use perl";;
7296                 *)      startperl="#!$ans"
7297                         if $test 30 -lt `echo "$ans" | wc -c`; then
7298                                 $cat >&4 <<EOM
7299
7300 WARNING:  Some systems limit the #! command to 32 characters.
7301 If you experience difficulty running Perl scripts with #!, try
7302 installing Perl in a directory with a shorter pathname.
7303
7304 EOM
7305                         fi ;;
7306                 esac
7307                 ;;
7308         *) startperl=": # use perl"
7309                 ;;
7310         esac
7311         ;;
7312 esac
7313 echo "I'll use $startperl to start perl scripts."
7314
7315 : figure best path for perl in scripts
7316 case "$perlpath" in
7317 '')
7318         perlpath="$binexp/perl"
7319         case "$startperl" in
7320         *!*) ;;
7321         *)
7322                 $cat <<EOH
7323
7324 I will use the "eval 'exec'" idiom to start Perl on your system.
7325 I can use the full path of your Perl binary for this purpose, but
7326 doing so may cause problems if you want to share those scripts and
7327 Perl is not always in a standard place ($binexp/perl).
7328
7329 EOH
7330                 dflt="$binexp/perl"
7331                 rp="What path shall I use in \"eval 'exec'\"?"
7332                 . ./myread
7333                 perlpath="$ans"
7334                 ;;
7335         esac
7336         ;;
7337 esac
7338 case "$startperl" in
7339 *!*)    ;;
7340 *)      echo "I'll use $perlpath in \"eval 'exec'\"" ;;
7341 esac
7342
7343 : determine where public executable scripts go
7344 set scriptdir scriptdir
7345 eval $prefixit
7346 case "$scriptdir" in
7347 '')
7348         dflt="$bin"
7349         : guess some guesses
7350         $test -d /usr/share/scripts && dflt=/usr/share/scripts
7351         $test -d /usr/share/bin     && dflt=/usr/share/bin
7352         $test -d /usr/local/script  && dflt=/usr/local/script
7353         $test -d /usr/local/scripts && dflt=/usr/local/scripts
7354         $test -d $prefixexp/script  && dflt=$prefixexp/script
7355         set dflt
7356         eval $prefixup
7357         ;;
7358 *)  dflt="$scriptdir"
7359         ;;
7360 esac
7361 $cat <<EOM
7362  
7363 Some installations have a separate directory just for executable scripts so
7364 that they can mount it across multiple architectures but keep the scripts in
7365 one spot.  You might, for example, have a subdirectory of /usr/share for this.
7366 Or you might just lump your scripts in with all your other executables.
7367  
7368 EOM
7369 fn=d~
7370 rp='Where do you keep publicly executable scripts?'
7371 . ./getfile
7372 if $test "X$ansexp" != "X$scriptdirexp"; then
7373         installscript=''
7374 fi
7375 scriptdir="$ans"
7376 scriptdirexp="$ansexp"
7377 : Change installation prefix, if necessary.
7378 if $test X"$prefix" != X"$installprefix"; then
7379         installscript=`echo $scriptdirexp | sed "s#^$prefix#$installprefix#"`
7380 else
7381         installscript="$scriptdirexp"
7382 fi
7383
7384 : determine where add-on public executables go
7385 case "$sitebin" in
7386 '')     dflt=$siteprefix/bin ;;
7387 *)      dflt=$sitebin ;;
7388 esac
7389 fn=d~
7390 rp='Pathname where the add-on public executables should be installed?'
7391 . ./getfile
7392 sitebin="$ans"
7393 sitebinexp="$ansexp"
7394 : Change installation prefix, if necessary.
7395 if $test X"$prefix" != X"$installprefix"; then
7396         installsitebin=`echo $sitebinexp | sed "s#^$prefix#$installprefix#"`
7397 else
7398         installsitebin="$sitebinexp"
7399 fi
7400
7401 : see if sqrtl exists
7402 set sqrtl d_sqrtl
7403 eval $inlibc
7404
7405 case "$ccflags" in
7406 *-DUSE_LONG_DOUBLE*|*-DUSE_MORE_BITS*) uselongdouble="$define" ;;
7407 esac
7408
7409 case "$uselongdouble" in
7410 $define|true|[yY]*)     dflt='y';;
7411 *) dflt='n';;
7412 esac
7413 cat <<EOM
7414
7415 Perl can be built to take advantage of long doubles which
7416 (if available) may give more accuracy and range for floating point numbers.
7417
7418 If this doesn't make any sense to you, just accept the default '$dflt'.
7419 EOM
7420 rp='Try to use long doubles if available?'
7421 . ./myread
7422 case "$ans" in
7423 y|Y)    val="$define"   ;;
7424 *)      val="$undef"    ;;
7425 esac
7426 set uselongdouble
7427 eval $setvar
7428
7429 case "$uselongdouble" in
7430 true|[yY]*) uselongdouble="$define" ;;
7431 esac
7432
7433 case "$uselongdouble" in
7434 $define)
7435 : Look for a hint-file generated 'call-back-unit'.  If the
7436 : user has specified that long doubles should be used,
7437 : we may need to set or change some other defaults.
7438         if $test -f uselongdouble.cbu; then
7439                 echo "Your platform has some specific hints for long doubles, using them..."
7440                 . ./uselongdouble.cbu
7441         else
7442                 $cat <<EOM
7443 (Your platform doesn't have any specific hints for long doubles.)
7444 EOM
7445         fi
7446         ;;
7447 esac
7448
7449 case "$uselongdouble:$d_sqrtl" in
7450 $define:$undef)
7451                 $cat <<EOM >&4
7452
7453 *** You requested the use of long doubles but you do not seem to have
7454 *** the mathematic functions for long doubles.  I'm disabling the use
7455 *** of long doubles.
7456
7457 EOM
7458         uselongdouble=$undef
7459         ;;
7460 esac
7461
7462 case "$useperlio" in
7463 $define|true|[yY]*)     dflt='y';;
7464 *) dflt='n';;
7465 esac
7466 cat <<EOM
7467
7468 Previous version of $package used the standard IO mechanisms as defined
7469 in <stdio.h>.  Versions 5.003_02 and later of perl allow alternate IO
7470 mechanisms via a "PerlIO" abstraction, but the stdio mechanism is still
7471 the default.  This abstraction layer can use AT&T's sfio (if you already
7472 have sfio installed) or regular stdio.  Using PerlIO with sfio may cause
7473 problems with some extension modules.  Using PerlIO with stdio is safe,
7474 but it is slower than plain stdio and therefore is not the default.
7475
7476 If this doesn't make any sense to you, just accept the default '$dflt'.
7477 EOM
7478 rp='Use the experimental PerlIO abstraction layer?'
7479 . ./myread
7480 case "$ans" in
7481 y|Y) 
7482         val="$define"
7483         ;;     
7484 *)      
7485         echo "Ok, doing things the stdio way"
7486         val="$undef"
7487         ;;
7488 esac
7489 set useperlio
7490 eval $setvar 
7491
7492 case "$vendorprefix" in
7493 '')     d_vendorbin="$undef"
7494         vendorbin=''
7495         vendorbinexp=''
7496         ;;
7497 *)      d_vendorbin="$define"
7498         : determine where vendor-supplied executables go.
7499         case "$vendorbin" in
7500         '') dflt=$vendorprefix/bin ;;
7501         *)      dflt="$vendorbin" ;;
7502         esac
7503         fn=d~+
7504         rp='Pathname for the vendor-supplied executables directory?'
7505         . ./getfile
7506         vendorbin="$ans"
7507         vendorbinexp="$ansexp"
7508         ;;
7509 esac
7510 : Change installation prefix, if necessary.
7511 if $test X"$prefix" != X"$installprefix"; then
7512         installvendorbin=`echo $vendorbinexp | $sed "s#^$prefix#$installprefix#"`
7513 else
7514         installvendorbin="$vendorbinexp"
7515 fi
7516
7517 : see if qgcvt exists
7518 set qgcvt d_qgcvt
7519 eval $inlibc
7520
7521 : check for length of double
7522 echo " "
7523 case "$doublesize" in
7524 '')
7525         echo "Checking to see how big your double precision numbers are..." >&4
7526         $cat >try.c <<'EOCP'
7527 #include <stdio.h>
7528 int main()
7529 {
7530     printf("%d\n", (int)sizeof(double));
7531     exit(0);
7532 }
7533 EOCP
7534         set try
7535         if eval $compile_ok; then
7536                 doublesize=`./try`
7537                 echo "Your double is $doublesize bytes long."
7538         else
7539                 dflt='8'
7540                 echo "(I can't seem to compile the test program.  Guessing...)"
7541                 rp="What is the size of a double precision number (in bytes)?"
7542                 . ./myread
7543                 doublesize="$ans"
7544         fi
7545         ;;
7546 esac
7547 $rm -f try.c try
7548
7549 : check for long doubles
7550 echo " "
7551 echo "Checking to see if you have long double..." >&4
7552 echo 'int main() { long double x = 7.0; }' > try.c
7553 set try
7554 if eval $compile; then
7555         val="$define"
7556         echo "You have long double."
7557 else
7558         val="$undef"
7559         echo "You do not have long double."
7560 fi
7561 $rm try.*
7562 set d_longdbl
7563 eval $setvar
7564
7565 : check for length of long double
7566 case "${d_longdbl}${longdblsize}" in
7567 $define)
7568         echo " "
7569         echo "Checking to see how big your long doubles are..." >&4
7570         $cat >try.c <<'EOCP'
7571 #include <stdio.h>
7572 int main()
7573 {
7574         printf("%d\n", sizeof(long double));
7575 }
7576 EOCP
7577         set try
7578         set try
7579         if eval $compile; then
7580                 longdblsize=`./try$exe_ext`
7581                 echo "Your long doubles are $longdblsize bytes long."
7582         else
7583                 dflt='8'
7584                 echo " "
7585                 echo "(I can't seem to compile the test program.  Guessing...)" >&4
7586                 rp="What is the size of a long double (in bytes)?"
7587                 . ./myread
7588                 longdblsize="$ans"
7589         fi
7590         if $test "X$doublesize" = "X$longdblsize"; then
7591                 echo "(That isn't any different from an ordinary double.)"
7592         fi      
7593         ;;
7594 esac
7595 $rm -f try.* try
7596
7597 echo " "
7598
7599 if $test X"$d_longdbl" = X"$define"; then
7600
7601 echo "Checking how to print long doubles..." >&4
7602
7603 if $test X"$sPRIfldbl" = X -a X"$doublesize" = X"$longdblsize"; then
7604         $cat >try.c <<'EOCP'
7605 #include <sys/types.h>
7606 #include <stdio.h>
7607 int main() {
7608   double d = 123.456;
7609   printf("%.3f\n", d);
7610 }
7611 EOCP
7612         set try
7613         if eval $compile; then
7614                 yyy=`./try$exe_ext`
7615                 case "$yyy" in
7616                 123.456)
7617                         sPRIfldbl='"f"'; sPRIgldbl='"g"'; sPRIeldbl='"e"';
7618                         sPRIFldbl='"F"'; sPRIGldbl='"G"'; sPRIEldbl='"E"';
7619                         echo "We will use %f."
7620                         ;;
7621                 esac
7622         fi
7623 fi
7624
7625 if $test X"$sPRIfldbl" = X; then
7626         $cat >try.c <<'EOCP'
7627 #include <sys/types.h>
7628 #include <stdio.h>
7629 int main() {
7630   long double d = 123.456;
7631   printf("%.3llf\n", d);
7632 }
7633 EOCP
7634         set try
7635         if eval $compile; then
7636                 yyy=`./try$exe_ext`
7637                 case "$yyy" in
7638                 123.456)
7639                         sPRIfldbl='"llf"'; sPRIgldbl='"llg"'; sPRIeldbl='"lle"';
7640                         sPRIFldbl='"llF"'; sPRIGldbl='"llG"'; sPRIEldbl='"llE"';
7641                         echo "We will use %llf."
7642                         ;;
7643                 esac
7644         fi
7645 fi
7646
7647 if $test X"$sPRIfldbl" = X; then
7648         $cat >try.c <<'EOCP'
7649 #include <sys/types.h>
7650 #include <stdio.h>
7651 int main() {
7652   long double d = 123.456;
7653   printf("%.3Lf\n", d);
7654 }
7655 EOCP
7656         set try
7657         if eval $compile; then
7658                 yyy=`./try$exe_ext`
7659                 case "$yyy" in
7660                 123.456)
7661                         sPRIfldbl='"Lf"'; sPRIgldbl='"Lg"'; sPRIeldbl='"Le"';
7662                         sPRIFldbl='"LF"'; sPRIGldbl='"LG"'; sPRIEldbl='"LE"';
7663                         echo "We will use %Lf."
7664                         ;;
7665                 esac
7666         fi
7667 fi
7668
7669 if $test X"$sPRIfldbl" = X; then
7670         $cat >try.c <<'EOCP'
7671 #include <sys/types.h>
7672 #include <stdio.h>
7673 int main() {
7674   long double d = 123.456;
7675   printf("%.3lf\n", d);
7676 }
7677 EOCP
7678         set try
7679         if eval $compile; then
7680                 yyy=`./try$exe_ext`
7681                 case "$yyy" in
7682                 123.456)
7683                         sPRIfldbl='"lf"'; sPRIgldbl='"lg"'; sPRIeldbl='"le"';
7684                         sPRIFldbl='"lF"'; sPRIGldbl='"lG"'; sPRIEldbl='"lE"';
7685                         echo "We will use %lf."
7686                         ;;
7687                 esac
7688         fi
7689 fi
7690
7691 if $test X"$sPRIfldbl" = X; then
7692         echo "Cannot figure out how to print long doubles." >&4
7693 fi
7694
7695 $rm -f try try.*
7696
7697 fi # d_longdbl
7698
7699 case "$sPRIfldbl" in
7700 '')     d_PRIfldbl="$undef"; d_PRIgldbl="$undef"; d_PRIeldbl="$undef"; 
7701         d_PRIFldbl="$undef"; d_PRIGldbl="$undef"; d_PRIEldbl="$undef"; 
7702         ;;
7703 *)      d_PRIfldbl="$define"; d_PRIgldbl="$define"; d_PRIeldbl="$define"; 
7704         d_PRIFldbl="$define"; d_PRIGldbl="$define"; d_PRIEldbl="$define"; 
7705         ;;
7706 esac
7707
7708 : Check how to convert floats to strings.
7709 echo " "
7710 echo "Checking for an efficient way to convert floats to strings."
7711 echo " " > try.c
7712 case "$uselongdouble" in
7713 "$define") echo "#define USE_LONG_DOUBLE" >>try.c ;;
7714 esac
7715 case "$d_longdbl" in
7716 "$define") echo "#define HAS_LONG_DOUBLE" >>try.c ;;
7717 esac
7718 case "$d_PRIgldbl" in
7719 "$define") echo "#define HAS_PRIgldbl"    >>try.c ;;
7720 esac
7721 $cat >>try.c <<EOP
7722 #ifdef TRY_gconvert
7723 #define Gconvert(x,n,t,b) gconvert((x),(n),(t),(b))
7724 char *myname = "gconvert";
7725 #endif
7726 #ifdef TRY_gcvt
7727 #define Gconvert(x,n,t,b) gcvt((x),(n),(b))
7728 char *myname = "gcvt";
7729 #endif
7730 #ifdef TRY_qgcvt
7731 #define Gconvert(x,n,t,b) qgcvt((x),(n),(b))
7732 char *myname = "qgcvt";
7733 #define DOUBLETYPE long double
7734 #endif
7735 #ifdef TRY_sprintf
7736 #if defined(USE_LONG_DOUBLE) && defined(HAS_LONG_DOUBLE) && defined(HAS_PRIgldbl)
7737 #define Gconvert(x,n,t,b) sprintf((b),"%.*"$sPRIgldbl,(n),(x))
7738 #else
7739 #define Gconvert(x,n,t,b) sprintf((b),"%.*g",(n),(x))
7740 #endif
7741 char *myname = "sprintf";
7742 #endif
7743
7744 #ifndef DOUBLETYPE
7745 #if defined(USE_LONG_DOUBLE) && defined(HAS_LONG_DOUBLE)
7746 #define DOUBLETYPE long double
7747 #else
7748 #define DOUBLETYPE double
7749 #endif
7750 #endif
7751
7752 #include <stdio.h>
7753
7754 #define I_STDLIB $i_stdlib
7755 #ifdef I_STDLIB
7756 #include <stdlib.h>
7757 #endif
7758
7759 int
7760 checkit(expect, got)
7761 char *expect;
7762 char *got;
7763 {
7764     if (strcmp(expect, got)) {
7765                 printf("%s oddity:  Expected %s, got %s\n",
7766                         myname, expect, got);
7767                 exit(1);
7768         }
7769 }
7770
7771 int main()
7772
7773         char buf[64]; 
7774         buf[63] = '\0';
7775
7776         /* This must be 1st test on (which?) platform */
7777         /* Alan Burlison <AlanBurlsin@unn.unisys.com> */
7778         Gconvert((DOUBLETYPE)0.1, 8, 0, buf);
7779         checkit("0.1", buf);
7780
7781         Gconvert((DOUBLETYPE)1.0, 8, 0, buf); 
7782         checkit("1", buf);
7783
7784         Gconvert((DOUBLETYPE)1.1, 8, 0, buf); 
7785         checkit("1.1", buf);
7786
7787         Gconvert((DOUBLETYPE)1.01, 8, 0, buf); 
7788         checkit("1.01", buf);
7789
7790         Gconvert((DOUBLETYPE)1.001, 8, 0, buf); 
7791         checkit("1.001", buf);
7792
7793         Gconvert((DOUBLETYPE)1.0001, 8, 0, buf); 
7794         checkit("1.0001", buf);
7795
7796         Gconvert((DOUBLETYPE)1.00001, 8, 0, buf); 
7797         checkit("1.00001", buf);
7798
7799         Gconvert((DOUBLETYPE)1.000001, 8, 0, buf); 
7800         checkit("1.000001", buf);
7801
7802         Gconvert((DOUBLETYPE)0.0, 8, 0, buf); 
7803         checkit("0", buf);
7804
7805         Gconvert((DOUBLETYPE)-1.0, 8, 0, buf); 
7806         checkit("-1", buf);
7807
7808         /* Some Linux gcvt's give 1.e+5 here. */
7809         Gconvert((DOUBLETYPE)100000.0, 8, 0, buf); 
7810         checkit("100000", buf);
7811         
7812         /* Some Linux gcvt's give -1.e+5 here. */
7813         Gconvert((DOUBLETYPE)-100000.0, 8, 0, buf); 
7814         checkit("-100000", buf);
7815
7816         exit(0);
7817 }
7818 EOP
7819 case "$d_Gconvert" in
7820 gconvert*) xxx_list='gconvert gcvt sprintf' ;;
7821 gcvt*) xxx_list='gcvt gconvert sprintf' ;;
7822 *) xxx_list='sprintf gconvert gcvt' ;;
7823 esac
7824
7825 case "$d_longdbl$uselongdouble$d_PRIgldbl" in
7826 "$define$define$define")
7827     xxx_list="`echo $xxx_list|sed s/sprintf//`" 
7828     xxx_list="sprintf $xxx_list"
7829     case "$d_qgcvt" in
7830     "$define") xxx_list="qgcvt $xxx_list" ;;
7831     esac
7832     ;;
7833 esac
7834
7835 for xxx_convert in $xxx_list; do
7836         echo "Trying $xxx_convert..."
7837         $rm -f try try$_o
7838         set try -DTRY_$xxx_convert
7839         if eval $compile; then
7840                 echo "$xxx_convert() found." >&4
7841                 if ./try; then
7842                         echo "I'll use $xxx_convert to convert floats into a string." >&4
7843                         break;
7844                 else
7845                         echo "...But $xxx_convert didn't work as I expected."
7846                 fi
7847         else
7848                 echo "$xxx_convert NOT found." >&4
7849         fi
7850 done
7851         
7852 case "$xxx_convert" in
7853 gconvert) d_Gconvert='gconvert((x),(n),(t),(b))' ;;
7854 gcvt) d_Gconvert='gcvt((x),(n),(b))' ;;
7855 qgcvt) d_Gconvert='qgcvt((x),(n),(b))' ;;
7856 *) case "$uselongdouble$d_longdbl$d_PRIgldbl" in
7857    "$define$define$define")
7858       d_Gconvert="sprintf((b),\"%.*\"$sPRIgldbl,(n),(x))" ;;
7859    *) d_Gconvert='sprintf((b),"%.*g",(n),(x))' ;;
7860    esac
7861    ;;  
7862 esac
7863
7864 : Initialize h_fcntl
7865 h_fcntl=false
7866
7867 : Initialize h_sysfile
7868 h_sysfile=false
7869
7870 : access call always available on UNIX
7871 set access d_access
7872 eval $inlibc
7873
7874 : locate the flags for 'access()'
7875 case "$d_access" in
7876 "$define")
7877         echo " "
7878         $cat >access.c <<'EOCP'
7879 #include <sys/types.h>
7880 #ifdef I_FCNTL
7881 #include <fcntl.h>
7882 #endif
7883 #ifdef I_SYS_FILE
7884 #include <sys/file.h>
7885 #endif
7886 #ifdef I_UNISTD
7887 #include <unistd.h>
7888 #endif
7889 int main() {
7890         exit(R_OK);
7891 }
7892 EOCP
7893         : check sys/file.h first, no particular reason here
7894         if $test `./findhdr sys/file.h` && \
7895                 $cc $cppflags -DI_SYS_FILE -o access access.c >/dev/null 2>&1 ; then
7896                 h_sysfile=true;
7897                 echo "<sys/file.h> defines the *_OK access constants." >&4
7898         elif $test `./findhdr fcntl.h` && \
7899                 $cc $cppflags -DI_FCNTL -o access access.c >/dev/null 2>&1 ; then
7900                 h_fcntl=true;
7901                 echo "<fcntl.h> defines the *_OK access constants." >&4
7902         elif $test `./findhdr unistd.h` && \
7903                 $cc $cppflags -DI_UNISTD -o access access.c >/dev/null 2>&1 ; then
7904                 echo "<unistd.h> defines the *_OK access constants." >&4
7905         else
7906                 echo "I can't find the four *_OK access constants--I'll use mine." >&4
7907         fi
7908         ;;
7909 esac
7910 $rm -f access*
7911
7912 : see if accessx exists
7913 set accessx d_accessx
7914 eval $inlibc
7915
7916 : see if alarm exists
7917 set alarm d_alarm
7918 eval $inlibc
7919
7920 : see if atolf exists
7921 set atolf d_atolf
7922 eval $inlibc
7923
7924 : see if atoll exists
7925 set atoll d_atoll
7926 eval $inlibc
7927
7928 : Look for GNU-cc style attribute checking
7929 echo " "
7930 echo "Checking whether your compiler can handle __attribute__ ..." >&4
7931 $cat >attrib.c <<'EOCP'
7932 #include <stdio.h>
7933 void croak (char* pat,...) __attribute__((format(printf,1,2),noreturn));
7934 EOCP
7935 if $cc $ccflags -c attrib.c >attrib.out 2>&1 ; then
7936         if $contains 'warning' attrib.out >/dev/null 2>&1; then
7937                 echo "Your C compiler doesn't fully support __attribute__."
7938                 val="$undef"
7939         else
7940                 echo "Your C compiler supports __attribute__."
7941                 val="$define"
7942         fi
7943 else
7944         echo "Your C compiler doesn't seem to understand __attribute__ at all."
7945         val="$undef"
7946 fi
7947 set d_attribut
7948 eval $setvar
7949 $rm -f attrib*
7950
7951 : see if bcmp exists
7952 set bcmp d_bcmp
7953 eval $inlibc
7954
7955 : see if bcopy exists
7956 set bcopy d_bcopy
7957 eval $inlibc
7958
7959 : see if this is a unistd.h system
7960 set unistd.h i_unistd
7961 eval $inhdr
7962
7963 : see if getpgrp exists
7964 set getpgrp d_getpgrp
7965 eval $inlibc
7966
7967 case "$d_getpgrp" in
7968 "$define")
7969         echo " "
7970         echo "Checking to see which flavor of getpgrp is in use..."
7971         $cat >set.c <<EOP
7972 #$i_unistd I_UNISTD
7973 #include <sys/types.h>
7974 #ifdef I_UNISTD
7975 #  include <unistd.h>
7976 #endif
7977 int main()
7978 {
7979         if (getuid() == 0) {
7980                 printf("(I see you are running Configure as super-user...)\n");
7981                 setuid(1);
7982         }
7983 #ifdef TRY_BSD_PGRP
7984         if (getpgrp(1) == 0)
7985                 exit(0);
7986 #else
7987         if (getpgrp() > 0)
7988                 exit(0);
7989 #endif
7990         exit(1);
7991 }
7992 EOP
7993         if $cc -DTRY_BSD_PGRP $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1 && ./set; then
7994                 echo "You have to use getpgrp(pid) instead of getpgrp()." >&4
7995                 val="$define"
7996         elif $cc $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1 && ./set; then
7997                 echo "You have to use getpgrp() instead of getpgrp(pid)." >&4
7998                 val="$undef"
7999         else
8000                 echo "I can't seem to compile and run the test program."
8001                 if ./usg; then
8002                         xxx="a USG one, i.e. you use getpgrp()."
8003                 else
8004                         # SVR4 systems can appear rather BSD-ish.
8005                         case "$i_unistd" in
8006                         $undef)
8007                                 xxx="a BSD one, i.e. you use getpgrp(pid)."
8008                                 val="$define"
8009                                 ;;
8010                         $define)
8011                                 xxx="probably a USG one, i.e. you use getpgrp()."
8012                                 val="$undef"
8013                                 ;;
8014                         esac
8015                 fi
8016                 echo "Assuming your getpgrp is $xxx" >&4
8017         fi
8018         ;;
8019 *) val="$undef";;
8020 esac
8021 set d_bsdgetpgrp
8022 eval $setvar
8023 $rm -f set set.c
8024
8025 : see if setpgrp exists
8026 set setpgrp d_setpgrp
8027 eval $inlibc
8028
8029 case "$d_setpgrp" in
8030 "$define")
8031         echo " "
8032         echo "Checking to see which flavor of setpgrp is in use..."
8033         $cat >set.c <<EOP
8034 #$i_unistd I_UNISTD
8035 #include <sys/types.h>
8036 #ifdef I_UNISTD
8037 #  include <unistd.h>
8038 #endif
8039 int main()
8040 {
8041         if (getuid() == 0) {
8042                 printf("(I see you are running Configure as super-user...)\n");
8043                 setuid(1);
8044         }
8045 #ifdef TRY_BSD_PGRP
8046         if (-1 == setpgrp(1, 1))
8047                 exit(0);
8048 #else
8049         if (setpgrp() != -1)
8050                 exit(0);
8051 #endif
8052         exit(1);
8053 }
8054 EOP
8055         if $cc -DTRY_BSD_PGRP $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1 && ./set; then
8056                 echo 'You have to use setpgrp(pid,pgrp) instead of setpgrp().' >&4
8057                 val="$define"
8058         elif $cc $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1 && ./set; then
8059                 echo 'You have to use setpgrp() instead of setpgrp(pid,pgrp).' >&4
8060                 val="$undef"
8061         else
8062                 echo "(I can't seem to compile and run the test program.)"
8063                 if ./usg; then
8064                         xxx="a USG one, i.e. you use setpgrp()."
8065                 else
8066                         # SVR4 systems can appear rather BSD-ish.
8067                         case "$i_unistd" in
8068                         $undef)
8069                                 xxx="a BSD one, i.e. you use setpgrp(pid,pgrp)."
8070                                 val="$define"
8071                                 ;;
8072                         $define)
8073                                 xxx="probably a USG one, i.e. you use setpgrp()."
8074                                 val="$undef"
8075                                 ;;
8076                         esac
8077                 fi
8078                 echo "Assuming your setpgrp is $xxx" >&4
8079         fi
8080         ;;
8081 *) val="$undef";;
8082 esac
8083 set d_bsdsetpgrp
8084 eval $setvar
8085 $rm -f set set.c
8086 : see if bzero exists
8087 set bzero d_bzero
8088 eval $inlibc
8089
8090 : see if signal is declared as pointer to function returning int or void
8091 echo " "
8092 xxx=`./findhdr signal.h`
8093 $test "$xxx" && $cppstdin $cppminus $cppflags < $xxx >$$.tmp 2>/dev/null
8094 if $contains 'int.*\*[  ]*signal' $$.tmp >/dev/null 2>&1 ; then
8095         echo "You have int (*signal())() instead of void." >&4
8096         val="$undef"
8097 elif $contains 'void.*\*[       ]*signal' $$.tmp >/dev/null 2>&1 ; then
8098         echo "You have void (*signal())()." >&4
8099         val="$define"
8100 elif $contains 'extern[         ]*[(\*]*signal' $$.tmp >/dev/null 2>&1 ; then
8101         echo "You have int (*signal())() instead of void." >&4
8102         val="$undef"
8103 elif $contains 'void.*\*.*sig' $$.tmp >/dev/null 2>&1 ; then
8104         echo "You have void (*signal())()." >&4
8105         val="$define"
8106 else
8107         case "$d_voidsig" in
8108         '')
8109         echo "I can't determine whether signal handler returns void or int..." >&4
8110                 dflt=void
8111                 rp="What type does your signal handler return?"
8112                 . ./myread
8113                 case "$ans" in
8114                 v*) val="$define";;
8115                 *) val="$undef";;
8116                 esac;;
8117         "$define")
8118                 echo "As you already told me, signal handler returns void." >&4
8119                 val="$define"
8120                 ;;
8121         *)      echo "As you already told me, signal handler returns int." >&4
8122                 val="$undef"
8123                 ;;
8124         esac
8125 fi
8126 set d_voidsig
8127 eval $setvar
8128 case "$d_voidsig" in
8129 "$define") signal_t="void";;
8130 *) signal_t="int";;
8131 esac
8132 $rm -f $$.tmp
8133
8134 : check for ability to cast large floats to 32-bit ints.
8135 echo " "
8136 echo 'Checking whether your C compiler can cast large floats to int32.' >&4
8137 if $test "$intsize" -ge 4; then
8138         xxx=int
8139 else
8140         xxx=long
8141 fi
8142 $cat >try.c <<EOCP
8143 #include <stdio.h>
8144 #include <sys/types.h>
8145 #include <signal.h>
8146 $signal_t blech(s) int s; { exit(3); }
8147 int main()
8148 {
8149         $xxx i32;
8150         double f, g;
8151         int result = 0;
8152         char str[16];
8153         signal(SIGFPE, blech);
8154
8155         /* Don't let compiler optimize the test away.  Store the number 
8156            in a writable string for gcc to pass to sscanf under HP/UX.
8157         */
8158         sprintf(str, "2147483647");
8159         sscanf(str, "%lf", &f); /* f = (double) 0x7fffffff; */
8160         g = 10 * f;
8161         i32  = ($xxx) g;
8162
8163         /* x86 processors will probably give 0x8000 0000, which is a
8164        sign change.  We don't want that.  We want to mimic SPARC
8165            behavior here, which is to preserve the sign and give
8166            back 0x7fff ffff.
8167         */
8168         if (i32 != ($xxx) f)
8169                 result |= 1;
8170         exit(result);
8171 }
8172 EOCP
8173 set try
8174 if eval $compile_ok; then
8175         ./try
8176         yyy=$?
8177 else
8178         echo "(I can't seem to compile the test program--assuming it can't)"
8179         yyy=1
8180 fi
8181 case "$yyy" in
8182 0)      val="$define"
8183         echo "Yup, it can."
8184         ;;
8185 *)      val="$undef"
8186         echo "Nope, it can't."
8187         ;;
8188 esac
8189 set d_casti32
8190 eval $setvar
8191 $rm -f try try.*
8192
8193 : check for ability to cast negative floats to unsigned
8194 echo " "
8195 echo 'Checking whether your C compiler can cast negative float to unsigned.' >&4
8196 $cat >try.c <<EOCP
8197 #include <stdio.h>
8198 #include <sys/types.h>
8199 #include <signal.h>
8200 $signal_t blech(s) int s; { exit(7); }
8201 $signal_t blech_in_list(s) int s; { exit(4); }
8202 unsigned long dummy_long(p) unsigned long p; { return p; }
8203 unsigned int dummy_int(p) unsigned int p; { return p; }
8204 unsigned short dummy_short(p) unsigned short p; { return p; }
8205 int main()
8206 {
8207         double f;
8208         unsigned long along;
8209         unsigned int aint;
8210         unsigned short ashort;
8211         int result = 0;
8212         char str[16];
8213         
8214         /* Frustrate gcc-2.7.2's optimizer which failed this test with
8215            a direct f = -123. assignment.  gcc-2.8.0 reportedly
8216            optimized the whole file away
8217         */
8218         /* Store the number in a writable string for gcc to pass to 
8219            sscanf under HP/UX.
8220         */
8221         sprintf(str, "-123");
8222         sscanf(str, "%lf", &f);  /* f = -123.; */
8223
8224         signal(SIGFPE, blech);
8225         along = (unsigned long)f;
8226         aint = (unsigned int)f;
8227         ashort = (unsigned short)f;
8228         if (along != (unsigned long)-123)
8229                 result |= 1;
8230         if (aint != (unsigned int)-123)
8231                 result |= 1;
8232         if (ashort != (unsigned short)-123)
8233                 result |= 1;
8234         sprintf(str, "1073741824.");
8235         sscanf(str, "%lf", &f); /* f = (double)0x40000000; */
8236         f = f + f;
8237         along = 0;
8238         along = (unsigned long)f;
8239         if (along != 0x80000000)
8240                 result |= 2;
8241         f -= 1.;
8242         along = 0;
8243         along = (unsigned long)f;
8244         if (along != 0x7fffffff)
8245                 result |= 1;
8246         f += 2.;
8247         along = 0;
8248         along = (unsigned long)f;
8249         if (along != 0x80000001)
8250                 result |= 2;
8251         if (result)
8252                 exit(result);
8253         signal(SIGFPE, blech_in_list);
8254         sprintf(str, "123.");
8255         sscanf(str, "%lf", &f);  /* f = 123.; */
8256         along = dummy_long((unsigned long)f);
8257         aint = dummy_int((unsigned int)f);
8258         ashort = dummy_short((unsigned short)f);
8259         if (along != (unsigned long)123)
8260                 result |= 4;
8261         if (aint != (unsigned int)123)
8262                 result |= 4;
8263         if (ashort != (unsigned short)123)
8264                 result |= 4;
8265         exit(result);
8266
8267 }
8268 EOCP
8269 set try
8270 if eval $compile_ok; then
8271         ./try
8272         castflags=$?
8273 else
8274         echo "(I can't seem to compile the test program--assuming it can't)"
8275         castflags=7
8276 fi
8277 case "$castflags" in
8278 0)      val="$define"
8279         echo "Yup, it can."
8280         ;;
8281 *)      val="$undef"
8282         echo "Nope, it can't."
8283         ;;
8284 esac
8285 set d_castneg
8286 eval $setvar
8287 $rm -f try.*
8288
8289 : see if vprintf exists
8290 echo " "
8291 if set vprintf val -f d_vprintf; eval $csym; $val; then
8292         echo 'vprintf() found.' >&4
8293         val="$define"
8294         $cat >vprintf.c <<'EOF'
8295 #include <varargs.h>
8296
8297 int main() { xxx("foo"); }
8298
8299 xxx(va_alist)
8300 va_dcl
8301 {
8302         va_list args;
8303         char buf[10];
8304
8305         va_start(args);
8306         exit((unsigned long)vsprintf(buf,"%s",args) > 10L);
8307 }
8308 EOF
8309         set vprintf
8310         if eval $compile && ./vprintf; then
8311                 echo "Your vsprintf() returns (int)." >&4
8312                 val2="$undef"
8313         else
8314                 echo "Your vsprintf() returns (char*)." >&4
8315                 val2="$define"
8316         fi
8317 else
8318         echo 'vprintf() NOT found.' >&4
8319                 val="$undef"
8320                 val2="$undef"
8321 fi
8322 set d_vprintf
8323 eval $setvar
8324 val=$val2
8325 set d_charvspr
8326 eval $setvar
8327
8328 : see if chown exists
8329 set chown d_chown
8330 eval $inlibc
8331
8332 : see if chroot exists
8333 set chroot d_chroot
8334 eval $inlibc
8335
8336 : see if chsize exists
8337 set chsize d_chsize
8338 eval $inlibc
8339
8340 : check for const keyword
8341 echo " "
8342 echo 'Checking to see if your C compiler knows about "const"...' >&4
8343 $cat >const.c <<'EOCP'
8344 typedef struct spug { int drokk; } spug;
8345 int main()
8346 {
8347         const char *foo;
8348         const spug y;
8349 }
8350 EOCP
8351 if $cc -c $ccflags const.c >/dev/null 2>&1 ; then
8352         val="$define"
8353         echo "Yup, it does."
8354 else
8355         val="$undef"
8356         echo "Nope, it doesn't."
8357 fi
8358 set d_const
8359 eval $setvar
8360
8361 : see if crypt exists
8362 echo " "
8363 if set crypt val -f d_crypt; eval $csym; $val; then
8364         echo 'crypt() found.' >&4
8365         val="$define"
8366         cryptlib=''
8367 else
8368         cryptlib=`./loc Slibcrypt$_a "" $xlibpth`
8369         if $test -z "$cryptlib"; then
8370                 cryptlib=`./loc Mlibcrypt$_a "" $xlibpth`
8371         else
8372                 cryptlib=-lcrypt
8373         fi
8374         if $test -z "$cryptlib"; then
8375                 cryptlib=`./loc Llibcrypt$_a "" $xlibpth`
8376         else
8377                 cryptlib=-lcrypt
8378         fi
8379         if $test -z "$cryptlib"; then
8380                 cryptlib=`./loc libcrypt$_a "" $libpth`
8381         else
8382                 cryptlib=-lcrypt
8383         fi
8384         if $test -z "$cryptlib"; then
8385                 echo 'crypt() NOT found.' >&4
8386                 val="$undef"
8387         else
8388                 val="$define"
8389         fi
8390 fi
8391 set d_crypt
8392 eval $setvar
8393
8394 : get csh whereabouts
8395 case "$csh" in
8396 'csh') val="$undef" ;;
8397 *) val="$define" ;;
8398 esac
8399 set d_csh
8400 eval $setvar
8401 : Respect a hint or command line value for full_csh.
8402 case "$full_csh" in
8403 '') full_csh=$csh ;;
8404 esac
8405
8406 : see if cuserid exists
8407 set cuserid d_cuserid
8408 eval $inlibc
8409
8410 : see if this is a limits.h system
8411 set limits.h i_limits
8412 eval $inhdr
8413
8414 : see if this is a float.h system
8415 set float.h i_float
8416 eval $inhdr
8417
8418 : See if number of significant digits in a double precision number is known
8419 echo " "
8420 $cat >dbl_dig.c <<EOM
8421 #$i_limits I_LIMITS
8422 #$i_float I_FLOAT
8423 #ifdef I_LIMITS
8424 #include <limits.h>
8425 #endif
8426 #ifdef I_FLOAT
8427 #include <float.h>
8428 #endif
8429 #ifdef DBL_DIG
8430 printf("Contains DBL_DIG");
8431 #endif
8432 EOM
8433 $cppstdin $cppflags $cppminus < dbl_dig.c >dbl_dig.E 2>/dev/null
8434 if $contains 'DBL_DIG' dbl_dig.E >/dev/null 2>&1; then
8435         echo "DBL_DIG found." >&4
8436         val="$define"
8437 else
8438         echo "DBL_DIG NOT found." >&4
8439         val="$undef"
8440 fi
8441 $rm -f dbl_dig.?
8442 set d_dbl_dig
8443 eval $setvar
8444
8445 : see if difftime exists
8446 set difftime d_difftime
8447 eval $inlibc
8448
8449 : see if this is a dirent system
8450 echo " "
8451 if xinc=`./findhdr dirent.h`; $test "$xinc"; then
8452         val="$define"
8453         echo "<dirent.h> found." >&4
8454 else
8455         val="$undef"
8456         if xinc=`./findhdr sys/dir.h`; $test "$xinc"; then
8457                 echo "<sys/dir.h> found." >&4
8458                 echo " "
8459         else
8460                 xinc=`./findhdr sys/ndir.h`
8461         fi
8462         echo "<dirent.h> NOT found." >&4
8463 fi
8464 set i_dirent
8465 eval $setvar
8466
8467 : Look for type of directory structure.
8468 echo " "
8469 $cppstdin $cppflags $cppminus < "$xinc" > try.c
8470
8471 case "$direntrytype" in
8472 ''|' ')
8473         case "$i_dirent" in
8474         $define) guess1='struct dirent' ;;
8475         *) guess1='struct direct'  ;;
8476         esac
8477         ;;
8478 *)      guess1="$direntrytype"
8479         ;;
8480 esac
8481
8482 case "$guess1" in
8483 'struct dirent') guess2='struct direct' ;;
8484 *) guess2='struct dirent' ;;
8485 esac
8486                 
8487 if $contains "$guess1" try.c >/dev/null 2>&1; then
8488         direntrytype="$guess1"
8489         echo "Your directory entries are $direntrytype." >&4
8490 elif $contains "$guess2" try.c >/dev/null 2>&1; then
8491         direntrytype="$guess2"
8492         echo "Your directory entries seem to be $direntrytype." >&4
8493 else
8494         echo "I don't recognize your system's directory entries." >&4
8495         rp="What type is used for directory entries on this system?"
8496         dflt="$guess1"
8497         . ./myread
8498         direntrytype="$ans"
8499 fi
8500 $rm -f try.c
8501
8502
8503 : see if the directory entry stores field length
8504 echo " "
8505 $cppstdin $cppflags $cppminus < "$xinc" > try.c
8506 if $contains 'd_namlen' try.c >/dev/null 2>&1; then
8507         echo "Good, your directory entry keeps length information in d_namlen." >&4
8508         val="$define"
8509 else
8510         echo "Your directory entry does not know about the d_namlen field." >&4
8511         val="$undef"
8512 fi
8513 set d_dirnamlen
8514 eval $setvar
8515 $rm -f try.c
8516
8517 : see if dlerror exists
8518 xxx_runnm="$runnm"
8519 runnm=false
8520 set dlerror d_dlerror
8521 eval $inlibc
8522 runnm="$xxx_runnm"
8523
8524 : see if dlfcn is available
8525 set dlfcn.h i_dlfcn
8526 eval $inhdr
8527
8528 case "$usedl" in
8529 $define|y|true)
8530         $cat << EOM
8531
8532 On a few systems, the dynamically loaded modules that perl generates and uses
8533 will need a different extension than shared libs. The default will probably
8534 be appropriate.
8535
8536 EOM
8537         case "$dlext" in
8538         '')     dflt="$so" ;;
8539         *)      dflt="$dlext" ;;
8540         esac
8541         rp='What is the extension of dynamically loaded modules'
8542         . ./myread
8543         dlext="$ans"
8544         ;;
8545 *)
8546         dlext="none"
8547         ;;
8548 esac
8549
8550 : Check if dlsym need a leading underscore
8551 echo " "
8552 val="$undef"
8553
8554 case "$dlsrc" in
8555 dl_dlopen.xs)
8556         echo "Checking whether your dlsym() needs a leading underscore ..." >&4
8557         $cat >dyna.c <<'EOM'
8558 fred () { }
8559 EOM
8560
8561 $cat >fred.c<<EOM
8562
8563 #include <stdio.h>
8564 #$i_dlfcn I_DLFCN
8565 #ifdef I_DLFCN
8566 #include <dlfcn.h>      /* the dynamic linker include file for Sunos/Solaris */
8567 #else
8568 #include <sys/types.h>
8569 #include <nlist.h>
8570 #include <link.h>
8571 #endif
8572
8573 extern int fred() ;
8574
8575 int main()
8576 {
8577     void * handle ;
8578     void * symbol ;
8579 #ifndef RTLD_LAZY
8580     int mode = 1 ;
8581 #else
8582     int mode = RTLD_LAZY ;
8583 #endif
8584     handle = dlopen("./dyna.$dlext", mode) ;
8585     if (handle == NULL) {
8586         printf ("1\n") ;
8587         fflush (stdout) ;
8588         exit(0);
8589     }
8590     symbol = dlsym(handle, "fred") ;
8591     if (symbol == NULL) {
8592         /* try putting a leading underscore */
8593         symbol = dlsym(handle, "_fred") ;
8594         if (symbol == NULL) {
8595             printf ("2\n") ;
8596             fflush (stdout) ;
8597             exit(0);
8598         }
8599         printf ("3\n") ;
8600     }
8601     else
8602         printf ("4\n") ;
8603     fflush (stdout) ;
8604     exit(0);
8605 }
8606 EOM
8607         : Call the object file tmp-dyna.o in case dlext=o.
8608         if $cc $ccflags $cccdlflags -c dyna.c > /dev/null 2>&1 && 
8609                 mv dyna${_o} tmp-dyna${_o} > /dev/null 2>&1 && 
8610                 $ld $lddlflags -o dyna.$dlext tmp-dyna${_o} > /dev/null 2>&1 && 
8611                 $cc $ccflags -o fred $ldflags $cccdlflags $ccdlflags fred.c $libs > /dev/null 2>&1; then
8612                 xxx=`./fred`
8613                 case $xxx in
8614                 1)      echo "Test program failed using dlopen." >&4
8615                         echo "Perhaps you should not use dynamic loading." >&4;;
8616                 2)      echo "Test program failed using dlsym." >&4
8617                         echo "Perhaps you should not use dynamic loading." >&4;;
8618                 3)      echo "dlsym needs a leading underscore" >&4
8619                         val="$define" ;;
8620                 4)      echo "dlsym doesn't need a leading underscore." >&4;;
8621                 esac
8622         else
8623                 echo "I can't compile and run the test program." >&4
8624                 echo "I'm guessing that dlsym doesn't need a leading underscore." >&4
8625         fi
8626         ;;
8627 esac
8628                 
8629 $rm -f fred fred.? dyna.$dlext dyna.? tmp-dyna.?
8630
8631 set d_dlsymun
8632 eval $setvar
8633
8634 hasproto='varname=$1; func=$2; shift; shift;
8635 while $test $# -ge 2; do
8636         case "$1" in
8637         $define) echo "#include <$2>";;
8638         esac ;
8639     shift 2;
8640 done > try.c;
8641 $cppstdin $cppflags $cppminus < try.c > tryout.c 2>/dev/null;
8642 if $contains "$func.*(" tryout.c >/dev/null 2>&1; then
8643         echo "$func() prototype found.";
8644         val="$define";
8645 else
8646         echo "$func() prototype NOT found.";
8647         val="$undef";
8648 fi;
8649 set $varname;
8650 eval $setvar;
8651 $rm -f try.c tryout.c'
8652
8653 : see if prototype for drand48 is available
8654 echo " "
8655 set d_drand48proto drand48 $i_stdlib stdlib.h $i_unistd unistd.h
8656 eval $hasproto
8657
8658 : see if dup2 exists
8659 set dup2 d_dup2
8660 eval $inlibc
8661
8662 : see if eaccess exists
8663 set eaccess d_eaccess
8664 eval $inlibc
8665
8666 : see if endgrent exists
8667 set endgrent d_endgrent
8668 eval $inlibc
8669
8670 : see if endhostent exists
8671 set endhostent d_endhent
8672 eval $inlibc
8673
8674 : see if endnetent exists
8675 set endnetent d_endnent
8676 eval $inlibc
8677
8678 : see if endprotoent exists
8679 set endprotoent d_endpent
8680 eval $inlibc
8681
8682 : see if endpwent exists
8683 set endpwent d_endpwent
8684 eval $inlibc
8685
8686 : see if endservent exists
8687 set endservent d_endsent
8688 eval $inlibc
8689
8690 : Locate the flags for 'open()'
8691 echo " "
8692 $cat >open3.c <<'EOCP'
8693 #include <sys/types.h>
8694 #ifdef I_FCNTL
8695 #include <fcntl.h>
8696 #endif
8697 #ifdef I_SYS_FILE
8698 #include <sys/file.h>
8699 #endif
8700 int main() {
8701         if(O_RDONLY);
8702 #ifdef O_TRUNC
8703         exit(0);
8704 #else
8705         exit(1);
8706 #endif
8707 }
8708 EOCP
8709 : check sys/file.h first to get FREAD on Sun
8710 if $test `./findhdr sys/file.h` && \
8711                 set open3 -DI_SYS_FILE && eval $compile; then
8712         h_sysfile=true;
8713         echo "<sys/file.h> defines the O_* constants..." >&4
8714         if ./open3; then
8715                 echo "and you have the 3 argument form of open()." >&4
8716                 val="$define"
8717         else
8718                 echo "but not the 3 argument form of open().  Oh, well." >&4
8719                 val="$undef"
8720         fi
8721 elif $test `./findhdr fcntl.h` && \
8722                 set open3 -DI_FCNTL && eval $compile; then
8723         h_fcntl=true;
8724         echo "<fcntl.h> defines the O_* constants..." >&4
8725         if ./open3; then
8726                 echo "and you have the 3 argument form of open()." >&4
8727                 val="$define"
8728         else
8729                 echo "but not the 3 argument form of open().  Oh, well." >&4
8730                 val="$undef"
8731         fi
8732 else
8733         val="$undef"
8734         echo "I can't find the O_* constant definitions!  You got problems." >&4
8735 fi
8736 set d_open3
8737 eval $setvar
8738 $rm -f open3*
8739
8740 : see which of string.h or strings.h is needed
8741 echo " "
8742 strings=`./findhdr string.h`
8743 if $test "$strings" && $test -r "$strings"; then
8744         echo "Using <string.h> instead of <strings.h>." >&4
8745         val="$define"
8746 else
8747         val="$undef"
8748         strings=`./findhdr strings.h`
8749         if $test "$strings" && $test -r "$strings"; then
8750                 echo "Using <strings.h> instead of <string.h>." >&4
8751         else
8752                 echo "No string header found -- You'll surely have problems." >&4
8753         fi
8754 fi
8755 set i_string
8756 eval $setvar
8757 case "$i_string" in
8758 "$undef") strings=`./findhdr strings.h`;;
8759 *)        strings=`./findhdr string.h`;;
8760 esac
8761
8762 : check for non-blocking I/O stuff
8763 case "$h_sysfile" in
8764 true) echo "#include <sys/file.h>" > head.c;;
8765 *)
8766         case "$h_fcntl" in
8767         true) echo "#include <fcntl.h>" > head.c;;
8768         *) echo "#include <sys/fcntl.h>" > head.c;;
8769         esac
8770         ;;
8771 esac
8772 echo " "
8773 echo "Figuring out the flag used by open() for non-blocking I/O..." >&4
8774 case "$o_nonblock" in
8775 '')
8776         $cat head.c > try.c
8777         $cat >>try.c <<'EOCP'
8778 #include <stdio.h>
8779 int main() {
8780 #ifdef O_NONBLOCK
8781         printf("O_NONBLOCK\n");
8782         exit(0);
8783 #endif
8784 #ifdef O_NDELAY
8785         printf("O_NDELAY\n");
8786         exit(0);
8787 #endif
8788 #ifdef FNDELAY
8789         printf("FNDELAY\n");
8790         exit(0);
8791 #endif
8792         exit(0);
8793 }
8794 EOCP
8795         set try
8796         if eval $compile_ok; then
8797                 o_nonblock=`./try`
8798                 case "$o_nonblock" in
8799                 '') echo "I can't figure it out, assuming O_NONBLOCK will do.";;
8800                 *) echo "Seems like we can use $o_nonblock.";;
8801                 esac
8802         else
8803                 echo "(I can't compile the test program; pray O_NONBLOCK is right!)"
8804         fi
8805         ;;
8806 *) echo "Using $hint value $o_nonblock.";;
8807 esac
8808 $rm -f try try.* .out core
8809
8810 echo " "
8811 echo "Let's see what value errno gets from read() on a $o_nonblock file..." >&4
8812 case "$eagain" in
8813 '')
8814         $cat head.c > try.c
8815         $cat >>try.c <<EOCP
8816 #include <errno.h>
8817 #include <sys/types.h>
8818 #include <signal.h>
8819 #include <stdio.h> 
8820 #define MY_O_NONBLOCK $o_nonblock
8821 #ifndef errno  /* XXX need better Configure test */
8822 extern int errno;
8823 #endif
8824 #$i_unistd I_UNISTD
8825 #ifdef I_UNISTD
8826 #include <unistd.h>
8827 #endif
8828 #$i_string I_STRING
8829 #ifdef I_STRING
8830 #include <string.h>
8831 #else
8832 #include <strings.h>
8833 #endif
8834 $signal_t blech(x) int x; { exit(3); }
8835 EOCP
8836         $cat >> try.c <<'EOCP'
8837 int main()
8838 {
8839         int pd[2];
8840         int pu[2];
8841         char buf[1];
8842         char string[100];
8843
8844         pipe(pd);       /* Down: child -> parent */
8845         pipe(pu);       /* Up: parent -> child */
8846         if (0 != fork()) {
8847                 int ret;
8848                 close(pd[1]);   /* Parent reads from pd[0] */
8849                 close(pu[0]);   /* Parent writes (blocking) to pu[1] */
8850                 if (-1 == fcntl(pd[0], F_SETFL, MY_O_NONBLOCK))
8851                         exit(1);
8852                 signal(SIGALRM, blech);
8853                 alarm(5);
8854                 if ((ret = read(pd[0], buf, 1)) > 0)    /* Nothing to read! */
8855                         exit(2);
8856                 sprintf(string, "%d\n", ret);
8857                 write(2, string, strlen(string));
8858                 alarm(0);
8859 #ifdef EAGAIN
8860                 if (errno == EAGAIN) {
8861                         printf("EAGAIN\n");
8862                         goto ok;
8863                 }
8864 #endif
8865 #ifdef EWOULDBLOCK
8866                 if (errno == EWOULDBLOCK)
8867                         printf("EWOULDBLOCK\n");
8868 #endif
8869         ok:
8870                 write(pu[1], buf, 1);   /* Unblocks child, tell it to close our pipe */
8871                 sleep(2);                               /* Give it time to close our pipe */
8872                 alarm(5);
8873                 ret = read(pd[0], buf, 1);      /* Should read EOF */
8874                 alarm(0);
8875                 sprintf(string, "%d\n", ret);
8876                 write(3, string, strlen(string));
8877                 exit(0);
8878         }
8879
8880         close(pd[0]);                   /* We write to pd[1] */
8881         close(pu[1]);                   /* We read from pu[0] */
8882         read(pu[0], buf, 1);    /* Wait for parent to signal us we may continue */
8883         close(pd[1]);                   /* Pipe pd is now fully closed! */
8884         exit(0);                                /* Bye bye, thank you for playing! */
8885 }
8886 EOCP
8887         set try
8888         if eval $compile_ok; then
8889                 echo "$startsh" >mtry
8890                 echo "./try >try.out 2>try.ret 3>try.err || exit 4" >>mtry
8891                 chmod +x mtry
8892                 ./mtry >/dev/null 2>&1
8893                 case $? in
8894                 0) eagain=`$cat try.out`;;
8895                 1) echo "Could not perform non-blocking setting!";;
8896                 2) echo "I did a successful read() for something that was not there!";;
8897                 3) echo "Hmm... non-blocking I/O does not seem to be working!";;
8898                 *) echo "Something terribly wrong happened during testing.";;
8899                 esac
8900                 rd_nodata=`$cat try.ret`
8901                 echo "A read() system call with no data present returns $rd_nodata."
8902                 case "$rd_nodata" in
8903                 0|-1) ;;
8904                 *)
8905                         echo "(That's peculiar, fixing that to be -1.)"
8906                         rd_nodata=-1
8907                         ;;
8908                 esac
8909                 case "$eagain" in
8910                 '')
8911                         echo "Forcing errno EAGAIN on read() with no data available."
8912                         eagain=EAGAIN
8913                         ;;
8914                 *)
8915                         echo "Your read() sets errno to $eagain when no data is available."
8916                         ;;
8917                 esac
8918                 status=`$cat try.err`
8919                 case "$status" in
8920                 0) echo "And it correctly returns 0 to signal EOF.";;
8921                 -1) echo "But it also returns -1 to signal EOF, so be careful!";;
8922                 *) echo "However, your read() returns '$status' on EOF??";;
8923                 esac
8924                 val="$define"
8925                 if test "$status" = "$rd_nodata"; then
8926                         echo "WARNING: you can't distinguish between EOF and no data!"
8927                         val="$undef"
8928                 fi
8929         else
8930                 echo "I can't compile the test program--assuming errno EAGAIN will do."
8931                 eagain=EAGAIN
8932         fi
8933         set d_eofnblk
8934         eval $setvar
8935         ;;
8936 *)
8937         echo "Using $hint value $eagain."
8938         echo "Your read() returns $rd_nodata when no data is present."
8939         case "$d_eofnblk" in
8940         "$define") echo "And you can see EOF because read() returns 0.";;
8941         "$undef") echo "But you can't see EOF status from read() returned value.";;
8942         *)
8943                 echo "(Assuming you can't see EOF status from read anyway.)"
8944                 d_eofnblk=$undef
8945                 ;;
8946         esac
8947         ;;
8948 esac
8949 $rm -f try try.* .out core head.c mtry
8950
8951 : see if fchmod exists
8952 set fchmod d_fchmod
8953 eval $inlibc
8954
8955 : see if fchown exists
8956 set fchown d_fchown
8957 eval $inlibc
8958
8959 : see if this is an fcntl system
8960 set fcntl d_fcntl
8961 eval $inlibc
8962
8963 hasfield='varname=$1; struct=$2; field=$3; shift; shift; shift;
8964 while $test $# -ge 2; do
8965         case "$1" in
8966         $define) echo "#include <$2>";;
8967         esac ;
8968     shift 2;
8969 done > try.c;
8970 echo "int main () { struct $struct foo; char* bar; bar = (char*)foo.$field; }" >> try.c;
8971 set try;
8972 if eval $compile; then
8973         val="$define";
8974 else
8975         val="$undef";
8976 fi;
8977 set $varname;
8978 eval $setvar;
8979 $rm -f try.c try.o'
8980
8981 socketlib=''
8982 sockethdr=''
8983 : see whether socket exists
8984 echo " "
8985 $echo $n "Hmm... $c" >&4
8986 if set socket val -f d_socket; eval $csym; $val; then
8987         echo "Looks like you have Berkeley networking support." >&4
8988         d_socket="$define"
8989         if set setsockopt val -f; eval $csym; $val; then
8990                 d_oldsock="$undef"
8991         else
8992                 echo "...but it uses the old BSD 4.1c interface, rather than 4.2." >&4
8993                 d_oldsock="$define"
8994         fi
8995 else
8996         if $contains socklib libc.list >/dev/null 2>&1; then
8997                 echo "Looks like you have Berkeley networking support." >&4
8998                 d_socket="$define"
8999                 : we will have to assume that it supports the 4.2 BSD interface
9000                 d_oldsock="$undef"
9001         else
9002                 echo "You don't have Berkeley networking in libc$_a..." >&4
9003                 if test "X$d_socket" = "X$define"; then
9004                    echo "...but you seem to believe that you have sockets." >&4
9005                 else
9006                         for net in net socket
9007                         do
9008                                 if test -f /usr/lib/lib$net$_a; then
9009                                         ( ($nm $nm_opt /usr/lib/lib$net$_a | eval $nm_extract) ||  \
9010                                         $ar t /usr/lib/lib$net$_a) 2>/dev/null >> libc.list
9011                                         if $contains socket libc.list >/dev/null 2>&1; then
9012                                                 d_socket="$define"
9013                                                 socketlib="-l$net"
9014                                                 case "$net" in
9015                                                 net)
9016                                                         echo "...but the Wollongong group seems to have hacked it in." >&4
9017                                                         sockethdr="-I/usr/netinclude"
9018                                                         ;;
9019                                                 esac
9020                                                 echo "Found Berkeley sockets interface in lib$net." >& 4 
9021                                                 if $contains setsockopt libc.list >/dev/null 2>&1; then
9022                                                         d_oldsock="$undef"
9023                                                 else
9024                                                         echo "...using the old BSD 4.1c interface, rather than 4.2." >&4
9025                                                         d_oldsock="$define"
9026                                                 fi
9027                                                 break
9028                                         fi
9029                                 fi
9030                         done
9031                         if test "X$d_socket" != "X$define"; then
9032                            echo "or anywhere else I see." >&4
9033                            d_socket="$undef"
9034                            d_oldsock="$undef"
9035                         fi
9036                 fi
9037         fi
9038 fi
9039
9040 : see if socketpair exists
9041 set socketpair d_sockpair
9042 eval $inlibc
9043
9044
9045 echo " "
9046 echo "Checking the availability of certain socket constants..." >& 4
9047 for ENUM in MSG_CTRUNC MSG_DONTROUTE MSG_OOB MSG_PEEK MSG_PROXY SCM_RIGHTS; do
9048         enum=`$echo $ENUM|./tr '[A-Z]' '[a-z]'`
9049         $cat >try.c <<EOF
9050 #include <sys/types.h>
9051 #include <sys/socket.h>
9052 int main() {
9053     int i = $ENUM;
9054 }
9055 EOF
9056         val="$undef"
9057         set try; if eval $compile; then
9058                 val="$define"
9059         fi
9060         set d_${enum}; eval $setvar
9061         $rm -f try.c try
9062 done
9063
9064 : see if sys/select.h has to be included
9065 set sys/select.h i_sysselct
9066 eval $inhdr
9067
9068 : see if we should include time.h, sys/time.h, or both
9069 echo " "
9070 if test "X$timeincl" = X; then
9071         echo "Testing to see if we should include <time.h>, <sys/time.h> or both." >&4
9072         $echo $n "I'm now running the test program...$c"
9073         $cat >try.c <<'EOCP'
9074 #include <sys/types.h>
9075 #ifdef I_TIME
9076 #include <time.h>
9077 #endif
9078 #ifdef I_SYSTIME
9079 #ifdef SYSTIMEKERNEL
9080 #define KERNEL
9081 #endif
9082 #include <sys/time.h>
9083 #endif
9084 #ifdef I_SYSSELECT
9085 #include <sys/select.h>
9086 #endif
9087 int main()
9088 {
9089         struct tm foo;
9090 #ifdef S_TIMEVAL
9091         struct timeval bar;
9092 #endif
9093 #ifdef S_TIMEZONE
9094         struct timezone tzp;
9095 #endif
9096         if (foo.tm_sec == foo.tm_sec)
9097                 exit(0);
9098 #ifdef S_TIMEVAL
9099         if (bar.tv_sec == bar.tv_sec)
9100                 exit(0);
9101 #endif
9102         exit(1);
9103 }
9104 EOCP
9105         flags=''
9106         for s_timezone in '-DS_TIMEZONE' ''; do
9107         sysselect=''
9108         for s_timeval in '-DS_TIMEVAL' ''; do
9109         for i_systimek in '' '-DSYSTIMEKERNEL'; do
9110         for i_time in '' '-DI_TIME'; do
9111         for i_systime in '-DI_SYSTIME' ''; do
9112                 case "$flags" in
9113                 '') $echo $n ".$c"
9114                         set try $i_time $i_systime $i_systimek $sysselect $s_timeval $s_timezone
9115                         if eval $compile; then
9116                                 set X $i_time $i_systime $i_systimek $sysselect $s_timeval
9117                                 shift
9118                                 flags="$*"
9119                                 echo " "
9120                                 $echo $n "Succeeded with $flags$c"
9121                         fi
9122                         ;;
9123                 esac
9124         done
9125         done
9126         done
9127         done
9128         done
9129         timeincl=''
9130         echo " "
9131         case "$flags" in
9132         *SYSTIMEKERNEL*) i_systimek="$define"
9133                 timeincl=`./findhdr sys/time.h`
9134                 echo "We'll include <sys/time.h> with KERNEL defined." >&4;;
9135         *) i_systimek="$undef";;
9136         esac
9137         case "$flags" in
9138         *I_TIME*) i_time="$define"
9139                 timeincl=`./findhdr time.h`" $timeincl"
9140                 echo "We'll include <time.h>." >&4;;
9141         *) i_time="$undef";;
9142         esac
9143         case "$flags" in
9144         *I_SYSTIME*) i_systime="$define"
9145                 timeincl=`./findhdr sys/time.h`" $timeincl"
9146                 echo "We'll include <sys/time.h>." >&4;;
9147         *) i_systime="$undef";;
9148         esac
9149         $rm -f try.c try
9150 fi
9151
9152 : check for fd_set items
9153 $cat <<EOM
9154
9155 Checking to see how well your C compiler handles fd_set and friends ...
9156 EOM
9157 $cat >fd_set.c <<EOCP
9158 #$i_systime I_SYS_TIME
9159 #$i_sysselct I_SYS_SELECT
9160 #$d_socket HAS_SOCKET
9161 #include <sys/types.h>
9162 #ifdef HAS_SOCKET
9163 #include <sys/socket.h> /* Might include <sys/bsdtypes.h> */
9164 #endif
9165 #ifdef I_SYS_TIME
9166 #include <sys/time.h>
9167 #endif
9168 #ifdef I_SYS_SELECT
9169 #include <sys/select.h>
9170 #endif
9171 int main() {
9172         fd_set fds;
9173
9174 #ifdef TRYBITS
9175         if(fds.fds_bits);
9176 #endif
9177
9178 #if defined(FD_SET) && defined(FD_CLR) && defined(FD_ISSET) && defined(FD_ZERO)
9179         exit(0);
9180 #else
9181         exit(1);
9182 #endif
9183 }
9184 EOCP
9185 set fd_set -DTRYBITS
9186 if eval $compile; then
9187         d_fds_bits="$define"
9188         d_fd_set="$define"
9189         echo "Well, your system knows about the normal fd_set typedef..." >&4
9190         if ./fd_set; then
9191                 echo "and you have the normal fd_set macros (just as I'd expect)." >&4
9192                 d_fd_macros="$define"
9193         else
9194                 $cat >&4 <<'EOM'
9195 but not the normal fd_set macros!  Gaaack!  I'll have to cover for you.
9196 EOM
9197                 d_fd_macros="$undef"
9198         fi
9199 else
9200         $cat <<'EOM'
9201 Hmm, your compiler has some difficulty with fd_set.  Checking further...
9202 EOM
9203         set fd_set
9204         if eval $compile; then
9205                 d_fds_bits="$undef"
9206                 d_fd_set="$define"
9207                 echo "Well, your system has some sort of fd_set available..." >&4
9208                 if ./fd_set; then
9209                         echo "and you have the normal fd_set macros." >&4
9210                         d_fd_macros="$define"
9211                 else
9212                         $cat <<'EOM'
9213 but not the normal fd_set macros!  Gross!  More work for me...
9214 EOM
9215                         d_fd_macros="$undef"
9216                 fi
9217         else
9218         echo "Well, you got zip.  That's OK, I can roll my own fd_set stuff." >&4
9219                 d_fd_set="$undef"
9220                 d_fds_bits="$undef"
9221                 d_fd_macros="$undef"
9222         fi
9223 fi
9224 $rm -f fd_set*
9225
9226 : see if fgetpos exists
9227 set fgetpos d_fgetpos
9228 eval $inlibc
9229
9230 : see if flock exists
9231 set flock d_flock
9232 eval $inlibc
9233
9234 : see if fork exists
9235 set fork d_fork
9236 eval $inlibc
9237
9238 : see if pathconf exists
9239 set pathconf d_pathconf
9240 eval $inlibc
9241
9242 : see if fpathconf exists
9243 set fpathconf d_fpathconf
9244 eval $inlibc
9245
9246
9247 : check for fpos64_t
9248 echo " "
9249 echo "Checking to see if you have fpos64_t..." >&4
9250 $cat >try.c <<EOCP
9251 #include <stdio.h>
9252 int main() { fpos64_t x = 7; }
9253 EOCP
9254 set try
9255 if eval $compile; then
9256         val="$define"
9257         echo "You have fpos64_t."
9258 else
9259         val="$undef"
9260         echo "You do not have fpos64_t."
9261         case "$fpossize" in
9262         8) echo "(Your fpos_t is 64 bits, so you could use that.)" ;;
9263         esac
9264 fi
9265 $rm -f try.* try
9266 set d_fpos64_t
9267 eval $setvar
9268
9269 : see if frexpl exists
9270 set frexpl d_frexpl
9271 eval $inlibc
9272
9273 hasstruct='varname=$1; struct=$2; shift; shift;
9274 while $test $# -ge 2; do
9275         case "$1" in
9276         $define) echo "#include <$2>";;
9277         esac ;
9278     shift 2;
9279 done > try.c;
9280 echo "int main () { struct $struct foo; }" >> try.c;
9281 set try;
9282 if eval $compile; then
9283         val="$define";
9284 else
9285         val="$undef";
9286 fi;
9287 set $varname;
9288 eval $setvar;
9289 $rm -f try.c try.o'
9290
9291 : see if this is a sys/param system
9292 set sys/param.h i_sysparam
9293 eval $inhdr
9294
9295 : see if this is a sys/mount.h system
9296 set sys/mount.h i_sysmount
9297 eval $inhdr
9298
9299 : see if sys/types.h has to be included
9300 set sys/types.h i_systypes
9301 eval $inhdr
9302
9303
9304 echo " "
9305 echo "Checking to see if your system supports struct fs_data..." >&4
9306 set d_fs_data_s fs_data $i_systypes sys/types.h $i_sysparam sys/param.h $i_sysmount sys/mount.h
9307 eval $hasstruct
9308 case "$d_fs_data_s" in
9309 "$define")      echo "Yes, it does."   ;;
9310 *)              echo "No, it doesn't." ;;
9311 esac
9312
9313 : see if fseeko exists
9314 set fseeko d_fseeko
9315 eval $inlibc
9316 case "$longsize" in
9317 8) echo "(Your long is 64 bits, so you could use fseek.)" ;;
9318 esac
9319
9320 : see if fsetpos exists
9321 set fsetpos d_fsetpos
9322 eval $inlibc
9323
9324
9325 : see if fstatfs exists
9326 set fstatfs d_fstatfs
9327 eval $inlibc
9328
9329
9330 : see if statvfs exists
9331 set statvfs d_statvfs
9332 eval $inlibc
9333
9334 : see if fstatvfs exists
9335 set fstatvfs d_fstatvfs
9336 eval $inlibc
9337
9338
9339 : see if ftello exists
9340 set ftello d_ftello
9341 eval $inlibc
9342 case "$longsize" in
9343 8) echo "(Your long is 64 bits, so you could use ftell.)" ;;
9344 esac
9345
9346 : see if getcwd exists
9347 set getcwd d_getcwd
9348 eval $inlibc
9349
9350 : see if getespwnam exists
9351 set getespwnam d_getespwnam
9352 eval $inlibc
9353
9354
9355 : see if getfsstat exists
9356 set getfsstat d_getfsstat
9357 eval $inlibc
9358
9359 : see if getgrent exists
9360 set getgrent d_getgrent
9361 eval $inlibc
9362
9363 : see if gethostbyaddr exists
9364 set gethostbyaddr d_gethbyaddr
9365 eval $inlibc
9366
9367 : see if gethostbyname exists
9368 set gethostbyname d_gethbyname
9369 eval $inlibc
9370
9371 : see if gethostent exists
9372 set gethostent d_gethent
9373 eval $inlibc
9374
9375 : see how we will look up host name
9376 echo " "
9377 call=''
9378 if set gethostname val -f d_gethname; eval $csym; $val; then
9379         echo 'gethostname() found.' >&4
9380         d_gethname="$define"
9381         call=gethostname
9382 fi
9383 if set uname val -f d_uname; eval $csym; $val; then
9384         if ./xenix; then
9385                 $cat <<'EOM'
9386 uname() was found, but you're running xenix, and older versions of xenix
9387 have a broken uname(). If you don't really know whether your xenix is old
9388 enough to have a broken system call, use the default answer.
9389
9390 EOM
9391                 dflt=y
9392                 case "$d_uname" in
9393                 "$define") dflt=n;;
9394                 esac
9395                 rp='Is your uname() broken?'
9396                 . ./myread
9397                 case "$ans" in
9398                 n*) d_uname="$define"; call=uname;;
9399                 esac
9400         else
9401                 echo 'uname() found.' >&4
9402                 d_uname="$define"
9403                 case "$call" in
9404                 '') call=uname ;;
9405                 esac
9406         fi
9407 fi
9408 case "$d_gethname" in
9409 '') d_gethname="$undef";;
9410 esac
9411 case "$d_uname" in
9412 '') d_uname="$undef";;
9413 esac
9414 case "$d_uname$d_gethname" in
9415 *define*)
9416         dflt=n
9417         cat <<EOM
9418  
9419 Every now and then someone has a $call() that lies about the hostname
9420 but can't be fixed for political or economic reasons.  If you wish, I can
9421 pretend $call() isn't there and maybe compute hostname at run-time
9422 thanks to the '$phostname' command.
9423
9424 EOM
9425         rp="Shall I ignore $call() from now on?"
9426         . ./myread
9427         case "$ans" in
9428         y*) d_uname="$undef" d_gethname="$undef"; $echo $n "Okay...$c";;
9429         esac;;
9430 esac
9431 case "$phostname" in
9432 '') aphostname='';;
9433 *) case "$aphostname" in
9434         /*) ;;
9435         *) set X $phostname
9436                 shift
9437                 file=$1
9438                 shift
9439                 file=`./loc $file $file $pth`
9440                 aphostname=`echo $file $*`
9441                 ;;
9442         esac
9443         ;;
9444 esac
9445 case "$d_uname$d_gethname" in
9446 *define*) ;;
9447 *)
9448         case "$phostname" in
9449         '')
9450                 echo "There will be no way for $package to get your hostname." >&4;;
9451         *)
9452         echo "I'll use 'popen("'"'$aphostname'", "r")'"' to get your hostname." >&4
9453                 ;;
9454         esac;;
9455 esac
9456 case "$d_phostname" in
9457 '') d_phostname="$undef";;
9458 esac
9459
9460 : see if this is a netdb.h system
9461 set netdb.h i_netdb
9462 eval $inhdr
9463
9464 : see if prototypes for various gethostxxx netdb.h functions are available
9465 echo " "
9466 set d_gethostprotos gethostent $i_netdb netdb.h
9467 eval $hasproto
9468
9469 : see if getlogin exists
9470 set getlogin d_getlogin
9471 eval $inlibc
9472
9473 : see if getmnt exists
9474 set getmnt d_getmnt
9475 eval $inlibc
9476
9477 : see if getmntent exists
9478 set getmntent d_getmntent
9479 eval $inlibc
9480
9481 : see if getnetbyaddr exists
9482 set getnetbyaddr d_getnbyaddr
9483 eval $inlibc
9484
9485 : see if getnetbyname exists
9486 set getnetbyname d_getnbyname
9487 eval $inlibc
9488
9489 : see if getnetent exists
9490 set getnetent d_getnent
9491 eval $inlibc
9492
9493 : see if prototypes for various getnetxxx netdb.h functions are available
9494 echo " "
9495 set d_getnetprotos getnetent $i_netdb netdb.h
9496 eval $hasproto
9497
9498
9499 : see if getprotobyname exists
9500 set getprotobyname d_getpbyname
9501 eval $inlibc
9502
9503 : see if getprotobynumber exists
9504 set getprotobynumber d_getpbynumber
9505 eval $inlibc
9506
9507 : see if getprotoent exists
9508 set getprotoent d_getpent
9509 eval $inlibc
9510
9511 : see if getpgid exists
9512 set getpgid d_getpgid
9513 eval $inlibc
9514
9515 : see if getpgrp2 exists
9516 set getpgrp2 d_getpgrp2
9517 eval $inlibc
9518
9519 : see if getppid exists
9520 set getppid d_getppid
9521 eval $inlibc
9522
9523 : see if getpriority exists
9524 set getpriority d_getprior
9525 eval $inlibc
9526
9527 : see if prototypes for various getprotoxxx netdb.h functions are available
9528 echo " "
9529 set d_getprotoprotos getprotoent $i_netdb netdb.h
9530 eval $hasproto
9531
9532 : see if getprpwnam exists
9533 set getprpwnam d_getprpwnam
9534 eval $inlibc
9535
9536 : see if getpwent exists
9537 set getpwent d_getpwent
9538 eval $inlibc
9539
9540
9541 : see if getservbyname exists
9542 set getservbyname d_getsbyname
9543 eval $inlibc
9544
9545 : see if getservbyport exists
9546 set getservbyport d_getsbyport
9547 eval $inlibc
9548
9549 : see if getservent exists
9550 set getservent d_getsent
9551 eval $inlibc
9552
9553 : see if prototypes for various getservxxx netdb.h functions are available
9554 echo " "
9555 set d_getservprotos getservent $i_netdb netdb.h
9556 eval $hasproto
9557
9558 : see if getspnam exists
9559 set getspnam d_getspnam
9560 eval $inlibc
9561
9562 : see if gettimeofday or ftime exists
9563 set gettimeofday d_gettimeod
9564 eval $inlibc
9565 case "$d_gettimeod" in
9566 "$undef")
9567         set ftime d_ftime 
9568         eval $inlibc
9569         ;;
9570 *)
9571         val="$undef"; set d_ftime; eval $setvar
9572         ;;
9573 esac
9574 case "$d_gettimeod$d_ftime" in
9575 "$undef$undef")
9576         echo " "
9577         echo 'No ftime() nor gettimeofday() -- timing may be less accurate.' >&4
9578         ;;
9579 esac
9580
9581 : see if this is an grp system
9582 set grp.h i_grp
9583 eval $inhdr
9584
9585 case "$i_grp" in
9586 $define)
9587         xxx=`./findhdr grp.h`
9588         $cppstdin $cppflags $cppminus < $xxx >$$.h
9589
9590         if $contains 'gr_passwd' $$.h >/dev/null 2>&1; then
9591                 val="$define"
9592         else
9593                 val="$undef"
9594         fi
9595         set d_grpasswd
9596         eval $setvar
9597
9598         $rm -f $$.h
9599         ;;
9600 *)
9601         val="$undef";
9602         set d_grpasswd; eval $setvar
9603         ;;
9604 esac
9605
9606 : see if hasmntopt exists
9607 set hasmntopt d_hasmntopt
9608 eval $inlibc
9609
9610 : see if this is a netinet/in.h or sys/in.h system
9611 set netinet/in.h i_niin sys/in.h i_sysin
9612 eval $inhdr
9613
9614 : see if arpa/inet.h has to be included
9615 set arpa/inet.h i_arpainet
9616 eval $inhdr
9617
9618 : see if htonl --and friends-- exists
9619 val=''
9620 set htonl val
9621 eval $inlibc
9622
9623 : Maybe they are macros.
9624 case "$val" in
9625 $undef)
9626         $cat >htonl.c <<EOM
9627 #include <stdio.h>
9628 #include <sys/types.h>
9629 #$i_niin I_NETINET_IN
9630 #$i_sysin I_SYS_IN
9631 #$i_arpainet I_ARPA_INET
9632 #ifdef I_NETINET_IN
9633 #include <netinet/in.h>
9634 #endif
9635 #ifdef I_SYS_IN
9636 #include <sys/in.h>
9637 #endif
9638 #ifdef I_ARPA_INET
9639 #include <arpa/inet.h>
9640 #endif
9641 #ifdef htonl
9642 printf("Defined as a macro.");
9643 #endif
9644 EOM
9645         $cppstdin $cppflags $cppminus < htonl.c >htonl.E 2>/dev/null
9646         if $contains 'Defined as a macro' htonl.E >/dev/null 2>&1; then
9647                 val="$define"
9648                 echo "But it seems to be defined as a macro." >&4
9649         fi
9650         $rm -f htonl.?
9651         ;;
9652 esac
9653 set d_htonl
9654 eval $setvar
9655
9656 : see if iconv exists
9657 set iconv d_iconv
9658 eval $inlibc
9659
9660 : index or strchr
9661 echo " "
9662 if set index val -f; eval $csym; $val; then
9663         if set strchr val -f d_strchr; eval $csym; $val; then
9664                 if $contains strchr "$strings" >/dev/null 2>&1 ; then
9665                         val="$define"
9666                         vali="$undef"
9667                         echo "strchr() found." >&4
9668                 else
9669                         val="$undef"
9670                         vali="$define"
9671                         echo "index() found." >&4
9672                 fi
9673         else
9674                 val="$undef"
9675                 vali="$define"
9676                 echo "index() found." >&4
9677         fi
9678 else
9679         if set strchr val -f d_strchr; eval $csym; $val; then
9680                 val="$define"
9681                 vali="$undef"
9682                 echo "strchr() found." >&4
9683         else
9684                 echo "No index() or strchr() found!" >&4
9685                 val="$undef"
9686                 vali="$undef"
9687         fi
9688 fi
9689 set d_strchr; eval $setvar
9690 val="$vali"
9691 set d_index; eval $setvar
9692
9693 : check whether inet_aton exists
9694 set inet_aton d_inetaton
9695 eval $inlibc
9696
9697 : see if inttypes.h is available
9698 : we want a real compile instead of Inhdr because some systems
9699 : have an inttypes.h which includes non-existent headers
9700 echo " "
9701 $cat >try.c <<EOCP
9702 #include <inttypes.h>
9703 int main() {
9704         static int32_t foo32 = 0x12345678;
9705 }
9706 EOCP
9707 set try
9708 if eval $compile; then
9709         echo "<inttypes.h> found." >&4
9710         val="$define"
9711 else
9712         echo "<inttypes.h> NOT found." >&4
9713         val="$undef"
9714 fi
9715 $rm -f try.c try
9716 set i_inttypes
9717 eval $setvar
9718
9719 : check for int64_t
9720 echo " "
9721 echo "Checking to see if you have int64_t..." >&4
9722 $cat >try.c <<EOCP
9723 #include <sys/types.h>
9724 #$i_inttypes I_INTTYPES
9725 #ifdef I_INTTYPES
9726 #include <inttypes.h>
9727 #endif
9728 int main() { int64_t x = 7; }
9729 EOCP
9730 set try
9731 if eval $compile; then
9732         val="$define"
9733         echo "You have int64_t."
9734 else
9735         val="$undef"
9736         echo "You do not have int64_t."
9737 fi
9738 $rm -f try try.*
9739 set d_int64_t
9740 eval $setvar
9741
9742 : Look for isascii
9743 echo " "
9744 $cat >isascii.c <<'EOCP'
9745 #include <stdio.h>
9746 #include <ctype.h>
9747 int main() {
9748         int c = 'A';
9749         if (isascii(c))
9750                 exit(0);
9751         else
9752                 exit(1);
9753 }
9754 EOCP
9755 set isascii
9756 if eval $compile; then
9757         echo "isascii() found." >&4
9758         val="$define"
9759 else
9760         echo "isascii() NOT found." >&4
9761         val="$undef"
9762 fi
9763 set d_isascii
9764 eval $setvar
9765 $rm -f isascii*
9766
9767 : see if isnan exists
9768 set isnan d_isnan
9769 eval $inlibc
9770
9771 : see if isnanl exists
9772 set isnanl d_isnanl
9773 eval $inlibc
9774
9775 : see if killpg exists
9776 set killpg d_killpg
9777 eval $inlibc
9778
9779 : see if lchown exists
9780 echo " "
9781 $cat > try.c <<'EOCP'
9782 /* System header to define __stub macros and hopefully few prototypes,
9783     which can conflict with char lchown(); below.  */
9784 #include <assert.h>
9785 /* Override any gcc2 internal prototype to avoid an error.  */
9786 /* We use char because int might match the return type of a gcc2
9787    builtin and then its argument prototype would still apply.  */
9788 char lchown();
9789 int main() {
9790     /*  The GNU C library defines this for functions which it implements
9791         to always fail with ENOSYS.  Some functions are actually named
9792         something starting with __ and the normal name is an alias.  */
9793 #if defined (__stub_lchown) || defined (__stub___lchown)
9794 choke me
9795 #else
9796 lchown();
9797 #endif
9798 ; return 0; }
9799 EOCP
9800 set try
9801 if eval $compile; then
9802     $echo "lchown() found." >&4
9803     val="$define"
9804 else
9805     $echo "lchown() NOT found." >&4
9806     val="$undef"
9807 fi
9808 set d_lchown
9809 eval $setvar
9810
9811 : See if number of significant digits in a double precision number is known
9812 echo " "
9813 $cat >ldbl_dig.c <<EOM
9814 #$i_limits I_LIMITS
9815 #$i_float I_FLOAT
9816 #ifdef I_LIMITS
9817 #include <limits.h>
9818 #endif
9819 #ifdef I_FLOAT
9820 #include <float.h>
9821 #endif
9822 #ifdef LDBL_DIG
9823 printf("Contains LDBL_DIG");
9824 #endif
9825 EOM
9826 $cppstdin $cppflags $cppminus < ldbl_dig.c >ldbl_dig.E 2>/dev/null
9827 if $contains 'LDBL_DIG' ldbl_dig.E >/dev/null 2>&1; then
9828         echo "LDBL_DIG found." >&4
9829         val="$define"
9830 else
9831         echo "LDBL_DIG NOT found." >&4
9832         val="$undef"
9833 fi
9834 $rm -f ldbl_dig.?
9835 set d_ldbl_dig
9836 eval $setvar
9837
9838 : see if link exists
9839 set link d_link
9840 eval $inlibc
9841
9842 : see if localeconv exists
9843 set localeconv d_locconv
9844 eval $inlibc
9845
9846 : see if lockf exists
9847 set lockf d_lockf
9848 eval $inlibc
9849
9850 : check for long long
9851 echo " "
9852 echo "Checking to see if you have long long..." >&4
9853 echo 'int main() { long long x = 7; return 0; }' > try.c
9854 set try
9855 if eval $compile; then
9856         val="$define"
9857         echo "You have long long."
9858 else
9859         val="$undef"
9860         echo "You do not have long long."
9861 fi
9862 $rm try.*
9863 set d_longlong
9864 eval $setvar
9865
9866 : check for length of long long
9867 case "${d_longlong}${longlongsize}" in
9868 $define)
9869         echo " "
9870         echo "Checking to see how big your long longs are..." >&4
9871         $cat >try.c <<'EOCP'
9872 #include <stdio.h>
9873 int main()
9874 {
9875     printf("%d\n", (int)sizeof(long long));
9876     return(0);
9877 }
9878 EOCP
9879         set try
9880         if eval $compile_ok; then
9881                 longlongsize=`./try$exe_ext`
9882                 echo "Your long longs are $longlongsize bytes long."
9883         else
9884                 dflt='8'
9885                 echo " "
9886                 echo "(I can't seem to compile the test program.  Guessing...)"
9887                 rp="What is the size of a long long (in bytes)?"
9888                 . ./myread
9889                 longlongsize="$ans"
9890         fi
9891         if $test "X$longsize" = "X$longlongsize"; then
9892                 echo "(That isn't any different from an ordinary long.)"
9893         fi      
9894         ;;
9895 esac
9896 $rm -f try.* try
9897
9898 : see if prototype for lseek is available
9899 echo " "
9900 set d_lseekproto lseek $i_systypes sys/types.h $i_unistd unistd.h
9901 eval $hasproto
9902
9903 : see if lstat exists
9904 set lstat d_lstat
9905 eval $inlibc
9906
9907 : see if madvise exists
9908 set madvise d_madvise
9909 eval $inlibc
9910
9911 : see if mblen exists
9912 set mblen d_mblen
9913 eval $inlibc
9914
9915 : see if mbstowcs exists
9916 set mbstowcs d_mbstowcs
9917 eval $inlibc
9918
9919 : see if mbtowc exists
9920 set mbtowc d_mbtowc
9921 eval $inlibc
9922
9923 : see if memchr exists
9924 set memchr d_memchr
9925 eval $inlibc
9926
9927 : see if memcmp exists
9928 set memcmp d_memcmp
9929 eval $inlibc
9930
9931 : see if memcpy exists
9932 set memcpy d_memcpy
9933 eval $inlibc
9934
9935 : see if memmove exists
9936 set memmove d_memmove
9937 eval $inlibc
9938
9939 : see if memset exists
9940 set memset d_memset
9941 eval $inlibc
9942
9943 : see if mkdir exists
9944 set mkdir d_mkdir
9945 eval $inlibc
9946
9947 : see if mkdtemp exists
9948 set mkdtemp d_mkdtemp
9949 eval $inlibc
9950
9951 : see if mkfifo exists
9952 set mkfifo d_mkfifo
9953 eval $inlibc
9954
9955 : see if mkstemp exists
9956 set mkstemp d_mkstemp
9957 eval $inlibc
9958
9959 : see if mkstemps exists
9960 set mkstemps d_mkstemps
9961 eval $inlibc
9962
9963 : see if mktime exists
9964 set mktime d_mktime
9965 eval $inlibc
9966
9967 : see if this is a sys/mman.h system
9968 set sys/mman.h i_sysmman
9969 eval $inhdr
9970
9971 : see if mmap exists
9972 set mmap d_mmap
9973 eval $inlibc
9974 : see what shmat returns
9975 : default to something harmless
9976 mmaptype='void *'
9977 case "$i_sysmman$d_mmap" in
9978 "$define$define")
9979         $cat >mmap.c <<'END'
9980 #include <sys/mman.h>
9981 void *mmap();
9982 END
9983         if $cc $ccflags -c mmap.c >/dev/null 2>&1; then
9984                 mmaptype='void *'
9985         else
9986                 mmaptype='caddr_t'
9987         fi
9988         echo "and it returns ($mmaptype)." >&4
9989         ;;
9990 esac
9991
9992
9993
9994 : see if modfl exists
9995 set modfl d_modfl
9996 eval $inlibc
9997
9998 : see if mprotect exists
9999 set mprotect d_mprotect
10000 eval $inlibc
10001
10002 : see if msgctl exists
10003 set msgctl d_msgctl
10004 eval $inlibc
10005
10006 : see if msgget exists
10007 set msgget d_msgget
10008 eval $inlibc
10009
10010 : see if msgsnd exists
10011 set msgsnd d_msgsnd
10012 eval $inlibc
10013
10014 : see if msgrcv exists
10015 set msgrcv d_msgrcv
10016 eval $inlibc
10017
10018 : see how much of the 'msg*(2)' library is present.
10019 h_msg=true
10020 echo " "
10021 case "$d_msgctl$d_msgget$d_msgsnd$d_msgrcv" in
10022 *"$undef"*) h_msg=false;;
10023 esac
10024 case "$osname" in
10025 freebsd)
10026     case "`ipcs 2>&1`" in
10027     "SVID messages"*"not configured"*)
10028         echo "Your $osname does not have the msg*(2) configured." >&4
10029         h_msg=false
10030         val="$undef"
10031         set msgctl d_msgctl
10032         eval $setvar
10033         set msgget d_msgget
10034         eval $setvar
10035         set msgsnd d_msgsnd
10036         eval $setvar
10037         set msgrcv d_msgrcv
10038         eval $setvar
10039         ;;
10040     esac
10041     ;;
10042 esac
10043 : we could also check for sys/ipc.h ...
10044 if $h_msg && $test `./findhdr sys/msg.h`; then
10045         echo "You have the full msg*(2) library." >&4
10046         val="$define"
10047 else
10048         echo "You don't have the full msg*(2) library." >&4
10049         val="$undef"
10050 fi
10051 set d_msg
10052 eval $setvar
10053
10054 : see if msync exists
10055 set msync d_msync
10056 eval $inlibc
10057
10058 : see if munmap exists
10059 set munmap d_munmap
10060 eval $inlibc
10061
10062 : see if nice exists
10063 set nice d_nice
10064 eval $inlibc
10065
10066
10067 echo " "
10068 echo "Checking which 64-bit integer type we could use..." >&4
10069
10070 case "$intsize" in
10071 8) val=int
10072    set quadtype
10073    eval $setvar
10074    val='"unsigned int"'
10075    set uquadtype
10076    eval $setvar
10077    quadkind=1
10078    ;;
10079 *) case "$longsize" in
10080    8) val=long
10081       set quadtype
10082       eval $setvar
10083       val='"unsigned long"'
10084       set uquadtype
10085       eval $setvar
10086       quadkind=2
10087       ;;
10088    *) case "$d_longlong:$longlongsize" in
10089       define:8)
10090         val='"long long"'
10091         set quadtype
10092         eval $setvar
10093         val='"unsigned long long"'
10094         set uquadtype
10095         eval $setvar
10096         quadkind=3
10097         ;;
10098       *) case "$d_int64_t" in
10099          define)
10100            val=int64_t
10101            set quadtype
10102            eval $setvar
10103            val=uint64_t
10104            set uquadtype
10105            eval $setvar
10106            quadkind=4
10107            ;;
10108          esac
10109          ;;
10110       esac
10111       ;;
10112    esac
10113    ;;
10114 esac
10115
10116 case "$quadtype" in
10117 '')     echo "Alas, no 64-bit integer types in sight." >&4
10118         d_quad="$undef"
10119         ;;
10120 *)      if test X"$use64bitint" = Xdefine -o X"$longsize" = X8; then
10121             verb="will"
10122         else
10123             verb="could"
10124         fi
10125         echo "We $verb use '$quadtype' for 64-bit integers." >&4
10126         d_quad="$define"
10127         ;;
10128 esac
10129
10130 : check for length of character
10131 echo " "
10132 case "$charsize" in
10133 '')
10134         echo "Checking to see how big your characters are (hey, you never know)..." >&4
10135         $cat >try.c <<'EOCP'
10136 #include <stdio.h>
10137 int main()
10138 {
10139     printf("%d\n", (int)sizeof(char));
10140     exit(0);
10141 }
10142 EOCP
10143         set try
10144         if eval $compile_ok; then
10145                 dflt=`./try`
10146         else
10147                 dflt='1'
10148                 echo "(I can't seem to compile the test program.  Guessing...)"
10149         fi
10150         ;;
10151 *)
10152         dflt="$charsize"
10153         ;;
10154 esac
10155 rp="What is the size of a character (in bytes)?"
10156 . ./myread
10157 charsize="$ans"
10158 $rm -f try.c try
10159
10160
10161 echo " "
10162 $echo "Choosing the C types to be used for Perl's internal types..." >&4
10163
10164 case "$use64bitint:$d_quad:$quadtype" in
10165 define:define:?*)
10166         ivtype="$quadtype"
10167         uvtype="$uquadtype"
10168         ivsize=8
10169         uvsize=8
10170         ;;
10171 *)      ivtype="long"
10172         uvtype="unsigned long"
10173         ivsize=$longsize
10174         uvsize=$longsize
10175         ;;
10176 esac
10177
10178 case "$uselongdouble:$d_longdbl" in
10179 define:define)
10180         nvtype="long double"
10181         nvsize=$longdblsize
10182         ;;
10183 *)      nvtype=double
10184         nvsize=$doublesize
10185         ;;
10186 esac
10187
10188 $echo "(IV will be "$ivtype", $ivsize bytes)"
10189 $echo "(UV will be "$uvtype", $uvsize bytes)"
10190 $echo "(NV will be "$nvtype", $nvsize bytes)"
10191
10192 $cat >try.c <<EOCP
10193 #$i_inttypes I_INTTYPES
10194 #ifdef I_INTTYPES
10195 #include <inttypes.h>
10196 #endif
10197 #include <stdio.h>
10198 int main() {
10199 #ifdef INT8
10200    int8_t i =  INT8_MAX;
10201   uint8_t u = UINT8_MAX;
10202   printf("int8_t\n");
10203 #endif
10204 #ifdef INT16
10205    int16_t i =  INT16_MAX;
10206   uint16_t i = UINT16_MAX;
10207   printf("int16_t\n");
10208 #endif
10209 #ifdef INT32
10210    int32_t i =  INT32_MAX;
10211   uint32_t u = UINT32_MAX;
10212   printf("int32_t\n");
10213 #endif
10214 }
10215 EOCP
10216
10217 case "$i8type" in
10218 '')     case "$charsize" in
10219         1)      i8type=char
10220                 u8type="unsigned char"
10221                 i8size=$charsize
10222                 u8size=$charsize
10223                 ;;
10224         esac
10225         ;;
10226 esac
10227 case "$i8type" in
10228 '')     set try -DINT8
10229         if eval $compile; then
10230                 case "`./try$exe_ext`" in
10231                 int8_t) i8type=int8_t
10232                         u8type=uint8_t
10233                         i8size=1
10234                         u8size=1
10235                         ;;
10236                 esac
10237         fi
10238         ;;
10239 esac
10240 case "$i8type" in
10241 '')     if $test $charsize -ge 1; then
10242                 i8type=char
10243                 u8type="unsigned char"
10244                 i8size=$charsize
10245                 u8size=$charsize
10246         fi
10247         ;;
10248 esac
10249
10250 case "$i16type" in
10251 '')     case "$shortsize" in
10252         2)      i16type=short
10253                 u16type="unsigned short"
10254                 i16size=$shortsize
10255                 u16size=$shortsize
10256                 ;;
10257         esac
10258         ;;
10259 esac
10260 case "$i16type" in
10261 '')     set try -DINT16
10262         if eval $compile; then
10263                 case "`./try$exe_ext`" in
10264                 int16_t)
10265                         i16type=int16_t
10266                         u16type=uint16_t
10267                         i16size=2
10268                         u16size=2
10269                         ;;
10270                 esac
10271         fi
10272         ;;
10273 esac
10274 case "$i16type" in
10275 '')     if $test $shortsize -ge 2; then
10276                 i16type=short
10277                 u16type="unsigned short"
10278                 i16size=$shortsize
10279                 u16size=$shortsize
10280         fi
10281         ;;
10282 esac
10283
10284 case "$i32type" in
10285 '')     case "$longsize" in
10286         4)      i32type=long
10287                 u32type="unsigned long"
10288                 i32size=$longsize
10289                 u32size=$longsize
10290                 ;;
10291         *)      case "$intsize" in
10292                 4)      i32type=int
10293                         u32type="unsigned int"
10294                         i32size=$intsize
10295                         u32size=$intsize
10296                         ;;
10297                 esac
10298                 ;;
10299         esac
10300         ;;
10301 esac
10302 case "$i32type" in
10303 '')     set try -DINT32
10304         if eval $compile; then
10305                 case "`./try$exe_ext`" in
10306                 int32_t)
10307                         i32type=int32_t
10308                         u32type=uint32_t
10309                         i32size=4
10310                         u32size=4
10311                         ;;
10312                 esac
10313         fi
10314         ;;
10315 esac
10316 case "$i32type" in
10317 '')     if $test $intsize -ge 4; then
10318                 i32type=int
10319                 u32type="unsigned int"
10320                 i32size=$intsize
10321                 u32size=$intsize
10322         fi
10323         ;;
10324 esac
10325
10326 case "$i64type" in
10327 '')     case "$d_quad:$quadtype" in
10328         define:?*)
10329                 i64type="$quadtype"
10330                 u64type="$uquadtype"
10331                 i64size=8
10332                 u64size=8
10333                 ;;
10334         esac
10335         ;;
10336 esac
10337
10338 $echo "Checking whether your NVs can preserve your UVs..." >&4
10339 $cat <<EOP >try.c
10340 #include <stdio.h>
10341 int main() {
10342     $uvtype k = ($uvtype)~0, l;
10343     $nvtype d;
10344     l = k;
10345     d = ($nvtype)l;
10346     l = ($uvtype)d;
10347     if (l == k)
10348        printf("preserve\n");
10349     exit(0);
10350 }
10351 EOP
10352 set try
10353 if eval $compile; then
10354         case "`./try$exe_ext`" in
10355         preserve) d_nv_preserves_uv="$define" ;;
10356         esac
10357 fi      
10358 case "$d_nv_preserves_uv" in
10359 $define) $echo "Yes, they can."  2>&1 ;;
10360 *)       $echo "No, they can't." 2>&1
10361          d_nv_preserves_uv="$undef"
10362          ;;
10363 esac
10364
10365 $rm -f try.* try
10366
10367 case "$d_nv_preserves_uv" in
10368 "$define") d_nv_preserves_uv_bits=`expr $uvsize \* 8` ;;
10369 *)      $echo "Checking how many bits of your UVs your NVs can preserve..." >&4
10370         $cat <<EOP >try.c
10371 #include <stdio.h>
10372 int main() {
10373     $uvtype u = 0;
10374     int     n = 8 * $uvsize;
10375     int     i;
10376     for (i = 0; i < n; i++) {
10377       u = u << 1 | ($uvtype)1;
10378       if (($uvtype)($nvtype)u != u)
10379         break;
10380     }
10381     printf("%d\n", i);
10382     exit(0);
10383 }
10384 EOP
10385         set try
10386         if eval $compile; then
10387                 d_nv_preserves_uv_bits="`./try$exe_ext`"
10388         fi
10389         case "$d_nv_preserves_uv_bits" in
10390         [1-9]*) $echo "Your NVs can preserve $d_nv_preserves_uv_bits bits of your UVs."  2>&1 ;;
10391         *)      $echo "Can't figure out how many bits your NVs preserve." 2>&1
10392                 d_nv_preserves_uv_bits="$undef"
10393                 ;;
10394         esac
10395         $rm -f try.* try
10396         ;;
10397 esac
10398
10399
10400
10401 : check for off64_t
10402 echo " "
10403 echo "Checking to see if you have off64_t..." >&4
10404 $cat >try.c <<EOCP
10405 #include <sys/types.h>
10406 #include <unistd.h>
10407 int main() { off64_t x = 7; }
10408 EOCP
10409 set try
10410 if eval $compile; then
10411         val="$define"
10412         echo "You have off64_t."
10413 else
10414         val="$undef"
10415         echo "You do not have off64_t."
10416         case "$lseeksize" in
10417         8) echo "(Your off_t is 64 bits, so you could use that.)" ;;
10418         esac
10419 fi
10420 $rm -f try.* try
10421 set d_off64_t
10422 eval $setvar
10423
10424 : see if POSIX threads are available
10425 set pthread.h i_pthread
10426 eval $inhdr
10427
10428
10429
10430
10431 : how to create joinable pthreads
10432 if test "X$usethreads" = "X$define" -a "X$i_pthread" = "X$define"; then
10433         echo " "
10434         echo "Checking what constant to use for creating joinable pthreads..." >&4 
10435         $cat >try.c <<'EOCP'
10436 #include <pthread.h>
10437 int main() {
10438     int detachstate = JOINABLE;
10439 }
10440 EOCP
10441         set try -DJOINABLE=PTHREAD_CREATE_JOINABLE
10442         if eval $compile; then
10443                 echo "You seem to use PTHREAD_CREATE_JOINABLE." >&4
10444                 val="$undef" # Yes, undef.
10445                 set d_old_pthread_create_joinable
10446                 eval $setvar
10447                 val=""
10448                 set old_pthread_create_joinable
10449                 eval $setvar
10450         else
10451                 set try -DJOINABLE=PTHREAD_CREATE_UNDETACHED
10452                 if eval $compile; then
10453                         echo "You seem to use PTHREAD_CREATE_UNDETACHED." >&4
10454                         val="$define"
10455                         set d_old_pthread_create_joinable
10456                         eval $setvar
10457                         val=PTHREAD_CREATE_UNDETACHED
10458                         set old_pthread_create_joinable
10459                         eval $setvar
10460                 else            
10461                         set try -DJOINABLE=__UNDETACHED
10462                         if eval $compile; then
10463                                 echo "You seem to use __UNDETACHED." >&4
10464                                 val="$define"
10465                                 set d_old_pthread_create_joinable
10466                                 eval $setvar
10467                                 val=__UNDETACHED
10468                                 set old_pthread_create_joinable
10469                                 eval $setvar
10470                         else
10471                                 echo "Egads, nothing obvious found.  Guessing that you use 0." >&4
10472                                 val="$define"
10473                                 set d_old_pthread_create_joinable
10474                                 eval $setvar
10475                                 val=0
10476                                 set old_pthread_create_joinable
10477                                 eval $setvar
10478                         fi
10479                 fi
10480         fi
10481         $rm -f try try.*
10482 else
10483     d_old_pthread_create_joinable="$undef"
10484     old_pthread_create_joinable=""
10485 fi
10486
10487 : see if pause exists
10488 set pause d_pause
10489 eval $inlibc
10490
10491 : see if pipe exists
10492 set pipe d_pipe
10493 eval $inlibc
10494
10495 : see if poll exists
10496 set poll d_poll
10497 eval $inlibc
10498
10499
10500 : see whether the various POSIXish _yields exist
10501 $cat >try.c <<EOP
10502 #include <pthread.h>
10503 #include <stdio.h>
10504 int main() {
10505 #ifdef SCHED_YIELD
10506         sched_yield();
10507 #else
10508 #ifdef PTHREAD_YIELD
10509         pthread_yield();
10510 #else
10511 #ifdef PTHREAD_YIELD_NULL
10512         pthread_yield(NULL);
10513 #endif
10514 #endif
10515 #endif
10516 }
10517 EOP
10518 : see if sched_yield exists
10519 set try -DSCHED_YIELD
10520 if eval $compile; then
10521     val="$define"
10522     sched_yield='sched_yield()'
10523 else
10524     val="$undef"
10525 fi
10526 case "$usethreads" in
10527 $define)
10528         case "$val" in
10529         $define) echo 'sched_yield() found.' >&4        ;;
10530         *)       echo 'sched_yield() NOT found.' >&4    ;;
10531         esac
10532 esac
10533 set d_sched_yield
10534 eval $setvar
10535
10536 : see if pthread_yield exists
10537 set try -DPTHREAD_YIELD
10538 if eval $compile; then
10539     val="$define"
10540     case "$sched_yield" in
10541     '') sched_yield='pthread_yield()' ;;
10542     esac
10543 else
10544     set try -DPTHREAD_YIELD_NULL
10545     if eval $compile; then
10546         val="$define"
10547         case "$sched_yield" in
10548         '') sched_yield='pthread_yield(NULL)' ;;
10549         esac
10550     else
10551         val="$undef"
10552     fi
10553 fi
10554 case "$usethreads" in
10555 $define)
10556         case "$val" in
10557         $define) echo 'pthread_yield() found.' >&4      ;;
10558         *)       echo 'pthread_yield() NOT found.' >&4  ;;
10559         esac
10560         ;;
10561 esac
10562 set d_pthread_yield
10563 eval $setvar
10564
10565 case "$sched_yield" in
10566 '') sched_yield=undef ;;
10567 esac
10568
10569 $rm -f try try.*
10570
10571 : see if this is a pwd.h system
10572 set pwd.h i_pwd
10573 eval $inhdr
10574
10575 case "$i_pwd" in
10576 $define)
10577         xxx=`./findhdr pwd.h`
10578         $cppstdin $cppflags $cppminus < $xxx >$$.h
10579
10580         if $contains 'pw_quota' $$.h >/dev/null 2>&1; then
10581                 val="$define"
10582         else
10583                 val="$undef"
10584         fi
10585         set d_pwquota
10586         eval $setvar
10587
10588         if $contains 'pw_age' $$.h >/dev/null 2>&1; then
10589                 val="$define"
10590         else
10591                 val="$undef"
10592         fi
10593         set d_pwage
10594         eval $setvar
10595
10596         if $contains 'pw_change' $$.h >/dev/null 2>&1; then
10597                 val="$define"
10598         else
10599                 val="$undef"
10600         fi
10601         set d_pwchange
10602         eval $setvar
10603
10604         if $contains 'pw_class' $$.h >/dev/null 2>&1; then
10605                 val="$define"
10606         else
10607                 val="$undef"
10608         fi
10609         set d_pwclass
10610         eval $setvar
10611
10612         if $contains 'pw_expire' $$.h >/dev/null 2>&1; then
10613                 val="$define"
10614         else
10615                 val="$undef"
10616         fi
10617         set d_pwexpire
10618         eval $setvar
10619
10620         if $contains 'pw_comment' $$.h >/dev/null 2>&1; then
10621                 val="$define"
10622         else
10623                 val="$undef"
10624         fi
10625         set d_pwcomment
10626         eval $setvar
10627
10628         if $contains 'pw_gecos' $$.h >/dev/null 2>&1; then
10629                 val="$define"
10630         else
10631                 val="$undef"
10632         fi
10633         set d_pwgecos
10634         eval $setvar
10635
10636         if $contains 'pw_passwd' $$.h >/dev/null 2>&1; then
10637                 val="$define"
10638         else
10639                 val="$undef"
10640         fi
10641         set d_pwpasswd
10642         eval $setvar
10643
10644         $rm -f $$.h
10645         ;;
10646 *)
10647         val="$undef"; 
10648         set d_pwquota; eval $setvar
10649         set d_pwage; eval $setvar
10650         set d_pwchange; eval $setvar
10651         set d_pwclass; eval $setvar
10652         set d_pwexpire; eval $setvar
10653         set d_pwcomment; eval $setvar
10654         set d_pwgecos; eval $setvar
10655         set d_pwpasswd; eval $setvar
10656         ;;
10657 esac
10658
10659 : see if readdir and friends exist
10660 set readdir d_readdir
10661 eval $inlibc
10662 set seekdir d_seekdir
10663 eval $inlibc
10664 set telldir d_telldir
10665 eval $inlibc
10666 set rewinddir d_rewinddir
10667 eval $inlibc
10668
10669 : see if readlink exists
10670 set readlink d_readlink
10671 eval $inlibc
10672
10673 : see if rename exists
10674 set rename d_rename
10675 eval $inlibc
10676
10677 : see if rmdir exists
10678 set rmdir d_rmdir
10679 eval $inlibc
10680
10681 : see if memory.h is available.
10682 val=''
10683 set memory.h val
10684 eval $inhdr
10685
10686 : See if it conflicts with string.h
10687 case "$val" in
10688 $define)
10689         case "$strings" in
10690         '') ;;
10691         *)
10692                 $cppstdin $cppflags $cppminus < $strings > mem.h
10693                 if $contains 'memcpy' mem.h >/dev/null 2>&1; then
10694                         echo " "
10695                         echo "We won't be including <memory.h>."
10696                         val="$undef"
10697                 fi
10698                 $rm -f mem.h
10699                 ;;
10700         esac
10701 esac
10702 set i_memory
10703 eval $setvar
10704
10705 : can bcopy handle overlapping blocks?
10706 val="$undef"
10707 case "$d_bcopy" in
10708 "$define")
10709         echo " "
10710         echo "Checking to see if your bcopy() can do overlapping copies..." >&4
10711         $cat >try.c <<EOCP
10712 #$i_memory I_MEMORY
10713 #$i_stdlib I_STDLIB
10714 #$i_string I_STRING
10715 #$i_unistd I_UNISTD
10716 EOCP
10717         $cat >>try.c <<'EOCP'
10718 #include <stdio.h>
10719 #ifdef I_MEMORY
10720 #  include <memory.h>
10721 #endif
10722 #ifdef I_STDLIB
10723 #  include <stdlib.h>
10724 #endif
10725 #ifdef I_STRING
10726 #  include <string.h>
10727 #else
10728 #  include <strings.h>
10729 #endif
10730 #ifdef I_UNISTD
10731 #  include <unistd.h>  /* Needed for NetBSD */
10732 #endif
10733 int main()
10734 {
10735 char buf[128], abc[128];
10736 char *b;
10737 int len;
10738 int off;
10739 int align;
10740
10741 bcopy("abcdefghijklmnopqrstuvwxyz0123456789", abc, 36);
10742
10743 for (align = 7; align >= 0; align--) {
10744         for (len = 36; len; len--) {
10745                 b = buf+align;
10746                 bcopy(abc, b, len);
10747                 for (off = 1; off <= len; off++) {
10748                         bcopy(b, b+off, len);
10749                         bcopy(b+off, b, len);
10750                         if (bcmp(b, abc, len))
10751                                 exit(1);
10752                 }
10753         }
10754 }
10755 exit(0);
10756 }
10757 EOCP
10758         set try
10759         if eval $compile_ok; then
10760                 if ./try 2>/dev/null; then
10761                         echo "Yes, it can."
10762                         val="$define"
10763                 else
10764                         echo "It can't, sorry."
10765                         case "$d_memmove" in
10766                         "$define") echo "But that's Ok since you have memmove()." ;;
10767                         esac
10768                 fi
10769         else
10770                 echo "(I can't compile the test program, so we'll assume not...)"
10771                 case "$d_memmove" in
10772                 "$define") echo "But that's Ok since you have memmove()." ;;
10773                 esac
10774         fi
10775         ;;
10776 esac
10777 $rm -f try.* try core
10778 set d_safebcpy
10779 eval $setvar
10780
10781 : can memcpy handle overlapping blocks?
10782 val="$undef"
10783 case "$d_memcpy" in
10784 "$define")
10785         echo " "
10786         echo "Checking to see if your memcpy() can do overlapping copies..." >&4
10787         $cat >try.c <<EOCP
10788 #$i_memory I_MEMORY
10789 #$i_stdlib I_STDLIB
10790 #$i_string I_STRING
10791 #$i_unistd I_UNISTD
10792 EOCP
10793         $cat >>try.c <<'EOCP'
10794 #include <stdio.h>
10795 #ifdef I_MEMORY
10796 #  include <memory.h>
10797 #endif
10798 #ifdef I_STDLIB
10799 #  include <stdlib.h>
10800 #endif
10801 #ifdef I_STRING
10802 #  include <string.h>
10803 #else
10804 #  include <strings.h>
10805 #endif
10806 #ifdef I_UNISTD
10807 #  include <unistd.h>  /* Needed for NetBSD */
10808 #endif
10809 int main()
10810 {
10811 char buf[128], abc[128];
10812 char *b;
10813 int len;
10814 int off;
10815 int align;
10816
10817 /* Copy "abcde..." string to char abc[] so that gcc doesn't
10818    try to store the string in read-only memory. */
10819 memcpy(abc, "abcdefghijklmnopqrstuvwxyz0123456789", 36);
10820
10821 for (align = 7; align >= 0; align--) {
10822         for (len = 36; len; len--) {
10823                 b = buf+align;
10824                 memcpy(b, abc, len);
10825                 for (off = 1; off <= len; off++) {
10826                         memcpy(b+off, b, len);
10827                         memcpy(b, b+off, len);
10828                         if (memcmp(b, abc, len))
10829                                 exit(1);
10830                 }
10831         }
10832 }
10833 exit(0);
10834 }
10835 EOCP
10836         set try
10837         if eval $compile_ok; then
10838                 if ./try 2>/dev/null; then
10839                         echo "Yes, it can."
10840                         val="$define"
10841                 else
10842                         echo "It can't, sorry."
10843                         case "$d_memmove" in
10844                         "$define") echo "But that's Ok since you have memmove()." ;;
10845                         esac
10846                 fi
10847         else
10848                 echo "(I can't compile the test program, so we'll assume not...)"
10849                 case "$d_memmove" in
10850                 "$define") echo "But that's Ok since you have memmove()." ;;
10851                 esac
10852         fi
10853         ;;
10854 esac
10855 $rm -f try.* try core
10856 set d_safemcpy
10857 eval $setvar
10858
10859 : can memcmp be trusted to compare relative magnitude?
10860 val="$undef"
10861 case "$d_memcmp" in
10862 "$define")
10863         echo " "
10864         echo "Checking if your memcmp() can compare relative magnitude..." >&4
10865         $cat >try.c <<EOCP
10866 #$i_memory I_MEMORY
10867 #$i_stdlib I_STDLIB
10868 #$i_string I_STRING
10869 #$i_unistd I_UNISTD
10870 EOCP
10871         $cat >>try.c <<'EOCP'
10872 #include <stdio.h>
10873 #ifdef I_MEMORY
10874 #  include <memory.h>
10875 #endif
10876 #ifdef I_STDLIB
10877 #  include <stdlib.h>
10878 #endif
10879 #ifdef I_STRING
10880 #  include <string.h>
10881 #else
10882 #  include <strings.h>
10883 #endif
10884 #ifdef I_UNISTD
10885 #  include <unistd.h>  /* Needed for NetBSD */
10886 #endif
10887 int main()
10888 {
10889 char a = -1;
10890 char b = 0;
10891 if ((a < b) && memcmp(&a, &b, 1) < 0)
10892         exit(1);
10893 exit(0);
10894 }
10895 EOCP
10896         set try
10897         if eval $compile_ok; then
10898                 if ./try 2>/dev/null; then
10899                         echo "Yes, it can."
10900                         val="$define"
10901                 else
10902                         echo "No, it can't (it uses signed chars)."
10903                 fi
10904         else
10905                 echo "(I can't compile the test program, so we'll assume not...)"
10906         fi
10907         ;;
10908 esac
10909 $rm -f try.* try core
10910 set d_sanemcmp
10911 eval $setvar
10912
10913 : see if select exists
10914 set select d_select
10915 eval $inlibc
10916
10917 : see if semctl exists
10918 set semctl d_semctl
10919 eval $inlibc
10920
10921 : see if semget exists
10922 set semget d_semget
10923 eval $inlibc
10924
10925 : see if semop exists
10926 set semop d_semop
10927 eval $inlibc
10928
10929 : see how much of the 'sem*(2)' library is present.
10930 h_sem=true
10931 echo " "
10932 case "$d_semctl$d_semget$d_semop" in
10933 *"$undef"*) h_sem=false;;
10934 esac
10935 case "$osname" in
10936 freebsd)
10937     case "`ipcs 2>&1`" in
10938     "SVID messages"*"not configured"*)
10939         echo "Your $osname does not have the sem*(2) configured." >&4
10940         h_sem=false
10941         val="$undef"
10942         set semctl d_semctl
10943         eval $setvar
10944         set semget d_semget
10945         eval $setvar
10946         set semop d_semop
10947         eval $setvar
10948         ;;
10949     esac
10950     ;;
10951 esac
10952 : we could also check for sys/ipc.h ...
10953 if $h_sem && $test `./findhdr sys/sem.h`; then
10954         echo "You have the full sem*(2) library." >&4
10955         val="$define"
10956 else
10957         echo "You don't have the full sem*(2) library." >&4
10958         val="$undef"
10959 fi
10960 set d_sem
10961 eval $setvar
10962
10963 : see whether sys/sem.h defines union semun
10964 echo " "
10965 $cat > try.c <<'END'
10966 #include <sys/types.h>
10967 #include <sys/ipc.h>
10968 #include <sys/sem.h>
10969 int main () { union semun semun; semun.buf = 0; }
10970 END
10971 set try
10972 if eval $compile; then
10973     echo "You have union semun in <sys/sem.h>." >&4
10974     val="$define"
10975 else
10976     echo "You do not have union semun in <sys/sem.h>." >&4
10977     val="$undef"
10978 fi
10979 $rm -f try try.c try.h
10980 set d_union_semun
10981 eval $setvar
10982
10983 : see how to do semctl IPC_STAT
10984 case "$d_sem" in
10985 $define)
10986     : see whether semctl IPC_STAT can use union semun
10987     echo " "
10988     $cat > try.h <<END
10989 #ifndef S_IRUSR
10990 #   ifdef S_IREAD
10991 #       define S_IRUSR S_IREAD
10992 #       define S_IWUSR S_IWRITE
10993 #       define S_IXUSR S_IEXEC
10994 #   else
10995 #       define S_IRUSR 0400
10996 #       define S_IWUSR 0200
10997 #       define S_IXUSR 0100
10998 #   endif
10999 #   define S_IRGRP (S_IRUSR>>3)
11000 #   define S_IWGRP (S_IWUSR>>3)
11001 #   define S_IXGRP (S_IXUSR>>3)
11002 #   define S_IROTH (S_IRUSR>>6)
11003 #   define S_IWOTH (S_IWUSR>>6)
11004 #   define S_IXOTH (S_IXUSR>>6)
11005 #endif
11006 #ifndef S_IRWXU
11007 #   define S_IRWXU (S_IRUSR|S_IWUSR|S_IXUSR)
11008 #   define S_IRWXG (S_IRGRP|S_IWGRP|S_IXGRP)
11009 #   define S_IRWXO (S_IROTH|S_IWOTH|S_IXOTH)
11010 #endif
11011 END
11012
11013     $cat > try.c <<END
11014 #include <sys/types.h>
11015 #include <sys/ipc.h>
11016 #include <sys/sem.h>
11017 #include <sys/stat.h>
11018 #include <stdio.h>
11019 #include <errno.h>
11020 #include "try.h"
11021 #ifndef errno
11022 extern int errno;
11023 #endif
11024 #$d_union_semun HAS_UNION_SEMUN
11025 int main() {
11026     union semun
11027 #ifndef HAS_UNION_SEMUN
11028     {
11029         int val;
11030         struct semid_ds *buf;
11031         unsigned short *array;
11032     }
11033 #endif
11034     arg;
11035     int sem, st;
11036
11037 #if defined(IPC_PRIVATE) && defined(S_IRWXU) && defined(S_IRWXG) && defined(S_IRWXO) && defined(IPC_CREAT)
11038     sem = semget(IPC_PRIVATE, 1, S_IRWXU|S_IRWXG|S_IRWXO|IPC_CREAT);
11039     if (sem > -1) {
11040         struct semid_ds argbuf;
11041         arg.buf = &argbuf;
11042 #       ifdef IPC_STAT
11043         st = semctl(sem, 0, IPC_STAT, arg);
11044         if (st == 0)
11045             printf("semun\n");
11046         else
11047 #       endif /* IPC_STAT */
11048             printf("semctl IPC_STAT failed: errno = %d\n", errno);
11049 #       ifdef IPC_RMID
11050         if (semctl(sem, 0, IPC_RMID, arg) != 0)
11051 #       endif /* IPC_RMID */
11052             printf("semctl IPC_RMID failed: errno = %d\n", errno);
11053     } else
11054 #endif /* IPC_PRIVATE && ... */
11055         printf("semget failed: errno = %d\n", errno);
11056   return 0;
11057 }
11058 END
11059     val="$undef"
11060     set try
11061     if eval $compile; then
11062         xxx=`./try`
11063         case "$xxx" in
11064         semun) val="$define" ;;
11065         esac
11066     fi
11067     $rm -f try try.c
11068     set d_semctl_semun
11069     eval $setvar
11070     case "$d_semctl_semun" in
11071     $define)
11072         echo "You can use union semun for semctl IPC_STAT." >&4
11073         also='also'
11074         ;;
11075     *)  echo "You cannot use union semun for semctl IPC_STAT." >&4
11076         also=''
11077         ;;
11078     esac
11079
11080     : see whether semctl IPC_STAT can use struct semid_ds pointer
11081     $cat > try.c <<'END'
11082 #include <sys/types.h>
11083 #include <sys/ipc.h>
11084 #include <sys/sem.h>
11085 #include <sys/stat.h>
11086 #include "try.h"
11087 #include <stdio.h>
11088 #include <errno.h>
11089 #ifndef errno
11090 extern int errno;
11091 #endif
11092 int main() {
11093     struct semid_ds arg;
11094     int sem, st;
11095
11096 #if defined(IPC_PRIVATE) && defined(S_IRWXU) && defined(S_IRWXG) &&  defined(S_IRWXO) && defined(IPC_CREAT)
11097     sem = semget(IPC_PRIVATE, 1, S_IRWXU|S_IRWXG|S_IRWXO|IPC_CREAT);
11098     if (sem > -1) {
11099 #       ifdef IPC_STAT
11100         st = semctl(sem, 0, IPC_STAT, &arg);
11101         if (st == 0)
11102             printf("semid_ds\n");
11103         else
11104 #       endif /* IPC_STAT */
11105             printf("semctl IPC_STAT failed: errno = %d\n", errno);
11106 #       ifdef IPC_RMID
11107         if (semctl(sem, 0, IPC_RMID, &arg) != 0)
11108 #       endif /* IPC_RMID */
11109             printf("semctl IPC_RMID failed: errno = %d\n", errno);
11110     } else
11111 #endif /* IPC_PRIVATE && ... */
11112         printf("semget failed: errno = %d\n", errno);
11113
11114     return 0;
11115 }
11116 END
11117     val="$undef"
11118     set try
11119     if eval $compile; then
11120         xxx=`./try`
11121         case "$xxx" in
11122         semid_ds) val="$define" ;;
11123         esac
11124     fi
11125     $rm -f try try.c
11126     set d_semctl_semid_ds
11127     eval $setvar
11128     case "$d_semctl_semid_ds" in
11129     $define)
11130         echo "You can $also use struct semid_ds* for semctl IPC_STAT." >&4
11131         ;;
11132     *)  echo "You cannot use struct semid_ds* for semctl IPC_STAT." >&4
11133         ;;
11134     esac
11135     $rm -f try.h
11136     ;;
11137 *)  val="$undef"
11138
11139     # We do not have the full sem*(2) library, so assume we can not
11140     # use either.
11141
11142     set d_semctl_semun
11143     eval $setvar
11144
11145     set d_semctl_semid_ds
11146     eval $setvar
11147     ;;
11148 esac
11149
11150 : see if setegid exists
11151 set setegid d_setegid
11152 eval $inlibc
11153
11154 : see if seteuid exists
11155 set seteuid d_seteuid
11156 eval $inlibc
11157
11158 : see if setgrent exists
11159 set setgrent d_setgrent
11160 eval $inlibc
11161
11162 : see if sethostent exists
11163 set sethostent d_sethent
11164 eval $inlibc
11165
11166 : see if setlinebuf exists
11167 set setlinebuf d_setlinebuf
11168 eval $inlibc
11169
11170 : see if setlocale exists
11171 set setlocale d_setlocale
11172 eval $inlibc
11173
11174 : see if setnetent exists
11175 set setnetent d_setnent
11176 eval $inlibc
11177
11178 : see if setprotoent exists
11179 set setprotoent d_setpent
11180 eval $inlibc
11181
11182 : see if setpgid exists
11183 set setpgid d_setpgid
11184 eval $inlibc
11185
11186 : see if setpgrp2 exists
11187 set setpgrp2 d_setpgrp2
11188 eval $inlibc
11189
11190 : see if setpriority exists
11191 set setpriority d_setprior
11192 eval $inlibc
11193
11194 : see if setproctitle exists
11195 set setproctitle d_setproctitle
11196 eval $inlibc
11197
11198 : see if setpwent exists
11199 set setpwent d_setpwent
11200 eval $inlibc
11201
11202 : see if setregid exists
11203 set setregid d_setregid
11204 eval $inlibc
11205 set setresgid d_setresgid
11206 eval $inlibc
11207
11208 : see if setreuid exists
11209 set setreuid d_setreuid
11210 eval $inlibc
11211 set setresuid d_setresuid
11212 eval $inlibc
11213
11214 : see if setrgid exists
11215 set setrgid d_setrgid
11216 eval $inlibc
11217
11218 : see if setruid exists
11219 set setruid d_setruid
11220 eval $inlibc
11221
11222 : see if setservent exists
11223 set setservent d_setsent
11224 eval $inlibc
11225
11226 : see if setsid exists
11227 set setsid d_setsid
11228 eval $inlibc
11229
11230 : see if setvbuf exists
11231 set setvbuf d_setvbuf
11232 eval $inlibc
11233
11234 : see if sfio.h is available
11235 set sfio.h i_sfio
11236 eval $inhdr
11237
11238
11239 : see if sfio library is available
11240 case "$i_sfio" in
11241 $define)
11242         val=''
11243         set sfreserve val
11244         eval $inlibc
11245         ;;
11246 *)
11247         val="$undef"
11248         ;;
11249 esac
11250 : Ok, but do we want to use it.
11251 case "$val" in
11252 $define)
11253         case "$usesfio" in
11254         true|$define|[yY]*) dflt='y';;
11255         *) dflt='n';;
11256         esac
11257         echo "$package can use the sfio library, but it is experimental."
11258         rp="You seem to have sfio available, do you want to try using it?"
11259         . ./myread
11260         case "$ans" in
11261         y|Y) ;;
11262         *)      echo "Ok, avoiding sfio this time.  I'll use stdio instead."
11263                 val="$undef"
11264                 : Remove sfio from list of libraries to use
11265                 set `echo X $libs | $sed -e 's/-lsfio / /' -e 's/-lsfio$//'`
11266                 shift
11267                 libs="$*"
11268                 echo "libs = $libs" >&4
11269                 ;;
11270         esac
11271         ;;
11272 *)      case "$usesfio" in
11273         true|$define|[yY]*)
11274                 echo "Sorry, cannot find sfio on this machine" >&4
11275                 echo "Ignoring your setting of usesfio=$usesfio" >&4
11276                 ;;
11277         esac
11278         ;;
11279 esac
11280 set d_sfio
11281 eval $setvar
11282 case "$d_sfio" in
11283 $define) usesfio='true';;
11284 *) usesfio='false';;
11285 esac
11286
11287 : see if shmctl exists
11288 set shmctl d_shmctl
11289 eval $inlibc
11290
11291 : see if shmget exists
11292 set shmget d_shmget
11293 eval $inlibc
11294
11295 : see if shmat exists
11296 set shmat d_shmat
11297 eval $inlibc
11298 : see what shmat returns
11299 case "$d_shmat" in
11300 "$define")
11301         $cat >shmat.c <<'END'
11302 #include <sys/shm.h>
11303 void *shmat();
11304 END
11305         if $cc $ccflags -c shmat.c >/dev/null 2>&1; then
11306                 shmattype='void *'
11307         else
11308                 shmattype='char *'
11309         fi
11310         echo "and it returns ($shmattype)." >&4
11311         : see if a prototype for shmat is available
11312         xxx=`./findhdr sys/shm.h`
11313         $cppstdin $cppflags $cppminus < $xxx > shmat.c 2>/dev/null
11314         if $contains 'shmat.*(' shmat.c >/dev/null 2>&1; then
11315                 val="$define"
11316         else
11317                 val="$undef"
11318         fi
11319         $rm -f shmat.[co]
11320         ;;
11321 *)
11322         val="$undef"
11323         ;;
11324 esac
11325 set d_shmatprototype
11326 eval $setvar
11327
11328 : see if shmdt exists
11329 set shmdt d_shmdt
11330 eval $inlibc
11331
11332 : see how much of the 'shm*(2)' library is present.
11333 h_shm=true
11334 echo " "
11335 case "$d_shmctl$d_shmget$d_shmat$d_shmdt" in
11336 *"$undef"*) h_shm=false;;
11337 esac
11338 case "$osname" in
11339 freebsd)
11340     case "`ipcs 2>&1`" in
11341     "SVID shared memory"*"not configured"*)
11342         echo "Your $osname does not have the shm*(2) configured." >&4
11343         h_shm=false
11344         val="$undef"
11345         set shmctl d_shmctl
11346         evat $setvar
11347         set shmget d_shmget
11348         evat $setvar
11349         set shmat d_shmat
11350         evat $setvar
11351         set shmdt d_shmdt
11352         evat $setvar
11353         ;;
11354     esac
11355     ;;
11356 esac
11357 : we could also check for sys/ipc.h ...
11358 if $h_shm && $test `./findhdr sys/shm.h`; then
11359         echo "You have the full shm*(2) library." >&4
11360         val="$define"
11361 else
11362         echo "You don't have the full shm*(2) library." >&4
11363         val="$undef"
11364 fi
11365 set d_shm
11366 eval $setvar
11367
11368 echo " "
11369 : see if we have sigaction
11370 if set sigaction val -f d_sigaction; eval $csym; $val; then
11371         echo 'sigaction() found.' >&4
11372         $cat > try.c <<'EOP'
11373 #include <stdio.h>
11374 #include <sys/types.h>
11375 #include <signal.h>
11376 int main()
11377 {
11378     struct sigaction act, oact;
11379     act.sa_flags = 0;
11380     oact.sa_handler = 0;
11381     /* so that act and oact are used */
11382     exit(act.sa_flags == 0 &&  oact.sa_handler == 0);
11383 }
11384 EOP
11385         set try
11386         if eval $compile_ok; then
11387                 val="$define"
11388         else
11389                 echo "But you don't seem to have a useable struct sigaction." >&4
11390                 val="$undef"
11391         fi
11392 else
11393         echo 'sigaction NOT found.' >&4
11394         val="$undef"
11395 fi
11396 set d_sigaction; eval $setvar
11397 $rm -f try try$_o try.c
11398
11399 : see if sigsetjmp exists
11400 echo " "
11401 case "$d_sigsetjmp" in
11402 '')
11403         $cat >try.c <<'EOP'
11404 #include <setjmp.h>
11405 sigjmp_buf env;
11406 int set = 1;
11407 int main()
11408 {
11409         if (sigsetjmp(env,1))
11410                 exit(set);
11411         set = 0;
11412         siglongjmp(env, 1);
11413         exit(1);
11414 }
11415 EOP
11416         set try
11417         if eval $compile; then
11418                 if ./try >/dev/null 2>&1; then
11419                         echo "POSIX sigsetjmp found." >&4
11420                         val="$define"
11421                 else
11422                         $cat >&4 <<EOM
11423 Uh-Oh! You have POSIX sigsetjmp and siglongjmp, but they do not work properly!!
11424 I'll ignore them.
11425 EOM
11426                         val="$undef"
11427                 fi
11428         else
11429                 echo "sigsetjmp not found." >&4
11430                 val="$undef"
11431         fi
11432         ;;
11433 *) val="$d_sigsetjmp"
11434         case "$d_sigsetjmp" in
11435         $define) echo "POSIX sigsetjmp found." >&4;;
11436         $undef) echo "sigsetjmp not found." >&4;;
11437         esac
11438         ;;
11439 esac
11440 set d_sigsetjmp
11441 eval $setvar
11442 $rm -f try.c try
11443
11444 : see if sys/stat.h is available
11445 set sys/stat.h i_sysstat
11446 eval $inhdr
11447
11448
11449 : see if stat knows about block sizes
11450 echo " "
11451 echo "Checking to see if your struct stat has st_blocks field..." >&4
11452 set d_statblks stat st_blocks $i_sysstat sys/stat.h
11453 eval $hasfield
11454
11455
11456 : see if this is a sys/vfs.h system
11457 set sys/vfs.h i_sysvfs
11458 eval $inhdr
11459
11460
11461 : see if this is a sys/statfs.h system
11462 set sys/statfs.h i_sysstatfs
11463 eval $inhdr
11464
11465
11466 echo " "
11467 echo "Checking to see if your system supports struct statfs..." >&4
11468 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
11469 eval $hasstruct
11470 case "$d_statfs_s" in
11471 "$define")      echo "Yes, it does."   ;;
11472 *)              echo "No, it doesn't." ;;
11473 esac
11474
11475
11476
11477 : see if struct statfs knows about f_flags
11478 case "$d_statfs_s" in
11479 define) 
11480         echo " "
11481         echo "Checking to see if your struct statfs has f_flags field..." >&4
11482         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
11483         eval $hasfield
11484         ;;
11485 *)      val="$undef"
11486         set d_statfs_f_flags
11487         eval $setvar
11488         ;;
11489 esac
11490 case "$d_statfs_f_flags" in
11491 "$define")      echo "Yes, it does."   ;;
11492 *)              echo "No, it doesn't." ;;
11493 esac
11494
11495 : see if _ptr and _cnt from stdio act std
11496 echo " "
11497 if $contains '_IO_fpos_t' `./findhdr stdio.h` `./findhdr libio.h` >/dev/null 2>&1 ; then
11498         echo "(Looks like you have stdio.h from Linux.)"
11499         case "$stdio_ptr" in
11500         '') stdio_ptr='((fp)->_IO_read_ptr)'
11501                 ptr_lval=$define
11502                 ;;
11503         *)      ptr_lval=$d_stdio_ptr_lval;;
11504         esac
11505         case "$stdio_cnt" in
11506         '') stdio_cnt='((fp)->_IO_read_end - (fp)->_IO_read_ptr)'
11507                 cnt_lval=$undef
11508                 ;;
11509         *)      cnt_lval=$d_stdio_cnt_lval;;
11510         esac
11511         case "$stdio_base" in
11512         '') stdio_base='((fp)->_IO_read_base)';;
11513         esac
11514         case "$stdio_bufsiz" in
11515         '') stdio_bufsiz='((fp)->_IO_read_end - (fp)->_IO_read_base)';;
11516         esac
11517 else
11518         case "$stdio_ptr" in
11519         '') stdio_ptr='((fp)->_ptr)'
11520                 ptr_lval=$define
11521                 ;;
11522         *)      ptr_lval=$d_stdio_ptr_lval;;
11523         esac
11524         case "$stdio_cnt" in
11525         '') stdio_cnt='((fp)->_cnt)'
11526                 cnt_lval=$define
11527                 ;;
11528         *)      cnt_lval=$d_stdio_cnt_lval;;
11529         esac
11530         case "$stdio_base" in
11531         '') stdio_base='((fp)->_base)';;
11532         esac
11533         case "$stdio_bufsiz" in
11534         '') stdio_bufsiz='((fp)->_cnt + (fp)->_ptr - (fp)->_base)';;
11535         esac
11536 fi
11537 : test whether _ptr and _cnt really work
11538 echo "Checking how std your stdio is..." >&4
11539 $cat >try.c <<EOP
11540 #include <stdio.h>
11541 #define FILE_ptr(fp)    $stdio_ptr
11542 #define FILE_cnt(fp)    $stdio_cnt
11543 int main() {
11544         FILE *fp = fopen("try.c", "r");
11545         char c = getc(fp);
11546         if (
11547                 18 <= FILE_cnt(fp) &&
11548                 strncmp(FILE_ptr(fp), "include <stdio.h>\n", 18) == 0
11549         )
11550                 exit(0);
11551         exit(1);
11552 }
11553 EOP
11554 val="$undef"
11555 set try
11556 if eval $compile; then
11557         if ./try; then
11558                 echo "Your stdio acts pretty std."
11559                 val="$define"
11560         else
11561                 echo "Your stdio isn't very std."
11562         fi
11563 else
11564         echo "Your stdio doesn't appear very std."
11565 fi
11566 $rm -f try.c try
11567 set d_stdstdio
11568 eval $setvar
11569
11570 : Can _ptr be used as an lvalue?
11571 case "$d_stdstdio$ptr_lval" in
11572 $define$define) val=$define ;;
11573 *) val=$undef ;;
11574 esac
11575 set d_stdio_ptr_lval
11576 eval $setvar
11577
11578 : Can _cnt be used as an lvalue?
11579 case "$d_stdstdio$cnt_lval" in
11580 $define$define) val=$define ;;
11581 *) val=$undef ;;
11582 esac
11583 set d_stdio_cnt_lval
11584 eval $setvar
11585
11586 : see if _base is also standard
11587 val="$undef"
11588 case "$d_stdstdio" in
11589 $define)
11590         $cat >try.c <<EOP
11591 #include <stdio.h>
11592 #define FILE_base(fp)   $stdio_base
11593 #define FILE_bufsiz(fp) $stdio_bufsiz
11594 int main() {
11595         FILE *fp = fopen("try.c", "r");
11596         char c = getc(fp);
11597         if (
11598                 19 <= FILE_bufsiz(fp) &&
11599                 strncmp(FILE_base(fp), "#include <stdio.h>\n", 19) == 0
11600         )
11601                 exit(0);
11602         exit(1);
11603 }
11604 EOP
11605         set try
11606         if eval $compile; then
11607                 if ./try; then
11608                         echo "And its _base field acts std."
11609                         val="$define"
11610                 else
11611                         echo "But its _base field isn't std."
11612                 fi
11613         else
11614                 echo "However, it seems to be lacking the _base field."
11615         fi
11616         $rm -f try.c try
11617         ;;
11618 esac
11619 set d_stdiobase
11620 eval $setvar
11621
11622 $cat >&4 <<EOM
11623 Checking how to access stdio streams by file descriptor number...
11624 EOM
11625 case "$stdio_stream_array" in
11626 '')     $cat >try.c <<EOCP
11627 #include <stdio.h>
11628 int main() {
11629   if (&STDIO_STREAM_ARRAY[fileno(stdin)] == stdin)
11630     printf("yes\n");
11631 }
11632 EOCP
11633         for s in _iob __iob __sF
11634         do
11635                 set try -DSTDIO_STREAM_ARRAY=$s
11636                 if eval $compile; then
11637                         case "`./try$exe_ext`" in
11638                         yes)    stdio_stream_array=$s; break ;;
11639                         esac
11640                 fi
11641         done
11642         $rm -f try.* try$exe_ext
11643 esac
11644 case "$stdio_stream_array" in
11645 '')     $cat >&4 <<EOM
11646 I can't figure out how to access stdio streams by file descriptor number.
11647 EOM
11648         d_stdio_stream_array="$undef"
11649         ;;
11650 *)      $cat >&4 <<EOM
11651 You can access stdio streams by file descriptor number by the $stdio_stream_array array.
11652 EOM
11653         d_stdio_stream_array="$define"
11654         ;;
11655 esac
11656
11657 : see if strcoll exists
11658 set strcoll d_strcoll
11659 eval $inlibc
11660
11661 : check for structure copying
11662 echo " "
11663 echo "Checking to see if your C compiler can copy structs..." >&4
11664 $cat >try.c <<'EOCP'
11665 int main()
11666 {
11667         struct blurfl {
11668                 int dyick;
11669         } foo, bar;
11670
11671         foo = bar;
11672 }
11673 EOCP
11674 if $cc -c try.c >/dev/null 2>&1 ; then
11675         val="$define"
11676         echo "Yup, it can."
11677 else
11678         val="$undef"
11679         echo "Nope, it can't."
11680 fi
11681 set d_strctcpy
11682 eval $setvar
11683 $rm -f try.*
11684
11685 : see if strerror and/or sys_errlist[] exist
11686 echo " "
11687 if test "X$d_strerror" = X -o "X$d_syserrlst" = X; then
11688     if set strerror val -f d_strerror; eval $csym; $val; then
11689                 echo 'strerror() found.' >&4
11690                 d_strerror="$define"
11691                 d_strerrm='strerror(e)'
11692                 if set sys_errlist val -a d_syserrlst; eval $csym; $val; then   
11693                         echo "(You also have sys_errlist[], so we could roll our own strerror.)" 
11694                         d_syserrlst="$define"
11695                 else
11696                         echo "(Since you don't have sys_errlist[], sterror() is welcome.)"
11697                         d_syserrlst="$undef"
11698                 fi
11699     elif xxx=`./findhdr string.h`; test "$xxx" || xxx=`./findhdr strings.h`; \
11700                         $contains '#[   ]*define.*strerror' "$xxx" >/dev/null 2>&1; then
11701                 echo 'strerror() found in string header.' >&4
11702                 d_strerror="$define"
11703                 d_strerrm='strerror(e)'
11704                 if set sys_errlist val -a d_syserrlst; eval $csym; $val; then   
11705                         echo "(Most probably, strerror() uses sys_errlist[] for descriptions.)"
11706                                 d_syserrlst="$define"
11707                 else
11708                         echo "(You don't appear to have any sys_errlist[], how can this be?)"
11709                         d_syserrlst="$undef"
11710                 fi
11711     elif set sys_errlist val -a d_syserrlst; eval $csym; $val; then
11712                 echo "strerror() not found, but you have sys_errlist[] so we'll use that." >&4
11713                 d_strerror="$undef"
11714                 d_syserrlst="$define"
11715                 d_strerrm='((e)<0||(e)>=sys_nerr?"unknown":sys_errlist[e])'
11716     else
11717                 echo 'strerror() and sys_errlist[] NOT found.' >&4
11718                 d_strerror="$undef"
11719                 d_syserrlst="$undef"
11720                 d_strerrm='"unknown"'
11721     fi
11722 fi
11723
11724 : see if strtod exists
11725 set strtod d_strtod
11726 eval $inlibc
11727
11728 : see if strtol exists
11729 set strtol d_strtol
11730 eval $inlibc
11731
11732 : see if strtold exists
11733 set strtold d_strtold
11734 eval $inlibc
11735
11736 : see if strtoll exists
11737 set strtoll d_strtoll
11738 eval $inlibc
11739
11740 case "$d_longlong-$d_strtoll" in
11741 "$define-$define")
11742         $cat <<EOM
11743 Checking whether your strtoll() works okay...
11744 EOM
11745         $cat >try.c <<'EOCP'
11746 #include <errno.h>
11747 #ifdef __hpux
11748 #define strtoll __strtoll
11749 #endif
11750 #include <stdio.h>
11751 extern long long int strtoll(char *s, char **, int); 
11752 static int bad = 0;
11753 int check(char *s, long long ell, int een) {
11754         long long gll;
11755         errno = 0;
11756         gll = strtoll(s, 0, 10);
11757         if (!((gll == ell) && (errno == een)))
11758                 bad++;
11759 }
11760 int main() {
11761         check(" 1",                                      1LL, 0);
11762         check(" 0",                                      0LL, 0);
11763         check("-1",                                     -1LL, 0);
11764         check("-9223372036854775808", -9223372036854775808LL, 0);
11765         check("-9223372036854775808", -9223372036854775808LL, 0);
11766         check(" 9223372036854775807",  9223372036854775807LL, 0);
11767         check("-9223372036854775808", -9223372036854775808LL, 0);
11768         check(" 9223372036854775808",  9223372036854775807LL, ERANGE);
11769         check("-9223372036854775809", -9223372036854775808LL, ERANGE);
11770         if (!bad)
11771                 printf("ok\n");
11772 }
11773 EOCP
11774         set try
11775         if eval $compile; then
11776                 case "`./try`" in
11777                 ok) echo "Your strtoll() seems to be working okay." ;;
11778                 *) cat <<EOM >&4
11779 Your strtoll() doesn't seem to be working okay.
11780 EOM
11781                    d_strtoll="$undef"
11782                    ;;
11783                 esac
11784         fi
11785         ;;
11786 esac
11787
11788 : see if strtoul exists
11789 set strtoul d_strtoul
11790 eval $inlibc
11791
11792 : see if strtoull exists
11793 set strtoull d_strtoull
11794 eval $inlibc
11795
11796 case "$d_longlong-$d_strtoull" in
11797 "$define-$define")
11798         $cat <<EOM
11799 Checking whether your strtoull() works okay...
11800 EOM
11801         $cat >try.c <<'EOCP'
11802 #include <errno.h>
11803 #ifdef __hpux
11804 #define strtoull __strtoull
11805 #endif
11806 #include <stdio.h>
11807 extern unsigned long long int strtoull(char *s, char **, int); 
11808 static int bad = 0;
11809 int check(char *s, long long eull, int een) {
11810         long long gull;
11811         errno = 0;
11812         gull = strtoull(s, 0, 10);
11813         if (!((gull == eull) && (errno == een)))
11814                 bad++;
11815 }
11816 int main() {
11817         check(" 1",                                       1LL, 0);
11818         check(" 0",                                       0LL, 0);
11819         check("18446744073709551615", 18446744073709551615ULL, 0);
11820         check("18446744073709551616", 18446744073709551615ULL, ERANGE);
11821         if (!bad)
11822                 printf("ok\n");
11823 }
11824 EOCP
11825         set try
11826         if eval $compile; then
11827                 case "`./try`" in
11828                 ok) echo "Your strtoull() seems to be working okay." ;;
11829                 *) cat <<EOM >&4
11830 Your strtoull() doesn't seem to be working okay.
11831 EOM
11832                    d_strtoull="$undef"
11833                    ;;
11834                 esac
11835         fi
11836         ;;
11837 esac
11838
11839 : see if strtouq exists
11840 set strtouq d_strtouq
11841 eval $inlibc
11842
11843 : see if strxfrm exists
11844 set strxfrm d_strxfrm
11845 eval $inlibc
11846
11847 : see if symlink exists
11848 set symlink d_symlink
11849 eval $inlibc
11850
11851 : see if syscall exists
11852 set syscall d_syscall
11853 eval $inlibc
11854
11855 : see if sysconf exists
11856 set sysconf d_sysconf
11857 eval $inlibc
11858
11859 : see if system exists
11860 set system d_system
11861 eval $inlibc
11862
11863 : see if tcgetpgrp exists
11864 set tcgetpgrp d_tcgetpgrp
11865 eval $inlibc
11866
11867 : see if tcsetpgrp exists
11868 set tcsetpgrp d_tcsetpgrp
11869 eval $inlibc
11870
11871 : see if prototype for telldir is available
11872 echo " "
11873 set d_telldirproto telldir $i_systypes sys/types.h $i_dirent dirent.h
11874 eval $hasproto
11875
11876 : see if this is a sys/times.h system
11877 set sys/times.h i_systimes
11878 eval $inhdr
11879
11880 : see if times exists
11881 echo " "
11882 if set times val -f d_times; eval $csym; $val; then
11883         echo 'times() found.' >&4
11884         d_times="$define"
11885         inc=''
11886         case "$i_systimes" in
11887         "$define") inc='sys/times.h';;
11888         esac
11889         rp="What is the type returned by times() on this system?"
11890         set clock_t clocktype long stdio.h sys/types.h $inc
11891         eval $typedef_ask
11892 else
11893         echo 'times() NOT found, hope that will do.' >&4
11894         d_times="$undef"
11895         clocktype='int'
11896 fi
11897
11898 : see if truncate exists
11899 set truncate d_truncate
11900 eval $inlibc
11901
11902 : see if tzname[] exists
11903 echo " "
11904 if set tzname val -a d_tzname; eval $csym; $val; then
11905         val="$define"
11906         echo 'tzname[] found.' >&4
11907 else
11908         val="$undef"
11909         echo 'tzname[] NOT found.' >&4
11910 fi
11911 set d_tzname
11912 eval $setvar
11913
11914 : see if umask exists
11915 set umask d_umask
11916 eval $inlibc
11917
11918 : see if ustat exists
11919 set ustat d_ustat
11920 eval $inlibc
11921
11922 : backward compatibility for d_hvfork
11923 if test X$d_hvfork != X; then
11924         d_vfork="$d_hvfork"
11925         d_hvfork=''
11926 fi
11927 : see if there is a vfork
11928 val=''
11929 set vfork val
11930 eval $inlibc
11931
11932 : Ok, but do we want to use it. vfork is reportedly unreliable in 
11933 : perl on Solaris 2.x, and probably elsewhere.
11934 case "$val" in
11935 $define)
11936         echo " "
11937         case "$usevfork" in
11938         false) dflt='n';;
11939         *) dflt='y';;
11940         esac
11941         cat <<'EOM'
11942  
11943 Perl can only use a vfork() that doesn't suffer from strict
11944 restrictions on calling functions or modifying global data in
11945 the child.  For example, glibc-2.1 contains such a vfork()
11946 that is unsuitable.  If your system provides a proper fork()
11947 call, chances are that you do NOT want perl to use vfork().
11948
11949 EOM
11950         rp="Do you still want to use vfork()?"
11951         . ./myread
11952         case "$ans" in
11953         y|Y) ;;
11954         *)
11955                 echo "Ok, we won't use vfork()."
11956                 val="$undef"
11957                 ;;
11958         esac
11959         ;;
11960 esac
11961 set d_vfork
11962 eval $setvar
11963 case "$d_vfork" in
11964 $define) usevfork='true';;
11965 *) usevfork='false';;
11966 esac
11967
11968 : see if this is an sysdir system
11969 set sys/dir.h i_sysdir
11970 eval $inhdr
11971
11972 : see if this is an sysndir system
11973 set sys/ndir.h i_sysndir
11974 eval $inhdr
11975
11976 : see if closedir exists
11977 set closedir d_closedir
11978 eval $inlibc
11979
11980 case "$d_closedir" in
11981 "$define")
11982         echo " "
11983         echo "Checking whether closedir() returns a status..." >&4
11984         cat > closedir.c <<EOM
11985 #$i_dirent I_DIRENT             /**/
11986 #$i_sysdir I_SYS_DIR            /**/
11987 #$i_sysndir I_SYS_NDIR          /**/
11988 #$i_systypes I_SYS_TYPES        /**/
11989
11990 #if defined(I_SYS_TYPES)
11991 #include <sys/types.h>
11992 #endif
11993 #if defined(I_DIRENT)
11994 #include <dirent.h>
11995 #if defined(NeXT) && defined(I_SYS_DIR) /* NeXT needs dirent + sys/dir.h */
11996 #include <sys/dir.h>
11997 #endif
11998 #else
11999 #ifdef I_SYS_NDIR
12000 #include <sys/ndir.h>
12001 #else
12002 #ifdef I_SYS_DIR
12003 #ifdef hp9000s500
12004 #include <ndir.h>       /* may be wrong in the future */
12005 #else
12006 #include <sys/dir.h>
12007 #endif
12008 #endif
12009 #endif
12010 #endif 
12011 int main() { return closedir(opendir(".")); }
12012 EOM
12013         set closedir
12014         if eval $compile_ok; then
12015                 if ./closedir > /dev/null 2>&1 ; then
12016                         echo "Yes, it does."
12017                         val="$undef"
12018                 else
12019                         echo "No, it doesn't."
12020                         val="$define"
12021                 fi
12022         else
12023                 echo "(I can't seem to compile the test program--assuming it doesn't)"
12024                 val="$define"
12025         fi
12026         ;;
12027 *)
12028         val="$undef";
12029         ;;
12030 esac
12031 set d_void_closedir
12032 eval $setvar
12033 $rm -f closedir*
12034 : check for volatile keyword
12035 echo " "
12036 echo 'Checking to see if your C compiler knows about "volatile"...' >&4
12037 $cat >try.c <<'EOCP'
12038 int main()
12039 {
12040         typedef struct _goo_struct goo_struct;
12041         goo_struct * volatile goo = ((goo_struct *)0);
12042         struct _goo_struct {
12043                 long long_int;
12044                 int reg_int;
12045                 char char_var;
12046         };
12047         typedef unsigned short foo_t;
12048         char *volatile foo;
12049         volatile int bar;
12050         volatile foo_t blech;
12051         foo = foo;
12052 }
12053 EOCP
12054 if $cc -c $ccflags try.c >/dev/null 2>&1 ; then
12055         val="$define"
12056         echo "Yup, it does."
12057 else
12058         val="$undef"
12059         echo "Nope, it doesn't."
12060 fi
12061 set d_volatile
12062 eval $setvar
12063 $rm -f try.*
12064
12065 : see if there is a wait4
12066 set wait4 d_wait4
12067 eval $inlibc
12068
12069 : see if waitpid exists
12070 set waitpid d_waitpid
12071 eval $inlibc
12072
12073 : see if wcstombs exists
12074 set wcstombs d_wcstombs
12075 eval $inlibc
12076
12077 : see if wctomb exists
12078 set wctomb d_wctomb
12079 eval $inlibc
12080
12081 : preserve RCS keywords in files with variable substitution, grrr
12082 Date='$Date'
12083 Id='$Id'
12084 Log='$Log'
12085 RCSfile='$RCSfile'
12086 Revision='$Revision'
12087
12088 case "$crosscompile" in
12089 ''|[nN]*) crosscompile="$undef" ;;
12090 esac
12091
12092 case "$osname" in
12093 next|rhapsody|darwin) multiarch="$define" ;;
12094 esac
12095 case "$multiarch" in
12096 ''|[nN]*) multiarch="$undef" ;;
12097 esac
12098
12099 : check for alignment requirements
12100 echo " "
12101 case "$crosscompile$multiarch" in
12102 *$define*)
12103         $cat <<EOM
12104 You seem to be either cross-compiling or doing a multiarchitecture build,
12105 skipping the memory alignment check.
12106
12107 EOM
12108         case "$alignbytes" in
12109         '') alignbytes=8 ;;
12110         esac
12111         ;;
12112 *)
12113         case "$alignbytes" in
12114         '') echo "Checking alignment constraints..." >&4
12115                 if $test "X$uselongdouble" = Xdefine -a "X$d_longdbl" = Xdefine; then
12116                         $cat >try.c <<'EOCP'
12117 typedef long double NV;
12118 EOCP
12119                 else
12120                         $cat >try.c <<'EOCP'
12121 typedef double NV;
12122 EOCP
12123                 fi
12124                 $cat >>try.c <<'EOCP'
12125 #include <stdio.h>
12126 struct foobar {
12127         char foo;
12128         NV bar;
12129 } try_algn;
12130 int main()
12131 {
12132     printf("%d\n", (int)((char *)&try_algn.bar - (char *)&try_algn.foo));
12133     return(0);
12134 }
12135 EOCP
12136                 set try
12137                 if eval $compile_ok; then
12138                         dflt=`./try`
12139                 else
12140                         dflt='8'
12141                         echo "(I can't seem to compile the test program...)"
12142                 fi
12143                 ;;
12144         *) dflt="$alignbytes"
12145                 ;;
12146         esac
12147         rp="Doubles must be aligned on a how-many-byte boundary?"
12148         . ./myread
12149         alignbytes="$ans"
12150         $rm -f try.c try
12151         ;;
12152 esac
12153
12154
12155 : set the base revision
12156 baserev=5.0
12157
12158 : check for ordering of bytes in a long
12159 echo " "
12160 case "$crosscompile$multiarch" in
12161 *$define*)
12162         $cat <<EOM
12163 You seem to be either cross-compiling or doing a multiarchitecture build,
12164 skipping the byteorder check.
12165
12166 EOM
12167         byteorder='0xffff'
12168         ;;
12169 *)
12170         case "$byteorder" in
12171         '')
12172                 $cat <<'EOM'
12173 In the following, larger digits indicate more significance.  A big-endian
12174 machine like a Pyramid or a Motorola 680?0 chip will come out to 4321. A
12175 little-endian machine like a Vax or an Intel 80?86 chip would be 1234. Other
12176 machines may have weird orders like 3412.  A Cray will report 87654321,
12177 an Alpha will report 12345678. If the test program works the default is
12178 probably right.
12179 I'm now running the test program...
12180 EOM
12181                 $cat >try.c <<'EOCP'
12182 #include <stdio.h>
12183 int main()
12184 {
12185         int i;
12186         union {
12187                 unsigned long l;
12188                 char c[sizeof(long)];
12189         } u;
12190
12191         if (sizeof(long) > 4)
12192                 u.l = (0x08070605L << 32) | 0x04030201L;
12193         else
12194                 u.l = 0x04030201L;
12195         for (i = 0; i < sizeof(long); i++)
12196                 printf("%c", u.c[i]+'0');
12197         printf("\n");
12198         exit(0);
12199 }
12200 EOCP
12201                 xxx_prompt=y
12202                 set try
12203                 if eval $compile && ./try > /dev/null; then
12204                         dflt=`./try`
12205                         case "$dflt" in
12206                         [1-4][1-4][1-4][1-4]|12345678|87654321)
12207                                 echo "(The test program ran ok.)"
12208                                 echo "byteorder=$dflt"
12209                                 xxx_prompt=n
12210                         ;;
12211                         ????|????????) echo "(The test program ran ok.)" ;;
12212                         *) echo "(The test program didn't run right for some reason.)" ;;
12213                         esac
12214                 else
12215                         dflt='4321'
12216                         cat <<'EOM'
12217 (I can't seem to compile the test program.  Guessing big-endian...)
12218 EOM
12219                 fi
12220                 case "$xxx_prompt" in
12221                 y)
12222                         rp="What is the order of bytes in a long?"
12223                         . ./myread
12224                         byteorder="$ans"
12225                         ;;
12226                 *)      byteorder=$dflt
12227                         ;;
12228                 esac
12229                 ;;
12230         esac
12231         $rm -f try.c try
12232         ;;
12233 esac
12234
12235
12236 : how do we catenate cpp tokens here?
12237 echo " "
12238 echo "Checking to see how your cpp does stuff like catenate tokens..." >&4
12239 $cat >cpp_stuff.c <<'EOCP'
12240 #define RCAT(a,b)a/**/b
12241 #define ACAT(a,b)a ## b
12242 RCAT(Rei,ser)
12243 ACAT(Cir,cus)
12244 EOCP
12245 $cppstdin $cppflags $cppminus <cpp_stuff.c >cpp_stuff.out 2>&1
12246 if $contains 'Circus' cpp_stuff.out >/dev/null 2>&1; then
12247         echo "Oh!  Smells like ANSI's been here." >&4
12248         echo "We can catify or stringify, separately or together!"
12249         cpp_stuff=42
12250 elif $contains 'Reiser' cpp_stuff.out >/dev/null 2>&1; then
12251         echo "Ah, yes!  The good old days!" >&4
12252         echo "However, in the good old days we don't know how to stringify and"
12253         echo "catify at the same time."
12254         cpp_stuff=1
12255 else
12256         $cat >&4 <<EOM
12257 Hmm, I don't seem to be able to catenate tokens with your cpp.  You're going
12258 to have to edit the values of CAT[2-5] in config.h...
12259 EOM
12260         cpp_stuff="/* Help! How do we handle cpp_stuff? */*/"
12261 fi
12262 $rm -f cpp_stuff.*
12263
12264 : see if this is a db.h system
12265 set db.h i_db
12266 eval $inhdr
12267
12268 case "$i_db" in
12269 $define)
12270         : Check db version.
12271         echo " "
12272         echo "Checking Berkeley DB version ..." >&4
12273         $cat >try.c <<EOCP
12274 #$d_const HASCONST
12275 #ifndef HASCONST
12276 #define const
12277 #endif
12278 #include <sys/types.h>
12279 #include <stdio.h>
12280 #include <db.h>
12281 int main()
12282 {
12283 #ifdef DB_VERSION_MAJOR /* DB version >= 2 */
12284     int Major, Minor, Patch ;
12285     unsigned long Version ;
12286     (void)db_version(&Major, &Minor, &Patch) ;
12287     printf("You have Berkeley DB Version 2 or greater\n");
12288
12289     printf("db.h is from Berkeley DB Version %d.%d.%d\n",
12290                 DB_VERSION_MAJOR, DB_VERSION_MINOR, DB_VERSION_PATCH);
12291     printf("libdb is from Berkeley DB Version %d.%d.%d\n",
12292                 Major, Minor, Patch) ;
12293
12294     /* check that db.h & libdb are compatible */
12295     if (DB_VERSION_MAJOR != Major || DB_VERSION_MINOR != Minor || DB_VERSION_PATCH != Patch) {
12296         printf("db.h and libdb are incompatible\n") ;
12297         exit(3);        
12298     }
12299
12300     printf("db.h and libdb are compatible\n") ;
12301
12302     Version = DB_VERSION_MAJOR * 1000000 + DB_VERSION_MINOR * 1000
12303                 + DB_VERSION_PATCH ;
12304
12305     /* needs to be >= 2.3.4 */
12306     if (Version < 2003004) {
12307     /* if (DB_VERSION_MAJOR == 2 && DB_VERSION_MINOR == 0 && DB_VERSION_PATCH < 5) { */
12308         printf("but Perl needs Berkeley DB 2.3.4 or greater\n") ;
12309         exit(2);        
12310     }
12311
12312     exit(0);
12313 #else
12314 #if defined(_DB_H_) && defined(BTREEMAGIC) && defined(HASHMAGIC)
12315     printf("You have Berkeley DB Version 1\n");
12316     exit(0);    /* DB version < 2: the coast is clear. */
12317 #else
12318     exit(1);    /* <db.h> not Berkeley DB? */
12319 #endif
12320 #endif
12321 }
12322 EOCP
12323         set try
12324         if eval $compile_ok && ./try; then
12325                 echo 'Looks OK.' >&4
12326         else
12327                 echo "I can't use Berkeley DB with your <db.h>.  I'll disable Berkeley DB." >&4
12328                 i_db=$undef
12329                 case " $libs " in
12330                 *"-ldb "*)
12331                         : Remove db from list of libraries to use
12332                         echo "Removing unusable -ldb from library list" >&4
12333                         set `echo X $libs | $sed -e 's/-ldb / /' -e 's/-ldb$//'`
12334                         shift
12335                         libs="$*"
12336                         echo "libs = $libs" >&4
12337                         ;;
12338                 esac
12339         fi
12340         $rm -f try.*
12341         ;;
12342 esac
12343
12344 case "$i_db" in
12345 define)
12346         : Check the return type needed for hash 
12347         echo " "
12348         echo "Checking return type needed for hash for Berkeley DB ..." >&4
12349         $cat >try.c <<EOCP
12350 #$d_const HASCONST
12351 #ifndef HASCONST
12352 #define const
12353 #endif
12354 #include <sys/types.h>
12355 #include <db.h>
12356
12357 #ifndef DB_VERSION_MAJOR
12358 u_int32_t hash_cb (ptr, size)
12359 const void *ptr;
12360 size_t size;
12361 {
12362 }
12363 HASHINFO info;
12364 int main()
12365 {
12366         info.hash = hash_cb;
12367 }
12368 #endif
12369 EOCP
12370         if $cc $ccflags -c try.c >try.out 2>&1 ; then
12371                 if $contains warning try.out >>/dev/null 2>&1 ; then
12372                         db_hashtype='int'
12373                 else
12374                         db_hashtype='u_int32_t'
12375                 fi
12376         else
12377                 : XXX Maybe we should just give up here.
12378                 db_hashtype=u_int32_t
12379                 $cat try.out >&4
12380                 echo "Help:  I can't seem to compile the db test program." >&4
12381                 echo "Something's wrong, but I'll assume you use $db_hashtype." >&4
12382         fi
12383         $rm -f try.*
12384         echo "Your version of Berkeley DB uses $db_hashtype for hash."
12385         ;;
12386 *)      db_hashtype=u_int32_t
12387         ;;
12388 esac
12389 case "$i_db" in
12390 define)
12391         : Check the return type needed for prefix 
12392         echo " "
12393         echo "Checking return type needed for prefix for Berkeley DB ..." >&4
12394         cat >try.c <<EOCP
12395 #$d_const HASCONST
12396 #ifndef HASCONST
12397 #define const
12398 #endif
12399 #include <sys/types.h>
12400 #include <db.h>
12401
12402 #ifndef DB_VERSION_MAJOR
12403 size_t prefix_cb (key1, key2)
12404 const DBT *key1;
12405 const DBT *key2;
12406 {
12407 }
12408 BTREEINFO info;
12409 int main()
12410 {
12411         info.prefix = prefix_cb;
12412 }
12413 #endif
12414 EOCP
12415         if $cc $ccflags -c try.c  >try.out 2>&1 ; then
12416                 if $contains warning try.out >>/dev/null 2>&1 ; then
12417                         db_prefixtype='int'
12418                 else
12419                         db_prefixtype='size_t'
12420                 fi
12421         else
12422                 db_prefixtype='size_t'
12423                 : XXX Maybe we should just give up here.
12424                 $cat try.out >&4
12425                 echo "Help:  I can't seem to compile the db test program." >&4
12426                 echo "Something's wrong, but I'll assume you use $db_prefixtype." >&4
12427         fi
12428         $rm -f try.*
12429         echo "Your version of Berkeley DB uses $db_prefixtype for prefix."
12430         ;;
12431 *)      db_prefixtype='size_t'
12432         ;;
12433 esac
12434
12435 : check for void type
12436 echo " "
12437 echo "Checking to see how well your C compiler groks the void type..." >&4
12438 case "$voidflags" in
12439 '')
12440         $cat >try.c <<'EOCP'
12441 #if TRY & 1
12442 void sub() {
12443 #else
12444 sub() {
12445 #endif
12446         extern void moo();      /* function returning void */
12447         void (*goo)();          /* ptr to func returning void */
12448 #if TRY & 8
12449         void *hue;              /* generic ptr */
12450 #endif
12451 #if TRY & 2
12452         void (*foo[10])();
12453 #endif
12454
12455 #if TRY & 4
12456         if(goo == moo) {
12457                 exit(0);
12458         }
12459 #endif
12460         exit(0);
12461 }
12462 int main() { sub(); }
12463 EOCP
12464         if $cc $ccflags -c -DTRY=$defvoidused try.c >.out 2>&1 ; then
12465                 voidflags=$defvoidused
12466         echo "Good.  It appears to support void to the level $package wants.">&4
12467                 if $contains warning .out >/dev/null 2>&1; then
12468                         echo "However, you might get some warnings that look like this:"
12469                         $cat .out
12470                 fi
12471         else
12472 echo "Hmm, your compiler has some difficulty with void. Checking further..." >&4
12473                 if $cc $ccflags -c -DTRY=1 try.c >/dev/null 2>&1; then
12474                         echo "It supports 1..."
12475                         if $cc $ccflags -c -DTRY=3 try.c >/dev/null 2>&1; then
12476                                 echo "It also supports 2..."
12477                                 if $cc $ccflags -c -DTRY=7 try.c >/dev/null 2>&1; then
12478                                         voidflags=7
12479                                         echo "And it supports 4 but not 8 definitely."
12480                                 else
12481                                         echo "It doesn't support 4..."
12482                                         if $cc $ccflags -c -DTRY=11 try.c >/dev/null 2>&1; then
12483                                                 voidflags=11
12484                                                 echo "But it supports 8."
12485                                         else
12486                                                 voidflags=3
12487                                                 echo "Neither does it support 8."
12488                                         fi
12489                                 fi
12490                         else
12491                                 echo "It does not support 2..."
12492                                 if $cc $ccflags -c -DTRY=13 try.c >/dev/null 2>&1; then
12493                                         voidflags=13
12494                                         echo "But it supports 4 and 8."
12495                                 else
12496                                         if $cc $ccflags -c -DTRY=5 try.c >/dev/null 2>&1; then
12497                                                 voidflags=5
12498                                                 echo "And it supports 4 but has not heard about 8."
12499                                         else
12500                                                 echo "However it supports 8 but not 4."
12501                                         fi
12502                                 fi
12503                         fi
12504                 else
12505                         echo "There is no support at all for void."
12506                         voidflags=0
12507                 fi
12508         fi
12509 esac
12510 case "$voidflags" in
12511 "$defvoidused") ;;
12512 *)      $cat >&4 <<'EOM'
12513   Support flag bits are:
12514     1: basic void declarations.
12515     2: arrays of pointers to functions returning void.
12516     4: operations between pointers to and addresses of void functions.
12517     8: generic void pointers.
12518 EOM
12519         dflt="$voidflags";
12520         rp="Your void support flags add up to what?"
12521         . ./myread
12522         voidflags="$ans"
12523         ;;
12524 esac
12525 $rm -f try.* .out
12526
12527
12528 : How can we generate normalized random numbers ?
12529 echo " "
12530 echo "Looking for a random number function..." >&4
12531 case "$randfunc" in
12532 '')
12533         if set drand48 val -f; eval $csym; $val; then
12534                 dflt="drand48"
12535                 echo "Good, found drand48()." >&4
12536         elif set random val -f; eval $csym; $val; then
12537                 dflt="random"
12538                 echo "OK, found random()." >&4
12539         else
12540                 dflt="rand"
12541                 echo "Yick, looks like I have to use rand()." >&4
12542         fi
12543         echo " "
12544         ;;
12545 *)
12546         dflt="$randfunc"
12547         ;;
12548 esac
12549 cont=true
12550
12551 case "$ccflags" in
12552 *-Dmy_rand=*|*-Dmy_srand=*)
12553         echo "Removing obsolete -Dmy_rand, -Dmy_srand, and -Drandbits from ccflags." >&4
12554         ccflags="`echo $ccflags | sed -e 's/-Dmy_rand=random/ /'`"
12555         ccflags="`echo $ccflags | sed -e 's/-Dmy_srand=srandom/ /'`"
12556         ccflags="`echo $ccflags | sed -e 's/-Drandbits=[0-9][0-9]*/ /'`"
12557         ;;
12558 esac
12559
12560 while $test "$cont"; do
12561         rp="Use which function to generate random numbers?"
12562         . ./myread
12563         if $test "$ans" = "$dflt"; then
12564                 : null
12565         else
12566                 randbits=''
12567         fi
12568         randfunc="$ans"
12569         if set $ans val -f; eval $csym; $val; then
12570                 cont=''
12571         else
12572                 dflt=y
12573                 rp="I cannot find function $ans. Use that name anyway?"
12574                 . ./myread
12575                 dflt=rand
12576                 case "$ans" in
12577                         [yY]*) cont='';;
12578                 esac
12579         fi
12580         case "$cont" in
12581         '')
12582                 case "$randfunc" in
12583                 drand48)
12584                         drand01="drand48()"
12585                         seedfunc="srand48"
12586                         randbits=48
12587                         randseedtype=long
12588                         ;;
12589                 rand|random)
12590                         case "$randbits" in
12591                         '')
12592 echo "Checking to see how many bits your $randfunc() function produces..." >&4
12593                                 $cat >try.c <<EOCP
12594 #$i_unistd I_UNISTD
12595 #$i_stdlib I_STDLIB
12596 #include <stdio.h>
12597 #ifdef I_UNISTD
12598 #  include <unistd.h>
12599 #endif
12600 #ifdef I_STDLIB
12601 #  include <stdlib.h>
12602 #endif
12603 int main()
12604 {
12605         register int i;
12606         register unsigned long tmp;
12607         register unsigned long max = 0L;
12608
12609         for (i = 1000; i; i--) {
12610                 tmp = (unsigned long) $randfunc();
12611                 if (tmp > max) max = tmp;
12612         }
12613         for (i = 0; max; i++)
12614                 max /= 2;
12615         printf("%d\n",i);
12616 }
12617 EOCP
12618                                 set try
12619                                 if eval $compile_ok; then
12620                                         dflt=`try`
12621                                 else
12622                                         dflt='?'
12623                                         echo "(I can't seem to compile the test program...)"
12624                                 fi
12625                                 ;;
12626                         *)
12627                                 dflt="$randbits"
12628                                 ;;
12629                         esac
12630                         rp="How many bits does your $randfunc() function produce?"
12631                         . ./myread
12632                         randbits="$ans"
12633                         $rm -f try.c try
12634                         drand01="($randfunc() / (double) ((unsigned long)1 << $randbits))"
12635                         seedfunc="s$randfunc"
12636                         randseedtype=unsigned
12637                         ;;
12638                 *)
12639                         dflt="31"
12640                         rp="How many bits does your $randfunc() function produce?"
12641                         . ./myread
12642                         randbits="$ans"
12643                         seedfunc="s$randfunc"
12644                         drand01="($randfunc() / (double) ((unsigned long)1 << $randbits))"
12645                         if set $seedfunc val -f; eval $csym; $val; then
12646                                 echo "(Using $seedfunc() to seed random generator)"
12647                         else
12648                                 echo "(Warning: no $seedfunc() to seed random generator)"
12649                                 seedfunc=rand
12650                         fi
12651                         randseedtype=unsigned
12652                         ;;
12653                 esac
12654                 ;;
12655         esac
12656 done
12657
12658 echo " "
12659 echo "Determining whether or not we are on an EBCDIC system..." >&4
12660 $cat >tebcdic.c <<'EOM'
12661 int main()
12662 {
12663   if ('M'==0xd4) return 0;
12664   return 1;
12665 }
12666 EOM
12667
12668 val=$undef
12669 set tebcdic
12670 if eval $compile_ok; then
12671         if ./tebcdic; then
12672                 echo "You have EBCDIC." >&4
12673                 val="$define"
12674         else
12675                 echo "Nope, no EBCDIC, probably ASCII or some ISO Latin." >&4
12676         fi
12677 else
12678         echo "I'm unable to compile the test program." >&4
12679         echo "I'll assume ASCII or some ISO Latin." >&4
12680 fi
12681 $rm -f tebcdic.c tebcdic
12682 set ebcdic
12683 eval $setvar
12684
12685 echo " "
12686 $cat >&4 <<EOM
12687 Checking how to flush all pending stdio output...
12688 EOM
12689 # I only know how to find the first 32 possibly open files on SunOS.
12690 # See also hints/sunos_4_1.sh and util.c  --AD
12691 case "$osname" in
12692 sunos) $echo '#define PERL_FFLUSH_ALL_FOPEN_MAX 32' > try.c ;;
12693 esac
12694 $cat >>try.c <<EOCP
12695 #include <stdio.h>
12696 #$i_unistd I_UNISTD
12697 #ifdef I_UNISTD
12698 # include <unistd.h>
12699 #endif
12700 #$d_sysconf HAS_SYSCONF
12701 #$d_stdio_stream_array HAS_STDIO_STREAM_ARRAY
12702 #ifdef HAS_STDIO_STREAM_ARRAY
12703 # define STDIO_STREAM_ARRAY $stdio_stream_array
12704 #endif
12705 int main() {
12706   FILE* p = fopen("try.out", "w");
12707 #ifdef TRY_FPUTC
12708   fputc('x', p);
12709 #else
12710 # ifdef TRY_FPRINTF
12711   fprintf(p, "x");
12712 # endif
12713 #endif
12714 #ifdef TRY_FFLUSH_NULL
12715   fflush(NULL);
12716 #endif
12717 #ifdef TRY_FFLUSH_ALL
12718   {
12719     long open_max = -1;
12720 # ifdef PERL_FFLUSH_ALL_FOPEN_MAX
12721     open_max = PERL_FFLUSH_ALL_FOPEN_MAX;
12722 # else
12723 #  if defined(HAS_SYSCONF) && defined(_SC_OPEN_MAX)
12724     open_max = sysconf(_SC_OPEN_MAX);
12725 #  else
12726 #   ifdef FOPEN_MAX
12727     open_max = FOPEN_MAX;
12728 #   else
12729 #    ifdef OPEN_MAX
12730     open_max = OPEN_MAX;
12731 #    else
12732 #     ifdef _NFILE
12733     open_max = _NFILE;
12734 #     endif
12735 #    endif
12736 #   endif
12737 #  endif
12738 # endif 
12739 # ifdef HAS_STDIO_STREAM_ARRAY
12740     if (open_max > 0) {
12741       long i;
12742       for (i = 0; i < open_max; i++)
12743             if (STDIO_STREAM_ARRAY[i]._file >= 0 &&
12744                 STDIO_STREAM_ARRAY[i]._file < open_max &&
12745                 STDIO_STREAM_ARRAY[i]._flag)
12746                 fflush(&STDIO_STREAM_ARRAY[i]);
12747     }   
12748   }
12749 # endif
12750 #endif
12751   _exit(42);
12752 }
12753 EOCP
12754 : first we have to find out how _not_ to flush
12755 if $test "X$fflushNULL" = X -o "X$fflushall" = X; then
12756     output=''
12757     set try -DTRY_FPUTC
12758     if eval $compile; then
12759             $rm -f try.out
12760             ./try$exe_ext 2>/dev/null
12761             if $test ! -s try.out -a "X$?" = X42; then
12762                 output=-DTRY_FPUTC
12763             fi
12764     fi
12765     case "$output" in
12766     '')
12767             set try -DTRY_FPRINTF
12768             $rm -f try.out
12769             if eval $compile; then
12770                     $rm -f try.out
12771                     ./try$exe_ext 2>/dev/null
12772                     if $test ! -s try.out -a "X$?" = X42; then
12773                         output=-DTRY_FPRINTF
12774                     fi
12775             fi
12776         ;;
12777     esac
12778 fi
12779 : check for fflush NULL behaviour
12780 case "$fflushNULL" in
12781 '')     set try -DTRY_FFLUSH_NULL $output
12782         if eval $compile; then
12783                 $rm -f try.out
12784                 ./try$exe_ext 2>/dev/null
12785                 code="$?"
12786                 if $test -s try.out -a "X$code" = X42; then
12787                         fflushNULL="`$cat try.out`"
12788                 else
12789                         if $test "X$code" != X42; then
12790                                 $cat >&4 <<EOM
12791 (If this test failed, don't worry, we'll try another method shortly.)
12792 EOM
12793                         fi
12794                 fi
12795         fi
12796         $rm -f core try.core core.try.*
12797         case "$fflushNULL" in
12798         x)      $cat >&4 <<EOM
12799 Your fflush(NULL) works okay for output streams.
12800 Let's see if it clobbers input pipes...
12801 EOM
12802 # As of mid-March 2000 all versions of Solaris appear to have a stdio
12803 # bug that improperly flushes the input end of pipes.  So we avoid the
12804 # autoflush on fork/system/exec support for now. :-(
12805 $cat >tryp.c <<EOCP
12806 #include <stdio.h>
12807 int
12808 main(int argc, char **argv)
12809 {
12810     char buf[1024];
12811     int i;
12812     char *bp = buf;
12813     while (1) {
12814         while ((i = getc(stdin)) != -1
12815                && (*bp++ = i) != '\n'
12816                && bp < &buf[1024])
12817         /* DO NOTHING */ ;
12818         *bp = '\0';
12819         fprintf(stdout, "%s", buf);
12820         fflush(NULL);
12821         if (i == -1)
12822             return 0;
12823         bp = buf;
12824     }
12825 }
12826 EOCP
12827                 fflushNULL="$define"
12828                 set tryp
12829                 if eval $compile; then
12830                     $rm -f tryp.out
12831                     $cat tryp.c | ./tryp$exe_ext 2>/dev/null > tryp.out
12832                     if cmp tryp.c tryp.out >/dev/null 2>&1; then
12833                        $cat >&4 <<EOM
12834 fflush(NULL) seems to behave okay with input streams.
12835 EOM
12836                         fflushNULL="$define"
12837                     else
12838                         $cat >&4 <<EOM
12839 Ouch, fflush(NULL) clobbers input pipes!  We will not use it.
12840 EOM
12841                         fflushNULL="$undef"
12842                     fi
12843                 fi
12844                 $rm -f core tryp.c tryp.core core.tryp.*
12845                 ;;
12846         '')     $cat >&4 <<EOM
12847 Your fflush(NULL) isn't working (contrary to ANSI C).
12848 EOM
12849                 fflushNULL="$undef"
12850                 ;;
12851         *)      $cat >&4 <<EOM
12852 Cannot figure out whether your fflush(NULL) works or not.
12853 I'm assuming it doesn't (contrary to ANSI C).
12854 EOM
12855                 fflushNULL="$undef"
12856                 ;;
12857         esac
12858         ;;
12859 $define|true|[yY]*)
12860         fflushNULL="$define"
12861         ;;
12862 *)
12863         fflushNULL="$undef"
12864         ;;
12865 esac
12866 : check explicit looping only if NULL did not work, and if the pipe
12867 : bug does not show up on an explicit flush too
12868 case "$fflushNULL" in
12869 "$undef")
12870         $cat >tryp.c <<EOCP
12871 #include <stdio.h>
12872 int
12873 main(int argc, char **argv)
12874 {
12875     char buf[1024];
12876     int i;
12877     char *bp = buf;
12878     while (1) {
12879         while ((i = getc(stdin)) != -1
12880                && (*bp++ = i) != '\n'
12881                && bp < &buf[1024])
12882         /* DO NOTHING */ ;
12883         *bp = '\0';
12884         fprintf(stdout, "%s", buf);
12885         fflush(stdin);
12886         if (i == -1)
12887             return 0;
12888         bp = buf;
12889     }
12890 }
12891 EOCP
12892         set tryp
12893         if eval $compile; then
12894             $rm -f tryp.out
12895             $cat tryp.c | ./tryp$exe_ext 2>/dev/null > tryp.out
12896             if cmp tryp.c tryp.out >/dev/null 2>&1; then
12897                $cat >&4 <<EOM
12898 Good, at least fflush(stdin) seems to behave okay when stdin is a pipe.
12899 EOM
12900                 : now check for fflushall behaviour
12901                 case "$fflushall" in
12902                 '')     set try -DTRY_FFLUSH_ALL $output
12903                         if eval $compile; then
12904                                 $cat >&4 <<EOM
12905 (Now testing the other method--but note that this also may fail.)
12906 EOM
12907                                 $rm -f try.out
12908                                 ./try$exe_ext 2>/dev/null
12909                                 if $test -s try.out -a "X$?" = X42; then
12910                                         fflushall="`$cat try.out`"
12911                                 fi
12912                         fi
12913                         $rm -f core try.core core.try.*
12914                         case "$fflushall" in
12915                         x)      $cat >&4 <<EOM
12916 Whew. Flushing explicitly all the stdio streams works.
12917 EOM
12918                                 fflushall="$define"
12919                                 ;;
12920                         '')     $cat >&4 <<EOM
12921 Sigh. Flushing explicitly all the stdio streams doesn't work.
12922 EOM
12923                                 fflushall="$undef"
12924                                 ;;
12925                         *)      $cat >&4 <<EOM
12926 Cannot figure out whether flushing stdio streams explicitly works or not.
12927 I'm assuming it doesn't.
12928 EOM
12929                                 fflushall="$undef"
12930                                 ;;
12931                         esac
12932                         ;;
12933                 "$define"|true|[yY]*)
12934                         fflushall="$define"
12935                         ;;
12936                 *)
12937                         fflushall="$undef"
12938                         ;;
12939                 esac
12940             else
12941                 $cat >&4 <<EOM
12942 All is futile.  Even fflush(stdin) clobbers input pipes!
12943 EOM
12944                 fflushall="$undef"
12945             fi
12946         else
12947             fflushall="$undef"
12948         fi
12949         $rm -f core tryp.c tryp.core core.tryp.*
12950         ;;
12951 *)      fflushall="$undef"
12952         ;;
12953 esac
12954
12955 case "$fflushNULL$fflushall" in
12956 undefundef)
12957         $cat <<EOM
12958 OK, I give up.  I cannot figure out how to flush pending stdio output.
12959 We won't be flushing handles at all before fork/exec/popen.
12960 EOM
12961         ;;
12962 esac
12963 $rm -f try.* try$exe_ext
12964
12965 : Store the full pathname to the ar program for use in the C program
12966 : Respect a hint or command line value for full_ar.
12967 case "$full_ar" in
12968 '') full_ar=$ar ;;
12969 esac
12970
12971 : Store the full pathname to the sed program for use in the C program
12972 full_sed=$sed
12973
12974 : see what type gids are declared as in the kernel
12975 echo " "
12976 echo "Looking for the type for group ids returned by getgid()."
12977 set gid_t gidtype xxx stdio.h sys/types.h
12978 eval $typedef
12979 case "$gidtype" in
12980 xxx)
12981         xxx=`./findhdr sys/user.h`
12982         set `grep 'groups\[NGROUPS\];' "$xxx" 2>/dev/null` unsigned short
12983         case $1 in
12984         unsigned) dflt="$1 $2" ;;
12985         *) dflt="$1" ;;
12986         esac
12987         ;;
12988 *) dflt="$gidtype";;
12989 esac
12990 case "$gidtype" in
12991 gid_t) echo "gid_t found." ;;
12992 *)      rp="What is the type for group ids returned by getgid()?"
12993         . ./myread
12994         gidtype="$ans"
12995         ;;
12996 esac
12997
12998 echo " "
12999 case "$gidtype" in
13000 *_t) zzz="$gidtype"     ;;
13001 *)   zzz="gid"          ;;
13002 esac
13003 echo "Checking the size of $zzz..." >&4 
13004 cat > try.c <<EOCP
13005 #include <sys/types.h>
13006 #include <stdio.h>
13007 int main() {
13008     printf("%d\n", (int)sizeof($gidtype));
13009     exit(0);
13010 }
13011 EOCP
13012 set try
13013 if eval $compile_ok; then
13014         yyy=`./try`
13015         case "$yyy" in
13016         '')     gidsize=4
13017                 echo "(I can't execute the test program--guessing $gidsize.)" >&4
13018                 ;;
13019         *)      gidsize=$yyy
13020                 echo "Your $zzz is $gidsize bytes long."
13021                 ;;
13022         esac
13023 else
13024         gidsize=4
13025         echo "(I can't compile the test program--guessing $gidsize.)" >&4
13026 fi
13027
13028
13029 echo " "
13030 case "$gidtype" in
13031 *_t) zzz="$gidtype"     ;;
13032 *)   zzz="gid"          ;;
13033 esac
13034 echo "Checking the sign of $zzz..." >&4 
13035 cat > try.c <<EOCP
13036 #include <sys/types.h>
13037 #include <stdio.h>
13038 int main() {
13039         $gidtype foo = -1;
13040         if (foo < 0)
13041                 printf("-1\n");
13042         else
13043                 printf("1\n");
13044 }
13045 EOCP
13046 set try
13047 if eval $compile; then
13048         yyy=`./try`
13049         case "$yyy" in
13050         '')     gidsign=1
13051                 echo "(I can't execute the test program--guessing unsigned.)" >&4
13052                 ;;
13053         *)      gidsign=$yyy
13054                 case "$gidsign" in
13055                  1) echo "Your $zzz is unsigned." ;;
13056                 -1) echo "Your $zzz is signed."   ;;
13057                 esac
13058                 ;;
13059         esac
13060 else
13061         gidsign=1
13062         echo "(I can't compile the test program--guessing unsigned.)" >&4
13063 fi
13064
13065
13066 echo " "
13067
13068 if $test X"$quadtype" != X; then
13069
13070 echo "Checking how to print 64-bit integers..." >&4
13071
13072 if $test X"$sPRId64" = X -a X"$quadtype" = Xint; then
13073         $cat >try.c <<'EOCP'
13074 #include <sys/types.h>
13075 #include <stdio.h>
13076 int main() {
13077   int q = 12345678901;
13078   printf("%ld\n", q);
13079 }
13080 EOCP
13081         set try
13082         if eval $compile; then
13083                 yyy=`./try$exe_ext`
13084                 case "$yyy" in
13085                 12345678901)
13086                         sPRId64='"d"'; sPRIi64='"i"'; sPRIu64='"u"';
13087                         sPRIo64='"o"'; sPRIx64='"x"'; sPRIX64='"X"';
13088                         echo "We will use %d."
13089                         ;;
13090                 esac
13091         fi
13092 fi
13093
13094 if $test X"$sPRId64" = X -a X"$quadtype" = Xlong; then
13095         $cat >try.c <<'EOCP'
13096 #include <sys/types.h>
13097 #include <stdio.h>
13098 int main() {
13099   long q = 12345678901;
13100   printf("%ld\n", q);
13101 }
13102 EOCP
13103         set try
13104         if eval $compile; then
13105                 yyy=`./try$exe_ext`
13106                 case "$yyy" in
13107                 12345678901)
13108                         sPRId64='"ld"'; sPRIi64='"li"'; sPRIu64='"lu"';
13109                         sPRIo64='"lo"'; sPRIx64='"lx"'; sPRIX64='"lX"';
13110                         echo "We will use %ld."
13111                         ;;
13112                 esac
13113         fi
13114 fi
13115
13116 if $test X"$sPRId64" = X -a X"$i_inttypes" = X"$define" -a X"$quadtype" = Xint64_t; then
13117         $cat >try.c <<'EOCP'
13118 #include <sys/types.h>
13119 #include <inttypes.h>
13120 #include <stdio.h>
13121 int main() {
13122   int64_t q = 12345678901;
13123   printf("%" PRId64 "\n", q);
13124 }
13125 EOCP
13126         set try
13127         if eval $compile; then
13128                 yyy=`./try$exe_ext`
13129                 case "$yyy" in
13130                 12345678901)
13131                         sPRId64=PRId64; sPRIi64=PRIi64; sPRIu64=PRIu64;
13132                         sPRIo64=PRIo64; sPRIx64=PRIx64; sPRIX64=PRIX64;
13133                         echo "We will use the C9X style."
13134                         ;;
13135                 esac
13136         fi
13137 fi
13138
13139 if $test X"$sPRId64" = X -a X"$quadtype" = X"long long"; then
13140         $cat >try.c <<'EOCP'
13141 #include <sys/types.h>
13142 #include <stdio.h>
13143 int main() {
13144   long long q = 12345678901LL; /* AIX cc requires the LL prefix. */
13145   printf("%lld\n", q);
13146 }
13147 EOCP
13148         set try
13149         if eval $compile; then
13150                 yyy=`./try$exe_ext`
13151                 case "$yyy" in
13152                 12345678901)
13153                         sPRId64='"lld"'; sPRIi64='"lli"'; sPRIu64='"llu"';
13154                         sPRIo64='"llo"'; sPRIx64='"llx"'; sPRIX64='"llX"';
13155                         echo "We will use the %lld style."
13156                         ;;
13157                 esac
13158         fi
13159 fi
13160
13161 if $test X"$sPRId64" = X -a X"$quadtype" != X; then
13162         $cat >try.c <<EOCP
13163 #include <sys/types.h>
13164 #include <stdio.h>
13165 int main() {
13166   $quadtype q = 12345678901;
13167   printf("%Ld\n", q);
13168 }
13169 EOCP
13170         set try
13171         if eval $compile; then
13172                 yyy=`./try$exe_ext`
13173                 case "$yyy" in
13174                 12345678901)
13175                         sPRId64='"Ld"'; sPRIi64='"Li"'; sPRIu64='"Lu"';
13176                         sPRIo64='"Lo"'; sPRIx64='"Lx"'; sPRIX64='"LX"';
13177                         echo "We will use %Ld."
13178                         ;;
13179                 esac
13180         fi
13181 fi
13182
13183 if $test X"$sPRId64" = X -a X"$quadtype" != X; then
13184         $cat >try.c <<EOCP
13185 #include <sys/types.h>
13186 #include <stdio.h>
13187 int main() {
13188   $quadtype q = 12345678901;
13189   printf("%qd\n", q);
13190 }
13191 EOCP
13192         set try
13193         if eval $compile; then
13194                 yyy=`./try$exe_ext`
13195                 case "$yyy" in
13196                 12345678901)
13197                         sPRId64='"qd"'; sPRIi64='"qi"'; sPRIu64='"qu"';
13198                         sPRIo64='"qo"'; sPRIx64='"qx"'; sPRIX64='"qX"';
13199                         echo "We will use %qd."
13200                         ;;
13201                 esac
13202         fi
13203 fi
13204
13205 if $test X"$sPRId64" = X; then
13206         echo "Cannot figure out how to print 64-bit integers." >&4
13207 fi
13208
13209 $rm -f try try.*
13210
13211 fi
13212
13213 case "$sPRId64" in
13214 '')     d_PRId64="$undef"; d_PRIi64="$undef"; d_PRIu64="$undef"; 
13215         d_PRIo64="$undef"; d_PRIx64="$undef"; d_PRIX64="$undef"; 
13216         ;;
13217 *)      d_PRId64="$define"; d_PRIi64="$define"; d_PRIu64="$define"; 
13218         d_PRIo64="$define"; d_PRIx64="$define"; d_PRIX64="$define"; 
13219         ;;
13220 esac
13221
13222
13223 echo " "
13224 $echo "Checking the format strings to be used for Perl's internal types..." >&4
13225
13226 if $test X"$ivsize" = X8; then
13227         ivdformat="$sPRId64"
13228         uvuformat="$sPRIu64"
13229         uvoformat="$sPRIo64"
13230         uvxformat="$sPRIx64"
13231         uvXformat="$sPRIX64"
13232 else
13233         if $test X"$ivsize" = X"$longsize"; then
13234                 ivdformat='"ld"'
13235                 uvuformat='"lu"'
13236                 uvoformat='"lo"'
13237                 uvxformat='"lx"'
13238                 uvXformat='"lX"'
13239         else
13240                 if $test X"$ivsize" = X"$intsize"; then
13241                         ivdformat='"d"'
13242                         uvuformat='"u"'
13243                         uvoformat='"o"'
13244                         uvxformat='"x"'
13245                         uvXformat='"X"'
13246                 else
13247                         : far out
13248                         if $test X"$ivsize" = X"$shortsize"; then
13249                                 ivdformat='"hd"'
13250                                 uvuformat='"hu"'
13251                                 uvoformat='"ho"'
13252                                 uvxformat='"hx"'
13253                                 uvXformat='"hX"'
13254                         fi
13255                 fi
13256         fi
13257 fi
13258
13259 if $test X"$uselongdouble" = X"$define" -a X"$d_longdbl" = X"$define" -a X"$d_PRIgldbl" = X"$define"; then
13260         nveformat="$sPRIeldbl"
13261         nvfformat="$sPRIfldbl"
13262         nvgformat="$sPRIgldbl"
13263         nvEformat="$sPRIEldbl"
13264         nvFformat="$sPRIFldbl"
13265         nvGformat="$sPRIGldbl"
13266 else
13267         nveformat='"e"'
13268         nvfformat='"f"'
13269         nvgformat='"g"'
13270         nvEformat='"E"'
13271         nvFformat='"F"'
13272         nvGformat='"G"'
13273 fi
13274
13275 case "$ivdformat" in
13276 '') echo "$0: Fatal: failed to find format strings, cannot continue." >& 4
13277     exit 1
13278     ;;
13279 esac
13280
13281
13282 echo " "
13283 $echo "Checking the format string to be used for gids..." >&4
13284
13285 case "$gidsign" in
13286 -1)     if $test X"$gidsize" = X"$ivsize"; then
13287                 gidformat="$ivdformat"
13288         else
13289                 if $test X"$gidsize" = X"$longsize"; then
13290                         gidformat='"ld"'
13291                 else
13292                         if $test X"$gidsize" = X"$intsize"; then
13293                                 gidformat='"d"'
13294                         else
13295                                 if $test X"$gidsize" = X"$shortsize"; then
13296                                         gidformat='"hd"'
13297                                 fi
13298                         fi
13299                 fi
13300         fi
13301         ;;
13302 *)      if $test X"$gidsize" = X"$uvsize"; then
13303                 gidformat="$uvuformat"
13304         else
13305                 if $test X"$gidsize" = X"$longsize"; then
13306                         gidformat='"lu"'
13307                 else
13308                         if $test X"$gidsize" = X"$intsize"; then
13309                                 gidformat='"u"'
13310                         else
13311                                 if $test X"$gidsize" = X"$shortsize"; then
13312                                         gidformat='"hu"'
13313                                 fi
13314                         fi
13315                 fi
13316         fi
13317         ;;
13318 esac
13319
13320 : see if getgroups exists
13321 set getgroups d_getgrps
13322 eval $inlibc
13323
13324 : see if setgroups exists
13325 set setgroups d_setgrps
13326 eval $inlibc
13327
13328
13329 : Find type of 2nd arg to 'getgroups()' and 'setgroups()'
13330 echo " "
13331 case "$d_getgrps$d_setgrps" in
13332 *define*)
13333         case "$groupstype" in
13334         '') dflt="$gidtype" ;;
13335         *)  dflt="$groupstype" ;;
13336         esac
13337         $cat <<EOM
13338 What type of pointer is the second argument to getgroups() and setgroups()?
13339 Usually this is the same as group ids, $gidtype, but not always.
13340
13341 EOM
13342         rp='What type pointer is the second argument to getgroups() and setgroups()?'
13343         . ./myread
13344         groupstype="$ans"
13345         ;;
13346 *)  groupstype="$gidtype";;
13347 esac
13348
13349 echo " "
13350 echo "Checking if your $make program sets \$(MAKE)..." >&4
13351 case "$make_set_make" in
13352 '')
13353         $sed 's/^X //' > testmake.mak << 'EOF'
13354 Xall:
13355 X       @echo 'maketemp="$(MAKE)"'
13356 EOF
13357         case "`$make -f testmake.mak 2>/dev/null`" in
13358         *maketemp=*) make_set_make='#' ;;
13359         *)      make_set_make="MAKE=$make" ;;
13360         esac
13361         $rm -f testmake.mak
13362         ;;
13363 esac
13364 case "$make_set_make" in
13365 '#') echo "Yup, it does.";;
13366 *) echo "Nope, it doesn't.";;
13367 esac
13368
13369 : see what type is used for mode_t
13370 rp="What is the type used for file modes for system calls (e.g. fchmod())?"
13371 set mode_t modetype int stdio.h sys/types.h
13372 eval $typedef_ask
13373
13374 : define a fucntion to check prototypes
13375 $cat > protochk <<EOSH
13376 $startsh
13377 cc="$cc"
13378 optimize="$optimize"
13379 ccflags="$ccflags"
13380 prototype="$prototype"
13381 define="$define"
13382 rm=$rm
13383 EOSH
13384
13385 $cat >> protochk <<'EOSH'
13386
13387 $rm -f try.c
13388 foo="$1"
13389 shift
13390 while test $# -ge 2; do
13391         case "$1" in
13392                 $define) echo "#include <$2>" >> try.c ;;
13393                 literal) echo "$2" >> try.c ;;
13394         esac
13395     shift 2
13396 done
13397 test "$prototype" = "$define"  && echo '#define CAN_PROTOTYPE' >> try.c
13398 cat >> try.c <<'EOCP'
13399 #ifdef CAN_PROTOTYPE
13400 #define _(args) args
13401 #else
13402 #define _(args) ()
13403 #endif
13404 EOCP
13405 echo "$foo" >> try.c
13406 echo 'int no_real_function_has_this_name _((void)) { return 0; }' >> try.c
13407 $cc $optimize $ccflags -c try.c > /dev/null 2>&1
13408 status=$?
13409 $rm -f try.[co]
13410 exit $status
13411 EOSH
13412 chmod +x protochk
13413 $eunicefix protochk
13414
13415 : see what type is used for size_t
13416 rp="What is the type used for the length parameter for string functions?"
13417 set size_t sizetype 'unsigned int' stdio.h sys/types.h
13418 eval $typedef_ask
13419
13420 : check for type of arguments to gethostbyaddr. 
13421 if test "X$netdb_host_type" = X -o "X$netdb_hlen_type" = X; then
13422         case "$d_gethbyaddr" in
13423         $define)
13424                 $cat <<EOM
13425
13426 Checking to see what type of arguments are accepted by gethostbyaddr().
13427 EOM
13428                 hdrs="$define sys/types.h
13429                         $d_socket sys/socket.h 
13430                         $i_niin netinet/in.h 
13431                         $i_netdb netdb.h
13432                         $i_unistd unistd.h"
13433                 : The first arg can 'char *' or 'void *'
13434                 : The second arg is some of integral type
13435                 for xxx in in_addr_t 'const void *' 'const char *' 'void *' 'char *'; do
13436                         for yyy in size_t long int; do
13437                                 case "$netdb_host_type" in
13438                                 '')     try="extern struct hostent *gethostbyaddr($xxx, $yyy, int);"
13439                                         if ./protochk "$try" $hdrs; then
13440                                                 echo "Your system accepts $xxx for the first arg."
13441                                                 echo "...and $yyy for the second arg."
13442                                                 netdb_host_type="$xxx"
13443                                                 netdb_hlen_type="$yyy"
13444                                         fi
13445                                         ;;
13446                                 esac
13447                         done
13448                 done
13449                 : In case none of those worked, prompt the user.
13450                 case "$netdb_host_type" in
13451                 '')     rp='What is the type for the 1st argument to gethostbyaddr?'
13452                         dflt='char *'
13453                         . ./myread
13454                         netdb_host_type=$ans
13455                         rp='What is the type for the 2nd argument to gethostbyaddr?'
13456                         dflt="$sizetype"
13457                         . ./myread
13458                         netdb_hlen_type=$ans
13459                         ;;
13460                 esac
13461                 ;;
13462         *)      : no gethostbyaddr, so pick harmless defaults
13463                 netdb_host_type='char *'
13464                 netdb_hlen_type="$sizetype"
13465                 ;;
13466         esac
13467         # Remove the "const" if needed. -- but then we'll have a 
13468         # prototype clash!
13469         # netdb_host_type=`echo "$netdb_host_type" | sed 's/^const //'`
13470 fi
13471
13472 : check for type of argument to gethostbyname. 
13473 if test "X$netdb_name_type" = X ; then
13474         case "$d_gethbyname" in
13475         $define)
13476                 $cat <<EOM
13477
13478 Checking to see what type of argument is accepted by gethostbyname().
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                 for xxx in "const char *" "char *"; do
13486                         case "$netdb_name_type" in
13487                         '')     try="extern struct hostent *gethostbyname($xxx);"
13488                                 if ./protochk "$try" $hdrs; then
13489                                         echo "Your system accepts $xxx."
13490                                         netdb_name_type="$xxx"
13491                                 fi
13492                                 ;;
13493                         esac
13494                 done
13495                 : In case none of those worked, prompt the user.
13496                 case "$netdb_name_type" in
13497                 '')     rp='What is the type for the 1st argument to gethostbyname?'
13498                         dflt='char *'
13499                         . ./myread
13500                         netdb_name_type=$ans
13501                         ;;
13502                 esac
13503                 ;;
13504         *)      : no gethostbyname, so pick harmless default
13505                 netdb_name_type='char *'
13506                 ;;
13507         esac
13508 fi
13509
13510 : check for type of 1st argument to getnetbyaddr. 
13511 if test "X$netdb_net_type" = X ; then
13512         case "$d_getnbyaddr" in
13513         $define)
13514                 $cat <<EOM
13515
13516 Checking to see what type of 1st argument is accepted by getnetbyaddr().
13517 EOM
13518                 hdrs="$define sys/types.h
13519                         $d_socket sys/socket.h 
13520                         $i_niin netinet/in.h 
13521                         $i_netdb netdb.h
13522                         $i_unistd unistd.h"
13523                 for xxx in in_addr_t "unsigned long" long "unsigned int" int; do
13524                         case "$netdb_net_type" in
13525                         '')     try="extern struct netent *getnetbyaddr($xxx, int);"
13526                                 if ./protochk "$try" $hdrs; then
13527                                         echo "Your system accepts $xxx."
13528                                         netdb_net_type="$xxx"
13529                                 fi
13530                                 ;;
13531                         esac
13532                 done
13533                 : In case none of those worked, prompt the user.
13534                 case "$netdb_net_type" in
13535                 '')     rp='What is the type for the 1st argument to getnetbyaddr?'
13536                         dflt='long'
13537                         . ./myread
13538                         netdb_net_type=$ans
13539                         ;;
13540                 esac
13541                 ;;
13542         *)      : no getnetbyaddr, so pick harmless default
13543                 netdb_net_type='long'
13544                 ;;
13545         esac
13546 fi
13547 : locate the preferred pager for this system
13548 case "$pager" in
13549 '')
13550         dflt=''
13551         case "$pg" in
13552         /*) dflt=$pg;;
13553         esac
13554         case "$more" in
13555         /*) dflt=$more;;
13556         esac
13557         case "$less" in
13558         /*) dflt=$less;;
13559         esac
13560         case "$dflt" in
13561         '') dflt=/usr/ucb/more;;
13562         esac
13563         ;;
13564 *) dflt="$pager";;
13565 esac
13566 echo " "
13567 fn=f/
13568 rp='What pager is used on your system?'
13569 . ./getfile
13570 pager="$ans"
13571
13572 : see what type pids are declared as in the kernel
13573 rp="What is the type of process ids on this system?"
13574 set pid_t pidtype int stdio.h sys/types.h
13575 eval $typedef_ask
13576
13577 : Find earliest binary compatible site_perl subdirectory perl can use.
13578 case "$bincompat5005" in
13579 "$define") xs_apiversion='5.005' ;;
13580 *) xs_apiversion=$version ;;   # The current site_perl version.
13581 esac
13582 : Find earliest pure perl site_perl subdirectory perl can use.
13583 : The versioned directories started at 5.005.
13584 pm_apiversion='5.005'
13585
13586 : check for length of pointer
13587 echo " "
13588 case "$ptrsize" in
13589 '')
13590         echo "Checking to see how big your pointers are..." >&4
13591         if test "$voidflags" -gt 7; then
13592                 echo '#define VOID_PTR char *' > try.c
13593         else
13594                 echo '#define VOID_PTR void *' > try.c
13595         fi
13596         $cat >>try.c <<'EOCP'
13597 #include <stdio.h>
13598 int main()
13599 {
13600     printf("%d\n", (int)sizeof(VOID_PTR));
13601     exit(0);
13602 }
13603 EOCP
13604         set try
13605         if eval $compile_ok; then
13606                 ptrsize=`./try`
13607                 echo "Your pointers are $ptrsize bytes long."
13608         else
13609                 dflt='4'
13610                 echo "(I can't seem to compile the test program.  Guessing...)" >&4
13611                 rp="What is the size of a pointer (in bytes)?"
13612                 . ./myread
13613                 ptrsize="$ans"
13614         fi
13615         ;;
13616 esac
13617 $rm -f try.c try
13618
13619 : see if ar generates random libraries by itself
13620 echo " "
13621 echo "Checking how to generate random libraries on your machine..." >&4
13622 echo 'int bar1() { return bar2(); }' > bar1.c
13623 echo 'int bar2() { return 2; }' > bar2.c
13624 $cat > foo.c <<'EOP'
13625 int main() { printf("%d\n", bar1()); exit(0); }
13626 EOP
13627 $cc $ccflags -c bar1.c >/dev/null 2>&1
13628 $cc $ccflags -c bar2.c >/dev/null 2>&1
13629 $cc $ccflags -c foo.c >/dev/null 2>&1
13630 $ar rc bar$_a bar2$_o bar1$_o >/dev/null 2>&1
13631 if $cc $ccflags $ldflags -o foobar foo$_o bar$_a $libs > /dev/null 2>&1 &&
13632         ./foobar >/dev/null 2>&1; then
13633         echo "$ar appears to generate random libraries itself."
13634         orderlib=false
13635         ranlib=":"
13636 elif $ar ts bar$_a >/dev/null 2>&1 &&
13637         $cc $ccflags $ldflags -o foobar foo$_o bar$_a $libs > /dev/null 2>&1 &&
13638         ./foobar >/dev/null 2>&1; then
13639                 echo "a table of contents needs to be added with '$ar ts'."
13640                 orderlib=false
13641                 ranlib="$ar ts"
13642 else
13643         case "$ranlib" in
13644         :) ranlib='';;
13645         '')
13646                 ranlib=`./loc ranlib X /usr/bin /bin /usr/local/bin`
13647                 $test -f $ranlib || ranlib=''
13648                 ;;
13649         esac
13650         if $test -n "$ranlib"; then
13651                 echo "your system has '$ranlib'; we'll use that."
13652                 orderlib=false
13653         else
13654                 echo "your system doesn't seem to support random libraries"
13655                 echo "so we'll use lorder and tsort to order the libraries."
13656                 orderlib=true
13657                 ranlib=":"
13658         fi
13659 fi
13660 $rm -f foo* bar* 
13661
13662 : check for type of arguments to select. 
13663 case "$selecttype" in
13664 '') case "$d_select" in
13665         $define)
13666                 echo " "
13667                 $cat <<EOM
13668 Checking to see what type of arguments are accepted by select().
13669 EOM
13670                 hdrs="$define sys/types.h
13671                         $i_systime sys/time.h 
13672                         $i_sysselct sys/select.h
13673                         $d_socket sys/socket.h"
13674                 : The first arg can be int, unsigned, or size_t
13675                 : The last arg may or may not be 'const'
13676                 val=''
13677                 : void pointer has been seen but using that
13678                 : breaks the selectminbits test
13679                 for xxx in 'fd_set *' 'int *'; do
13680                         for nfd in 'int' 'size_t' 'unsigned long' 'unsigned' ; do
13681                                 for tmo in 'struct timeval *' 'const struct timeval *'; do
13682                                         case "$val" in
13683                                         '')     try="extern select _(($nfd, $xxx, $xxx, $xxx, $tmo));"
13684                                                 if ./protochk "$try" $hdrs; then
13685                                                         echo "Your system accepts $xxx."
13686                                                         val="$xxx"
13687                                                 fi
13688                                                 ;;
13689                                         esac
13690                                 done
13691                         done
13692                 done
13693                 case "$val" in
13694                 '')     rp='What is the type for the 2nd, 3rd, and 4th arguments to select?'
13695                         case "$d_fd_set" in
13696                                 $define) dflt="fd_set *" ;;
13697                                 *)              dflt="int *" ;;
13698                         esac
13699                         . ./myread
13700                         val=$ans
13701                         ;;
13702                 esac
13703                 selecttype="$val"
13704                 ;;
13705         *)      : no select, so pick a harmless default
13706                 selecttype='int *'
13707                 ;;
13708         esac
13709         ;;
13710 esac
13711
13712 : check for the select 'width'
13713 case "$selectminbits" in
13714 '') case "$d_select" in
13715         $define)
13716                 $cat <<EOM
13717
13718 Checking to see on how many bits at a time your select() operates...
13719 EOM
13720                 $cat >try.c <<EOCP
13721 #include <sys/types.h>
13722 #$i_time I_TIME
13723 #$i_systime I_SYS_TIME
13724 #$i_systimek I_SYS_TIME_KERNEL
13725 #ifdef I_TIME
13726 #   include <time.h>
13727 #endif
13728 #ifdef I_SYS_TIME
13729 #   ifdef I_SYS_TIME_KERNEL
13730 #       define KERNEL
13731 #   endif
13732 #   include <sys/time.h>
13733 #   ifdef I_SYS_TIME_KERNEL
13734 #       undef KERNEL
13735 #   endif
13736 #endif
13737 #$i_sysselct I_SYS_SELECT
13738 #ifdef I_SYS_SELECT
13739 #include <sys/select.h>
13740 #endif
13741 #$d_socket HAS_SOCKET
13742 #ifdef HAS_SOCKET
13743 #   include <sys/socket.h> /* Might include <sys/bsdtypes.h> */
13744 #endif
13745 #include <stdio.h>
13746 $selecttype b;
13747 #define S sizeof(*(b))
13748 #define MINBITS 64
13749 #define NBYTES (S * 8 > MINBITS ? S : MINBITS/8)
13750 #define NBITS  (NBYTES * 8)
13751 int main() {
13752     char s[NBYTES];
13753     struct timeval t;
13754     int i;
13755     FILE* fp;
13756     int fd;
13757
13758     fclose(stdin);
13759     fp = fopen("try.c", "r");
13760     if (fp == 0)
13761       exit(1);
13762     fd = fileno(fp);
13763     if (fd < 0)
13764       exit(2);
13765     b = ($selecttype)s;
13766     for (i = 0; i < NBITS; i++)
13767         FD_SET(i, b);
13768     t.tv_sec  = 0;
13769     t.tv_usec = 0;
13770     select(fd + 1, b, 0, 0, &t);
13771     for (i = NBITS - 1; i > fd && FD_ISSET(i, b); i--);
13772     printf("%d\n", i + 1);
13773     return 0;
13774 }
13775 EOCP
13776                 set try
13777                 if eval $compile_ok; then
13778                         selectminbits=`./try`
13779                         case "$selectminbits" in
13780                         '')     cat >&4 <<EOM
13781 Cannot figure out on how many bits at a time your select() operates.
13782 I'll play safe and guess it is 32 bits.
13783 EOM
13784                                 selectminbits=32
13785                                 bits="32 bits"
13786                                 ;;
13787                         1)      bits="1 bit" ;;
13788                         *)      bits="$selectminbits bits" ;;
13789                         esac
13790                         echo "Your select() operates on $bits at a time." >&4
13791                 else
13792                         rp='What is the minimum number of bits your select() operates on?'
13793                         case "$byteorder" in
13794                         1234|12345678)  dflt=32 ;;
13795                         *)              dflt=1  ;;
13796                         esac
13797                         . ./myread
13798                         val=$ans
13799                         selectminbits="$val"
13800                 fi
13801                 $rm -f try.* try
13802                 ;;
13803         *)      : no select, so pick a harmless default
13804                 selectminbits='32'
13805                 ;;
13806         esac
13807         ;;
13808 esac
13809
13810 : Trace out the files included by signal.h, then look for SIGxxx names.
13811 : Remove SIGARRAYSIZE used by HPUX.
13812 : Remove SIGSTKSIZE used by Linux.
13813 : Remove SIGSTKSZ used by Posix.
13814 : Remove SIGTYP void lines used by OS2.
13815 : Some cpps, like os390, dont give the file name anywhere
13816 if [ "X$fieldn" = X ]; then
13817         : Just make some guesses.  We check them later.
13818         xxx='/usr/include/signal.h /usr/include/sys/signal.h'
13819 else
13820         xxx=`echo '#include <signal.h>' |
13821         $cppstdin $cppminus $cppflags 2>/dev/null |
13822         $grep '^[       ]*#.*include' | 
13823         $awk "{print \\$$fieldn}" | $sed 's!"!!g' | $sort | $uniq`
13824 fi
13825 : Check this list of files to be sure we have parsed the cpp output ok.
13826 : This will also avoid potentially non-existent files, such 
13827 : as ../foo/bar.h
13828 xxxfiles=''
13829 for xx in $xxx /dev/null ; do
13830         $test -f "$xx" && xxxfiles="$xxxfiles $xx"
13831 done
13832 : If we have found no files, at least try signal.h
13833 case "$xxxfiles" in
13834 '')     xxxfiles=`./findhdr signal.h` ;;
13835 esac
13836 xxx=`awk '
13837 $1 ~ /^#define$/ && $2 ~ /^SIG[A-Z0-9]*$/ && $2 !~ /SIGARRAYSIZE/ && $2 !~ /SIGSTKSIZE/ && $2 !~ /SIGSTKSZ/ && $3 !~ /void/ {
13838         print substr($2, 4, 20)
13839 }
13840 $1 == "#" && $2 ~ /^define$/ && $3 ~ /^SIG[A-Z0-9]*$/ && $3 !~ /SIGARRAYSIZE/ && $4 !~ /void/ {
13841         print substr($3, 4, 20)
13842 }' $xxxfiles`
13843 : Append some common names just in case the awk scan failed.
13844 xxx="$xxx ABRT ALRM BUS CANCEL CHLD CLD CONT DIL EMT FPE"
13845 xxx="$xxx FREEZE HUP ILL INT IO IOT KILL LOST LWP PHONE"
13846 xxx="$xxx PIPE POLL PROF PWR QUIT RTMAX RTMIN SEGV STKFLT STOP"
13847 xxx="$xxx SYS TERM THAW TRAP TSTP TTIN TTOU URG USR1 USR2"
13848 xxx="$xxx USR3 USR4 VTALRM WAITING WINCH WIND WINDOW XCPU XFSZ"
13849
13850 : generate a few handy files for later
13851 $cat > signal.c <<'EOCP'
13852 #include <sys/types.h>
13853 #include <signal.h>
13854 #include <stdio.h>
13855 int main() {
13856
13857 /* Strange style to avoid deeply-nested #if/#else/#endif */
13858 #ifndef NSIG
13859 #  ifdef _NSIG
13860 #    define NSIG (_NSIG)
13861 #  endif
13862 #endif
13863
13864 #ifndef NSIG
13865 #  ifdef SIGMAX
13866 #    define NSIG (SIGMAX+1)
13867 #  endif
13868 #endif
13869
13870 #ifndef NSIG
13871 #  ifdef SIG_MAX
13872 #    define NSIG (SIG_MAX+1)
13873 #  endif
13874 #endif
13875
13876 #ifndef NSIG
13877 #  ifdef MAXSIG
13878 #    define NSIG (MAXSIG+1)
13879 #  endif
13880 #endif
13881
13882 #ifndef NSIG
13883 #  ifdef MAX_SIG
13884 #    define NSIG (MAX_SIG+1)
13885 #  endif
13886 #endif
13887
13888 #ifndef NSIG
13889 #  ifdef SIGARRAYSIZE
13890 #    define NSIG (SIGARRAYSIZE+1) /* Not sure of the +1 */
13891 #  endif
13892 #endif
13893
13894 #ifndef NSIG
13895 #  ifdef _sys_nsig
13896 #    define NSIG (_sys_nsig) /* Solaris 2.5 */
13897 #  endif
13898 #endif
13899
13900 /* Default to some arbitrary number that's big enough to get most
13901    of the common signals.
13902 */
13903 #ifndef NSIG
13904 #    define NSIG 50
13905 #endif
13906
13907 printf("NSIG %d\n", NSIG);
13908
13909 #ifndef JUST_NSIG
13910
13911 EOCP
13912
13913 echo $xxx | $tr ' ' $trnl | $sort | $uniq | $awk '
13914 {
13915         printf "#ifdef SIG"; printf $1; printf "\n"
13916         printf "printf(\""; printf $1; printf " %%d\\n\",SIG";
13917         printf $1; printf ");\n"
13918         printf "#endif\n"
13919 }
13920 END {
13921         printf "#endif /* JUST_NSIG */\n";
13922         printf "exit(0);\n}\n";
13923 }
13924 ' >>signal.c
13925 $cat >signal.awk <<'EOP'
13926 BEGIN { ndups = 0 }
13927 $1 ~ /^NSIG$/ { nsig = $2 }
13928 ($1 !~ /^NSIG$/) && (NF == 2) {
13929     if ($2 > maxsig) { maxsig = $2 }
13930     if (sig_name[$2]) {
13931         dup_name[ndups] = $1
13932         dup_num[ndups] = $2
13933         ndups++ 
13934     }
13935     else {
13936         sig_name[$2] = $1
13937         sig_num[$2] = $2
13938     }
13939 }
13940 END { 
13941     if (nsig == 0) {
13942         nsig = maxsig + 1
13943     }
13944     printf("NSIG %d\n", nsig);
13945     for (n = 1; n < nsig; n++) {
13946         if (sig_name[n]) {
13947             printf("%s %d\n", sig_name[n], sig_num[n])
13948         }
13949         else {
13950             printf("NUM%d %d\n", n, n) 
13951         }
13952     }
13953     for (n = 0; n < ndups; n++) {
13954         printf("%s %d\n", dup_name[n], dup_num[n])
13955     }
13956 }
13957 EOP
13958 $cat >signal_cmd <<EOS
13959 $startsh
13960 if $test -s signal.lst; then
13961     echo "Using your existing signal.lst file"
13962         exit 0
13963 fi
13964 xxx="$xxx"
13965 EOS
13966 $cat >>signal_cmd <<'EOS'
13967
13968 set signal
13969 if eval $compile_ok; then
13970         ./signal$_exe | $sort -n +1 | $uniq | $awk -f signal.awk >signal.lst
13971 else
13972         echo "(I can't seem be able to compile the whole test program)" >&4
13973         echo "(I'll try it in little pieces.)" >&4
13974         set signal -DJUST_NSIG
13975         if eval $compile_ok; then
13976                 ./signal$_exe > signal.nsg
13977                 $cat signal.nsg
13978         else
13979                 echo "I can't seem to figure out how many signals you have." >&4
13980                 echo "Guessing 50." >&4
13981                 echo 'NSIG 50' > signal.nsg
13982         fi
13983         : Now look at all the signal names, one at a time.
13984         for xx in `echo $xxx | $tr ' ' $trnl | $sort | $uniq`; do
13985                 $cat > signal.c <<EOCP
13986 #include <sys/types.h>
13987 #include <signal.h>
13988 #include <stdio.h>
13989 int main() {
13990 printf("$xx %d\n", SIG${xx});
13991 return 0;
13992 }
13993 EOCP
13994                 set signal
13995                 if eval $compile; then
13996                         echo "SIG${xx} found."
13997                         ./signal$_exe  >> signal.ls1
13998                 else
13999                         echo "SIG${xx} NOT found."
14000                 fi
14001         done
14002         if $test -s signal.ls1; then
14003                 $cat signal.nsg signal.ls1 |
14004                         $sort -n +1 | $uniq | $awk -f signal.awk >signal.lst
14005         fi
14006
14007 fi
14008 if $test -s signal.lst; then
14009         :
14010 else
14011         echo "(AAK! I can't compile the test programs -- Guessing)" >&4
14012         echo 'kill -l' >signal
14013         set X `csh -f <signal`
14014         $rm -f signal
14015         shift
14016         case $# in
14017         0) set HUP INT QUIT ILL TRAP ABRT EMT FPE KILL BUS SEGV SYS PIPE ALRM TERM;;
14018         esac
14019         echo $@ | $tr ' ' $trnl | \
14020             $awk '{ printf "%s %d\n", $1, ++s; }
14021                   END { printf "NSIG %d\n", ++s }' >signal.lst
14022 fi
14023 $rm -f signal.c signal$_exe signal$_o signal.nsg signal.ls1
14024 EOS
14025 chmod a+x signal_cmd
14026 $eunicefix signal_cmd
14027
14028 : generate list of signal names
14029 echo " "
14030 case "$sig_name_init" in
14031 '') doinit=yes ;;
14032 *)  case "$sig_num_init" in
14033     ''|*,*) doinit=yes ;;
14034     esac ;;
14035 esac
14036 case "$doinit" in
14037 yes)
14038         echo "Generating a list of signal names and numbers..." >&4
14039         . ./signal_cmd
14040         sig_count=`$awk '/^NSIG/ { printf "%d", $2 }' signal.lst`
14041         sig_name=`$awk 'BEGIN { printf "ZERO " }
14042                         !/^NSIG/ { printf "%s ", $1 }' signal.lst`
14043         sig_num=`$awk  'BEGIN { printf "0 " }
14044                         !/^NSIG/ { printf "%d ", $2 }' signal.lst`
14045         sig_name_init=`$awk 'BEGIN      { printf "\"ZERO\", " }
14046                              !/^NSIG/   { printf "\"%s\", ", $1 }
14047                              END        { printf "0\n" }' signal.lst`
14048         sig_num_init=`$awk  'BEGIN      { printf "0, " }
14049                              !/^NSIG/   { printf "%d, ", $2}
14050                              END        { printf "0\n"}' signal.lst`
14051         ;;
14052 esac
14053 echo "The following $sig_count signals are available:"
14054 echo " "
14055 echo $sig_name | $awk \
14056 'BEGIN { linelen = 0 }
14057 {
14058         for (i = 1; i <= NF; i++) {
14059                 name = "SIG" $i " "
14060                 linelen = linelen + length(name)
14061                 if (linelen > 70) {
14062                         printf "\n"
14063                         linelen = length(name)
14064                 }
14065                 printf "%s", name
14066         }
14067         printf "\n"
14068 }'
14069 $rm -f signal signal.c signal.awk signal.lst signal_cmd 
14070
14071 echo " "
14072 case "$sizetype" in
14073 *_t) zzz="$sizetype"    ;;
14074 *)   zzz="filesize"     ;;
14075 esac
14076 echo "Checking the size of $zzz..." >&4 
14077 cat > try.c <<EOCP
14078 #include <sys/types.h>
14079 #include <stdio.h>
14080 int main() {
14081     printf("%d\n", (int)sizeof($sizetype));
14082     exit(0);
14083 }
14084 EOCP
14085 set try
14086 if eval $compile_ok; then
14087         yyy=`./try`
14088         case "$yyy" in
14089         '')     sizesize=4
14090                 echo "(I can't execute the test program--guessing $sizesize.)" >&4
14091                 ;;
14092         *)      sizesize=$yyy
14093                 echo "Your $zzz size is $sizesize bytes."
14094                 ;;
14095         esac
14096 else
14097         sizesize=4
14098         echo "(I can't compile the test program--guessing $sizesize.)" >&4
14099 fi
14100
14101
14102 : check for socklen_t
14103 echo " "
14104 echo "Checking to see if you have socklen_t..." >&4
14105 $cat >try.c <<EOCP
14106 #include <sys/types.h>
14107 #$d_socket HAS_SOCKET
14108 #ifdef HAS_SOCKET
14109 #include <sys/socket.h>
14110 #endif
14111 int main() { socklen_t x = 16; }
14112 EOCP
14113 set try
14114 if eval $compile; then
14115         val="$define"
14116         echo "You have socklen_t."
14117 else
14118         val="$undef"
14119         echo "You do not have socklen_t."
14120         case "$sizetype" in
14121         size_t) echo "(You do have size_t, that might work. Some people are happy with just an int.)" ;;
14122         esac
14123 fi
14124 $rm -f try try.*
14125 set d_socklen_t
14126 eval $setvar
14127
14128 : check for type of the size argument to socket calls
14129 case "$d_socket" in
14130 "$define")
14131         $cat <<EOM
14132
14133 Checking to see what type is the last argument of accept().
14134 EOM
14135         hdrs="$define sys/types.h $d_socket sys/socket.h" 
14136         yyy=''
14137         case "$d_socklen_t" in
14138         "$define") yyy="$yyy socklen_t"
14139         esac
14140         yyy="$yyy $sizetype int long unsigned"
14141         for xxx in $yyy; do
14142                 case "$socksizetype" in
14143                 '')     try="extern int accept(int, struct sockaddr *, $xxx *);"
14144                         if ./protochk "$try" $hdrs; then
14145                                 echo "Your system accepts '$xxx *' for the last argument of accept()."
14146                                 socksizetype="$xxx"
14147                         fi
14148                         ;;
14149                 esac
14150         done
14151 : In case none of those worked, prompt the user.
14152         case "$socksizetype" in
14153         '')     rp='What is the type for socket address structure sizes?'
14154                 dflt='int'
14155                 . ./myread
14156                 socksizetype=$ans
14157                 ;;
14158         esac
14159         ;;
14160 *)      : no sockets, so pick relatively harmless default
14161         socksizetype='int'
14162         ;;
14163 esac
14164
14165 : see what type is used for signed size_t
14166 set ssize_t ssizetype int stdio.h sys/types.h
14167 eval $typedef
14168 dflt="$ssizetype"
14169 $cat > ssize.c <<EOM
14170 #include <stdio.h>
14171 #include <sys/types.h>
14172 #define Size_t $sizetype
14173 #define SSize_t $dflt
14174 int main()
14175 {
14176         if (sizeof(Size_t) == sizeof(SSize_t))
14177                 printf("$dflt\n");
14178         else if (sizeof(Size_t) == sizeof(int))
14179                 printf("int\n");
14180         else 
14181                 printf("long\n");
14182         exit(0);
14183 }
14184 EOM
14185 echo " "
14186 set ssize
14187 if eval $compile_ok && ./ssize > /dev/null; then
14188         ssizetype=`./ssize`
14189         echo "I'll be using $ssizetype for functions returning a byte count." >&4
14190 else
14191         $cat >&4 <<EOM
14192 Help! I can't compile and run the ssize_t test program: please enlighten me!
14193 (This is probably a misconfiguration in your system or libraries, and
14194 you really ought to fix it.  Still, I'll try anyway.)
14195
14196 I need a type that is the same size as $sizetype, but is guaranteed to
14197 be signed.  Common values are ssize_t, int and long.
14198
14199 EOM
14200         rp="What signed type is the same size as $sizetype?"
14201         . ./myread
14202         ssizetype="$ans"
14203 fi
14204 $rm -f ssize ssize.*
14205
14206 : see what type of char stdio uses.
14207 echo " "
14208 if $contains 'unsigned.*char.*_ptr;' `./findhdr stdio.h` >/dev/null 2>&1 ; then
14209         echo "Your stdio uses unsigned chars." >&4
14210         stdchar="unsigned char"
14211 else
14212         echo "Your stdio uses signed chars." >&4
14213         stdchar="char"
14214 fi
14215
14216 : see if time exists
14217 echo " "
14218 if test "X$d_time" = X -o X"$timetype" = X; then
14219     if set time val -f d_time; eval $csym; $val; then
14220                 echo 'time() found.' >&4
14221                 val="$define"
14222                 rp="What is the type returned by time() on this system?"
14223                 set time_t timetype long stdio.h sys/types.h
14224                 eval $typedef_ask
14225     else
14226                 echo 'time() not found, hope that will do.' >&4
14227                 val="$undef"
14228                 timetype='int';
14229     fi
14230     set d_time
14231     eval $setvar
14232 fi
14233
14234 : see what type uids are declared as in the kernel
14235 echo " "
14236 echo "Looking for the type for user ids returned by getuid()."
14237 set uid_t uidtype xxx stdio.h sys/types.h
14238 eval $typedef
14239 case "$uidtype" in
14240 xxx)
14241         xxx=`./findhdr sys/user.h`
14242         set `grep '_ruid;' "$xxx" 2>/dev/null` unsigned short
14243         case $1 in
14244         unsigned) dflt="$1 $2" ;;
14245         *) dflt="$1" ;;
14246         esac
14247         ;;
14248 *) dflt="$uidtype";;
14249 esac
14250 case "$uidtype" in
14251 uid_t)  echo "uid_t found." ;;
14252 *)      rp="What is the type for user ids returned by getuid()?"
14253         . ./myread
14254         uidtype="$ans"
14255         ;;
14256 esac
14257
14258 echo " "
14259 case "$uidtype" in
14260 *_t) zzz="$uidtype"     ;;
14261 *)   zzz="uid"          ;;
14262 esac
14263 echo "Checking the size of $zzz..." >&4 
14264 cat > try.c <<EOCP
14265 #include <sys/types.h>
14266 #include <stdio.h>
14267 int main() {
14268     printf("%d\n", (int)sizeof($uidtype));
14269     exit(0);
14270 }
14271 EOCP
14272 set try
14273 if eval $compile_ok; then
14274         yyy=`./try`
14275         case "$yyy" in
14276         '')     uidsize=4
14277                 echo "(I can't execute the test program--guessing $uidsize.)" >&4
14278                 ;;
14279         *)      uidsize=$yyy
14280                 echo "Your $zzz is $uidsize bytes long."
14281                 ;;
14282         esac
14283 else
14284         uidsize=4
14285         echo "(I can't compile the test program--guessing $uidsize.)" >&4
14286 fi
14287
14288 echo " "
14289 case "$uidtype" in
14290 *_t) zzz="$uidtype"     ;;
14291 *)   zzz="uid"          ;;
14292 esac
14293 echo "Checking the sign of $zzz..." >&4
14294 cat > try.c <<EOCP
14295 #include <sys/types.h>
14296 #include <stdio.h>
14297 int main() {
14298         $uidtype foo = -1;
14299         if (foo < 0)
14300                 printf("-1\n");
14301         else
14302                 printf("1\n");
14303 }
14304 EOCP
14305 set try
14306 if eval $compile; then
14307         yyy=`./try`
14308         case "$yyy" in
14309         '')     uidsign=1
14310                 echo "(I can't execute the test program--guessing unsigned.)" >&4
14311                 ;;
14312         *)      uidsign=$yyy
14313                 case "$uidsign" in
14314                  1) echo "Your $zzz is unsigned." ;;
14315                 -1) echo "Your $zzz is signed."   ;;
14316                 esac
14317                 ;;
14318         esac
14319 else
14320         uidsign=1
14321         echo "(I can't compile the test program--guessing unsigned.)" >&4
14322 fi
14323
14324
14325
14326 echo " "
14327 $echo "Checking the format string to be used for uids..." >&4
14328
14329 case "$uidsign" in
14330 -1)     if $test X"$uidsize" = X"$ivsize"; then
14331                 uidformat="$ivdformat"
14332         else
14333                 if $test X"$uidsize" = X"$longsize"; then
14334                         uidformat='"ld"'
14335                 else
14336                         if $test X"$uidsize" = X"$intsize"; then
14337                                 uidformat='"d"'
14338                         else
14339                                 if $test X"$uidsize" = X"$shortsize"; then
14340                                         uidformat='"hd"'
14341                                 fi
14342                         fi
14343                 fi
14344         fi
14345         ;;
14346 *)      if $test X"$uidsize" = X"$uvsize"; then
14347                 uidformat="$uvuformat"
14348         else
14349                 if $test X"$uidsize" = X"$longsize"; then
14350                         uidformat='"lu"'
14351                 else
14352                         if $test X"$uidsize" = X"$intsize"; then
14353                                 uidformat='"u"'
14354                         else
14355                                 if $test X"$uidsize" = X"$shortsize"; then
14356                                         uidformat='"hu"'
14357                                 fi
14358                         fi
14359                 fi
14360         fi
14361         ;;
14362 esac
14363
14364 : see if dbm.h is available
14365 : see if dbmclose exists
14366 set dbmclose d_dbmclose
14367 eval $inlibc
14368
14369 case "$d_dbmclose" in
14370 $define)
14371         set dbm.h i_dbm
14372         eval $inhdr
14373         case "$i_dbm" in
14374         $define)
14375                 val="$undef"
14376                 set i_rpcsvcdbm
14377                 eval $setvar
14378                 ;;
14379         *)      set rpcsvc/dbm.h i_rpcsvcdbm
14380                 eval $inhdr
14381                 ;;
14382         esac
14383         ;;
14384 *)      echo "We won't be including <dbm.h>"
14385         val="$undef"
14386         set i_dbm
14387         eval $setvar
14388         val="$undef"
14389         set i_rpcsvcdbm
14390         eval $setvar
14391         ;;
14392 esac
14393
14394 : see if this is a sys/file.h system
14395 val=''
14396 set sys/file.h val
14397 eval $inhdr
14398
14399 : do we need to include sys/file.h ?
14400 case "$val" in
14401 "$define")
14402         echo " "
14403         if $h_sysfile; then
14404                 val="$define"
14405                 echo "We'll be including <sys/file.h>." >&4
14406         else
14407                 val="$undef"
14408                 echo "We won't be including <sys/file.h>." >&4
14409         fi
14410         ;;
14411 *)
14412         h_sysfile=false
14413         ;;
14414 esac
14415 set i_sysfile
14416 eval $setvar
14417
14418 : see if fcntl.h is there
14419 val=''
14420 set fcntl.h val
14421 eval $inhdr
14422
14423 : see if we can include fcntl.h
14424 case "$val" in
14425 "$define")
14426         echo " "
14427         if $h_fcntl; then
14428                 val="$define"
14429                 echo "We'll be including <fcntl.h>." >&4
14430         else
14431                 val="$undef"
14432                 if $h_sysfile; then
14433         echo "We don't need to include <fcntl.h> if we include <sys/file.h>." >&4
14434                 else
14435                         echo "We won't be including <fcntl.h>." >&4
14436                 fi
14437         fi
14438         ;;
14439 *)
14440         h_fcntl=false
14441         val="$undef"
14442         ;;
14443 esac
14444 set i_fcntl
14445 eval $setvar
14446
14447 : see if this is a iconv.h system
14448 set iconv.h i_iconv
14449 eval $inhdr
14450
14451 : see if this is a ieeefp.h system
14452 set ieeefp.h i_ieeefp
14453 eval $inhdr
14454
14455 : see if this is a libutil.h system
14456 set libutil.h i_libutil
14457 eval $inhdr
14458
14459 : see if locale.h is available
14460 set locale.h i_locale
14461 eval $inhdr
14462
14463 : see if mach cthreads are available
14464 if test "X$usethreads" = "X$define"; then
14465         set mach/cthreads.h i_machcthr
14466         eval $inhdr
14467 else
14468         i_machcthr="$undef"
14469 fi
14470
14471
14472
14473 : see if this is a math.h system
14474 set math.h i_math
14475 eval $inhdr
14476
14477 : see if this is a mntent.h system
14478 set mntent.h i_mntent
14479 eval $inhdr
14480
14481 : see if ndbm.h is available
14482 set ndbm.h t_ndbm
14483 eval $inhdr
14484 case "$t_ndbm" in
14485 $define)
14486         : see if dbm_open exists
14487         set dbm_open d_dbm_open
14488         eval $inlibc
14489         case "$d_dbm_open" in
14490         $undef)
14491                 t_ndbm="$undef"
14492                 echo "We won't be including <ndbm.h>"
14493                 ;;
14494         esac
14495         ;;
14496 esac
14497 val="$t_ndbm"
14498 set i_ndbm
14499 eval $setvar
14500
14501 : see if net/errno.h is available
14502 val=''
14503 set net/errno.h val
14504 eval $inhdr
14505
14506 : Unfortunately, it causes problems on some systems.  Arrgh.
14507 case "$val" in
14508 $define)
14509         cat > try.c <<'EOM'
14510 #include <stdio.h>
14511 #include <errno.h>
14512 #include <net/errno.h>
14513 int func()
14514 {
14515         return ENOTSOCK;
14516 }
14517 EOM
14518         if $cc $ccflags -c try.c >/dev/null 2>&1; then
14519                 echo "We'll be including <net/errno.h>." >&4
14520         else
14521                 echo "We won't be including <net/errno.h>." >&4
14522                 val="$undef"
14523         fi
14524         $rm -f try.* try
14525         ;;
14526 esac
14527 set i_neterrno
14528 eval $setvar
14529
14530 : see if netinet/tcp.h is available
14531 set netinet/tcp.h i_netinettcp
14532 eval $inhdr
14533
14534 : see if this is a poll.h system
14535 set poll.h i_poll
14536 eval $inhdr
14537
14538 : see if this is a prot.h system
14539 set prot.h i_prot
14540 eval $inhdr
14541
14542 echo " "
14543 $echo "Guessing which symbols your C compiler and preprocessor define..." >&4 
14544 $cat <<'EOSH' > Cppsym.know
14545 a29k ABI64 aegis AES_SOURCE AIX AIX32 AIX370
14546 AIX41 AIX42 AIX43 AIX_SOURCE aixpc ALL_SOURCE
14547 alliant alpha am29000 AM29000 amiga AMIGAOS AMIX
14548 ansi ANSI_C_SOURCE apollo ardent atarist att386 att3b BeOS
14549 BIG_ENDIAN BIT_MSF bsd BSD bsd43 bsd4_2 bsd4_3 BSD4_3 bsd4_4
14550 BSD_4_3 BSD_4_4 BSD_NET2 BSD_TIME BSD_TYPES BSDCOMPAT bsdi
14551 bull c cadmus clipper CMU COFF COMPILER_VERSION
14552 concurrent convex cpu cray CRAY CRAYMPP ctix CX_UX
14553 CYGWIN DGUX DGUX_SOURCE DJGPP dmert DOLPHIN DPX2 DSO
14554 Dynix DynixPTX ELF encore EPI EXTENSIONS FILE_OFFSET_BITS
14555 FreeBSD GCC_NEW_VARARGS gcos gcx gimpel
14556 GNU_SOURCE GNUC GNUC_MINOR GO32 gould GOULD_PN
14557 H3050R H3050RX hbullx20 hcx host_mips
14558 hp200 hp300 hp700 HP700 hp800 hp9000
14559 hp9000s200 hp9000s300 hp9000s400 hp9000s500
14560 hp9000s700 hp9000s800 hp9k8 hp_osf hppa hpux HPUX_SOURCE
14561 i186 i286 i386 i486 i586 i686 i8086 i80960 i860 I960
14562 iAPX286 ibm ibm032 ibmesa IBMR2 ibmrt ILP32 ILP64
14563 INLINE_INTRINSICS INTRINSICS INT64 interdata is68k ksr1
14564 LANGUAGE_C LARGE_FILE_API LARGEFILE64_SOURCE
14565 LARGEFILE_SOURCE LFS64_LARGEFILE LFS_LARGEFILE
14566 Linux LITTLE_ENDIAN LONG64 LONG_DOUBLE LONG_LONG
14567 LONGDOUBLE LONGLONG LP64 luna luna88k Lynx
14568 M68000 m68k m88100 m88k M88KBCS_TARGET M_COFF
14569 M_I186 M_I286 M_I386 M_I8086 M_I86 M_I86SM M_SYS3
14570 M_SYS5 M_SYSIII M_SYSV M_UNIX M_XENIX MACH machine MachTen
14571 MATH_HAS_NO_SIDE_EFFECTS
14572 mc300 mc500 mc68000 mc68010 mc68020 mc68030 mc68040
14573 mc68060 mc68k mc68k32 mc700 mc88000 mc88100 merlin
14574 mert MiNT mips MIPS_FPSET MIPS_ISA MIPS_SIM MIPS_SZINT
14575 MIPS_SZLONG MIPS_SZPTR MIPSEB MIPSEL MODERN_C motorola
14576 mpeix MSDOS MTXINU MULTIMAX mvs MVS n16 ncl_el ncl_mr
14577 NetBSD news1500 news1700 news1800 news1900 news3700
14578 news700 news800 news900 NeXT NLS ns16000 ns32000
14579 ns32016 ns32332 ns32k nsc32000
14580 OCS88 OEMVS OpenBSD os OS2 OS390 osf OSF1 OSF_SOURCE
14581 pa_risc PA_RISC1_1 PA_RISC2_0 PARAGON parisc
14582 pc532 pdp11 PGC PIC plexus PORTAR posix
14583 POSIX1B_SOURCE POSIX2_SOURCE POSIX4_SOURCE
14584 POSIX_C_SOURCE POSIX_SOURCE POWER
14585 PROTOTYPES PWB pyr QNX R3000 REENTRANT RES Rhapsody RISC6000
14586 riscix riscos RT scs SCO sequent sgi SGI_SOURCE sinix
14587 SIZE_INT SIZE_LONG SIZE_PTR SOCKET_SOURCE SOCKETS_SOURCE
14588 sony sony_news sonyrisc sparc sparclite spectrum
14589 stardent stdc STDC_EXT stratos sun sun3 sun386
14590 Sun386i svr3 svr4 SVR4_2 SVR4_SOURCE svr5
14591 SX system SYSTYPE_BSD SYSTYPE_BSD43 SYSTYPE_BSD44
14592 SYSTYPE_SVR4 SYSTYPE_SVR5 SYSTYPE_SYSV SYSV SYSV3 SYSV4 SYSV5
14593 sysV68 sysV88 Tek4132 Tek4300 titan
14594 tower tower32 tower32_200 tower32_600 tower32_700
14595 tower32_800 tower32_850 tss
14596 u370 u3b u3b2 u3b20 u3b200 u3b20d u3b5
14597 ultrix UMAXV UnicomPBB UnicomPBD UNICOS UNICOSMK
14598 unix UNIX95 UNIX99 unixpc unos USGr4 USGr4_2
14599 Utek UTek UTS UWIN uxpm uxps vax venix VMESA vms xenix Xenix286
14600 XOPEN_SOURCE XOPEN_SOURCE_EXTENDED XPG2 XPG2_EXTENDED
14601 XPG3 XPG3_EXTENDED XPG4 XPG4_EXTENDED
14602 z8000
14603 EOSH
14604 # Maybe put other stuff here too.
14605 cat <<EOSH >>Cppsym.know
14606 $osname
14607 EOSH
14608 ./tr '[a-z]' '[A-Z]' < Cppsym.know > Cppsym.a
14609 ./tr '[A-Z]' '[a-z]' < Cppsym.know > Cppsym.b
14610 $cat Cppsym.know > Cppsym.c
14611 $cat Cppsym.a Cppsym.b Cppsym.c | $tr ' ' $trnl | sort | uniq > Cppsym.know
14612 $rm -f Cppsym.a Cppsym.b Cppsym.c
14613 cat <<EOSH > Cppsym
14614 $startsh
14615 if $test \$# -gt 0; then
14616     echo \$* | $tr " " "$trnl" | ./Cppsym.try > Cppsym.got
14617     if $test -s Cppsym.got; then
14618         $rm -f Cppsym.got
14619         exit 0
14620     fi
14621     $rm -f Cppsym.got
14622     exit 1
14623 else
14624     $tr " " "$trnl" | ./Cppsym.try
14625     exit 0
14626 fi
14627 EOSH
14628 chmod +x Cppsym
14629 $eunicefix Cppsym
14630 cat <<EOSH > Cppsym.try
14631 $startsh
14632 cat <<'EOCP' > try.c
14633 #include <stdio.h>
14634 int main() {
14635 EOCP
14636 $awk \\
14637 EOSH
14638 cat <<'EOSH' >> Cppsym.try
14639 'length($1) > 0 {
14640     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
14641     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
14642     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
14643     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
14644 }'       >> try.c
14645 echo '}' >> try.c
14646 EOSH
14647 cat <<EOSH >> Cppsym.try
14648 ccflags="$ccflags"
14649 case "$osname-$gccversion" in
14650 irix-) ccflags="\$ccflags -woff 1178" ;;
14651 os2-*) ccflags="\$ccflags -Zlinker /PM:VIO" ;;
14652 esac
14653 $cc $optimize \$ccflags $ldflags -o try try.c $libs && ./try$exe_ext
14654 EOSH
14655 chmod +x Cppsym.try
14656 $eunicefix Cppsym.try
14657 ./Cppsym < Cppsym.know > Cppsym.true
14658 : now check the C compiler for additional symbols
14659 postprocess_cc_v=''
14660 case "$osname" in
14661 aix) postprocess_cc_v="|$tr , ' '" ;;
14662 esac
14663 $cat >ccsym <<EOS
14664 $startsh
14665 $cat >tmp.c <<EOF
14666 extern int foo;
14667 EOF
14668 for i in \`$cc -v -c tmp.c 2>&1 $postprocess_cc_v\`
14669 do
14670         case "\$i" in
14671         -D*) echo "\$i" | $sed 's/^-D//';;
14672         -A*) $test "$gccversion" && echo "\$i" | $sed 's/^-A\(.*\)(\(.*\))/\1=\2/';;
14673         esac
14674 done
14675 $rm -f try.c
14676 EOS
14677 postprocess_cc_v=''
14678 chmod +x ccsym
14679 $eunicefix ccsym
14680 ./ccsym > ccsym1.raw
14681 if $test -s ccsym1.raw; then
14682        $sort ccsym1.raw | $uniq >ccsym.raw
14683 else
14684        mv ccsym1.raw ccsym.raw
14685 fi
14686
14687 $awk '/\=/ { print $0; next }
14688         { print $0"=1" }' ccsym.raw >ccsym.list
14689 $awk '/\=/ { print $0; next }
14690         { print $0"=1" }' Cppsym.true >ccsym.true
14691 $comm -13 ccsym.true ccsym.list >ccsym.own
14692 $comm -12 ccsym.true ccsym.list >ccsym.com
14693 $comm -23 ccsym.true ccsym.list >ccsym.cpp
14694 also=''
14695 if $test -z ccsym.raw; then
14696         echo "Your C compiler doesn't seem to define any symbols!" >&4
14697         echo " "
14698         echo "However, your C preprocessor defines the following symbols:"
14699         $cat Cppsym.true
14700         ccsymbols=''
14701         cppsymbols=`$cat Cppsym.true`
14702         cppsymbols=`echo $cppsymbols`
14703         cppccsymbols="$cppsymbols"
14704 else
14705         if $test -s ccsym.com; then
14706                 echo "Your C compiler and pre-processor define these symbols:"
14707                 $sed -e 's/\(..*\)=.*/\1/' ccsym.com
14708                 also='also '
14709                 symbols='ones'
14710                 cppccsymbols=`$cat ccsym.com`
14711                 cppccsymbols=`echo $cppccsymbols`
14712                 $test "$silent" || sleep 1
14713         fi
14714         if $test -s ccsym.cpp; then
14715                 $test "$also" && echo " "
14716                 echo "Your C pre-processor ${also}defines the following symbols:"
14717                 $sed -e 's/\(..*\)=.*/\1/' ccsym.cpp
14718                 also='further '
14719                 cppsymbols=`$cat ccsym.cpp`
14720                 cppsymbols=`echo $cppsymbols`
14721                 $test "$silent" || sleep 1
14722         fi
14723         if $test -s ccsym.own; then
14724                 $test "$also" && echo " "
14725                 echo "Your C compiler ${also}defines the following cpp symbols:"
14726                 $sed -e 's/\(..*\)=1/\1/' ccsym.own
14727                 $sed -e 's/\(..*\)=.*/\1/' ccsym.own | $uniq >>Cppsym.true
14728                 ccsymbols=`$cat ccsym.own`
14729                 ccsymbols=`echo $ccsymbols`
14730                 $test "$silent" || sleep 1
14731         fi
14732 fi
14733 $rm -f ccsym* Cppsym.*
14734
14735 : see if this is a termio system
14736 val="$undef"
14737 val2="$undef"
14738 val3="$undef"
14739 if $test `./findhdr termios.h`; then
14740         set tcsetattr i_termios
14741         eval $inlibc
14742         val3="$i_termios"
14743 fi
14744 echo " "
14745 case "$val3" in
14746 "$define") echo "You have POSIX termios.h... good!" >&4;;
14747 *) if ./Cppsym pyr; then
14748                 case "`/bin/universe`" in
14749                 ucb) if $test `./findhdr sgtty.h`; then
14750                                 val2="$define"
14751                                 echo "<sgtty.h> found." >&4
14752                         else
14753                                 echo "System is pyramid with BSD universe."
14754                                 echo "<sgtty.h> not found--you could have problems." >&4
14755                         fi;;
14756                 *) if $test `./findhdr termio.h`; then
14757                                 val="$define"
14758                                 echo "<termio.h> found." >&4
14759                         else
14760                                 echo "System is pyramid with USG universe."
14761                                 echo "<termio.h> not found--you could have problems." >&4
14762                         fi;;
14763                 esac
14764         elif ./usg; then
14765                 if $test `./findhdr termio.h`; then
14766                         echo "<termio.h> found." >&4
14767                         val="$define"
14768                 elif $test `./findhdr sgtty.h`; then
14769                         echo "<sgtty.h> found." >&4
14770                         val2="$define"
14771                 else
14772 echo "Neither <termio.h> nor <sgtty.h> found--you could have problems." >&4
14773                 fi
14774         else
14775                 if $test `./findhdr sgtty.h`; then
14776                         echo "<sgtty.h> found." >&4
14777                         val2="$define"
14778                 elif $test `./findhdr termio.h`; then
14779                         echo "<termio.h> found." >&4
14780                         val="$define"
14781                 else
14782 echo "Neither <sgtty.h> nor <termio.h> found--you could have problems." >&4
14783                 fi
14784         fi;;
14785 esac
14786 set i_termio; eval $setvar
14787 val=$val2; set i_sgtty; eval $setvar
14788 val=$val3; set i_termios; eval $setvar
14789
14790 : see if this is a shadow.h system
14791 set shadow.h i_shadow
14792 eval $inhdr
14793
14794 : see if this is a socks.h system
14795 set socks.h i_socks
14796 eval $inhdr
14797
14798 : see if stdarg is available
14799 echo " "
14800 if $test `./findhdr stdarg.h`; then
14801         echo "<stdarg.h> found." >&4
14802         valstd="$define"
14803 else
14804         echo "<stdarg.h> NOT found." >&4
14805         valstd="$undef"
14806 fi
14807
14808 : see if varags is available
14809 echo " "
14810 if $test `./findhdr varargs.h`; then
14811         echo "<varargs.h> found." >&4
14812 else
14813         echo "<varargs.h> NOT found, but that's ok (I hope)." >&4
14814 fi
14815
14816 : set up the varargs testing programs
14817 $cat > varargs.c <<EOP
14818 #ifdef I_STDARG
14819 #include <stdarg.h>
14820 #endif
14821 #ifdef I_VARARGS
14822 #include <varargs.h>
14823 #endif
14824
14825 #ifdef I_STDARG
14826 int f(char *p, ...)
14827 #else
14828 int f(va_alist)
14829 va_dcl
14830 #endif
14831 {
14832         va_list ap;
14833 #ifndef I_STDARG
14834         char *p;
14835 #endif
14836 #ifdef I_STDARG
14837         va_start(ap,p);
14838 #else
14839         va_start(ap);
14840         p = va_arg(ap, char *);
14841 #endif
14842         va_end(ap);
14843 }
14844 EOP
14845 $cat > varargs <<EOP
14846 $startsh
14847 if $cc -c $ccflags -D\$1 varargs.c >/dev/null 2>&1; then
14848         echo "true"
14849 else
14850         echo "false"
14851 fi
14852 $rm -f varargs$_o
14853 EOP
14854 chmod +x varargs
14855
14856 : now check which varargs header should be included
14857 echo " "
14858 i_varhdr=''
14859 case "$valstd" in
14860 "$define")
14861         if `./varargs I_STDARG`; then
14862                 val='stdarg.h'
14863         elif `./varargs I_VARARGS`; then
14864                 val='varargs.h'
14865         fi
14866         ;;
14867 *)
14868         if `./varargs I_VARARGS`; then
14869                 val='varargs.h'
14870         fi
14871         ;;
14872 esac
14873 case "$val" in
14874 '')
14875 echo "I could not find the definition for va_dcl... You have problems..." >&4
14876         val="$undef"; set i_stdarg; eval $setvar
14877         val="$undef"; set i_varargs; eval $setvar
14878         ;;
14879 *) 
14880         set i_varhdr
14881         eval $setvar
14882         case "$i_varhdr" in
14883         stdarg.h)
14884                 val="$define"; set i_stdarg; eval $setvar
14885                 val="$undef"; set i_varargs; eval $setvar
14886                 ;;
14887         varargs.h)
14888                 val="$undef"; set i_stdarg; eval $setvar
14889                 val="$define"; set i_varargs; eval $setvar
14890                 ;;
14891         esac
14892         echo "We'll include <$i_varhdr> to get va_dcl definition." >&4;;
14893 esac
14894 $rm -f varargs*
14895
14896 : see if stddef is available
14897 set stddef.h i_stddef
14898 eval $inhdr
14899
14900 : see if this is a sunmath.h system
14901 set sunmath.h i_sunmath
14902 eval $inhdr
14903
14904 : see if sys/access.h is available
14905 set sys/access.h i_sysaccess
14906 eval $inhdr
14907
14908 : see if ioctl defs are in sgtty, termio, sys/filio or sys/ioctl
14909 set sys/filio.h i_sysfilio
14910 eval $inhdr
14911 echo " "
14912 if $test `./findhdr sys/ioctl.h`; then
14913         val="$define"
14914         echo '<sys/ioctl.h> found.' >&4
14915 else
14916         val="$undef"
14917         if $test $i_sysfilio = "$define"; then
14918             echo '<sys/ioctl.h> NOT found.' >&4
14919         else
14920                 $test $i_sgtty = "$define" && xxx="sgtty.h"
14921                 $test $i_termio = "$define" && xxx="termio.h"
14922                 $test $i_termios = "$define" && xxx="termios.h"
14923 echo "No <sys/ioctl.h> found, assuming ioctl args are defined in <$xxx>." >&4
14924         fi
14925 fi
14926 set i_sysioctl
14927 eval $setvar
14928
14929
14930 : see if this is a syslog.h system
14931 set syslog.h i_syslog
14932 eval $inhdr
14933
14934
14935 : see if this is a sys/mode.h system
14936 set sys/mode.h i_sysmode
14937 eval $inhdr
14938
14939 : see if sys/resource.h has to be included
14940 set sys/resource.h i_sysresrc
14941 eval $inhdr
14942
14943 : see if sys/security.h is available
14944 set sys/security.h i_syssecrt
14945 eval $inhdr
14946
14947 : see if this is a sys/statvfs.h system
14948 set sys/statvfs.h i_sysstatvfs
14949 eval $inhdr
14950
14951 : see if this is a sys/uio.h system
14952 set sys/uio.h i_sysuio
14953 eval $inhdr
14954
14955 : see if this is a sys/un.h system
14956 set sys/un.h i_sysun
14957 eval $inhdr
14958
14959
14960 : see if this is a sys/utsname.h system
14961 set sys/utsname.h i_sysutsname
14962 eval $inhdr
14963
14964 : see if this is a syswait system
14965 set sys/wait.h i_syswait
14966 eval $inhdr
14967
14968 : see if this is a ustat.h system
14969 set ustat.h i_ustat
14970 eval $inhdr
14971
14972 : see if this is an utime system
14973 set utime.h i_utime
14974 eval $inhdr
14975
14976 : see if this is a values.h system
14977 set values.h i_values
14978 eval $inhdr
14979
14980 : see if this is a vfork system
14981 case "$d_vfork" in
14982 "$define")
14983         set vfork.h i_vfork
14984         eval $inhdr
14985         ;;
14986 *)
14987         i_vfork="$undef"
14988         ;;
14989 esac
14990
14991 : see if gdbm.h is available
14992 set gdbm.h t_gdbm
14993 eval $inhdr
14994 case "$t_gdbm" in
14995 $define)
14996         : see if gdbm_open exists
14997         set gdbm_open d_gdbm_open
14998         eval $inlibc
14999         case "$d_gdbm_open" in
15000         $undef)
15001                 t_gdbm="$undef"
15002                 echo "We won't be including <gdbm.h>"
15003                 ;;
15004         esac
15005         ;;
15006 esac
15007 val="$t_gdbm"
15008 set i_gdbm
15009 eval $setvar
15010
15011 echo " "
15012 echo "Looking for extensions..." >&4
15013 : If we are using the old config.sh, known_extensions may contain
15014 : old or inaccurate or duplicate values.
15015 known_extensions=''
15016 nonxs_extensions=''
15017 : We do not use find because it might not be available.
15018 : We do not just use MANIFEST because the user may have dropped
15019 : some additional extensions into the source tree and expect them
15020 : to be built.
15021
15022 : Function to recursively find available extensions, ignoring DynaLoader
15023 : NOTE: recursion limit of 10 to prevent runaway in case of symlink madness
15024 find_extensions='
15025     for xxx in *; do
15026        case "$xxx" in
15027            DynaLoader|dynaload) ;;
15028            *)
15029            if $test -f $xxx/$xxx.xs; then
15030                known_extensions="$known_extensions $1$xxx";
15031            elif $test -f $xxx/Makefile.PL; then
15032                nonxs_extensions="$nonxs_extensions $1$xxx";
15033            else
15034                if $test -d $xxx -a $# -lt 10; then
15035                    set $1$xxx/ $*;
15036                    cd $xxx;
15037                    eval $find_extensions;
15038                    cd ..;
15039                    shift;
15040                fi;
15041            fi
15042            ;;
15043        esac;
15044     done'
15045 tdir=`pwd`
15046 cd $rsrc/ext
15047 set X
15048 shift
15049 eval $find_extensions
15050 set X $nonxs_extensions
15051 shift
15052 nonxs_extensions="$*"
15053 set X $known_extensions
15054 shift
15055 known_extensions="$*"
15056 cd $tdir
15057
15058 : Now see which are supported on this system.
15059 avail_ext=''
15060 for xxx in $known_extensions ; do
15061         case "$xxx" in
15062         DB_File|db_file)
15063                 case "$i_db" in
15064                 $define) avail_ext="$avail_ext $xxx" ;;
15065                 esac
15066                 ;;
15067         GDBM_File|gdbm_fil)
15068                 case "$i_gdbm" in 
15069                 $define) avail_ext="$avail_ext $xxx" ;;
15070                 esac
15071                 ;;
15072         NDBM_File|ndbm_fil)
15073                 case "$i_ndbm" in
15074                 $define)
15075                     case "$osname-$use64bitint" in
15076                     hpux-define)
15077                         case "$libs" in
15078                         *-lndbm*) avail_ext="$avail_ext $xxx" ;;
15079                         esac
15080                         ;;
15081                     *) avail_ext="$avail_ext $xxx" ;;
15082                     esac
15083                     ;;
15084                 esac
15085                 ;;
15086         ODBM_File|odbm_fil) 
15087                 case "${i_dbm}${i_rpcsvcdbm}" in
15088                 *"${define}"*)
15089                     case "$osname-$use64bitint" in
15090                     hpux-define)
15091                         case "$libs" in
15092                         *-ldbm*) avail_ext="$avail_ext $xxx" ;;
15093                         esac
15094                         ;;
15095                     *) avail_ext="$avail_ext $xxx" ;;
15096                     esac
15097                     ;;
15098                 esac
15099                 ;;
15100         POSIX|posix)
15101                 case "$useposix" in
15102                 true|define|y) avail_ext="$avail_ext $xxx" ;;
15103                 esac
15104                 ;;
15105         Opcode|opcode)
15106                 case "$useopcode" in
15107                 true|define|y) avail_ext="$avail_ext $xxx" ;;
15108                 esac
15109                 ;;
15110         Socket|socket)
15111                 case "$d_socket" in 
15112                 true|$define|y) avail_ext="$avail_ext $xxx" ;;
15113                 esac
15114                 ;;
15115         Sys/Syslog|sys/syslog)
15116                 : XXX syslog requires socket
15117                 case "$d_socket" in 
15118                 true|$define|y) avail_ext="$avail_ext $xxx" ;;
15119                 esac
15120                 ;;
15121         Thread|thread)
15122                 case "$usethreads" in 
15123                 true|$define|y) avail_ext="$avail_ext $xxx" ;;
15124                 esac
15125                 ;;
15126         IPC/SysV|ipc/sysv)
15127                 : XXX Do we need a useipcsysv variable here
15128                 case "${d_msg}${d_sem}${d_shm}" in 
15129                 *"${define}"*) avail_ext="$avail_ext $xxx" ;;
15130                 esac
15131                 ;;
15132         *)      avail_ext="$avail_ext $xxx"
15133                 ;;
15134         esac
15135 done
15136
15137 set X $avail_ext
15138 shift
15139 avail_ext="$*"
15140
15141 : Now see which nonxs extensions are supported on this system.
15142 : For now assume all are.
15143 nonxs_ext=''
15144 for xxx in $nonxs_extensions ; do
15145         case "$xxx" in
15146         *)      nonxs_ext="$nonxs_ext $xxx"
15147                 ;;
15148         esac
15149 done
15150
15151 set X $nonxs_ext
15152 shift
15153 nonxs_ext="$*"
15154
15155 case $usedl in
15156 $define)
15157         $cat <<EOM
15158 A number of extensions are supplied with $package.  You may choose to
15159 compile these extensions for dynamic loading (the default), compile
15160 them into the $package executable (static loading), or not include
15161 them at all.  Answer "none" to include no extensions.
15162 Note that DynaLoader is always built and need not be mentioned here.
15163
15164 EOM
15165         case "$dynamic_ext" in
15166         '') dflt="$avail_ext" ;;
15167         *)      dflt="$dynamic_ext"
15168                 # Perhaps we are reusing an old out-of-date config.sh.
15169                 case "$hint" in
15170                 previous)
15171                         if test X"$dynamic_ext" != X"$avail_ext"; then
15172                                 $cat <<EOM
15173 NOTICE:  Your previous config.sh list may be incorrect. 
15174 The extensions now available to you are 
15175         ${avail_ext}
15176 but the default list from your previous config.sh is
15177         ${dynamic_ext} 
15178
15179 EOM
15180                         fi
15181                         ;;
15182                 esac
15183                 ;;
15184         esac
15185         case "$dflt" in
15186         '')     dflt=none;;
15187         esac
15188         rp="What extensions do you wish to load dynamically?"
15189         . ./myread
15190         case "$ans" in
15191         none) dynamic_ext=' ' ;;
15192         *) dynamic_ext="$ans" ;;
15193         esac
15194
15195         case "$static_ext" in
15196         '')
15197                 : Exclude those already listed in dynamic linking
15198                 dflt=''
15199                 for xxx in $avail_ext; do
15200                         case " $dynamic_ext " in
15201                         *" $xxx "*) ;;
15202                         *) dflt="$dflt $xxx" ;;
15203                         esac
15204                 done
15205                 set X $dflt
15206                 shift
15207                 dflt="$*"
15208                 ;;
15209         *)  dflt="$static_ext" 
15210                 ;;
15211         esac
15212
15213         case "$dflt" in
15214         '')     dflt=none;;
15215         esac
15216         rp="What extensions do you wish to load statically?"
15217         . ./myread
15218         case "$ans" in
15219         none) static_ext=' ' ;;
15220         *) static_ext="$ans" ;;
15221         esac
15222         ;;
15223 *)
15224         $cat <<EOM
15225 A number of extensions are supplied with $package.  Answer "none" 
15226 to include no extensions. 
15227 Note that DynaLoader is always built and need not be mentioned here.
15228
15229 EOM
15230         case "$static_ext" in
15231         '') dflt="$avail_ext" ;;
15232         *)      dflt="$static_ext"
15233                 # Perhaps we are reusing an old out-of-date config.sh.
15234                 case "$hint" in
15235                 previous)
15236                         if test X"$static_ext" != X"$avail_ext"; then
15237                                 $cat <<EOM
15238 NOTICE:  Your previous config.sh list may be incorrect. 
15239 The extensions now available to you are 
15240         ${avail_ext}
15241 but the default list from your previous config.sh is
15242         ${static_ext} 
15243
15244 EOM
15245                         fi
15246                         ;;
15247                 esac
15248                 ;;
15249         esac
15250         : Exclude those that are not xs extensions
15251         case "$dflt" in
15252         '')     dflt=none;;
15253         esac
15254         rp="What extensions do you wish to include?"
15255         . ./myread
15256         case "$ans" in
15257         none) static_ext=' ' ;;
15258         *) static_ext="$ans" ;;
15259         esac
15260         ;;
15261 esac
15262
15263 set X $dynamic_ext $static_ext $nonxs_ext
15264 shift
15265 extensions="$*"
15266
15267 : Remove build directory name from cppstdin so it can be used from
15268 : either the present location or the final installed location.
15269 echo " "
15270 : Get out of the UU directory to get correct path name.
15271 cd ..
15272 case "$cppstdin" in
15273 `pwd`/cppstdin)
15274         echo "Stripping down cppstdin path name"
15275         cppstdin=cppstdin
15276         ;;
15277 esac
15278 cd UU
15279
15280 : end of configuration questions
15281 echo " "
15282 echo "End of configuration questions."
15283 echo " "
15284
15285 : back to where it started
15286 if test -d ../UU; then
15287         cd ..
15288 fi
15289
15290 : configuration may be patched via a 'config.over' file
15291 if $test -f config.over; then
15292         echo " "
15293         dflt=y
15294         rp='I see a config.over file.  Do you wish to load it?'
15295         . UU/myread
15296         case "$ans" in
15297         n*) echo "OK, I'll ignore it.";;
15298         *)      . ./config.over
15299                 echo "Configuration override changes have been loaded."
15300                 ;;
15301         esac
15302 fi
15303
15304 : in case they want portability, strip down executable paths
15305 case "$d_portable" in
15306 "$define")
15307         echo " "
15308         echo "Stripping down executable paths..." >&4
15309         for file in $loclist $trylist; do
15310                 eval temp=\$$file
15311                 eval $file=`basename $temp`
15312         done
15313         ;;
15314 esac
15315
15316 : create config.sh file
15317 echo " "
15318 echo "Creating config.sh..." >&4
15319 $spitshell <<EOT >config.sh
15320 $startsh
15321 #
15322 # This file was produced by running the Configure script. It holds all the
15323 # definitions figured out by Configure. Should you modify one of these values,
15324 # do not forget to propagate your changes by running "Configure -der". You may
15325 # instead choose to run each of the .SH files by yourself, or "Configure -S".
15326 #
15327
15328 # Package name      : $package
15329 # Source directory  : $src
15330 # Configuration time: $cf_time
15331 # Configured by     : $cf_by
15332 # Target system     : $myuname
15333
15334 Author='$Author'
15335 Date='$Date'
15336 Header='$Header'
15337 Id='$Id'
15338 Locker='$Locker'
15339 Log='$Log'
15340 Mcc='$Mcc'
15341 RCSfile='$RCSfile'
15342 Revision='$Revision'
15343 Source='$Source'
15344 State='$State'
15345 _a='$_a'
15346 _exe='$_exe'
15347 _o='$_o'
15348 afs='$afs'
15349 alignbytes='$alignbytes'
15350 ansi2knr='$ansi2knr'
15351 aphostname='$aphostname'
15352 api_revision='$api_revision'
15353 api_subversion='$api_subversion'
15354 api_version='$api_version'
15355 api_versionstring='$api_versionstring'
15356 ar='$ar'
15357 archlib='$archlib'
15358 archlibexp='$archlibexp'
15359 archname64='$archname64'
15360 archname='$archname'
15361 archobjs='$archobjs'
15362 awk='$awk'
15363 baserev='$baserev'
15364 bash='$bash'
15365 bin='$bin'
15366 bincompat5005='$bincompat5005'
15367 binexp='$binexp'
15368 bison='$bison'
15369 byacc='$byacc'
15370 byteorder='$byteorder'
15371 c='$c'
15372 castflags='$castflags'
15373 cat='$cat'
15374 cc='$cc'
15375 cccdlflags='$cccdlflags'
15376 ccdlflags='$ccdlflags'
15377 ccflags='$ccflags'
15378 ccflags_uselargefiles='$ccflags_uselargefiles'
15379 ccsymbols='$ccsymbols'
15380 cf_by='$cf_by'
15381 cf_email='$cf_email'
15382 cf_time='$cf_time'
15383 charsize='$charsize'
15384 chgrp='$chgrp'
15385 chmod='$chmod'
15386 chown='$chown'
15387 clocktype='$clocktype'
15388 comm='$comm'
15389 compress='$compress'
15390 contains='$contains'
15391 cp='$cp'
15392 cpio='$cpio'
15393 cpp='$cpp'
15394 cpp_stuff='$cpp_stuff'
15395 cppccsymbols='$cppccsymbols'
15396 cppflags='$cppflags'
15397 cpplast='$cpplast'
15398 cppminus='$cppminus'
15399 cpprun='$cpprun'
15400 cppstdin='$cppstdin'
15401 cppsymbols='$cppsymbols'
15402 crosscompile='$crosscompile'
15403 cryptlib='$cryptlib'
15404 csh='$csh'
15405 d_Gconvert='$d_Gconvert'
15406 d_PRIEldbl='$d_PRIEldbl'
15407 d_PRIFldbl='$d_PRIFldbl'
15408 d_PRIGldbl='$d_PRIGldbl'
15409 d_PRIX64='$d_PRIX64'
15410 d_PRId64='$d_PRId64'
15411 d_PRIeldbl='$d_PRIeldbl'
15412 d_PRIfldbl='$d_PRIfldbl'
15413 d_PRIgldbl='$d_PRIgldbl'
15414 d_PRIi64='$d_PRIi64'
15415 d_PRIo64='$d_PRIo64'
15416 d_PRIu64='$d_PRIu64'
15417 d_PRIx64='$d_PRIx64'
15418 d_access='$d_access'
15419 d_accessx='$d_accessx'
15420 d_alarm='$d_alarm'
15421 d_archlib='$d_archlib'
15422 d_atolf='$d_atolf'
15423 d_atoll='$d_atoll'
15424 d_attribut='$d_attribut'
15425 d_bcmp='$d_bcmp'
15426 d_bcopy='$d_bcopy'
15427 d_bincompat5005='$d_bincompat5005'
15428 d_bsd='$d_bsd'
15429 d_bsdgetpgrp='$d_bsdgetpgrp'
15430 d_bsdsetpgrp='$d_bsdsetpgrp'
15431 d_bzero='$d_bzero'
15432 d_casti32='$d_casti32'
15433 d_castneg='$d_castneg'
15434 d_charvspr='$d_charvspr'
15435 d_chown='$d_chown'
15436 d_chroot='$d_chroot'
15437 d_chsize='$d_chsize'
15438 d_closedir='$d_closedir'
15439 d_const='$d_const'
15440 d_crypt='$d_crypt'
15441 d_csh='$d_csh'
15442 d_cuserid='$d_cuserid'
15443 d_dbl_dig='$d_dbl_dig'
15444 d_difftime='$d_difftime'
15445 d_dirnamlen='$d_dirnamlen'
15446 d_dlerror='$d_dlerror'
15447 d_dlopen='$d_dlopen'
15448 d_dlsymun='$d_dlsymun'
15449 d_dosuid='$d_dosuid'
15450 d_drand48proto='$d_drand48proto'
15451 d_dup2='$d_dup2'
15452 d_eaccess='$d_eaccess'
15453 d_endgrent='$d_endgrent'
15454 d_endhent='$d_endhent'
15455 d_endnent='$d_endnent'
15456 d_endpent='$d_endpent'
15457 d_endpwent='$d_endpwent'
15458 d_endsent='$d_endsent'
15459 d_eofnblk='$d_eofnblk'
15460 d_eunice='$d_eunice'
15461 d_fchmod='$d_fchmod'
15462 d_fchown='$d_fchown'
15463 d_fcntl='$d_fcntl'
15464 d_fd_macros='$d_fd_macros'
15465 d_fd_set='$d_fd_set'
15466 d_fds_bits='$d_fds_bits'
15467 d_fgetpos='$d_fgetpos'
15468 d_flexfnam='$d_flexfnam'
15469 d_flock='$d_flock'
15470 d_fork='$d_fork'
15471 d_fpathconf='$d_fpathconf'
15472 d_fpos64_t='$d_fpos64_t'
15473 d_frexpl='$d_frexpl'
15474 d_fs_data_s='$d_fs_data_s'
15475 d_fseeko='$d_fseeko'
15476 d_fsetpos='$d_fsetpos'
15477 d_fstatfs='$d_fstatfs'
15478 d_fstatvfs='$d_fstatvfs'
15479 d_ftello='$d_ftello'
15480 d_ftime='$d_ftime'
15481 d_getcwd='$d_getcwd'
15482 d_getespwnam='$d_getespwnam'
15483 d_getfsstat='$d_getfsstat'
15484 d_getgrent='$d_getgrent'
15485 d_getgrps='$d_getgrps'
15486 d_gethbyaddr='$d_gethbyaddr'
15487 d_gethbyname='$d_gethbyname'
15488 d_gethent='$d_gethent'
15489 d_gethname='$d_gethname'
15490 d_gethostprotos='$d_gethostprotos'
15491 d_getlogin='$d_getlogin'
15492 d_getmnt='$d_getmnt'
15493 d_getmntent='$d_getmntent'
15494 d_getnbyaddr='$d_getnbyaddr'
15495 d_getnbyname='$d_getnbyname'
15496 d_getnent='$d_getnent'
15497 d_getnetprotos='$d_getnetprotos'
15498 d_getpbyname='$d_getpbyname'
15499 d_getpbynumber='$d_getpbynumber'
15500 d_getpent='$d_getpent'
15501 d_getpgid='$d_getpgid'
15502 d_getpgrp2='$d_getpgrp2'
15503 d_getpgrp='$d_getpgrp'
15504 d_getppid='$d_getppid'
15505 d_getprior='$d_getprior'
15506 d_getprotoprotos='$d_getprotoprotos'
15507 d_getprpwnam='$d_getprpwnam'
15508 d_getpwent='$d_getpwent'
15509 d_getsbyname='$d_getsbyname'
15510 d_getsbyport='$d_getsbyport'
15511 d_getsent='$d_getsent'
15512 d_getservprotos='$d_getservprotos'
15513 d_getspnam='$d_getspnam'
15514 d_gettimeod='$d_gettimeod'
15515 d_gnulibc='$d_gnulibc'
15516 d_grpasswd='$d_grpasswd'
15517 d_hasmntopt='$d_hasmntopt'
15518 d_htonl='$d_htonl'
15519 d_iconv='$d_iconv'
15520 d_index='$d_index'
15521 d_inetaton='$d_inetaton'
15522 d_int64_t='$d_int64_t'
15523 d_isascii='$d_isascii'
15524 d_isnan='$d_isnan'
15525 d_isnanl='$d_isnanl'
15526 d_killpg='$d_killpg'
15527 d_lchown='$d_lchown'
15528 d_ldbl_dig='$d_ldbl_dig'
15529 d_link='$d_link'
15530 d_locconv='$d_locconv'
15531 d_lockf='$d_lockf'
15532 d_longdbl='$d_longdbl'
15533 d_longlong='$d_longlong'
15534 d_lseekproto='$d_lseekproto'
15535 d_lstat='$d_lstat'
15536 d_madvise='$d_madvise'
15537 d_mblen='$d_mblen'
15538 d_mbstowcs='$d_mbstowcs'
15539 d_mbtowc='$d_mbtowc'
15540 d_memchr='$d_memchr'
15541 d_memcmp='$d_memcmp'
15542 d_memcpy='$d_memcpy'
15543 d_memmove='$d_memmove'
15544 d_memset='$d_memset'
15545 d_mkdir='$d_mkdir'
15546 d_mkdtemp='$d_mkdtemp'
15547 d_mkfifo='$d_mkfifo'
15548 d_mkstemp='$d_mkstemp'
15549 d_mkstemps='$d_mkstemps'
15550 d_mktime='$d_mktime'
15551 d_mmap='$d_mmap'
15552 d_modfl='$d_modfl'
15553 d_mprotect='$d_mprotect'
15554 d_msg='$d_msg'
15555 d_msg_ctrunc='$d_msg_ctrunc'
15556 d_msg_dontroute='$d_msg_dontroute'
15557 d_msg_oob='$d_msg_oob'
15558 d_msg_peek='$d_msg_peek'
15559 d_msg_proxy='$d_msg_proxy'
15560 d_msgctl='$d_msgctl'
15561 d_msgget='$d_msgget'
15562 d_msgrcv='$d_msgrcv'
15563 d_msgsnd='$d_msgsnd'
15564 d_msync='$d_msync'
15565 d_munmap='$d_munmap'
15566 d_mymalloc='$d_mymalloc'
15567 d_nice='$d_nice'
15568 d_nv_preserves_uv='$d_nv_preserves_uv'
15569 d_nv_preserves_uv_bits='$d_nv_preserves_uv_bits'
15570 d_off64_t='$d_off64_t'
15571 d_old_pthread_create_joinable='$d_old_pthread_create_joinable'
15572 d_oldpthreads='$d_oldpthreads'
15573 d_oldsock='$d_oldsock'
15574 d_open3='$d_open3'
15575 d_pathconf='$d_pathconf'
15576 d_pause='$d_pause'
15577 d_perl_otherlibdirs='$d_perl_otherlibdirs'
15578 d_phostname='$d_phostname'
15579 d_pipe='$d_pipe'
15580 d_poll='$d_poll'
15581 d_portable='$d_portable'
15582 d_pthread_yield='$d_pthread_yield'
15583 d_pwage='$d_pwage'
15584 d_pwchange='$d_pwchange'
15585 d_pwclass='$d_pwclass'
15586 d_pwcomment='$d_pwcomment'
15587 d_pwexpire='$d_pwexpire'
15588 d_pwgecos='$d_pwgecos'
15589 d_pwpasswd='$d_pwpasswd'
15590 d_pwquota='$d_pwquota'
15591 d_qgcvt='$d_qgcvt'
15592 d_quad='$d_quad'
15593 d_readdir='$d_readdir'
15594 d_readlink='$d_readlink'
15595 d_rename='$d_rename'
15596 d_rewinddir='$d_rewinddir'
15597 d_rmdir='$d_rmdir'
15598 d_safebcpy='$d_safebcpy'
15599 d_safemcpy='$d_safemcpy'
15600 d_sanemcmp='$d_sanemcmp'
15601 d_sched_yield='$d_sched_yield'
15602 d_scm_rights='$d_scm_rights'
15603 d_seekdir='$d_seekdir'
15604 d_select='$d_select'
15605 d_sem='$d_sem'
15606 d_semctl='$d_semctl'
15607 d_semctl_semid_ds='$d_semctl_semid_ds'
15608 d_semctl_semun='$d_semctl_semun'
15609 d_semget='$d_semget'
15610 d_semop='$d_semop'
15611 d_setegid='$d_setegid'
15612 d_seteuid='$d_seteuid'
15613 d_setgrent='$d_setgrent'
15614 d_setgrps='$d_setgrps'
15615 d_sethent='$d_sethent'
15616 d_setlinebuf='$d_setlinebuf'
15617 d_setlocale='$d_setlocale'
15618 d_setnent='$d_setnent'
15619 d_setpent='$d_setpent'
15620 d_setpgid='$d_setpgid'
15621 d_setpgrp2='$d_setpgrp2'
15622 d_setpgrp='$d_setpgrp'
15623 d_setprior='$d_setprior'
15624 d_setproctitle='$d_setproctitle'
15625 d_setpwent='$d_setpwent'
15626 d_setregid='$d_setregid'
15627 d_setresgid='$d_setresgid'
15628 d_setresuid='$d_setresuid'
15629 d_setreuid='$d_setreuid'
15630 d_setrgid='$d_setrgid'
15631 d_setruid='$d_setruid'
15632 d_setsent='$d_setsent'
15633 d_setsid='$d_setsid'
15634 d_setvbuf='$d_setvbuf'
15635 d_sfio='$d_sfio'
15636 d_shm='$d_shm'
15637 d_shmat='$d_shmat'
15638 d_shmatprototype='$d_shmatprototype'
15639 d_shmctl='$d_shmctl'
15640 d_shmdt='$d_shmdt'
15641 d_shmget='$d_shmget'
15642 d_sigaction='$d_sigaction'
15643 d_sigsetjmp='$d_sigsetjmp'
15644 d_socket='$d_socket'
15645 d_socklen_t='$d_socklen_t'
15646 d_sockpair='$d_sockpair'
15647 d_sqrtl='$d_sqrtl'
15648 d_statblks='$d_statblks'
15649 d_statfs_f_flags='$d_statfs_f_flags'
15650 d_statfs_s='$d_statfs_s'
15651 d_statvfs='$d_statvfs'
15652 d_stdio_cnt_lval='$d_stdio_cnt_lval'
15653 d_stdio_ptr_lval='$d_stdio_ptr_lval'
15654 d_stdio_stream_array='$d_stdio_stream_array'
15655 d_stdiobase='$d_stdiobase'
15656 d_stdstdio='$d_stdstdio'
15657 d_strchr='$d_strchr'
15658 d_strcoll='$d_strcoll'
15659 d_strctcpy='$d_strctcpy'
15660 d_strerrm='$d_strerrm'
15661 d_strerror='$d_strerror'
15662 d_strtod='$d_strtod'
15663 d_strtol='$d_strtol'
15664 d_strtold='$d_strtold'
15665 d_strtoll='$d_strtoll'
15666 d_strtoul='$d_strtoul'
15667 d_strtoull='$d_strtoull'
15668 d_strtouq='$d_strtouq'
15669 d_strxfrm='$d_strxfrm'
15670 d_suidsafe='$d_suidsafe'
15671 d_symlink='$d_symlink'
15672 d_syscall='$d_syscall'
15673 d_sysconf='$d_sysconf'
15674 d_sysernlst='$d_sysernlst'
15675 d_syserrlst='$d_syserrlst'
15676 d_system='$d_system'
15677 d_tcgetpgrp='$d_tcgetpgrp'
15678 d_tcsetpgrp='$d_tcsetpgrp'
15679 d_telldir='$d_telldir'
15680 d_telldirproto='$d_telldirproto'
15681 d_time='$d_time'
15682 d_times='$d_times'
15683 d_truncate='$d_truncate'
15684 d_tzname='$d_tzname'
15685 d_umask='$d_umask'
15686 d_uname='$d_uname'
15687 d_union_semun='$d_union_semun'
15688 d_ustat='$d_ustat'
15689 d_vendorarch='$d_vendorarch'
15690 d_vendorbin='$d_vendorbin'
15691 d_vendorlib='$d_vendorlib'
15692 d_vfork='$d_vfork'
15693 d_void_closedir='$d_void_closedir'
15694 d_voidsig='$d_voidsig'
15695 d_voidtty='$d_voidtty'
15696 d_volatile='$d_volatile'
15697 d_vprintf='$d_vprintf'
15698 d_wait4='$d_wait4'
15699 d_waitpid='$d_waitpid'
15700 d_wcstombs='$d_wcstombs'
15701 d_wctomb='$d_wctomb'
15702 d_xenix='$d_xenix'
15703 date='$date'
15704 db_hashtype='$db_hashtype'
15705 db_prefixtype='$db_prefixtype'
15706 defvoidused='$defvoidused'
15707 direntrytype='$direntrytype'
15708 dlext='$dlext'
15709 dlsrc='$dlsrc'
15710 doublesize='$doublesize'
15711 drand01='$drand01'
15712 dynamic_ext='$dynamic_ext'
15713 eagain='$eagain'
15714 ebcdic='$ebcdic'
15715 echo='$echo'
15716 egrep='$egrep'
15717 emacs='$emacs'
15718 eunicefix='$eunicefix'
15719 exe_ext='$exe_ext'
15720 expr='$expr'
15721 extensions='$extensions'
15722 fflushNULL='$fflushNULL'
15723 fflushall='$fflushall'
15724 find='$find'
15725 firstmakefile='$firstmakefile'
15726 flex='$flex'
15727 fpossize='$fpossize'
15728 fpostype='$fpostype'
15729 freetype='$freetype'
15730 full_ar='$full_ar'
15731 full_csh='$full_csh'
15732 full_sed='$full_sed'
15733 gccosandvers='$gccosandvers'
15734 gccversion='$gccversion'
15735 gidformat='$gidformat'
15736 gidsign='$gidsign'
15737 gidsize='$gidsize'
15738 gidtype='$gidtype'
15739 glibpth='$glibpth'
15740 grep='$grep'
15741 groupcat='$groupcat'
15742 groupstype='$groupstype'
15743 gzip='$gzip'
15744 h_fcntl='$h_fcntl'
15745 h_sysfile='$h_sysfile'
15746 hint='$hint'
15747 hostcat='$hostcat'
15748 huge='$huge'
15749 i16size='$i16size'
15750 i16type='$i16type'
15751 i32size='$i32size'
15752 i32type='$i32type'
15753 i64size='$i64size'
15754 i64type='$i64type'
15755 i8size='$i8size'
15756 i8type='$i8type'
15757 i_arpainet='$i_arpainet'
15758 i_bsdioctl='$i_bsdioctl'
15759 i_db='$i_db'
15760 i_dbm='$i_dbm'
15761 i_dirent='$i_dirent'
15762 i_dld='$i_dld'
15763 i_dlfcn='$i_dlfcn'
15764 i_fcntl='$i_fcntl'
15765 i_float='$i_float'
15766 i_gdbm='$i_gdbm'
15767 i_grp='$i_grp'
15768 i_iconv='$i_iconv'
15769 i_ieeefp='$i_ieeefp'
15770 i_inttypes='$i_inttypes'
15771 i_libutil='$i_libutil'
15772 i_limits='$i_limits'
15773 i_locale='$i_locale'
15774 i_machcthr='$i_machcthr'
15775 i_malloc='$i_malloc'
15776 i_math='$i_math'
15777 i_memory='$i_memory'
15778 i_mntent='$i_mntent'
15779 i_ndbm='$i_ndbm'
15780 i_netdb='$i_netdb'
15781 i_neterrno='$i_neterrno'
15782 i_netinettcp='$i_netinettcp'
15783 i_niin='$i_niin'
15784 i_poll='$i_poll'
15785 i_prot='$i_prot'
15786 i_pthread='$i_pthread'
15787 i_pwd='$i_pwd'
15788 i_rpcsvcdbm='$i_rpcsvcdbm'
15789 i_sfio='$i_sfio'
15790 i_sgtty='$i_sgtty'
15791 i_shadow='$i_shadow'
15792 i_socks='$i_socks'
15793 i_stdarg='$i_stdarg'
15794 i_stddef='$i_stddef'
15795 i_stdlib='$i_stdlib'
15796 i_string='$i_string'
15797 i_sunmath='$i_sunmath'
15798 i_sysaccess='$i_sysaccess'
15799 i_sysdir='$i_sysdir'
15800 i_sysfile='$i_sysfile'
15801 i_sysfilio='$i_sysfilio'
15802 i_sysin='$i_sysin'
15803 i_sysioctl='$i_sysioctl'
15804 i_syslog='$i_syslog'
15805 i_sysmman='$i_sysmman'
15806 i_sysmode='$i_sysmode'
15807 i_sysmount='$i_sysmount'
15808 i_sysndir='$i_sysndir'
15809 i_sysparam='$i_sysparam'
15810 i_sysresrc='$i_sysresrc'
15811 i_syssecrt='$i_syssecrt'
15812 i_sysselct='$i_sysselct'
15813 i_syssockio='$i_syssockio'
15814 i_sysstat='$i_sysstat'
15815 i_sysstatfs='$i_sysstatfs'
15816 i_sysstatvfs='$i_sysstatvfs'
15817 i_systime='$i_systime'
15818 i_systimek='$i_systimek'
15819 i_systimes='$i_systimes'
15820 i_systypes='$i_systypes'
15821 i_sysuio='$i_sysuio'
15822 i_sysun='$i_sysun'
15823 i_sysutsname='$i_sysutsname'
15824 i_sysvfs='$i_sysvfs'
15825 i_syswait='$i_syswait'
15826 i_termio='$i_termio'
15827 i_termios='$i_termios'
15828 i_time='$i_time'
15829 i_unistd='$i_unistd'
15830 i_ustat='$i_ustat'
15831 i_utime='$i_utime'
15832 i_values='$i_values'
15833 i_varargs='$i_varargs'
15834 i_varhdr='$i_varhdr'
15835 i_vfork='$i_vfork'
15836 ignore_versioned_solibs='$ignore_versioned_solibs'
15837 inc_version_list='$inc_version_list'
15838 inc_version_list_init='$inc_version_list_init'
15839 incpath='$incpath'
15840 inews='$inews'
15841 installarchlib='$installarchlib'
15842 installbin='$installbin'
15843 installman1dir='$installman1dir'
15844 installman3dir='$installman3dir'
15845 installprefix='$installprefix'
15846 installprefixexp='$installprefixexp'
15847 installprivlib='$installprivlib'
15848 installscript='$installscript'
15849 installsitearch='$installsitearch'
15850 installsitebin='$installsitebin'
15851 installsitelib='$installsitelib'
15852 installstyle='$installstyle'
15853 installusrbinperl='$installusrbinperl'
15854 installvendorarch='$installvendorarch'
15855 installvendorbin='$installvendorbin'
15856 installvendorlib='$installvendorlib'
15857 intsize='$intsize'
15858 ivdformat='$ivdformat'
15859 ivsize='$ivsize'
15860 ivtype='$ivtype'
15861 known_extensions='$known_extensions'
15862 ksh='$ksh'
15863 large='$large'
15864 ld='$ld'
15865 lddlflags='$lddlflags'
15866 ldflags='$ldflags'
15867 ldflags_uselargefiles='$ldflags_uselargefiles'
15868 ldlibpthname='$ldlibpthname'
15869 less='$less'
15870 lib_ext='$lib_ext'
15871 libc='$libc'
15872 libperl='$libperl'
15873 libpth='$libpth'
15874 libs='$libs'
15875 libsdirs='$libsdirs'
15876 libsfiles='$libsfiles'
15877 libsfound='$libsfound'
15878 libspath='$libspath'
15879 libswanted='$libswanted'
15880 libswanted_uselargefiles='$libswanted_uselargefiles'
15881 line='$line'
15882 lint='$lint'
15883 lkflags='$lkflags'
15884 ln='$ln'
15885 lns='$lns'
15886 locincpth='$locincpth'
15887 loclibpth='$loclibpth'
15888 longdblsize='$longdblsize'
15889 longlongsize='$longlongsize'
15890 longsize='$longsize'
15891 lp='$lp'
15892 lpr='$lpr'
15893 ls='$ls'
15894 lseeksize='$lseeksize'
15895 lseektype='$lseektype'
15896 mail='$mail'
15897 mailx='$mailx'
15898 make='$make'
15899 make_set_make='$make_set_make'
15900 mallocobj='$mallocobj'
15901 mallocsrc='$mallocsrc'
15902 malloctype='$malloctype'
15903 man1dir='$man1dir'
15904 man1direxp='$man1direxp'
15905 man1ext='$man1ext'
15906 man3dir='$man3dir'
15907 man3direxp='$man3direxp'
15908 man3ext='$man3ext'
15909 medium='$medium'
15910 mips_type='$mips_type'
15911 mkdir='$mkdir'
15912 mmaptype='$mmaptype'
15913 models='$models'
15914 modetype='$modetype'
15915 more='$more'
15916 multiarch='$multiarch'
15917 mv='$mv'
15918 myarchname='$myarchname'
15919 mydomain='$mydomain'
15920 myhostname='$myhostname'
15921 myuname='$myuname'
15922 n='$n'
15923 netdb_hlen_type='$netdb_hlen_type'
15924 netdb_host_type='$netdb_host_type'
15925 netdb_name_type='$netdb_name_type'
15926 netdb_net_type='$netdb_net_type'
15927 nm='$nm'
15928 nm_opt='$nm_opt'
15929 nm_so_opt='$nm_so_opt'
15930 nonxs_ext='$nonxs_ext'
15931 nroff='$nroff'
15932 nvEformat='$nvEformat'
15933 nvFformat='$nvFformat'
15934 nvGformat='$nvGformat'
15935 nveformat='$nveformat'
15936 nvfformat='$nvfformat'
15937 nvgformat='$nvgformat'
15938 nvsize='$nvsize'
15939 nvtype='$nvtype'
15940 o_nonblock='$o_nonblock'
15941 obj_ext='$obj_ext'
15942 old_pthread_create_joinable='$old_pthread_create_joinable'
15943 optimize='$optimize'
15944 orderlib='$orderlib'
15945 osname='$osname'
15946 osvers='$osvers'
15947 otherlibdirs='$otherlibdirs'
15948 package='$package'
15949 pager='$pager'
15950 passcat='$passcat'
15951 patchlevel='$patchlevel'
15952 path_sep='$path_sep'
15953 perl5='$perl5'
15954 perl='$perl'
15955 perladmin='$perladmin'
15956 perlpath='$perlpath'
15957 pg='$pg'
15958 phostname='$phostname'
15959 pidtype='$pidtype'
15960 plibpth='$plibpth'
15961 pm_apiversion='$pm_apiversion'
15962 pmake='$pmake'
15963 pr='$pr'
15964 prefix='$prefix'
15965 prefixexp='$prefixexp'
15966 privlib='$privlib'
15967 privlibexp='$privlibexp'
15968 prototype='$prototype'
15969 ptrsize='$ptrsize'
15970 quadkind='$quadkind'
15971 quadtype='$quadtype'
15972 randbits='$randbits'
15973 randfunc='$randfunc'
15974 randseedtype='$randseedtype'
15975 ranlib='$ranlib'
15976 rd_nodata='$rd_nodata'
15977 revision='$revision'
15978 rm='$rm'
15979 rmail='$rmail'
15980 runnm='$runnm'
15981 sPRIEldbl='$sPRIEldbl'
15982 sPRIFldbl='$sPRIFldbl'
15983 sPRIGldbl='$sPRIGldbl'
15984 sPRIX64='$sPRIX64'
15985 sPRId64='$sPRId64'
15986 sPRIeldbl='$sPRIeldbl'
15987 sPRIfldbl='$sPRIfldbl'
15988 sPRIgldbl='$sPRIgldbl'
15989 sPRIi64='$sPRIi64'
15990 sPRIo64='$sPRIo64'
15991 sPRIu64='$sPRIu64'
15992 sPRIx64='$sPRIx64'
15993 sched_yield='$sched_yield'
15994 scriptdir='$scriptdir'
15995 scriptdirexp='$scriptdirexp'
15996 sed='$sed'
15997 seedfunc='$seedfunc'
15998 selectminbits='$selectminbits'
15999 selecttype='$selecttype'
16000 sendmail='$sendmail'
16001 sh='$sh'
16002 shar='$shar'
16003 sharpbang='$sharpbang'
16004 shmattype='$shmattype'
16005 shortsize='$shortsize'
16006 shrpenv='$shrpenv'
16007 shsharp='$shsharp'
16008 sig_count='$sig_count'
16009 sig_name='$sig_name'
16010 sig_name_init='$sig_name_init'
16011 sig_num='$sig_num'
16012 sig_num_init='$sig_num_init'
16013 signal_t='$signal_t'
16014 sitearch='$sitearch'
16015 sitearchexp='$sitearchexp'
16016 sitebin='$sitebin'
16017 sitebinexp='$sitebinexp'
16018 sitelib='$sitelib'
16019 sitelib_stem='$sitelib_stem'
16020 sitelibexp='$sitelibexp'
16021 siteprefix='$siteprefix'
16022 siteprefixexp='$siteprefixexp'
16023 sizesize='$sizesize'
16024 sizetype='$sizetype'
16025 sleep='$sleep'
16026 smail='$smail'
16027 small='$small'
16028 so='$so'
16029 sockethdr='$sockethdr'
16030 socketlib='$socketlib'
16031 socksizetype='$socksizetype'
16032 sort='$sort'
16033 spackage='$spackage'
16034 spitshell='$spitshell'
16035 split='$split'
16036 src='$src'
16037 ssizetype='$ssizetype'
16038 startperl='$startperl'
16039 startsh='$startsh'
16040 static_ext='$static_ext'
16041 stdchar='$stdchar'
16042 stdio_base='$stdio_base'
16043 stdio_bufsiz='$stdio_bufsiz'
16044 stdio_cnt='$stdio_cnt'
16045 stdio_filbuf='$stdio_filbuf'
16046 stdio_ptr='$stdio_ptr'
16047 stdio_stream_array='$stdio_stream_array'
16048 strings='$strings'
16049 submit='$submit'
16050 subversion='$subversion'
16051 sysman='$sysman'
16052 tail='$tail'
16053 tar='$tar'
16054 tbl='$tbl'
16055 tee='$tee'
16056 test='$test'
16057 timeincl='$timeincl'
16058 timetype='$timetype'
16059 touch='$touch'
16060 tr='$tr'
16061 trnl='$trnl'
16062 troff='$troff'
16063 u16size='$u16size'
16064 u16type='$u16type'
16065 u32size='$u32size'
16066 u32type='$u32type'
16067 u64size='$u64size'
16068 u64type='$u64type'
16069 u8size='$u8size'
16070 u8type='$u8type'
16071 uidformat='$uidformat'
16072 uidsign='$uidsign'
16073 uidsize='$uidsize'
16074 uidtype='$uidtype'
16075 uname='$uname'
16076 uniq='$uniq'
16077 uquadtype='$uquadtype'
16078 use5005threads='$use5005threads'
16079 use64bitall='$use64bitall'
16080 use64bitint='$use64bitint'
16081 usedl='$usedl'
16082 useithreads='$useithreads'
16083 uselargefiles='$uselargefiles'
16084 uselongdouble='$uselongdouble'
16085 usemorebits='$usemorebits'
16086 usemultiplicity='$usemultiplicity'
16087 usemymalloc='$usemymalloc'
16088 usenm='$usenm'
16089 useopcode='$useopcode'
16090 useperlio='$useperlio'
16091 useposix='$useposix'
16092 usesfio='$usesfio'
16093 useshrplib='$useshrplib'
16094 usesocks='$usesocks'
16095 usethreads='$usethreads'
16096 usevendorprefix='$usevendorprefix'
16097 usevfork='$usevfork'
16098 usrinc='$usrinc'
16099 uuname='$uuname'
16100 uvXformat='$uvXformat'
16101 uvoformat='$uvoformat'
16102 uvsize='$uvsize'
16103 uvtype='$uvtype'
16104 uvuformat='$uvuformat'
16105 uvxformat='$uvxformat'
16106 vendorarch='$vendorarch'
16107 vendorarchexp='$vendorarchexp'
16108 vendorbin='$vendorbin'
16109 vendorbinexp='$vendorbinexp'
16110 vendorlib='$vendorlib'
16111 vendorlib_stem='$vendorlib_stem'
16112 vendorlibexp='$vendorlibexp'
16113 vendorprefix='$vendorprefix'
16114 vendorprefixexp='$vendorprefixexp'
16115 version='$version'
16116 vi='$vi'
16117 voidflags='$voidflags'
16118 xlibpth='$xlibpth'
16119 xs_apiversion='$xs_apiversion'
16120 zcat='$zcat'
16121 zip='$zip'
16122 EOT
16123
16124 : Add in command line options if available
16125 $test -f UU/cmdline.opt && $cat UU/cmdline.opt >> config.sh
16126
16127 : add special variables
16128 $test -f $src/patchlevel.h && \
16129 awk '/^#define[         ]+PERL_/ {printf "%s=%s\n",$2,$3}' $src/patchlevel.h >>config.sh
16130 echo "CONFIGDOTSH=true" >>config.sh
16131
16132 : propagate old symbols
16133 if $test -f UU/config.sh; then
16134         <UU/config.sh sort | uniq >UU/oldconfig.sh
16135         sed -n 's/^\([a-zA-Z_0-9]*\)=.*/\1/p' config.sh config.sh UU/oldconfig.sh |\
16136         sort | uniq -u >UU/oldsyms
16137         set X `cat UU/oldsyms`
16138         shift
16139         case $# in
16140         0) ;;
16141         *)
16142                 cat <<EOM
16143 Hmm...You had some extra variables I don't know about...I'll try to keep 'em...
16144 EOM
16145                 echo "# Variables propagated from previous config.sh file." >>config.sh
16146                 for sym in `cat UU/oldsyms`; do
16147                         echo "    Propagating $hint variable "'$'"$sym..."
16148                         eval 'tmp="$'"${sym}"'"'
16149                         echo "$tmp" | \
16150                                 sed -e "s/'/'\"'\"'/g" -e "s/^/$sym='/" -e "s/$/'/" >>config.sh
16151                 done
16152                 ;;
16153         esac
16154 fi
16155
16156 : Finish up by extracting the .SH files
16157 case "$alldone" in
16158 exit)
16159         $rm -rf UU
16160         echo "Done."
16161         exit 0
16162         ;;
16163 cont)
16164         ;;
16165 '')
16166         dflt=''
16167         nostick=true
16168         $cat <<EOM
16169
16170 If you'd like to make any changes to the config.sh file before I begin
16171 to configure things, do it as a shell escape now (e.g. !vi config.sh).
16172
16173 EOM
16174         rp="Press return or use a shell escape to edit config.sh:"
16175         . UU/myread
16176         nostick=''
16177         case "$ans" in
16178         '') ;;
16179         *) : in case they cannot read
16180                 sh 1>&4 -c "$ans";;
16181         esac
16182         ;;
16183 esac
16184
16185 : if this fails, just run all the .SH files by hand
16186 . ./config.sh
16187
16188 echo " "
16189 exec 1>&4
16190 . ./UU/extract
16191
16192 if $contains '^depend:' [Mm]akefile >/dev/null 2>&1; then
16193         dflt=y
16194         case "$silent" in
16195         true) ;;
16196         *)
16197                 $cat <<EOM
16198
16199 Now you need to generate make dependencies by running "$make depend".
16200 You might prefer to run it in background: "$make depend > makedepend.out &"
16201 It can take a while, so you might not want to run it right now.
16202
16203 EOM
16204                 ;;
16205         esac
16206         rp="Run $make depend now?"
16207         . UU/myread
16208         case "$ans" in
16209         y*)
16210                 $make depend && echo "Now you must run a $make."
16211                 ;;
16212         *)
16213                 echo "You must run '$make depend' then '$make'."
16214                 ;;
16215         esac
16216 elif test -f [Mm]akefile; then
16217         echo " "
16218         echo "Now you must run a $make."
16219 else
16220         echo "Done."
16221 fi
16222
16223 if $test -f Policy.sh; then
16224     $cat <<EOM
16225
16226 If you compile $package on a different machine or from a different object
16227 directory, copy the Policy.sh file from this object directory to the
16228 new one before you run Configure -- this will help you with most of
16229 the policy defaults.
16230
16231 EOM
16232 fi
16233 if $test -f config.msg; then
16234     echo "Hmm.  I also noted the following information while running:"
16235     echo " "
16236     $cat config.msg >&4
16237     $rm -f config.msg
16238 fi
16239 $rm -f kit*isdone ark*isdone
16240 $rm -rf UU
16241
16242 : End of Configure
16243