fix parsing of here documents in C<eval 's/.../<<FOO/e'>
[p5sagit/p5-mst-13.2.git] / Configure
1 #! /bin/sh
2 #
3 # If these # comments don't work, trim them. Don't worry about any other
4 # shell scripts, Configure will trim # comments from them for you.
5 #
6 # (If you are trying to port this package to a machine without sh,
7 # I would suggest you have a look at the prototypical config_h.SH file
8 # and edit it to reflect your system. Some packages may include samples
9 # of config.h for certain machines, so you might look for one of those.)
10 #
11 # Yes, you may rip this off to use in other distribution packages. This
12 # script belongs to the public domain and cannot be copyrighted.
13 #
14 # (Note: this Configure script was generated automatically. Rather than
15 # working with this copy of Configure, you may wish to get metaconfig.
16 # The dist-3.0 package (which contains metaconfig) was posted in
17 # comp.sources.misc and is available on CPAN under authors/id/RAM so
18 # you may fetch it yourself from your nearest archive site.)
19 #
20
21 # $Id: Head.U,v 3.0.1.9 1997/02/28 15:02:09 ram Exp $
22 #
23 # Generated on Thu Mar  4 00:05:11 EET 1999 [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 case "$inksh/$needksh" in
112 /[a-z]*)
113                 ENV=''
114                 changesh=true
115                 reason="$needksh"
116         ;;
117 esac
118 case "$inksh/$avoidksh" in
119 true/[a-z]*)
120         changesh=true
121         reason="$avoidksh"
122         ;;
123 esac
124 case "$inksh/$needksh-$avoidksh-" in
125 true/--)
126                 cat <<EOM
127 (I see you are using the Korn shell.  Some ksh's blow up on $me,
128 mainly on older exotic systems.  If yours does, try the Bourne shell instead.)
129 EOM
130         ;;
131 esac
132 case "$changesh" in
133 true)
134         echo "(Feeding myself to $newsh $reason.)"
135         case "$0" in
136         Configure|*/Configure) exec $newsh $0 "$@";;
137         *) exec $newsh Configure "$@";;
138         esac
139         ;;
140 esac
141
142 : if needed set CDPATH to a harmless value that is not chatty
143 : avoid bash 2.02 problems with empty CDPATH.
144 case "$CDPATH" in
145 '')     ;;
146 *)      case "$SHELL" in
147         *bash*) CDPATH='.' ;;
148         *)              CDPATH='' ;;
149         esac
150         ;;
151 esac
152 : Configure runs within the UU subdirectory
153 test -d UU || mkdir UU
154 cd UU && rm -f ./*
155
156 ccsymbols=''
157 cppccsymbols=''
158 cppsymbols=''
159 dynamic_ext=''
160 extensions=''
161 known_extensions=''
162 nonxs_ext=''
163 static_ext=''
164 useopcode=''
165 useposix=''
166 d_bsd=''
167 d_eunice=''
168 d_xenix=''
169 eunicefix=''
170 Mcc=''
171 ar=''
172 awk=''
173 bash=''
174 bison=''
175 byacc=''
176 cat=''
177 chgrp=''
178 chmod=''
179 chown=''
180 comm=''
181 compress=''
182 cp=''
183 cpio=''
184 cpp=''
185 csh=''
186 date=''
187 echo=''
188 egrep=''
189 emacs=''
190 expr=''
191 find=''
192 flex=''
193 grep=''
194 gzip=''
195 inews=''
196 ksh=''
197 less=''
198 line=''
199 lint=''
200 ln=''
201 lp=''
202 lpr=''
203 ls=''
204 mail=''
205 mailx=''
206 make=''
207 mkdir=''
208 more=''
209 mv=''
210 nm=''
211 nroff=''
212 perl=''
213 pg=''
214 pmake=''
215 pr=''
216 rm=''
217 rmail=''
218 sed=''
219 sendmail=''
220 shar=''
221 sleep=''
222 smail=''
223 sort=''
224 submit=''
225 tail=''
226 tar=''
227 tbl=''
228 tee=''
229 test=''
230 touch=''
231 tr=''
232 troff=''
233 uname=''
234 uniq=''
235 uuname=''
236 vi=''
237 zcat=''
238 zip=''
239 full_ar=''
240 full_sed=''
241 libswanted=''
242 hint=''
243 myuname=''
244 osname=''
245 osvers=''
246 Author=''
247 Date=''
248 Header=''
249 Id=''
250 Locker=''
251 Log=''
252 RCSfile=''
253 Revision=''
254 Source=''
255 State=''
256 _a=''
257 _exe=''
258 _o=''
259 archobjs=''
260 exe_ext=''
261 firstmakefile=''
262 lib_ext=''
263 obj_ext=''
264 path_sep=''
265 afs=''
266 alignbytes=''
267 ansi2knr=''
268 archlib=''
269 archlibexp=''
270 d_archlib=''
271 installarchlib=''
272 archname=''
273 myarchname=''
274 baserev=''
275 bin=''
276 binexp=''
277 installbin=''
278 byteorder=''
279 cc=''
280 gccversion=''
281 ccflags=''
282 cppflags=''
283 ldflags=''
284 lkflags=''
285 locincpth=''
286 optimize=''
287 cf_email=''
288 cf_by=''
289 cf_time=''
290 contains=''
291 cpp_stuff=''
292 cpplast=''
293 cppminus=''
294 cpprun=''
295 cppstdin=''
296 crosscompile=''
297 d_access=''
298 d_accessx=''
299 d_alarm=''
300 d_attribut=''
301 d_bcmp=''
302 d_bcopy=''
303 d_bzero=''
304 d_casti32=''
305 castflags=''
306 d_castneg=''
307 d_chown=''
308 d_chroot=''
309 d_chsize=''
310 d_closedir=''
311 d_void_closedir=''
312 d_const=''
313 cryptlib=''
314 d_crypt=''
315 d_csh=''
316 full_csh=''
317 d_cuserid=''
318 d_dbl_dig=''
319 d_difftime=''
320 d_dlerror=''
321 d_dlopen=''
322 d_dlsymun=''
323 d_dosuid=''
324 d_suidsafe=''
325 d_drand48proto=''
326 d_dup2=''
327 d_eaccess=''
328 d_endgrent=''
329 d_endhent=''
330 d_endnent=''
331 d_endpent=''
332 d_endpwent=''
333 d_endsent=''
334 d_fchmod=''
335 d_fchown=''
336 d_fcntl=''
337 d_fd_macros=''
338 d_fd_set=''
339 d_fds_bits=''
340 d_fgetpos=''
341 d_flexfnam=''
342 d_flock=''
343 d_fork=''
344 d_fseeko=''
345 d_fsetpos=''
346 d_ftello=''
347 d_ftime=''
348 d_gettimeod=''
349 d_Gconvert=''
350 d_getgrent=''
351 d_getgrps=''
352 d_gethbyaddr=''
353 d_gethbyname=''
354 d_gethent=''
355 aphostname=''
356 d_gethname=''
357 d_phostname=''
358 d_uname=''
359 d_gethostprotos=''
360 d_getlogin=''
361 d_getmntent=''
362 d_getnbyaddr=''
363 d_getnbyname=''
364 d_getnent=''
365 d_getnetprotos=''
366 d_getpent=''
367 d_getpgid=''
368 d_getpgrp2=''
369 d_bsdgetpgrp=''
370 d_getpgrp=''
371 d_getppid=''
372 d_getprior=''
373 d_getpbyname=''
374 d_getpbynumber=''
375 d_getprotoprotos=''
376 d_getpwent=''
377 d_getsent=''
378 d_getservprotos=''
379 d_getsbyname=''
380 d_getsbyport=''
381 d_gnulibc=''
382 d_hasmntopt=''
383 d_htonl=''
384 d_inetaton=''
385 d_isascii=''
386 d_killpg=''
387 d_lchown=''
388 d_link=''
389 d_locconv=''
390 d_lockf=''
391 d_longdbl=''
392 longdblsize=''
393 d_longlong=''
394 longlongsize=''
395 d_lstat=''
396 d_madvise=''
397 d_mblen=''
398 d_mbstowcs=''
399 d_mbtowc=''
400 d_memcmp=''
401 d_memcpy=''
402 d_memmove=''
403 d_memset=''
404 d_mkdir=''
405 d_mkfifo=''
406 d_mktime=''
407 d_mmap=''
408 mmaptype=''
409 d_mprotect=''
410 d_msg=''
411 d_msgctl=''
412 d_msgget=''
413 d_msgrcv=''
414 d_msgsnd=''
415 d_msync=''
416 d_munmap=''
417 d_nice=''
418 d_open3=''
419 d_fpathconf=''
420 d_pathconf=''
421 d_pause=''
422 d_pipe=''
423 d_poll=''
424 d_portable=''
425 d_old_pthread_create_joinable=''
426 old_pthread_create_joinable=''
427 d_pthread_yield=''
428 d_sched_yield=''
429 sched_yield=''
430 d_readdir=''
431 d_rewinddir=''
432 d_seekdir=''
433 d_telldir=''
434 d_readlink=''
435 d_readv=''
436 d_rename=''
437 d_rmdir=''
438 d_safebcpy=''
439 d_safemcpy=''
440 d_sanemcmp=''
441 d_select=''
442 d_sem=''
443 d_semctl=''
444 d_semget=''
445 d_semop=''
446 d_setegid=''
447 d_seteuid=''
448 d_setgrent=''
449 d_setgrps=''
450 d_sethent=''
451 d_setlinebuf=''
452 d_setlocale=''
453 d_setnent=''
454 d_setpent=''
455 d_setpgid=''
456 d_setpgrp2=''
457 d_bsdsetpgrp=''
458 d_setpgrp=''
459 d_setprior=''
460 d_setpwent=''
461 d_setregid=''
462 d_setresgid=''
463 d_setresuid=''
464 d_setreuid=''
465 d_setrgid=''
466 d_setruid=''
467 d_setsent=''
468 d_setsid=''
469 d_setvbuf=''
470 d_sfio=''
471 usesfio=''
472 d_shm=''
473 d_shmat=''
474 d_shmatprototype=''
475 shmattype=''
476 d_shmctl=''
477 d_shmdt=''
478 d_shmget=''
479 d_sigaction=''
480 d_sigsetjmp=''
481 d_cmsghdr_s=''
482 d_msg_ctrunc=''
483 d_msg_dontroute=''
484 d_msg_oob=''
485 d_msg_peek=''
486 d_msg_proxy=''
487 d_msghdr_s=''
488 d_oldsock=''
489 d_recvmsg=''
490 d_scm_rights=''
491 d_sendmsg=''
492 d_socket=''
493 d_sockpair=''
494 sockethdr=''
495 socketlib=''
496 d_statblks=''
497 d_fstatfs=''
498 d_statfs=''
499 d_statfsflags=''
500 d_fstatvfs=''
501 d_statvfs=''
502 d_stdio_cnt_lval=''
503 d_stdio_ptr_lval=''
504 d_stdiobase=''
505 d_stdstdio=''
506 stdio_base=''
507 stdio_bufsiz=''
508 stdio_cnt=''
509 stdio_filbuf=''
510 stdio_ptr=''
511 d_index=''
512 d_strchr=''
513 d_strcoll=''
514 d_strctcpy=''
515 d_strerrm=''
516 d_strerror=''
517 d_sysernlst=''
518 d_syserrlst=''
519 d_strtod=''
520 d_strtol=''
521 d_strtoul=''
522 d_strxfrm=''
523 d_symlink=''
524 d_syscall=''
525 d_sysconf=''
526 d_system=''
527 d_tcgetpgrp=''
528 d_tcsetpgrp=''
529 d_telldirproto=''
530 d_time=''
531 timetype=''
532 clocktype=''
533 d_times=''
534 d_truncate=''
535 d_tzname=''
536 d_umask=''
537 d_semctl_semid_ds=''
538 d_semctl_semun=''
539 d_union_semun=''
540 d_vfork=''
541 usevfork=''
542 d_voidsig=''
543 signal_t=''
544 d_volatile=''
545 d_charvspr=''
546 d_vprintf=''
547 d_wait4=''
548 d_waitpid=''
549 d_wcstombs=''
550 d_wctomb=''
551 d_writev=''
552 d_dbmclose64=''
553 d_dbminit64=''
554 d_delete64=''
555 d_fetch64=''
556 d_firstkey64=''
557 d_nextkey64=''
558 d_store64=''
559 dlext=''
560 cccdlflags=''
561 ccdlflags=''
562 dlsrc=''
563 ld=''
564 lddlflags=''
565 usedl=''
566 doublesize=''
567 ebcdic=''
568 fpostype=''
569 gidtype=''
570 groupstype=''
571 h_fcntl=''
572 h_sysfile=''
573 i_arpainet=''
574 db_hashtype=''
575 db_prefixtype=''
576 i_db=''
577 i_dbm=''
578 i_rpcsvcdbm=''
579 d_dirnamlen=''
580 direntrytype=''
581 i_dirent=''
582 i_dld=''
583 i_dlfcn=''
584 i_fcntl=''
585 i_float=''
586 i_gdbm=''
587 d_grpasswd=''
588 i_grp=''
589 d_int64t=''
590 i_inttypes=''
591 i_limits=''
592 i_locale=''
593 i_machcthr=''
594 i_malloc=''
595 i_math=''
596 i_memory=''
597 i_mntent=''
598 i_ndbm=''
599 i_netdb=''
600 i_neterrno=''
601 i_niin=''
602 i_sysin=''
603 i_poll=''
604 i_pthread=''
605 d_pwage=''
606 d_pwchange=''
607 d_pwclass=''
608 d_pwcomment=''
609 d_pwexpire=''
610 d_pwgecos=''
611 d_pwpasswd=''
612 d_pwquota=''
613 i_pwd=''
614 i_sfio=''
615 i_stddef=''
616 i_stdlib=''
617 i_string=''
618 strings=''
619 i_sysaccess=''
620 i_sysdir=''
621 i_sysfile=''
622 d_voidtty=''
623 i_bsdioctl=''
624 i_sysfilio=''
625 i_sysioctl=''
626 i_syssockio=''
627 i_sysmman=''
628 i_sysmount=''
629 i_sysndir=''
630 i_sysparam=''
631 i_sysresrc=''
632 i_syssecrt=''
633 i_sysselct=''
634 i_sysstat=''
635 i_sysstatvfs=''
636 i_systimes=''
637 i_systypes=''
638 d_iovec_s=''
639 i_sysuio=''
640 i_sysun=''
641 i_syswait=''
642 i_sgtty=''
643 i_termio=''
644 i_termios=''
645 i_systime=''
646 i_systimek=''
647 i_time=''
648 timeincl=''
649 i_unistd=''
650 i_utime=''
651 i_values=''
652 i_stdarg=''
653 i_varargs=''
654 i_varhdr=''
655 i_vfork=''
656 installusrbinperl=''
657 intsize=''
658 longsize=''
659 shortsize=''
660 d_dirent64_s=''
661 d_flock64_s=''
662 d_fstat64=''
663 d_ftruncate64=''
664 d_ino64t=''
665 d_lockf64=''
666 d_lseek64=''
667 d_lstat64=''
668 d_off64t=''
669 d_open64=''
670 d_opendir64=''
671 d_readdir64=''
672 d_seekdir64=''
673 d_stat64=''
674 d_telldir64=''
675 d_truncate64=''
676 libc=''
677 libperl=''
678 shrpenv=''
679 useshrplib=''
680 glibpth=''
681 libpth=''
682 loclibpth=''
683 plibpth=''
684 xlibpth=''
685 ignore_versioned_solibs=''
686 libs=''
687 lns=''
688 lseeksize=''
689 lseektype=''
690 make_set_make=''
691 d_mymalloc=''
692 freetype=''
693 mallocobj=''
694 mallocsrc=''
695 malloctype=''
696 usemymalloc=''
697 installman1dir=''
698 man1dir=''
699 man1direxp=''
700 man1ext=''
701 installman3dir=''
702 man3dir=''
703 man3direxp=''
704 man3ext=''
705 huge=''
706 large=''
707 medium=''
708 models=''
709 small=''
710 split=''
711 modetype=''
712 multiarch=''
713 mydomain=''
714 myhostname=''
715 phostname=''
716 c=''
717 n=''
718 d_eofnblk=''
719 eagain=''
720 o_nonblock=''
721 rd_nodata=''
722 netdb_hlen_type=''
723 netdb_host_type=''
724 netdb_name_type=''
725 netdb_net_type=''
726 groupcat=''
727 hostcat=''
728 passcat=''
729 orderlib=''
730 ranlib=''
731 package=''
732 spackage=''
733 pager=''
734 apiversion=''
735 patchlevel=''
736 subversion=''
737 version=''
738 perladmin=''
739 perlpath=''
740 pidtype=''
741 prefix=''
742 prefixexp=''
743 installprivlib=''
744 privlib=''
745 privlibexp=''
746 prototype=''
747 ptrsize=''
748 drand01=''
749 randbits=''
750 randfunc=''
751 randseedtype=''
752 seedfunc=''
753 installscript=''
754 scriptdir=''
755 scriptdirexp=''
756 selectminbits=''
757 selecttype=''
758 sh=''
759 sig_name=''
760 sig_name_init=''
761 sig_num=''
762 sig_num_init=''
763 installsitearch=''
764 sitearch=''
765 sitearchexp=''
766 installsitelib=''
767 sitelib=''
768 sitelibexp=''
769 sizetype=''
770 so=''
771 sharpbang=''
772 shsharp=''
773 spitshell=''
774 src=''
775 ssizetype=''
776 startperl=''
777 startsh=''
778 stdchar=''
779 d_fgetpos64=''
780 d_fopen64=''
781 d_freopen64=''
782 d_fseek64=''
783 d_fseeko64=''
784 d_fsetpos64=''
785 d_ftell64=''
786 d_ftello64=''
787 d_tmpfile64=''
788 sysman=''
789 trnl=''
790 uidtype=''
791 archname64=''
792 use64bits=''
793 usemultiplicity=''
794 nm_opt=''
795 nm_so_opt=''
796 runnm=''
797 usenm=''
798 useperlio=''
799 d_oldpthreads=''
800 usethreads=''
801 incpath=''
802 mips=''
803 mips_type=''
804 usrinc=''
805 defvoidused=''
806 voidflags=''
807 CONFIG=''
808
809 define='define'
810 undef='undef'
811 smallmach='pdp11 i8086 z8000 i80286 iAPX286'
812 rmlist=''
813
814 : We must find out about Eunice early
815 eunicefix=':'
816 if test -f /etc/unixtovms; then
817         eunicefix=/etc/unixtovms
818 fi
819 if test -f /etc/unixtovms.exe; then
820         eunicefix=/etc/unixtovms.exe
821 fi
822
823 i_whoami=''
824 : Possible local include directories to search.
825 : Set locincpth to "" in a hint file to defeat local include searches.
826 locincpth="/usr/local/include /opt/local/include /usr/gnu/include"
827 locincpth="$locincpth /opt/gnu/include /usr/GNU/include /opt/GNU/include"
828 :
829 : no include file wanted by default
830 inclwanted=''
831
832 : list of known cpp symbols, sorted alphabetically
833 al="AMIX BIT_MSF BSD BSD4_3 BSD_NET2 CMU CRAY DGUX DOLPHIN DPX2"
834 al="$al GO32 GOULD_PN HP700 I386 I80960 I960 Lynx M68000 M68K MACH"
835 al="$al MIPSEB MIPSEL MSDOS MTXINU MULTIMAX MVS"
836 al="$al M_COFF M_I186 M_I286 M_I386 M_I8086 M_I86 M_I86SM"
837 al="$al M_SYS3 M_SYS5 M_SYSIII M_SYSV M_UNIX M_XENIX"
838 al="$al NeXT OCS88 OSF1 PARISC PC532 PORTAR POSIX"
839 al="$al PWB R3000 RES RISC6000 RT Sun386i SVR3 SVR4"
840 al="$al SYSTYPE_BSD SYSTYPE_SVR4 SYSTYPE_SYSV Tek4132 Tek4300"
841 al="$al UMAXV USGr4 USGr4_2 UTEK UTS UTek UnicomPBB UnicomPBD Utek"
842 al="$al VMS Xenix286"
843 al="$al _AIX _AIX32 _AIX370 _AIX41 _AM29000 _COFF _CRAY _CX_UX _EPI"
844 al="$al _IBMESA _IBMR2 _M88K _M88KBCS_TARGET _POWER"
845 al="$al _MIPSEB _MIPSEL _M_COFF _M_I86 _M_I86SM _M_SYS3"
846 al="$al _M_SYS5 _M_SYSIII _M_SYSV _M_UNIX _M_XENIX _NLS _PGC_ _R3000"
847 al="$al _SYSTYPE_BSD _SYSTYPE_BSD43 _SYSTYPE_SVR4"
848 al="$al _SYSTYPE_SYSV _SYSV3 _U370 _UNICOS"
849 al="$al __386BSD__ __BIG_ENDIAN __BIG_ENDIAN__ __BSD_4_4__"
850 al="$al __DGUX__ __DPX2__ __H3050R __H3050RX"
851 al="$al __LITTLE_ENDIAN __LITTLE_ENDIAN__ __MACH__"
852 al="$al __MIPSEB __MIPSEB__ __MIPSEL __MIPSEL__"
853 al="$al __Next__ __OSF1__ __PARAGON__ __PGC__ __PWB __STDC__"
854 al="$al __SVR4_2__ __UMAXV__"
855 al="$al ____386BSD____ __alpha __alpha__ __amiga"
856 al="$al __bsd4_2 __bsd4_2__ __bsdi__ __convex__"
857 al="$al __host_mips__"
858 al="$al __hp9000s200 __hp9000s300 __hp9000s400 __hp9000s500"
859 al="$al __hp9000s500 __hp9000s700 __hp9000s800"
860 al="$al __hppa __hpux __hp_osf __i286 __i286__ __i386 __i386__"
861 al="$al __i486 __i486__ __i860 __i860__ __ibmesa __ksr1__ __linux__"
862 al="$al __m68k __m68k__ __m88100__ __m88k __m88k__"
863 al="$al __mc68000 __mc68000__ __mc68020 __mc68020__"
864 al="$al __mc68030 __mc68030__ __mc68040 __mc68040__"
865 al="$al __mc88100 __mc88100__ __mips __mips__"
866 al="$al __motorola__ __osf__ __pa_risc __sparc__ __stdc__"
867 al="$al __sun __sun__ __svr3__ __svr4__ __ultrix __ultrix__"
868 al="$al __unix __unix__ __uxpm__ __uxps__ __vax __vax__"
869 al="$al _host_mips _mips _unix"
870 al="$al a29k aegis aix aixpc alliant alpha am29000 amiga ansi ardent"
871 al="$al apollo ardent att386 att3b"
872 al="$al bsd bsd43 bsd4_2 bsd4_3 bsd4_4 bsdi bull"
873 al="$al cadmus clipper concurrent convex cray ctix"
874 al="$al dmert encore gcos gcx gimpel gould"
875 al="$al hbullx20 hcx host_mips hp200 hp300 hp700 hp800"
876 al="$al hp9000 hp9000s300 hp9000s400 hp9000s500"
877 al="$al hp9000s700 hp9000s800 hp9k8 hppa hpux"
878 al="$al i186 i286 i386 i486 i8086"
879 al="$al i80960 i860 iAPX286 ibm ibm032 ibmrt interdata is68k"
880 al="$al ksr1 linux luna luna88k m68k m88100 m88k"
881 al="$al mc300 mc500 mc68000 mc68010 mc68020 mc68030"
882 al="$al mc68040 mc68060 mc68k mc68k32 mc700"
883 al="$al mc88000 mc88100 merlin mert mips mvs n16"
884 al="$al ncl_el ncl_mr"
885 al="$al news1500 news1700 news1800 news1900 news3700"
886 al="$al news700 news800 news900 ns16000 ns32000"
887 al="$al ns32016 ns32332 ns32k nsc32000 os osf"
888 al="$al parisc pc532 pdp11 plexus posix pyr"
889 al="$al riscix riscos scs sequent sgi sinix sony sony_news"
890 al="$al sonyrisc sparc sparclite spectrum stardent stratos"
891 al="$al sun sun3 sun386 svr4 sysV68 sysV88"
892 al="$al titan tower tower32 tower32_200 tower32_600 tower32_700"
893 al="$al tower32_800 tower32_850 tss u370 u3b u3b2 u3b20 u3b200"
894 al="$al u3b20d u3b5 ultrix unix unixpc unos vax venix vms"
895 al="$al xenix z8000"
896
897 : Trailing extension.  Override this in a hint file, if needed.
898 _exe=''
899 : Extra object files, if any, needed on this platform.
900 archobjs=''
901 groupstype=''
902 : change the next line if compiling for Xenix/286 on Xenix/386
903 xlibpth='/usr/lib/386 /lib/386'
904
905 : Possible local library directories to search.
906 loclibpth="/usr/local/lib /opt/local/lib /usr/gnu/lib"
907 loclibpth="$loclibpth /opt/gnu/lib /usr/GNU/lib /opt/GNU/lib"
908
909 : general looking path for locating libraries
910 glibpth="/shlib /usr/shlib /lib/pa1.1 /usr/lib/large"
911 glibpth="$glibpth /lib /usr/lib $xlibpth"
912 glibpth="$glibpth /lib/large /usr/lib/small /lib/small"
913 glibpth="$glibpth /usr/ccs/lib /usr/ucblib /usr/local/lib"
914
915 : Private path used by Configure to find libraries.  Its value
916 : is prepended to libpth. This variable takes care of special
917 : machines, like the mips.  Usually, it should be empty.
918 plibpth=''
919
920 : default library list
921 libswanted=''
922 : some systems want to use only the non-versioned libso:s
923 ignore_versioned_solibs=''
924 : full support for void wanted by default
925 defvoidused=15
926
927 : set useposix=false in your hint file to disable the POSIX extension.
928 useposix=true
929 : set useopcode=false in your hint file to disable the Opcode extension.
930 useopcode=true
931 : set usemultiplicity on the Configure command line to enable multiplicity.
932 : set usethreads on the Configure command line to enable threads.
933 : List of libraries we want.
934 : If anyone needs -lnet, put it in a hint file.
935 libswanted='sfio socket inet nsl nm ndbm gdbm dbm db malloc dl'
936 libswanted="$libswanted dld ld sun m rt c cposix posix"
937 libswanted="$libswanted ndir dir crypt"
938 libswanted="$libswanted ucb bsd BSD PW x"
939 : We probably want to search /usr/shlib before most other libraries.
940 : This is only used by the lib/ExtUtils/MakeMaker.pm routine extliblist.
941 glibpth=`echo " $glibpth " | sed -e 's! /usr/shlib ! !'`
942 glibpth="/usr/shlib $glibpth"
943 : Do not use vfork unless overridden by a hint file.
944 usevfork=false
945
946 : Find the basic shell for Bourne shell scripts
947 case "$sh" in
948 '')
949         case "$SYSTYPE" in
950         *bsd*|sys5*) xxx="/$SYSTYPE/bin/sh";;
951         *) xxx='/bin/sh';;
952         esac
953         if test -f "$xxx"; then
954                 sh="$xxx"
955         else
956                 : Build up a list and do a single loop so we can 'break' out.
957                 pth=`echo $PATH | sed -e "s/$p_/ /g"`
958                 for xxx in sh bash ksh pdksh ash; do
959                         for p in $pth; do
960                                 try="$try ${p}/${xxx}"
961                         done
962                 done
963                 for xxx in $try; do
964                         if test -f "$xxx"; then
965                                 sh="$xxx";
966                                 break
967                         elif test -f "$xxx.exe"; then
968                                 sh="$xxx";
969                                 break
970                         fi
971                 done
972         fi
973         ;;
974 esac
975
976 case "$sh" in
977 '')     cat <<EOM >&2
978 $me:  Fatal Error:  I can't find a Bourne Shell anywhere.  
979
980 Usually it's in /bin/sh.  How did you even get this far?
981 Please contact me (Perl Maintainers) at perlbug@perl.com and 
982 we'll try to straighten this all out.
983 EOM
984         exit 1
985         ;;
986 esac
987
988 : see if sh knows # comments
989 if `$sh -c '#' >/dev/null 2>&1`; then
990         shsharp=true
991         spitshell=cat
992         xcat=/bin/cat
993         test -f $xcat || xcat=/usr/bin/cat
994         echo "#!$xcat" >try
995         $eunicefix try
996         chmod +x try
997         ./try > today
998         if test -s today; then
999                 sharpbang='#!'
1000         else
1001                 echo "#! $xcat" > try
1002                 $eunicefix try
1003                 chmod +x try
1004                 ./try > today
1005                 if test -s today; then
1006                         sharpbang='#! '
1007                 else
1008                         sharpbang=': use '
1009                 fi
1010         fi
1011 else
1012         echo " "
1013         echo "Your $sh doesn't grok # comments--I will strip them later on."
1014         shsharp=false
1015         cd ..
1016         echo "exec grep -v '^[  ]*#'" >spitshell
1017         chmod +x spitshell
1018         $eunicefix spitshell
1019         spitshell=`pwd`/spitshell
1020         cd UU
1021         echo "I presume that if # doesn't work, #! won't work either!"
1022         sharpbang=': use '
1023 fi
1024 rm -f try today
1025
1026 : figure out how to guarantee sh startup
1027 case "$startsh" in
1028 '') startsh=${sharpbang}${sh} ;;
1029 *)
1030 esac
1031 cat >try <<EOSS
1032 $startsh
1033 set abc
1034 test "$?abc" != 1
1035 EOSS
1036
1037 chmod +x try
1038 $eunicefix try
1039 if ./try; then
1040         : echo "Yup, it does."
1041 else
1042         echo "Hmm... '$startsh' does not guarantee sh startup..."
1043         echo "You may have to fix up the shell scripts to make sure $sh runs them."
1044 fi
1045 rm -f try
1046
1047
1048 : Save command line options in file UU/cmdline.opt for later use in
1049 : generating config.sh.
1050 cat > cmdline.opt <<EOSH
1051 # Configure command line arguments.
1052 config_arg0='$0'
1053 config_args='$*'
1054 config_argc=$#
1055 EOSH
1056 argn=1
1057 for arg in "$@"; do
1058         cat >>cmdline.opt <<EOSH
1059 config_arg$argn='$arg'
1060 EOSH
1061         argn=`expr $argn + 1`
1062 done
1063
1064 : produce awk script to parse command line options
1065 cat >options.awk <<'EOF'
1066 BEGIN {
1067         optstr = "dD:eEf:hKOrsSU:V";    # getopt-style specification
1068
1069         len = length(optstr);
1070         for (i = 1; i <= len; i++) {
1071                 c = substr(optstr, i, 1);
1072                 if (i < len) a = substr(optstr, i + 1, 1); else a = "";
1073                 if (a == ":") {
1074                         arg[c] = 1;
1075                         i++;
1076                 }
1077                 opt[c] = 1;
1078         }
1079 }
1080 {
1081         expect = 0;
1082         str = $0;
1083         if (substr(str, 1, 1) != "-") {
1084                 printf("'%s'\n", str);
1085                 next;
1086         }
1087         len = length($0);
1088         for (i = 2; i <= len; i++) {
1089                 c = substr(str, i, 1);
1090                 if (!opt[c]) {
1091                         printf("-%s\n", substr(str, i));
1092                         next;
1093                 }
1094                 printf("-%s\n", c);
1095                 if (arg[c]) {
1096                         if (i < len)
1097                                 printf("'%s'\n", substr(str, i + 1));
1098                         else
1099                                 expect = 1;
1100                         next;
1101                 }
1102         }
1103 }
1104 END {
1105         if (expect)
1106                 print "?";
1107 }
1108 EOF
1109
1110 : process the command line options
1111 set X `for arg in "$@"; do echo "X$arg"; done |
1112         sed -e s/X// | awk -f options.awk`
1113 eval "set $*"
1114 shift
1115 rm -f options.awk
1116
1117 : set up default values
1118 fastread=''
1119 reuseval=false
1120 config_sh=''
1121 alldone=''
1122 error=''
1123 silent=''
1124 extractsh=''
1125 override=''
1126 knowitall=''
1127 rm -f optdef.sh
1128 cat >optdef.sh <<EOS
1129 $startsh
1130 EOS
1131
1132
1133 : option parsing
1134 while test $# -gt 0; do
1135         case "$1" in
1136         -d) shift; fastread=yes;;
1137         -e) shift; alldone=cont;;
1138         -f)
1139                 shift
1140                 cd ..
1141                 if test -r "$1"; then
1142                         config_sh="$1"
1143                 else
1144                         echo "$me: cannot read config file $1." >&2
1145                         error=true
1146                 fi
1147                 cd UU
1148                 shift;;
1149         -h) shift; error=true;;
1150         -r) shift; reuseval=true;;
1151         -s) shift; silent=true; realsilent=true;;
1152         -E) shift; alldone=exit;;
1153         -K) shift; knowitall=true;;
1154         -O) shift; override=true;;
1155         -S) shift; silent=true; extractsh=true;;
1156         -D)
1157                 shift
1158                 case "$1" in
1159                 *=)
1160                         echo "$me: use '-U symbol=', not '-D symbol='." >&2
1161                         echo "$me: ignoring -D $1" >&2
1162                         ;;
1163                 *=*) echo "$1" | \
1164                                 sed -e "s/'/'\"'\"'/g" -e "s/=\(.*\)/='\1'/" >> optdef.sh;;
1165                 *) echo "$1='define'" >> optdef.sh;;
1166                 esac
1167                 shift
1168                 ;;
1169         -U)
1170                 shift
1171                 case "$1" in
1172                 *=) echo "$1" >> optdef.sh;;
1173                 *=*)
1174                         echo "$me: use '-D symbol=val', not '-U symbol=val'." >&2
1175                         echo "$me: ignoring -U $1" >&2
1176                         ;;
1177                 *) echo "$1='undef'" >> optdef.sh;;
1178                 esac
1179                 shift
1180                 ;;
1181         -V) echo "$me generated by metaconfig 3.0 PL70." >&2
1182                 exit 0;;
1183         --) break;;
1184         -*) echo "$me: unknown option $1" >&2; shift; error=true;;
1185         *) break;;
1186         esac
1187 done
1188
1189 case "$error" in
1190 true)
1191         cat >&2 <<EOM
1192 Usage: $me [-dehrsEKOSV] [-f config.sh] [-D symbol] [-D symbol=value]
1193                  [-U symbol] [-U symbol=]
1194   -d : use defaults for all answers.
1195   -e : go on without questioning past the production of config.sh.
1196   -f : specify an alternate default configuration file.
1197   -h : print this help message and exit (with an error status).
1198   -r : reuse C symbols value if possible (skips costly nm extraction).
1199   -s : silent mode, only echoes questions and essential information.
1200   -D : define symbol to have some value:
1201          -D symbol         symbol gets the value 'define'
1202          -D symbol=value   symbol gets the value 'value'
1203   -E : stop at the end of questions, after having produced config.sh.
1204   -K : do not use unless you know what you are doing.
1205   -O : let -D and -U override definitions from loaded configuration file.
1206   -S : perform variable substitutions on all .SH files (can mix with -f)
1207   -U : undefine symbol:
1208          -U symbol    symbol gets the value 'undef'
1209          -U symbol=   symbol gets completely empty
1210   -V : print version number and exit (with a zero status).
1211 EOM
1212         exit 1
1213         ;;
1214 esac
1215
1216 : Sanity checks
1217 case "$fastread$alldone" in
1218 yescont|yesexit) ;;
1219 *)
1220         if test ! -t 0; then
1221                 echo "Say 'sh Configure', not 'sh <Configure'"
1222                 exit 1
1223         fi
1224         ;;
1225 esac
1226
1227 exec 4>&1
1228 case "$silent" in
1229 true) exec 1>/dev/null;;
1230 esac
1231
1232 : run the defines and the undefines, if any, but leave the file out there...
1233 touch optdef.sh
1234 . ./optdef.sh
1235
1236 : set package name
1237 package=perl5
1238 first=`echo $package | sed -e 's/^\(.\).*/\1/'`
1239 last=`echo $package | sed -e 's/^.\(.*\)/\1/'`
1240 case "`echo AbyZ | tr '[:lower:]' '[:upper:]' 2>/dev/null`" in
1241 ABYZ) spackage=`echo $first | tr '[:lower:]' '[:upper:]'`$last;;
1242 *) spackage=`echo $first | tr '[a-z]' '[A-Z]'`$last;;
1243 esac
1244
1245 : Some greps do not return status, grrr.
1246 echo "grimblepritz" >grimble
1247 if grep blurfldyick grimble >/dev/null 2>&1 ; then
1248         contains=contains
1249 elif grep grimblepritz grimble >/dev/null 2>&1 ; then
1250         contains=grep
1251 else
1252         contains=contains
1253 fi
1254 rm -f grimble
1255 : the following should work in any shell
1256 case "$contains" in
1257 contains*)
1258         echo " "
1259         echo "AGH!  Grep doesn't return a status.  Attempting remedial action."
1260         cat >contains <<'EOSS'
1261 grep "$1" "$2" >.greptmp && cat .greptmp && test -s .greptmp
1262 EOSS
1263 chmod +x contains
1264 esac
1265
1266 : Find the path to the source tree
1267 case "$src" in
1268 '') case "$0" in
1269     */*) src=`echo $0 | sed -e 's%/[^/][^/]*$%%'`;;
1270     *)   src='.';;
1271     esac;;
1272 esac
1273 case "$src" in
1274 '')     src=/
1275         rsrc=/
1276         ;;
1277 /*) rsrc="$src";;
1278 *) rsrc="../$src";;
1279 esac
1280 if test -f $rsrc/Configure && \
1281         $contains "^package=$package$" $rsrc/Configure >/dev/null 2>&1
1282 then
1283    : found it, so we are ok.
1284 else
1285         rsrc=''
1286         for src in . .. ../.. ../../.. ../../../..; do
1287                 if test -f ../$src/Configure && \
1288                         $contains "^package=$package$" ../$src/Configure >/dev/null 2>&1
1289                 then
1290                         rsrc=../$src
1291                         break
1292                 fi
1293         done
1294 fi
1295 case "$rsrc" in
1296 '')
1297         cat <<EOM >&4
1298
1299 Sorry, I can't seem to locate the source dir for $package.  Please start
1300 Configure with an explicit path -- i.e. /some/path/Configure.
1301
1302 EOM
1303         exit 1
1304         ;;
1305 ../.)   rsrc='..';;
1306 *)
1307         echo " "
1308         echo "Sources for $package found in \"$src\"." >&4
1309         ;;
1310 esac
1311
1312 : script used to extract .SH files with variable substitutions
1313 cat >extract <<'EOS'
1314 CONFIG=true
1315 echo "Doing variable substitutions on .SH files..."
1316 if test -f $src/MANIFEST; then
1317         set x `awk '{print $1}' <$src/MANIFEST | grep '\.SH$'`
1318 else
1319         echo "(Looking for .SH files under the source directory.)"
1320         set x `(cd $src; find . -name "*.SH" -print)`
1321 fi
1322 shift
1323 case $# in
1324 0) set x `(cd $src; echo *.SH)`; shift;;
1325 esac
1326 if test ! -f $src/$1; then
1327         shift
1328 fi
1329 mkdir_p='
1330 name=$1;
1331 create="";
1332 while test $name; do
1333         if test ! -d "$name"; then
1334                 create="$name $create";
1335                 name=`echo $name | sed -e "s|^[^/]*$||"`;
1336                 name=`echo $name | sed -e "s|\(.*\)/.*|\1|"`;
1337         else
1338                 name="";
1339         fi;
1340 done;
1341 for file in $create; do
1342         mkdir $file;
1343 done
1344 '
1345 for file in $*; do
1346         case "$src" in
1347         ".")
1348                 case "$file" in
1349                 */*)
1350                         dir=`expr X$file : 'X\(.*\)/'`
1351                         file=`expr X$file : 'X.*/\(.*\)'`
1352                         (cd $dir && . ./$file)
1353                         ;;
1354                 *)
1355                         . ./$file
1356                         ;;
1357                 esac
1358                 ;;
1359         *)
1360                 case "$file" in
1361                 */*)
1362                         dir=`expr X$file : 'X\(.*\)/'`
1363                         file=`expr X$file : 'X.*/\(.*\)'`
1364                         (set x $dir; shift; eval $mkdir_p)
1365                         sh <$src/$dir/$file
1366                         ;;
1367                 *)
1368                         sh <$src/$file
1369                         ;;
1370                 esac
1371                 ;;
1372         esac
1373 done
1374 if test -f $src/config_h.SH; then
1375         if test ! -f config.h; then
1376         : oops, they left it out of MANIFEST, probably, so do it anyway.
1377         . $src/config_h.SH
1378         fi
1379 fi
1380 EOS
1381
1382 : extract files and exit if asked to do so
1383 case "$extractsh" in
1384 true)
1385         case "$realsilent" in
1386         true) ;;
1387         *) exec 1>&4;;
1388         esac
1389         case "$config_sh" in
1390         '') config_sh='config.sh';;
1391         esac
1392         echo " "
1393         echo "Fetching answers from $config_sh..."
1394         cd ..
1395         . $config_sh
1396         test "$override" && . ./optdef.sh
1397         echo " "
1398         . UU/extract
1399         rm -rf UU
1400         echo "Done."
1401         exit 0
1402         ;;
1403 esac
1404
1405 : Eunice requires " " instead of "", can you believe it
1406 echo " "
1407 : Here we go...
1408 echo "Beginning of configuration questions for $package."
1409
1410 trap 'echo " "; test -d ../UU && rm -rf X $rmlist; exit 1' 1 2 3 15
1411
1412 : first determine how to suppress newline on echo command
1413 echo " "
1414 echo "Checking echo to see how to suppress newlines..."
1415 (echo "hi there\c" ; echo " ") >.echotmp
1416 if $contains c .echotmp >/dev/null 2>&1 ; then
1417         echo "...using -n."
1418         n='-n'
1419         c=''
1420 else
1421         cat <<'EOM'
1422 ...using \c
1423 EOM
1424         n=''
1425         c='\c'
1426 fi
1427 echo $n "The star should be here-->$c"
1428 echo '*'
1429 rm -f .echotmp
1430
1431 : Now test for existence of everything in MANIFEST
1432 echo " "
1433 if test -f $rsrc/MANIFEST; then
1434         echo "First let's make sure your kit is complete.  Checking..." >&4
1435         awk '$1 !~ /PACK[A-Z]+/ {print $1}' $rsrc/MANIFEST | split -50
1436         rm -f missing
1437         tmppwd=`pwd`
1438         for filelist in x??; do
1439                 (cd $rsrc; ls `cat $tmppwd/$filelist` >/dev/null 2>>$tmppwd/missing)
1440         done
1441         if test -s missing; then
1442                 cat missing >&4
1443                 cat >&4 <<'EOM'
1444
1445 THIS PACKAGE SEEMS TO BE INCOMPLETE.
1446
1447 You have the option of continuing the configuration process, despite the
1448 distinct possibility that your kit is damaged, by typing 'y'es.  If you
1449 do, don't blame me if something goes wrong.  I advise you to type 'n'o
1450 and contact the author (perlbug@perl.com).
1451
1452 EOM
1453                 echo $n "Continue? [n] $c" >&4
1454                 read ans
1455                 case "$ans" in
1456                 y*)
1457                         echo "Continuing..." >&4
1458                         rm -f missing
1459                         ;;
1460                 *)
1461                         echo "ABORTING..." >&4
1462                         kill $$
1463                         ;;
1464                 esac
1465         else
1466                 echo "Looks good..."
1467         fi
1468 else
1469         echo "There is no MANIFEST file.  I hope your kit is complete !"
1470 fi
1471 rm -f missing x??
1472
1473 echo " "
1474 : Find the appropriate value for a newline for tr
1475 if test -n "$DJGPP"; then
1476        trnl='\012'
1477 fi
1478 if test X"$trnl" = X; then
1479         case "`echo foo|tr '\n' x 2>/dev/null`" in
1480         foox) trnl='\n' ;;
1481         esac
1482 fi
1483 if test X"$trnl" = X; then
1484         case "`echo foo|tr '\012' x 2>/dev/null`" in
1485         foox) trnl='\012' ;;
1486         esac
1487 fi
1488 if test X"$trnl" = X; then
1489         cat <<EOM >&2
1490
1491 $me: Fatal Error: cannot figure out how to translate newlines with 'tr'.
1492
1493 EOM
1494         exit 1
1495 fi
1496
1497 : compute the number of columns on the terminal for proper question formatting
1498 case "$COLUMNS" in
1499 '') COLUMNS='80';;
1500 esac
1501
1502 : set up the echo used in my read
1503 myecho="case \"\$xxxm\" in
1504 '') echo $n \"\$rp $c\" >&4;;
1505 *) case \"\$rp\" in
1506         '') echo $n \"[\$xxxm] $c\";;
1507         *)
1508                 if test \`echo \"\$rp [\$xxxm]  \" | wc -c\` -ge $COLUMNS; then
1509                         echo \"\$rp\" >&4
1510                         echo $n \"[\$xxxm] $c\" >&4
1511                 else
1512                         echo $n \"\$rp [\$xxxm] $c\" >&4
1513                 fi
1514                 ;;
1515         esac;;
1516 esac"
1517
1518 : now set up to do reads with possible shell escape and default assignment
1519 cat <<EOSC >myread
1520 $startsh
1521 xxxm=\$dflt
1522 $myecho
1523 ans='!'
1524 case "\$fastread" in
1525 yes) case "\$dflt" in
1526         '') ;;
1527         *) ans='';
1528                 case "\$silent-\$rp" in
1529                 true-) ;;
1530                 *) echo " " >&4;;
1531                 esac;;
1532         esac;;
1533 *) case "\$silent" in
1534         true) case "\$rp" in
1535                 '') ans='';;
1536                 esac;;
1537         esac;;
1538 esac
1539 while expr "X\$ans" : "X!" >/dev/null; do
1540         read answ
1541         set x \$xxxm
1542         shift
1543         aok=''; eval "ans=\\"\$answ\\"" && aok=y
1544         case  "\$answ" in
1545         "!")
1546                 sh 1>&4
1547                 echo " "
1548                 $myecho
1549                 ;;
1550         !*)
1551                 set x \`expr "X\$ans" : "X!\(.*\)\$"\`
1552                 shift
1553                 sh 1>&4 -c "\$*"
1554                 echo " "
1555                 $myecho
1556                 ;;
1557         "\$ans")
1558                 case "\$ans" in
1559                 \\&*)
1560                         set x \`expr "X\$ans" : "X&\(.*\)\$"\`
1561                         shift
1562                         case "\$1" in
1563                         -d)
1564                                 fastread=yes
1565                                 echo "(OK, I'll run with -d after this question.)" >&4
1566                                 ;;
1567                         -*)
1568                                 echo "*** Sorry, \$1 not supported yet." >&4
1569                                 ;;
1570                         esac
1571                         $myecho
1572                         ans=!
1573                         ;;
1574                 esac;;
1575         *)
1576                 case "\$aok" in
1577                 y)
1578                         echo "*** Substitution done -- please confirm."
1579                         xxxm="\$ans"
1580                         ans=\`echo $n "\$ans$c" | tr '$trnl' ' '\`
1581                         xxxm="\$ans"
1582                         ans=!
1583                         ;;
1584                 *)
1585                         echo "*** Error -- try again."
1586                         ans=!
1587                         ;;
1588                 esac
1589                 $myecho
1590                 ;;
1591         esac
1592         case "\$ans\$xxxm\$nostick" in
1593         '')
1594                 ans=!
1595                 $myecho
1596                 ;;
1597         esac
1598 done
1599 case "\$ans" in
1600 '') ans="\$xxxm";;
1601 esac
1602 EOSC
1603
1604 : create .config dir to save info across Configure sessions
1605 test -d ../.config || mkdir ../.config
1606 cat >../.config/README <<EOF
1607 This directory created by Configure to save information that should
1608 persist across sessions for $package.
1609
1610 You may safely delete it if you wish.
1611 EOF
1612
1613 : general instructions
1614 needman=true
1615 firsttime=true
1616 user=`(logname) 2>/dev/null`
1617 case "$user" in
1618 '') user=`whoami 2>&1`;;
1619 esac
1620 if $contains "^$user\$" ../.config/instruct >/dev/null 2>&1; then
1621         firsttime=false
1622         echo " "
1623         rp='Would you like to see the instructions?'
1624         dflt=n
1625         . ./myread
1626         case "$ans" in
1627         [yY]*) ;;
1628         *) needman=false;;
1629         esac
1630 fi
1631 if $needman; then
1632         cat <<EOH
1633
1634 This installation shell script will examine your system and ask you questions
1635 to determine how the perl5 package should be installed. If you get
1636 stuck on a question, you may use a ! shell escape to start a subshell or
1637 execute a command.  Many of the questions will have default answers in square
1638 brackets; typing carriage return will give you the default.
1639
1640 On some of the questions which ask for file or directory names you are allowed
1641 to use the ~name construct to specify the login directory belonging to "name",
1642 even if you don't have a shell which knows about that.  Questions where this is
1643 allowed will be marked "(~name ok)".
1644
1645 EOH
1646         rp=''
1647         dflt='Type carriage return to continue'
1648         . ./myread
1649         cat <<'EOH'
1650
1651 The prompter used in this script allows you to use shell variables and
1652 backticks in your answers.  You may use $1, $2, etc...  to refer to the words
1653 in the default answer, as if the default line was a set of arguments given to a
1654 script shell.  This means you may also use $* to repeat the whole default line,
1655 so you do not have to re-type everything to add something to the default.
1656
1657 Everytime there is a substitution, you will have to confirm.  If there is an
1658 error (e.g. an unmatched backtick), the default answer will remain unchanged
1659 and you will be prompted again.
1660
1661 If you are in a hurry, you may run 'Configure -d'.  This will bypass nearly all
1662 the questions and use the computed defaults (or the previous answers if there
1663 was already a config.sh file). Type 'Configure -h' for a list of options.
1664 You may also start interactively and then answer '& -d' at any prompt to turn
1665 on the non-interactive behaviour for the remainder of the execution.
1666
1667 EOH
1668         . ./myread
1669         cat <<EOH
1670
1671 Much effort has been expended to ensure that this shell script will run on any
1672 Unix system.  If despite that it blows up on yours, your best bet is to edit
1673 Configure and run it again.  If you can't run Configure for some reason,
1674 you'll have to generate a config.sh file by hand.  Whatever problems you
1675 have, let me (perlbug@perl.com) know how I blew it.
1676
1677 This installation script affects things in two ways:
1678
1679 1) it may do direct variable substitutions on some of the files included
1680    in this kit.
1681 2) it builds a config.h file for inclusion in C programs.  You may edit
1682    any of these files as the need arises after running this script.
1683
1684 If you make a mistake on a question, there is no easy way to back up to it
1685 currently.  The easiest thing to do is to edit config.sh and rerun all the SH
1686 files.  Configure will offer to let you do this before it runs the SH files.
1687
1688 EOH
1689         dflt='Type carriage return to continue'
1690         . ./myread
1691         case "$firsttime" in
1692         true) echo $user >>../.config/instruct;;
1693         esac
1694 fi
1695
1696 : find out where common programs are
1697 echo " "
1698 echo "Locating common programs..." >&4
1699 cat <<EOSC >loc
1700 $startsh
1701 case \$# in
1702 0) exit 1;;
1703 esac
1704 thing=\$1
1705 shift
1706 dflt=\$1
1707 shift
1708 for dir in \$*; do
1709         case "\$thing" in
1710         .)
1711         if test -d \$dir/\$thing; then
1712                 echo \$dir
1713                 exit 0
1714         fi
1715         ;;
1716         *)
1717         for thisthing in \$dir/\$thing; do
1718                 : just loop through to pick last item
1719         done
1720         if test -f \$thisthing; then
1721                 echo \$thisthing
1722                 exit 0
1723         elif test -f \$dir/\$thing.exe; then
1724                 if test -n "$DJGPP"; then
1725                         echo \$dir/\$thing.exe
1726                 else
1727                         : on Eunice apparently
1728                         echo \$dir/\$thing
1729                 fi
1730                 exit 0
1731         fi
1732         ;;
1733         esac
1734 done
1735 echo \$dflt
1736 exit 1
1737 EOSC
1738 chmod +x loc
1739 $eunicefix loc
1740 loclist="
1741 awk
1742 cat
1743 comm
1744 cp
1745 echo
1746 expr
1747 grep
1748 ls
1749 make
1750 mkdir
1751 rm
1752 sed
1753 sort
1754 touch
1755 tr
1756 uniq
1757 "
1758 trylist="
1759 Mcc
1760 ar
1761 byacc
1762 cpp
1763 csh
1764 date
1765 egrep
1766 gzip
1767 less
1768 ln
1769 more
1770 nm
1771 nroff
1772 pg
1773 tee
1774 test
1775 uname
1776 zip
1777 "
1778 pth=`echo $PATH | sed -e "s/$p_/ /g"`
1779 pth="$pth /lib /usr/lib"
1780 for file in $loclist; do
1781         eval xxx=\$$file
1782         case "$xxx" in
1783         /*|?:[\\/]*)
1784                 if test -f "$xxx"; then
1785                         : ok
1786                 else
1787                         echo "WARNING: no $xxx -- ignoring your setting for $file." >&4
1788                         xxx=`./loc $file $file $pth`
1789                 fi
1790                 ;;
1791         '') xxx=`./loc $file $file $pth`;;
1792         *) xxx=`./loc $xxx $xxx $pth`;;
1793         esac
1794         eval $file=$xxx
1795         eval _$file=$xxx
1796         case "$xxx" in
1797         /*)
1798                 echo $file is in $xxx.
1799                 ;;
1800         ?:[\\/]*)
1801                 echo $file is in $xxx.
1802                 ;;
1803         *)
1804                 echo "I don't know where '$file' is, and my life depends on it." >&4
1805                 echo "Go find a public domain implementation or fix your PATH setting!" >&4
1806                 exit 1
1807                 ;;
1808         esac
1809 done
1810 echo " "
1811 echo "Don't worry if any of the following aren't found..."
1812 say=offhand
1813 for file in $trylist; do
1814         eval xxx=\$$file
1815         case "$xxx" in
1816         /*|?:[\\/]*)
1817                 if test -f "$xxx"; then
1818                         : ok
1819                 else
1820                         echo "WARNING: no $xxx -- ignoring your setting for $file." >&4
1821                         xxx=`./loc $file $file $pth`
1822                 fi
1823                 ;;
1824         '') xxx=`./loc $file $file $pth`;;
1825         *) xxx=`./loc $xxx $xxx $pth`;;
1826         esac
1827         eval $file=$xxx
1828         eval _$file=$xxx
1829         case "$xxx" in
1830         /*)
1831                 echo $file is in $xxx.
1832                 ;;
1833         ?:[\\/]*)
1834                 echo $file is in $xxx.
1835                 ;;
1836         *)
1837                 echo "I don't see $file out there, $say."
1838                 say=either
1839                 ;;
1840         esac
1841 done
1842 case "$egrep" in
1843 egrep)
1844         echo "Substituting grep for egrep."
1845         egrep=$grep
1846         ;;
1847 esac
1848 case "$ln" in
1849 ln)
1850         echo "Substituting cp for ln."
1851         ln=$cp
1852         ;;
1853 esac
1854 case "$test" in
1855 test)
1856         echo "Hopefully test is built into your sh."
1857         ;;
1858 *)
1859         if `sh -c "PATH= test true" >/dev/null 2>&1`; then
1860                 echo "Using the test built into your sh."
1861                 test=test
1862                 _test=test
1863         fi
1864         ;;
1865 esac
1866 case "$echo" in
1867 echo)
1868         echo "Hopefully echo is built into your sh."
1869         ;;
1870 '') ;;
1871 *)
1872         echo " "
1873 echo "Checking compatibility between $echo and builtin echo (if any)..." >&4
1874         $echo $n "hi there$c" >foo1
1875         echo $n "hi there$c" >foo2
1876         if cmp foo1 foo2 >/dev/null 2>&1; then
1877                 echo "They are compatible.  In fact, they may be identical."
1878         else
1879                 case "$n" in
1880                 '-n') n='' c='\c';;
1881                 *) n='-n' c='';;
1882                 esac
1883                 cat <<FOO
1884 They are not compatible!  You are probably running ksh on a non-USG system.
1885 I'll have to use $echo instead of the builtin, since Bourne shell doesn't
1886 have echo built in and we may have to run some Bourne shell scripts.  That
1887 means I'll have to use '$n$c' to suppress newlines now.  Life is ridiculous.
1888
1889 FOO
1890                 $echo $n "The star should be here-->$c"
1891                 $echo "*"
1892         fi
1893         $rm -f foo1 foo2
1894         ;;
1895 esac
1896
1897 : determine whether symbolic links are supported
1898 echo " "
1899 $touch blurfl
1900 if $ln -s blurfl sym > /dev/null 2>&1 ; then
1901         echo "Symbolic links are supported." >&4
1902         lns="$ln -s"
1903 else
1904         echo "Symbolic links are NOT supported." >&4
1905         lns="$ln"
1906 fi
1907 $rm -f blurfl sym
1908
1909 : see whether [:lower:] and [:upper:] are supported character classes
1910 echo " "
1911 case "`echo AbyZ | $tr '[:lower:]' '[:upper:]' 2>/dev/null`" in
1912 ABYZ)
1913         echo "Good, your tr supports [:lower:] and [:upper:] to convert case." >&4
1914         up='[:upper:]'
1915         low='[:lower:]'
1916         ;;
1917 *)      # There is a discontinuity in EBCDIC between 'I' and 'J'
1918         # (0xc9 and 0xd1), therefore that is a nice testing point.
1919         if test "X$up" = X -o "X$low" = X; then
1920             case "`echo IJ | $tr '[I-J]' '[i-j]' 2>/dev/null`" in
1921             ij) up='[A-Z]'
1922                 low='[a-z]'
1923                 ;;
1924             esac
1925         fi
1926         if test "X$up" = X -o "X$low" = X; then
1927             case "`echo IJ | $tr I-J i-j 2>/dev/null`" in
1928             ij) up='A-Z'
1929                 low='a-z'
1930                 ;;
1931             esac
1932         fi
1933         if test "X$up" = X -o "X$low" = X; then
1934             case "`echo IJ | od -x 2>/dev/null`" in
1935             *C9D1*|*c9d1*)
1936                 echo "Hey, this might be EBCDIC." >&4
1937                 if test "X$up" = X -o "X$low" = X; then
1938                     case "`echo IJ | $tr '[A-IJ-RS-Z]' '[a-ij-rs-z]' 2>/dev/null`" in
1939                     ij) up='[A-IJ-RS-Z]'
1940                         low='[a-ij-rs-z]'
1941                         ;;
1942                     esac
1943                 fi
1944                 if test "X$up" = X -o "X$low" = X; then
1945                     case "`echo IJ | $tr A-IJ-RS-Z a-ij-rs-z 2>/dev/null`" in
1946                     ij) up='A-IJ-RS-Z'
1947                         low='a-ij-rs-z'
1948                         ;;
1949                     esac
1950                 fi
1951                 ;;
1952             esac
1953         fi
1954 esac
1955 case "`echo IJ | $tr \"$up\" \"$low\" 2>/dev/null`" in
1956 ij)
1957     echo "Using $up and $low to convert case." >&4
1958     ;;
1959 *)
1960     echo "I don't know how to translate letters from upper to lower case." >&4
1961     echo "Your tr is not acting any way I know of." >&4
1962     exit 1
1963     ;;
1964 esac
1965 : set up the translation script tr, must be called with ./tr of course
1966 cat >tr <<EOSC
1967 $startsh
1968 case "\$1\$2" in
1969 '[A-Z][a-z]') exec $tr '$up' '$low';;
1970 '[a-z][A-Z]') exec $tr '$low' '$up';;
1971 esac
1972 exec $tr "\$@"
1973 EOSC
1974 chmod +x tr
1975 $eunicefix tr
1976
1977 : Try to determine whether config.sh was made on this system
1978 case "$config_sh" in
1979 '')
1980 myuname=`( ($uname -a) 2>/dev/null || hostname) 2>&1`
1981 # tr '[A-Z]' '[a-z]' would not work in EBCDIC
1982 # because the A-Z/a-z are not consecutive.
1983 myuname=`echo $myuname | $sed -e 's/^[^=]*=//' -e 's/\///g' | \
1984         ./tr '[A-Z]' '[a-z]' | $tr $trnl ' '`
1985 newmyuname="$myuname"
1986 dflt=n
1987 case "$knowitall" in
1988 '')
1989         if test -f ../config.sh; then
1990                 if $contains myuname= ../config.sh >/dev/null 2>&1; then
1991                         eval "`grep myuname= ../config.sh`"
1992                 fi
1993                 if test "X$myuname" = "X$newmyuname"; then
1994                         dflt=y
1995                 fi
1996         fi
1997         ;;
1998 *) dflt=y;;
1999 esac
2000
2001 : Get old answers from old config file if Configure was run on the
2002 : same system, otherwise use the hints.
2003 hint=default
2004 cd ..
2005 if test -f config.sh; then
2006         echo " "
2007         rp="I see a config.sh file.  Shall I use it to set the defaults?"
2008         . UU/myread
2009         case "$ans" in
2010         n*|N*) echo "OK, I'll ignore it."; mv config.sh config.sh.old;;
2011         *)  echo "Fetching default answers from your old config.sh file..." >&4
2012                 tmp_n="$n"
2013                 tmp_c="$c"
2014                 tmp_sh="$sh"
2015                 . ./config.sh
2016                 cp config.sh UU
2017                 n="$tmp_n"
2018                 c="$tmp_c"
2019                 : Older versions did not always set $sh.  Catch re-use of such
2020                 : an old config.sh.
2021                 case "$sh" in
2022                 '') sh="$tmp_sh" ;;
2023                 esac
2024                 hint=previous
2025                 ;;
2026         esac
2027 fi
2028 if test ! -f config.sh; then
2029         $cat <<EOM
2030
2031 First time through, eh?  I have some defaults handy for some systems
2032 that need some extra help getting the Configure answers right:
2033
2034 EOM
2035         (cd $src/hints; ls -C *.sh) | $sed 's/\.sh/   /g' >&4
2036         dflt=''
2037         : Half the following guesses are probably wrong... If you have better
2038         : tests or hints, please send them to perlbug@perl.com
2039         : The metaconfig authors would also appreciate a copy...
2040         $test -f /irix && osname=irix
2041         $test -f /xenix && osname=sco_xenix
2042         $test -f /dynix && osname=dynix
2043         $test -f /dnix && osname=dnix
2044         $test -f /lynx.os && osname=lynxos
2045         $test -f /unicos && osname=unicos && osvers=`$uname -r`
2046         $test -f /unicosmk.ar && osname=unicosmk && osvers=`$uname -r`
2047         $test -f /bin/mips && /bin/mips && osname=mips
2048         $test -d /NextApps && set X `hostinfo | grep 'NeXT Mach.*:' | \
2049                 $sed -e 's/://' -e 's/\./_/'` && osname=next && osvers=$4
2050         $test -d /usr/apollo/bin && osname=apollo
2051         $test -f /etc/saf/_sactab && osname=svr4
2052         $test -d /usr/include/minix && osname=minix
2053         if $test -d /MachTen -o -d /MachTen_Folder; then
2054                 osname=machten
2055                 if $test -x /sbin/version; then
2056                         osvers=`/sbin/version | $awk '{print $2}' |
2057                         $sed -e 's/[A-Za-z]$//'`
2058                 elif $test -x /usr/etc/version; then
2059                         osvers=`/usr/etc/version | $awk '{print $2}' |
2060                         $sed -e 's/[A-Za-z]$//'`
2061                 else
2062                         osvers="$2.$3"
2063                 fi
2064         fi
2065        $test -f /sys/posix.dll &&
2066                $test -f /usr/bin/what &&
2067                set X `/usr/bin/what /sys/posix.dll` &&
2068                $test "$3" = UWIN &&
2069                osname=uwin &&
2070                osvers="$5"
2071         if $test -f $uname; then
2072                 set X $myuname
2073                 shift
2074
2075                 case "$5" in
2076                 fps*) osname=fps ;;
2077                 mips*)
2078                         case "$4" in
2079                         umips) osname=umips ;;
2080                         *) osname=mips ;;
2081                         esac;;
2082                 [23]100) osname=mips ;;
2083                 next*) osname=next ;;
2084                 i386*)
2085                         tmp=`/bin/uname -X 2>/dev/null|awk '/3\.2v[45]/{ print $(NF) }'`
2086                         if $test "$tmp" != "" -a "$3" = "3.2" -a -f '/etc/systemid'; then
2087                                 osname='sco'
2088                                 osvers=$tmp
2089                         elif $test -f /etc/kconfig; then
2090                                 osname=isc
2091                                 if test "$lns" = "ln -s"; then
2092                                         osvers=4
2093                                 elif $contains _SYSV3 /usr/include/stdio.h > /dev/null 2>&1 ; then
2094                                         osvers=3
2095                                 elif $contains _POSIX_SOURCE /usr/include/stdio.h > /dev/null 2>&1 ; then
2096                                         osvers=2
2097                                 fi
2098                         fi
2099                         unset tmp
2100                         ;;
2101                 pc*)
2102                         if test -n "$DJGPP"; then
2103                                 osname=dos
2104                                 osvers=djgpp
2105                         fi
2106                         ;;
2107                 esac
2108
2109                 case "$1" in
2110                 aix) osname=aix
2111                         tmp=`( (oslevel) 2>/dev/null || echo "not found") 2>&1`
2112                         case "$tmp" in
2113                         'not found') osvers="$4"."$3" ;;
2114                         '<3240'|'<>3240') osvers=3.2.0 ;;
2115                         '=3240'|'>3240'|'<3250'|'<>3250') osvers=3.2.4 ;;
2116                         '=3250'|'>3250') osvers=3.2.5 ;;
2117                         *) osvers=$tmp;;
2118                         esac
2119                         ;;
2120                 *dc.osx) osname=dcosx
2121                         osvers="$3"
2122                         ;;
2123                 dnix) osname=dnix
2124                         osvers="$3"
2125                         ;;
2126                 domainos) osname=apollo
2127                         osvers="$3"
2128                         ;;
2129                 dgux) osname=dgux 
2130                         osvers="$3"
2131                         ;;
2132                 dynixptx*) osname=dynixptx
2133                         osvers=`echo "$4"|sed 's/^v//'`
2134                         ;;
2135                 freebsd) osname=freebsd 
2136                         osvers="$3" ;;
2137                 genix) osname=genix ;;
2138                 hp*) osname=hpux 
2139                         osvers=`echo "$3" | $sed 's,.*\.\([0-9]*\.[0-9]*\),\1,'`
2140                         ;;
2141                 irix*) osname=irix
2142                         case "$3" in
2143                         4*) osvers=4 ;;
2144                         5*) osvers=5 ;;
2145                         *)      osvers="$3" ;;
2146                         esac
2147                         ;;
2148                 linux) osname=linux
2149                         case "$3" in
2150                         *)      osvers="$3" ;;
2151                         esac
2152                         ;;
2153                 MiNT) osname=mint
2154                         ;;
2155                 netbsd*) osname=netbsd
2156                         osvers="$3"
2157                         ;;
2158                 news-os) osvers="$3"
2159                         case "$3" in
2160                         4*) osname=newsos4 ;;
2161                         *) osname=newsos ;;
2162                         esac
2163                         ;;
2164                 bsd386) osname=bsd386
2165                         osvers=`$uname -r`
2166                         ;;
2167                 POSIX-BC | posix-bc ) osname=posix-bc
2168                         osvers="$3"
2169                         ;;
2170                 powerux | power_ux | powermax_os | powermaxos | \
2171                 powerunix | power_unix) osname=powerux
2172                         osvers="$3"
2173                         ;;
2174                 next*) osname=next ;;
2175                 solaris) osname=solaris
2176                         case "$3" in
2177                         5*) osvers=`echo $3 | $sed 's/^5/2/g'` ;;
2178                         *)      osvers="$3" ;;
2179                         esac
2180                         ;;
2181                 sunos) osname=sunos
2182                         case "$3" in
2183                         5*) osname=solaris
2184                                 osvers=`echo $3 | $sed 's/^5/2/g'` ;;
2185                         *)      osvers="$3" ;;
2186                         esac
2187                         ;;
2188                 titanos) osname=titanos
2189                         case "$3" in
2190                         1*) osvers=1 ;;
2191                         2*) osvers=2 ;;
2192                         3*) osvers=3 ;;
2193                         4*) osvers=4 ;;
2194                         *)      osvers="$3" ;;
2195                         esac
2196                         ;;
2197                 ultrix) osname=ultrix
2198                         osvers="$3"
2199                         ;;
2200                 osf1|mls+)      case "$5" in
2201                                 alpha)
2202                                         osname=dec_osf
2203                                         osvers=`echo "$3" | sed 's/^[xvt]//'`
2204                                         ;;
2205                         hp*)    osname=hp_osf1  ;;
2206                         mips)   osname=mips_osf1 ;;
2207                         esac
2208                         ;;
2209                 uts) osname=uts 
2210                         osvers="$3"
2211                         ;;
2212                 qnx) osname=qnx
2213                         osvers="$4"
2214                         ;;
2215                 $2) case "$osname" in
2216                         *isc*) ;;
2217                         *freebsd*) ;;
2218                         svr*)
2219                                 : svr4.x or possibly later
2220                                 case "svr$3" in 
2221                                 ${osname}*)
2222                                         osname=svr$3
2223                                         osvers=$4
2224                                         ;;
2225                                 esac
2226                                 case "$osname" in
2227                                 svr4.0)
2228                                         : Check for ESIX
2229                                         if test -f /stand/boot ; then
2230                                                 eval `grep '^INITPROG=[a-z/0-9]*$' /stand/boot`
2231                                                 if test -n "$INITPROG" -a -f "$INITPROG"; then
2232                         isesix=`strings -a $INITPROG|grep 'ESIX SYSTEM V/386 Release 4.0'`
2233                                                         if test -n "$isesix"; then
2234                                                                 osname=esix4
2235                                                         fi
2236                                                 fi
2237                                         fi
2238                                         ;;
2239                                 esac
2240                                 ;;
2241                         *)      if test -f /etc/systemid; then
2242                                         osname=sco
2243                                         set `echo $3 | $sed 's/\./ /g'` $4
2244                                         if $test -f $src/hints/sco_$1_$2_$3.sh; then
2245                                                 osvers=$1.$2.$3
2246                                         elif $test -f $src/hints/sco_$1_$2.sh; then
2247                                                 osvers=$1.$2
2248                                         elif $test -f $src/hints/sco_$1.sh; then
2249                                                 osvers=$1
2250                                         fi
2251                                 else
2252                                         case "$osname" in
2253                                         '') : Still unknown.  Probably a generic Sys V.
2254                                                 osname="sysv"
2255                                                 osvers="$3"
2256                                                 ;;
2257                                         esac
2258                                 fi
2259                                 ;;
2260                         esac
2261                         ;;
2262                 *)      case "$osname" in
2263                         '') : Still unknown.  Probably a generic BSD.
2264                                 osname="$1"
2265                                 osvers="$3"
2266                                 ;;
2267                         esac
2268                         ;;
2269                 esac
2270         else
2271                 if test -f /vmunix -a -f $src/hints/news_os.sh; then
2272                         (what /vmunix | UU/tr '[A-Z]' '[a-z]') > UU/kernel.what 2>&1
2273                         if $contains news-os UU/kernel.what >/dev/null 2>&1; then
2274                                 osname=news_os
2275                         fi
2276                         $rm -f UU/kernel.what
2277                 elif test -d c:/.; then
2278                         set X $myuname
2279                         osname=os2
2280                         osvers="$5"
2281                 fi
2282         fi
2283         
2284         : Now look for a hint file osname_osvers, unless one has been
2285         : specified already.
2286         case "$hintfile" in
2287         ''|' ')
2288                 file=`echo "${osname}_${osvers}" | $sed -e 's@\.@_@g' -e 's@_$@@'`
2289                 : Also try without trailing minor version numbers.
2290                 xfile=`echo $file | $sed -e 's@_[^_]*$@@'`
2291                 xxfile=`echo $xfile | $sed -e 's@_[^_]*$@@'`
2292                 xxxfile=`echo $xxfile | $sed -e 's@_[^_]*$@@'`
2293                 xxxxfile=`echo $xxxfile | $sed -e 's@_[^_]*$@@'`
2294                 case "$file" in
2295                 '') dflt=none ;;
2296                 *)  case "$osvers" in
2297                         '') dflt=$file
2298                                 ;;
2299                         *)  if $test -f $src/hints/$file.sh ; then
2300                                         dflt=$file
2301                                 elif $test -f $src/hints/$xfile.sh ; then
2302                                         dflt=$xfile
2303                                 elif $test -f $src/hints/$xxfile.sh ; then
2304                                         dflt=$xxfile
2305                                 elif $test -f $src/hints/$xxxfile.sh ; then
2306                                         dflt=$xxxfile
2307                                 elif $test -f $src/hints/$xxxxfile.sh ; then
2308                                         dflt=$xxxxfile
2309                                 elif $test -f "$src/hints/${osname}.sh" ; then
2310                                         dflt="${osname}"
2311                                 else
2312                                         dflt=none
2313                                 fi
2314                                 ;;
2315                         esac
2316                         ;;
2317                 esac
2318                 if $test -f Policy.sh ; then
2319                         case "$dflt" in
2320                         *Policy*) ;;
2321                         none) dflt="Policy" ;;
2322                         *) dflt="Policy $dflt" ;;
2323                         esac
2324                 fi
2325                 ;;
2326         *)
2327                 dflt=`echo $hintfile | $sed 's/\.sh$//'`
2328                 ;;
2329         esac
2330
2331         if $test -f Policy.sh ; then
2332                 $cat <<EOM
2333
2334 There's also a Policy hint file available, which should make the
2335 site-specific (policy) questions easier to answer.
2336 EOM
2337
2338         fi
2339
2340         $cat <<EOM
2341
2342 You may give one or more space-separated answers, or "none" if appropriate.
2343 A well-behaved OS will have no hints, so answering "none" or just "Policy"
2344 is a good thing.  DO NOT give a wrong version.
2345
2346 EOM
2347
2348         rp="Which of these apply, if any?"
2349         . UU/myread
2350         tans=$ans
2351         for file in $tans; do
2352                 if $test X$file = XPolicy -a -f Policy.sh; then
2353                         . Policy.sh
2354                         $cat Policy.sh >> UU/config.sh
2355                 elif $test -f $src/hints/$file.sh; then
2356                         . $src/hints/$file.sh
2357                         $cat $src/hints/$file.sh >> UU/config.sh
2358                 elif $test X$tans = X -o X$tans = Xnone ; then
2359                         : nothing
2360                 else
2361                         : Give one chance to correct a possible typo.
2362                         echo "$file.sh does not exist"
2363                         dflt=$file
2364                         rp="hint to use instead?"
2365                         . UU/myread
2366                         for file in $ans; do
2367                                 if $test -f "$src/hints/$file.sh"; then
2368                                         . $src/hints/$file.sh
2369                                         $cat $src/hints/$file.sh >> UU/config.sh
2370                                 elif $test X$ans = X -o X$ans = Xnone ; then
2371                                         : nothing
2372                                 else
2373                                         echo "$file.sh does not exist -- ignored."
2374                                 fi
2375                         done
2376                 fi
2377         done
2378
2379         hint=recommended
2380         : Remember our hint file for later.
2381         if $test -f "$src/hints/$file.sh" ; then
2382                 hintfile="$file"
2383         else
2384                 hintfile=''
2385         fi
2386 fi
2387 cd UU
2388 ;;
2389 *)
2390         echo " "
2391         echo "Fetching default answers from $config_sh..." >&4
2392         tmp_n="$n"
2393         tmp_c="$c"
2394         cd ..
2395         cp $config_sh config.sh 2>/dev/null
2396         chmod +w config.sh
2397         . ./config.sh
2398         cd UU
2399         cp ../config.sh .
2400         n="$tmp_n"
2401         c="$tmp_c"
2402         hint=previous
2403         ;;
2404 esac
2405 test "$override" && . ./optdef.sh
2406 myuname="$newmyuname"
2407
2408 : Restore computed paths
2409 for file in $loclist $trylist; do
2410         eval $file="\$_$file"
2411 done
2412
2413 cat << EOM
2414
2415 Configure uses the operating system name and version to set some defaults.
2416 The default value is probably right if the name rings a bell. Otherwise,
2417 since spelling matters for me, either accept the default or answer "none"
2418 to leave it blank.
2419
2420 EOM
2421 case "$osname" in
2422         ''|' ')
2423                 case "$hintfile" in
2424                 ''|' '|none) dflt=none ;;
2425                 *)  dflt=`echo $hintfile | $sed -e 's/\.sh$//' -e 's/_.*$//'` ;;
2426                 esac
2427                 ;;
2428         *) dflt="$osname" ;;
2429 esac
2430 rp="Operating system name?"
2431 . ./myread
2432 case "$ans" in
2433 none)  osname='' ;;
2434 *) osname=`echo "$ans" | $sed -e 's/[   ][      ]*/_/g' | ./tr '[A-Z]' '[a-z]'`;;
2435 esac
2436 echo " "
2437 case "$osvers" in
2438         ''|' ')
2439                 case "$hintfile" in
2440                 ''|' '|none) dflt=none ;;
2441                 *)      dflt=`echo $hintfile | $sed -e 's/\.sh$//' -e 's/^[^_]*//'`
2442                         dflt=`echo $dflt | $sed -e 's/^_//' -e 's/_/./g'`
2443                         case "$dflt" in
2444                         ''|' ') dflt=none ;;
2445                         esac
2446                         ;;
2447                 esac
2448                 ;;
2449         *) dflt="$osvers" ;;
2450 esac
2451 rp="Operating system version?"
2452 . ./myread
2453 case "$ans" in
2454 none)  osvers='' ;;
2455 *) osvers="$ans" ;;
2456 esac
2457
2458 : who configured the system
2459 cf_time=`LC_ALL=C; LANGUAGE=C; export LC_ALL; export LANGUAGE; $date 2>&1`
2460 cf_by=`(logname) 2>/dev/null`
2461 case "$cf_by" in
2462 "")
2463         cf_by=`(whoami) 2>/dev/null`
2464         case "$cf_by" in
2465         "") cf_by=unknown ;;
2466         esac ;;
2467 esac
2468
2469 : set up the script used to warn in case of inconsistency
2470 cat <<EOS >whoa
2471 $startsh
2472 EOS
2473 cat <<'EOSC' >>whoa
2474 dflt=y
2475 echo " "
2476 echo "*** WHOA THERE!!! ***" >&4
2477 echo "    The $hint value for \$$var on this machine was \"$was\"!" >&4
2478 rp="    Keep the $hint value?"
2479 . ./myread
2480 case "$ans" in
2481 y) td=$was; tu=$was;;
2482 esac
2483 EOSC
2484
2485 : function used to set $1 to $val
2486 setvar='var=$1; eval "was=\$$1"; td=$define; tu=$undef;
2487 case "$val$was" in
2488 $define$undef) . ./whoa; eval "$var=\$td";;
2489 $undef$define) . ./whoa; eval "$var=\$tu";;
2490 *) eval "$var=$val";;
2491 esac'
2492
2493 cat <<EOM
2494
2495 Perl can be built to take advantage of threads, on some systems.
2496 To do so, Configure must be run with -Dusethreads.
2497
2498 Note that threading is a highly experimental feature, and
2499 some known race conditions still remain.  If you choose to try
2500 it, be very sure to not actually deploy it for production
2501 purposes.  README.threads has more details, and is required
2502 reading if you enable threads.
2503 EOM
2504 case "$usethreads" in
2505 $define|true|[yY]*)     dflt='y';;
2506 *) dflt='n';;
2507 esac
2508 rp='Build a threading Perl?'
2509 . ./myread
2510 case "$ans" in
2511 y|Y)    val="$define" ;;     
2512 *)      val="$undef" ;;
2513 esac
2514 set usethreads
2515 eval $setvar 
2516
2517 case "$d_oldpthreads" in
2518 '')     : Configure tests would be welcome here.  For now, assume undef.
2519         val="$undef" ;;
2520 *)      val="$d_oldpthreads" ;;
2521 esac
2522 set d_oldpthreads
2523 eval $setvar
2524
2525
2526 case "$usethreads" in
2527 "$define"|true|[yY]*)
2528 : Look for a hint-file generated 'call-back-unit'.  If the
2529 : user has specified that a threading perl is to be built,
2530 : we may need to set or change some other defaults.
2531         if $test -f usethreads.cbu; then
2532                 . ./usethreads.cbu
2533         fi
2534         case "$osname" in
2535         aix|dec_osf|dos_djgpp|freebsd|hpux|irix|linux|next|openbsd|os2|solaris|vmesa)
2536                 # Known thread-capable platforms.
2537                 ;;
2538         *)
2539                 cat >&4 <<EOM
2540 $osname is not known to support threads.
2541 Please let perlbug@perl.com know how to do that.
2542
2543 Cannot continue, aborting.
2544 EOM
2545                 exit 1
2546         ;;
2547         esac # $osname
2548     ;;
2549 esac # $usethreads
2550
2551 cat <<EOM
2552
2553 Perl can be built so that multiple Perl interpreters can coexist
2554 within the same Perl executable.  To do so, Configure must be run with
2555 -Dusemultiplicity.
2556
2557 Normally you do not need this and you should answer no.
2558
2559 EOM
2560 case "$usemultiplicity" in
2561 $define|true|[yY]*)     dflt='y';;
2562 *) dflt='n';;
2563 esac
2564 rp='Build Perl for multiplicity?'
2565 . ./myread
2566 case "$ans" in
2567 y|Y)    val="$define" ;;     
2568 *)      val="$undef" ;;
2569 esac
2570 set usemultiplicity
2571 eval $setvar 
2572
2573 cat <<EOM
2574
2575 Perl can be built to take advantage of explicit 64-bit interfaces,
2576 on some systems.  To do so, Configure must be run with -Duse64bits.
2577
2578 If this doesn't make any sense to you, just accept the default 'n'.
2579 EOM
2580 case "$use64bits" in
2581 $define|true|[yY]*)     dflt='y';;
2582 *) dflt='n';;
2583 esac
2584 rp='Try to use explicit 64-bit interfaces, if available?'
2585 . ./myread
2586 case "$ans" in
2587 y|Y) 
2588         val="$define"
2589         ;;     
2590 *)      
2591         val="$undef"
2592         ;;
2593 esac
2594 set use64bits
2595 eval $setvar
2596
2597 case "$archname64" in
2598 '') archname64='' ;;    # not a typo
2599 esac
2600
2601 case "$use64bits" in
2602 "$define"|true|[yY]*)
2603 : Look for a hint-file generated 'call-back-unit'.  If the
2604 : user has specified that a threading perl is to be built,
2605 : we may need to set or change some other defaults.
2606         if $test -f use64bits.cbu; then
2607                 . ./use64bits.cbu
2608         fi
2609         case "$osname" in
2610         dec_osf|hpux|irix|solaris|unicos)
2611                 # Known 64-bit capable platforms.
2612                 ;;
2613         *)
2614                 cat >&4 <<EOM
2615 $osname is not known to support 64-bit interfaces.
2616 Please let perlbug@perl.com know how to do that.
2617
2618 Cannot continue, aborting.
2619 EOM
2620                 exit 1
2621                 ;;
2622         esac
2623         ;;
2624 esac
2625
2626 : determine the architecture name
2627 echo " "
2628 if xxx=`./loc arch blurfl $pth`; $test -f "$xxx"; then
2629         tarch=`arch`"-$osname"
2630 elif xxx=`./loc uname blurfl $pth`; $test -f "$xxx" ; then
2631         if uname -m > tmparch 2>&1 ; then
2632                 tarch=`$sed -e 's/ *$//' -e 's/ /_/g' \
2633                         -e 's/$/'"-$osname/" tmparch`
2634         else
2635                 tarch="$osname"
2636         fi
2637         $rm -f tmparch
2638 else
2639         tarch="$osname"
2640 fi
2641 case "$myarchname" in
2642 ''|"$tarch") ;;
2643 *)
2644         echo "(Your architecture name used to be $myarchname.)"
2645         archname=''
2646         ;;
2647 esac
2648 myarchname="$tarch"
2649 case "$archname" in
2650 '') dflt="$tarch";;
2651 *) dflt="$archname";;
2652 esac
2653 rp='What is your architecture name'
2654 . ./myread
2655 archname="$ans"
2656 case "$usethreads" in
2657 $define)
2658         echo "Threads selected." >&4
2659         case "$archname" in
2660         *-thread*) echo "...and architecture name already has -thread." >&4
2661                 ;;
2662         *)      archname="$archname-thread"
2663                 echo "...setting architecture name to $archname." >&4
2664                 ;;
2665         esac
2666         ;;
2667 esac
2668 case "$usemultiplicity" in
2669 $define)
2670         echo "Multiplicity selected." >&4
2671         case "$archname" in
2672         *-multi*) echo "...and architecture name already has -multi." >&4
2673                 ;;
2674         *)      archname="$archname-multi"
2675                 echo "...setting architecture name to $archname." >&4
2676                 ;;
2677         esac
2678         ;;
2679 esac
2680 case "$use64bits" in
2681 $define)
2682         echo "Explicit 64-bitness selected." >&4
2683         case "$archname64" in
2684         '')
2685                 ;;
2686         *)
2687                 case "$archname" in
2688                 *-$archname64*) echo "...and architecture name already has $archname64." >&4
2689                         ;;
2690                 *)      archname="$archname-$archname64"
2691                         echo "...setting architecture name to $archname." >&4
2692                         ;;
2693                 esac
2694                 ;;
2695         esac
2696 esac
2697
2698 : is AFS running?
2699 echo " "
2700 case "$afs" in
2701 $define|true)   afs=true ;;
2702 $undef|false)   afs=false ;;
2703 *)      if test -d /afs; then
2704                 afs=true
2705         else
2706                 afs=false
2707         fi
2708         ;;
2709 esac
2710 if $afs; then
2711         echo "AFS may be running... I'll be extra cautious then..." >&4
2712 else
2713         echo "AFS does not seem to be running..." >&4
2714 fi
2715
2716 : decide how portable to be.  Allow command line overrides.
2717 case "$d_portable" in
2718 "$undef") ;;
2719 *)      d_portable="$define" ;;
2720 esac
2721
2722 : set up shell script to do ~ expansion
2723 cat >filexp <<EOSS
2724 $startsh
2725 : expand filename
2726 case "\$1" in
2727  ~/*|~)
2728         echo \$1 | $sed "s|~|\${HOME-\$LOGDIR}|"
2729         ;;
2730  ~*)
2731         if $test -f /bin/csh; then
2732                 /bin/csh -f -c "glob \$1"
2733                 failed=\$?
2734                 echo ""
2735                 exit \$failed
2736         else
2737                 name=\`$expr x\$1 : '..\([^/]*\)'\`
2738                 dir=\`$sed -n -e "/^\${name}:/{s/^[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:\([^:]*\).*"'\$'"/\1/" -e p -e q -e '}' </etc/passwd\`
2739                 if $test ! -d "\$dir"; then
2740                         me=\`basename \$0\`
2741                         echo "\$me: can't locate home directory for: \$name" >&2
2742                         exit 1
2743                 fi
2744                 case "\$1" in
2745                 */*)
2746                         echo \$dir/\`$expr x\$1 : '..[^/]*/\(.*\)'\`
2747                         ;;
2748                 *)
2749                         echo \$dir
2750                         ;;
2751                 esac
2752         fi
2753         ;;
2754 *)
2755         echo \$1
2756         ;;
2757 esac
2758 EOSS
2759 chmod +x filexp
2760 $eunicefix filexp
2761
2762 : now set up to get a file name
2763 cat <<EOS >getfile
2764 $startsh
2765 EOS
2766 cat <<'EOSC' >>getfile
2767 tilde=''
2768 fullpath=''
2769 already=''
2770 skip=''
2771 none_ok=''
2772 exp_file=''
2773 nopath_ok=''
2774 orig_rp="$rp"
2775 orig_dflt="$dflt"
2776
2777 case "$fn" in
2778 *\(*)
2779         expr $fn : '.*(\(.*\)).*' | tr ',' $trnl >getfile.ok
2780         fn=`echo $fn | sed 's/(.*)//'`
2781         ;;
2782 esac
2783
2784 case "$fn" in
2785 *:*)
2786         loc_file=`expr $fn : '.*:\(.*\)'`
2787         fn=`expr $fn : '\(.*\):.*'`
2788         ;;
2789 esac
2790
2791 case "$fn" in
2792 *~*) tilde=true;;
2793 esac
2794 case "$fn" in
2795 */*) fullpath=true;;
2796 esac
2797 case "$fn" in
2798 *+*) skip=true;;
2799 esac
2800 case "$fn" in
2801 *n*) none_ok=true;;
2802 esac
2803 case "$fn" in
2804 *e*) exp_file=true;;
2805 esac
2806 case "$fn" in
2807 *p*) nopath_ok=true;;
2808 esac
2809
2810 case "$fn" in
2811 *f*) type='File';;
2812 *d*) type='Directory';;
2813 *l*) type='Locate';;
2814 esac
2815
2816 what="$type"
2817 case "$what" in
2818 Locate) what='File';;
2819 esac
2820
2821 case "$exp_file" in
2822 '')
2823         case "$d_portable" in
2824         "$define") ;;
2825         *) exp_file=true;;
2826         esac
2827         ;;
2828 esac
2829
2830 cd ..
2831 while test "$type"; do
2832         redo=''
2833         rp="$orig_rp"
2834         dflt="$orig_dflt"
2835         case "$tilde" in
2836         true) rp="$rp (~name ok)";;
2837         esac
2838         . UU/myread
2839         if test -f UU/getfile.ok && \
2840                 $contains "^$ans\$" UU/getfile.ok >/dev/null 2>&1
2841         then
2842                 value="$ans"
2843                 ansexp="$ans"
2844                 break
2845         fi
2846         case "$ans" in
2847         none)
2848                 value=''
2849                 ansexp=''
2850                 case "$none_ok" in
2851                 true) type='';;
2852                 esac
2853                 ;;
2854         *)
2855                 case "$tilde" in
2856                 '') value="$ans"
2857                         ansexp="$ans";;
2858                 *)
2859                         value=`UU/filexp $ans`
2860                         case $? in
2861                         0)
2862                                 if test "$ans" != "$value"; then
2863                                         echo "(That expands to $value on this system.)"
2864                                 fi
2865                                 ;;
2866                         *) value="$ans";;
2867                         esac
2868                         ansexp="$value"
2869                         case "$exp_file" in
2870                         '') value="$ans";;
2871                         esac
2872                         ;;
2873                 esac
2874                 case "$fullpath" in
2875                 true)
2876                         case "$ansexp" in
2877                         /*) value="$ansexp" ;;
2878                         *)
2879                                 redo=true
2880                                 case "$already" in
2881                                 true)
2882                                 echo "I shall only accept a full path name, as in /bin/ls." >&4
2883                                 echo "Use a ! shell escape if you wish to check pathnames." >&4
2884                                         ;;
2885                                 *)
2886                                 echo "Please give a full path name, starting with slash." >&4
2887                                         case "$tilde" in
2888                                         true)
2889                                 echo "Note that using ~name is ok provided it expands well." >&4
2890                                                 already=true
2891                                                 ;;
2892                                         esac
2893                                 esac
2894                                 ;;
2895                         esac
2896                         ;;
2897                 esac
2898                 case "$redo" in
2899                 '')
2900                         case "$type" in
2901                         File)
2902                                 if test -f "$ansexp"; then
2903                                         type=''
2904                                 elif test -r "$ansexp" || (test -h "$ansexp") >/dev/null 2>&1
2905                                 then
2906                                         echo "($value is not a plain file, but that's ok.)"
2907                                         type=''
2908                                 fi
2909                                 ;;
2910                         Directory)
2911                                 if test -d "$ansexp"; then
2912                                         type=''
2913                                 fi
2914                                 ;;
2915                         Locate)
2916                                 if test -d "$ansexp"; then
2917                                         echo "(Looking for $loc_file in directory $value.)"
2918                                         value="$value/$loc_file"
2919                                         ansexp="$ansexp/$loc_file"
2920                                 fi
2921                                 if test -f "$ansexp"; then
2922                                         type=''
2923                                 fi
2924                                 case "$nopath_ok" in
2925                                 true)   case "$value" in
2926                                         */*) ;;
2927                                         *)      echo "Assuming $value will be in people's path."
2928                                                 type=''
2929                                                 ;;
2930                                         esac
2931                                         ;;
2932                                 esac
2933                                 ;;
2934                         esac
2935
2936                         case "$skip" in
2937                         true) type='';
2938                         esac
2939
2940                         case "$type" in
2941                         '') ;;
2942                         *)
2943                                 if test "$fastread" = yes; then
2944                                         dflt=y
2945                                 else
2946                                         dflt=n
2947                                 fi
2948                                 rp="$what $value doesn't exist.  Use that name anyway?"
2949                                 . UU/myread
2950                                 dflt=''
2951                                 case "$ans" in
2952                                 y*) type='';;
2953                                 *) echo " ";;
2954                                 esac
2955                                 ;;
2956                         esac
2957                         ;;
2958                 esac
2959                 ;;
2960         esac
2961 done
2962 cd UU
2963 ans="$value"
2964 rp="$orig_rp"
2965 dflt="$orig_dflt"
2966 rm -f getfile.ok
2967 EOSC
2968
2969 : determine root of directory hierarchy where package will be installed.
2970 case "$prefix" in
2971 '')
2972         dflt=`./loc . /usr/local /usr/local /local /opt /usr`
2973         ;;
2974 *)
2975         dflt="$prefix"
2976         ;;
2977 esac
2978 $cat <<EOM
2979
2980 By default, $package will be installed in $dflt/bin, manual
2981 pages under $dflt/man, etc..., i.e. with $dflt as prefix for
2982 all installation directories. Typically set to /usr/local, but you
2983 may choose /usr if you wish to install $package among your system
2984 binaries. If you wish to have binaries under /bin but manual pages
2985 under /usr/local/man, that's ok: you will be prompted separately
2986 for each of the installation directories, the prefix being only used
2987 to set the defaults.
2988
2989 EOM
2990 fn=d~
2991 rp='Installation prefix to use?'
2992 . ./getfile
2993 oldprefix=''
2994 case "$prefix" in
2995 '') ;;
2996 *)
2997         case "$ans" in
2998         "$prefix") ;;
2999         *) oldprefix="$prefix";;
3000         esac
3001         ;;
3002 esac
3003 prefix="$ans"
3004 prefixexp="$ansexp"
3005
3006 : set the prefixit variable, to compute a suitable default value
3007 prefixit='case "$3" in
3008 ""|none)
3009         case "$oldprefix" in
3010         "") eval "$1=\"\$$2\"";;
3011         *)
3012                 case "$3" in
3013                 "") eval "$1=";;
3014                 none)
3015                         eval "tp=\"\$$2\"";
3016                         case "$tp" in
3017                         ""|" ") eval "$1=\"\$$2\"";;
3018                         *) eval "$1=";;
3019                         esac;;
3020                 esac;;
3021         esac;;
3022 *)
3023         eval "tp=\"$oldprefix-\$$2-\""; eval "tp=\"$tp\"";
3024         case "$tp" in
3025         --|/*--|\~*--) eval "$1=\"$prefix/$3\"";;
3026         /*-$oldprefix/*|\~*-$oldprefix/*)
3027                 eval "$1=\`echo \$$2 | sed \"s,^$oldprefix,$prefix,\"\`";;
3028         *) eval "$1=\"\$$2\"";;
3029         esac;;
3030 esac'
3031
3032 : set the base revision
3033 baserev=5.0
3034
3035 : get the patchlevel
3036 echo " "
3037 echo "Getting the current patchlevel..." >&4
3038 if $test -r $rsrc/patchlevel.h;then
3039         patchlevel=`awk '/define[       ]+PERL_VERSION/ {print $3}' $rsrc/patchlevel.h`
3040         subversion=`awk '/define[       ]+PERL_SUBVERSION/ {print $3}' $rsrc/patchlevel.h`
3041 else
3042         patchlevel=0
3043         subversion=0
3044 fi
3045 $echo $n "(You have $package" $c
3046 case "$package" in
3047 "*$baserev")    ;;
3048 *)              $echo $n " $baserev" $c ;;
3049 esac
3050 $echo $n " patchlevel $patchlevel" $c
3051 test 0 -eq "$subversion" || $echo $n " subversion $subversion" $c
3052 echo ".)"
3053
3054 if test 0 -eq "$subversion"; then
3055         version=`LC_ALL=C; export LC_ALL; \
3056                  echo $baserev $patchlevel | \
3057                  $awk '{ printf "%.3f\n", $1 + $2/1000.0 }'`
3058 else
3059         version=`LC_ALL=C; export LC_ALL; \
3060                  echo $baserev $patchlevel $subversion | \
3061                  $awk '{ printf "%.5f\n", $1 + $2/1000.0 + $3/100000.0 }'`
3062 fi
3063 : Figure out perl API version.  Perhaps this should be in patchlevel.h
3064 if test "$subversion" -lt 50; then
3065         apiversion=`LC_ALL=C; export LC_ALL; \
3066                  LANGUAGE=C; export LANGUAGE; \
3067                  echo $baserev $patchlevel | \
3068                  $awk '{ printf "%.3f\n", $1 + $2/1000.0 }'`
3069 else
3070         apiversion="$version"
3071 fi
3072
3073 : determine where private library files go
3074 : Usual default is /usr/local/lib/perl5/$version.
3075 : Also allow things like /opt/perl/lib/$version, since 
3076 : /opt/perl/lib/perl5... would be redundant.
3077 case "$prefix" in
3078 *perl*) set dflt privlib lib/$version ;;
3079 *)       set dflt privlib lib/$package/$version ;;
3080 esac
3081 eval $prefixit
3082 $cat <<EOM
3083
3084 There are some auxiliary files for $package that need to be put into a
3085 private library directory that is accessible by everyone.
3086
3087 EOM
3088 fn=d~+
3089 rp='Pathname where the private library files will reside?'
3090 . ./getfile
3091 if $test "X$privlibexp" != "X$ansexp"; then
3092         installprivlib=''
3093 fi
3094 privlib="$ans"
3095 privlibexp="$ansexp"
3096 if $afs; then
3097         $cat <<EOM
3098
3099 Since you are running AFS, I need to distinguish the directory in which
3100 private files reside from the directory in which they are installed (and from
3101 which they are presumably copied to the former directory by occult means).
3102
3103 EOM
3104         case "$installprivlib" in
3105         '') dflt=`echo $privlibexp | sed 's#^/afs/#/afs/.#'`;;
3106         *) dflt="$installprivlib";;
3107         esac
3108         fn=de~
3109         rp='Where will private files be installed?'
3110         . ./getfile
3111         installprivlib="$ans"
3112 else
3113         installprivlib="$privlibexp"
3114 fi
3115
3116 : set the prefixup variable, to restore leading tilda escape
3117 prefixup='case "$prefixexp" in
3118 "$prefix") ;;
3119 *) eval "$1=\`echo \$$1 | sed \"s,^$prefixexp,$prefix,\"\`";;
3120 esac'
3121
3122 : determine where public architecture dependent libraries go
3123 set archlib archlib
3124 eval $prefixit
3125 : privlib default is /usr/local/lib/$package/$version
3126 : archlib default is /usr/local/lib/$package/$version/$archname
3127 : privlib may have an optional trailing /share.
3128 tdflt=`echo $privlib | $sed 's,/share$,,'`
3129 tdflt=$tdflt/$archname
3130 case "$archlib" in
3131 '')     dflt=$tdflt
3132         ;;
3133 *)      dflt="$archlib"
3134     ;;
3135 esac
3136 cat <<EOM
3137
3138 $spackage contains architecture-dependent library files.  If you are
3139 sharing libraries in a heterogeneous environment, you might store
3140 these files in a separate location.  Otherwise, you can just include
3141 them with the rest of the public library files.
3142
3143 EOM
3144 fn=d+~
3145 rp='Where do you want to put the public architecture-dependent libraries?'
3146 . ./getfile
3147 archlib="$ans"
3148 archlibexp="$ansexp"
3149
3150 if $afs; then
3151         $cat <<EOM
3152
3153 Since you are running AFS, I need to distinguish the directory in
3154 which architecture-dependent library files reside from the directory
3155 in which they are installed (and from which they are presumably copied
3156 to the former directory by occult means).
3157
3158 EOM
3159         case "$installarchlib" in
3160         '') dflt=`echo $archlibexp | sed 's#^/afs/#/afs/.#'`;;
3161         *) dflt="$installarchlib";;
3162         esac
3163         fn=de~
3164         rp='Where will architecture-dependent library files be installed?'
3165         . ./getfile
3166         installarchlib="$ans"
3167 else
3168         installarchlib="$archlibexp"
3169 fi
3170 if $test X"$archlib" = X"$privlib"; then
3171         d_archlib="$undef"
3172 else
3173         d_archlib="$define"
3174 fi
3175
3176 : make some quick guesses about what we are up against
3177 echo " "
3178 $echo $n "Hmm...  $c"
3179 echo exit 1 >bsd
3180 echo exit 1 >usg
3181 echo exit 1 >v7
3182 echo exit 1 >osf1
3183 echo exit 1 >eunice
3184 echo exit 1 >xenix
3185 echo exit 1 >venix
3186 echo exit 1 >os2
3187 d_bsd="$undef"
3188 $cat /usr/include/signal.h /usr/include/sys/signal.h >foo 2>/dev/null
3189 if test -f /osf_boot || $contains 'OSF/1' /usr/include/ctype.h >/dev/null 2>&1
3190 then
3191         echo "Looks kind of like an OSF/1 system, but we'll see..."
3192         echo exit 0 >osf1
3193 elif test `echo abc | tr a-z A-Z` = Abc ; then
3194         xxx=`./loc addbib blurfl $pth`
3195         if $test -f $xxx; then
3196         echo "Looks kind of like a USG system with BSD features, but we'll see..."
3197                 echo exit 0 >bsd
3198                 echo exit 0 >usg
3199         else
3200                 if $contains SIGTSTP foo >/dev/null 2>&1 ; then
3201                         echo "Looks kind of like an extended USG system, but we'll see..."
3202                 else
3203                         echo "Looks kind of like a USG system, but we'll see..."
3204                 fi
3205                 echo exit 0 >usg
3206         fi
3207 elif $contains SIGTSTP foo >/dev/null 2>&1 ; then
3208         echo "Looks kind of like a BSD system, but we'll see..."
3209         d_bsd="$define"
3210         echo exit 0 >bsd
3211 else
3212         echo "Looks kind of like a Version 7 system, but we'll see..."
3213         echo exit 0 >v7
3214 fi
3215 case "$eunicefix" in
3216 *unixtovms*)
3217         $cat <<'EOI'
3218 There is, however, a strange, musty smell in the air that reminds me of
3219 something...hmm...yes...I've got it...there's a VMS nearby, or I'm a Blit.
3220 EOI
3221         echo exit 0 >eunice
3222         d_eunice="$define"
3223 : it so happens the Eunice I know will not run shell scripts in Unix format
3224         ;;
3225 *)
3226         echo " "
3227         echo "Congratulations.  You aren't running Eunice."
3228         d_eunice="$undef"
3229         ;;
3230 esac
3231 : Detect OS2.  The p_ variable is set above in the Head.U unit.
3232 case "$p_" in
3233 :) ;;
3234 *)
3235         $cat <<'EOI'
3236 I have the feeling something is not exactly right, however...don't tell me...
3237 lemme think...does HAL ring a bell?...no, of course, you're only running OS/2!
3238 EOI
3239         echo exit 0 >os2
3240         ;;
3241 esac
3242 if test -f /xenix; then
3243         echo "Actually, this looks more like a XENIX system..."
3244         echo exit 0 >xenix
3245         d_xenix="$define"
3246 else
3247         echo " "
3248         echo "It's not Xenix..."
3249         d_xenix="$undef"
3250 fi
3251 chmod +x xenix
3252 $eunicefix xenix
3253 if test -f /venix; then
3254         echo "Actually, this looks more like a VENIX system..."
3255         echo exit 0 >venix
3256 else
3257         echo " "
3258         if ./xenix; then
3259                 : null
3260         else
3261                 echo "Nor is it Venix..."
3262         fi
3263 fi
3264 chmod +x bsd usg v7 osf1 eunice xenix venix os2
3265 $eunicefix bsd usg v7 osf1 eunice xenix venix os2
3266 $rm -f foo
3267
3268 : see if setuid scripts can be secure
3269 $cat <<EOM
3270
3271 Some kernels have a bug that prevents setuid #! scripts from being
3272 secure.  Some sites have disabled setuid #! scripts because of this.
3273
3274 First let's decide if your kernel supports secure setuid #! scripts.
3275 (If setuid #! scripts would be secure but have been disabled anyway,
3276 don't say that they are secure if asked.)
3277
3278 EOM
3279
3280 val="$undef"
3281 if $test -d /dev/fd; then
3282         echo "#!$ls" >reflect
3283         chmod +x,u+s reflect
3284         ./reflect >flect 2>&1
3285         if $contains "/dev/fd" flect >/dev/null; then
3286                 echo "Congratulations, your kernel has secure setuid scripts!" >&4
3287                 val="$define"
3288         else
3289                 $cat <<EOM
3290 If you are not sure if they are secure, I can check but I'll need a
3291 username and password different from the one you are using right now.
3292 If you don't have such a username or don't want me to test, simply
3293 enter 'none'.
3294
3295 EOM
3296                 rp='Other username to test security of setuid scripts with?'
3297                 dflt='none'
3298                 . ./myread
3299                 case "$ans" in
3300                 n|none)
3301                         case "$d_suidsafe" in
3302                         '')     echo "I'll assume setuid scripts are *not* secure." >&4
3303                                 dflt=n;;
3304                         "$undef")
3305                                 echo "Well, the $hint value is *not* secure." >&4
3306                                 dflt=n;;
3307                         *)      echo "Well, the $hint value *is* secure." >&4
3308                                 dflt=y;;
3309                         esac
3310                         ;;
3311                 *)
3312                         $rm -f reflect flect
3313                         echo "#!$ls" >reflect
3314                         chmod +x,u+s reflect
3315                         echo >flect
3316                         chmod a+w flect
3317                         echo '"su" will (probably) prompt you for '"$ans's password."
3318                         su $ans -c './reflect >flect'
3319                         if $contains "/dev/fd" flect >/dev/null; then
3320                                 echo "Okay, it looks like setuid scripts are secure." >&4
3321                                 dflt=y
3322                         else
3323                                 echo "I don't think setuid scripts are secure." >&4
3324                                 dflt=n
3325                         fi
3326                         ;;
3327                 esac
3328                 rp='Does your kernel have *secure* setuid scripts?'
3329                 . ./myread
3330                 case "$ans" in
3331                 [yY]*)  val="$define";;
3332                 *)      val="$undef";;
3333                 esac
3334         fi
3335 else
3336         echo "I don't think setuid scripts are secure (no /dev/fd directory)." >&4
3337         echo "(That's for file descriptors, not floppy disks.)"
3338         val="$undef"
3339 fi
3340 set d_suidsafe
3341 eval $setvar
3342
3343 $rm -f reflect flect
3344
3345 : now see if they want to do setuid emulation
3346 echo " "
3347 val="$undef"
3348 case "$d_suidsafe" in
3349 "$define")
3350         val="$undef"
3351         echo "No need to emulate SUID scripts since they are secure here." >& 4
3352         ;;
3353 *)
3354         $cat <<EOM
3355 Some systems have disabled setuid scripts, especially systems where
3356 setuid scripts cannot be secure.  On systems where setuid scripts have
3357 been disabled, the setuid/setgid bits on scripts are currently
3358 useless.  It is possible for $package to detect those bits and emulate
3359 setuid/setgid in a secure fashion.  This emulation will only work if
3360 setuid scripts have been disabled in your kernel.
3361
3362 EOM
3363         case "$d_dosuid" in
3364         "$define") dflt=y ;;
3365         *) dflt=n ;;
3366         esac
3367         rp="Do you want to do setuid/setgid emulation?"
3368         . ./myread
3369         case "$ans" in
3370         [yY]*)  val="$define";;
3371         *)      val="$undef";;
3372         esac
3373         ;;
3374 esac
3375 set d_dosuid
3376 eval $setvar
3377
3378 : determine where manual pages are on this system
3379 echo " "
3380 case "$sysman" in
3381 '') 
3382         syspath='/usr/man/man1 /usr/man/mann /usr/man/manl /usr/man/local/man1'
3383         syspath="$syspath /usr/man/u_man/man1 /usr/share/man/man1"
3384         syspath="$syspath /usr/catman/u_man/man1 /usr/man/l_man/man1"
3385         syspath="$syspath /usr/local/man/u_man/man1 /usr/local/man/l_man/man1"
3386         syspath="$syspath /usr/man/man.L /local/man/man1 /usr/local/man/man1"
3387         sysman=`./loc . /usr/man/man1 $syspath`
3388         ;;
3389 esac
3390 if $test -d "$sysman"; then
3391         echo "System manual is in $sysman." >&4
3392 else
3393         echo "Could not find manual pages in source form." >&4
3394 fi
3395
3396 : see what memory models we can support
3397 case "$models" in
3398 '')
3399         $cat >pdp11.c <<'EOP'
3400 int main() {
3401 #ifdef pdp11
3402         exit(0);
3403 #else
3404         exit(1);
3405 #endif
3406 }
3407 EOP
3408         ( cc -o pdp11 pdp11.c ) >/dev/null 2>&1
3409         if $test -f pdp11 && ./pdp11 2>/dev/null; then
3410                 dflt='unsplit split'
3411         else
3412                 tans=`./loc . X /lib/small /lib/large /usr/lib/small /usr/lib/large /lib/medium /usr/lib/medium /lib/huge`
3413                 case "$tans" in
3414                 X) dflt='none';;
3415                 *) if $test -d /lib/small || $test -d /usr/lib/small; then
3416                                 dflt='small'
3417                         else
3418                                 dflt=''
3419                         fi
3420                         if $test -d /lib/medium || $test -d /usr/lib/medium; then
3421                                 dflt="$dflt medium"
3422                         fi
3423                         if $test -d /lib/large || $test -d /usr/lib/large; then
3424                                 dflt="$dflt large"
3425                         fi
3426                         if $test -d /lib/huge || $test -d /usr/lib/huge; then
3427                                 dflt="$dflt huge"
3428                         fi
3429                 esac
3430         fi;;
3431 *) dflt="$models";;
3432 esac
3433 $cat <<EOM
3434  
3435 Some systems have different model sizes.  On most systems they are called
3436 small, medium, large, and huge.  On the PDP11 they are called unsplit and
3437 split.  If your system doesn't support different memory models, say "none".
3438 If you wish to force everything to one memory model, say "none" here and
3439 put the appropriate flags later when it asks you for other cc and ld flags.
3440 Venix systems may wish to put "none" and let the compiler figure things out.
3441 (In the following question multiple model names should be space separated.)
3442
3443 The default for most systems is "none".
3444
3445 EOM
3446 rp="Which memory models are supported?"
3447 . ./myread
3448 models="$ans"
3449
3450 case "$models" in
3451 none)
3452         small=''
3453         medium=''
3454         large=''
3455         huge=''
3456         unsplit=''
3457         split=''
3458         ;;
3459 *split)
3460         case "$split" in
3461         '') if $contains '\-i' $sysman/ld.1 >/dev/null 2>&1 || \
3462                          $contains '\-i' $sysman/cc.1 >/dev/null 2>&1; then
3463                         dflt='-i'
3464                 else
3465                         dflt='none'
3466                 fi;;
3467         *) dflt="$split";;
3468         esac
3469         rp="What flag indicates separate I and D space?"
3470         . ./myread
3471         tans="$ans"
3472         case "$tans" in
3473         none) tans='';;
3474         esac
3475         split="$tans"
3476         unsplit='';;
3477 *large*|*small*|*medium*|*huge*)
3478         case "$models" in
3479         *large*)
3480                 case "$large" in
3481                 '') dflt='-Ml';;
3482                 *) dflt="$large";;
3483                 esac
3484         rp="What flag indicates large model?"
3485         . ./myread
3486         tans="$ans"
3487         case "$tans" in
3488         none) tans='';
3489         esac
3490         large="$tans";;
3491         *) large='';;
3492         esac
3493         case "$models" in
3494         *huge*) case "$huge" in
3495                 '') dflt='-Mh';;
3496                 *) dflt="$huge";;
3497                 esac
3498                 rp="What flag indicates huge model?"
3499                 . ./myread
3500                 tans="$ans"
3501                 case "$tans" in
3502                 none) tans='';
3503                 esac
3504                 huge="$tans";;
3505         *) huge="$large";;
3506         esac
3507         case "$models" in
3508         *medium*) case "$medium" in
3509                 '') dflt='-Mm';;
3510                 *) dflt="$medium";;
3511                 esac
3512                 rp="What flag indicates medium model?"
3513                 . ./myread
3514                 tans="$ans"
3515                 case "$tans" in
3516                 none) tans='';
3517                 esac
3518                 medium="$tans";;
3519         *) medium="$large";;
3520         esac
3521         case "$models" in
3522         *small*) case "$small" in
3523                 '') dflt='none';;
3524                 *) dflt="$small";;
3525                 esac
3526                 rp="What flag indicates small model?"
3527                 . ./myread
3528                 tans="$ans"
3529                 case "$tans" in
3530                 none) tans='';
3531                 esac
3532                 small="$tans";;
3533         *) small='';;
3534         esac
3535         ;;
3536 *)
3537         echo "Unrecognized memory models--you may have to edit Makefile.SH" >&4
3538         ;;
3539 esac
3540 $rm -f pdp11.* pdp11
3541
3542 : see if we need a special compiler
3543 echo " "
3544 if ./usg; then
3545         case "$cc" in
3546         '') case "$Mcc" in
3547                 /*) dflt='Mcc';;
3548                 *) case "$large" in
3549                         -M*) dflt='cc';;
3550                         *)      if $contains '\-M' $sysman/cc.1 >/dev/null 2>&1 ; then
3551                                         if $contains '\-M' $sysman/cpp.1 >/dev/null 2>&1; then
3552                                                 dflt='cc'
3553                                         else
3554                                                 dflt='cc -M'
3555                                         fi
3556                                 else
3557                                         dflt='cc'
3558                                 fi;;
3559                         esac;;
3560                 esac;;
3561         *)  dflt="$cc";;
3562         esac
3563         case "$dflt" in
3564         *M*)    $cat <<'EOM'
3565 On some older systems the default C compiler will not resolve multiple global
3566 references that happen to have the same name.  On some such systems the "Mcc"
3567 command may be used to force these to be resolved.  On other systems a "cc -M"
3568 command is required.  (Note that the -M flag on other systems indicates a
3569 memory model to use!) If you have the Gnu C compiler, you might wish to use
3570 that instead.
3571
3572 EOM
3573         ;;
3574         esac
3575         rp="Use which C compiler?"
3576         . ./myread
3577         cc="$ans"
3578 else
3579         case "$cc" in
3580         '') dflt=cc;;
3581         *) dflt="$cc";;
3582         esac
3583         rp="Use which C compiler?"
3584         . ./myread
3585         cc="$ans"
3586 fi
3587 : Look for a hint-file generated 'call-back-unit'.  Now that the
3588 : user has specified the compiler, we may need to set or change some
3589 : other defaults.
3590 if $test -f cc.cbu; then
3591     . ./cc.cbu
3592 fi
3593 echo " "
3594 echo "Checking for GNU cc in disguise and/or its version number..." >&4
3595 $cat >gccvers.c <<EOM
3596 #include <stdio.h>
3597 int main() {
3598 #ifdef __GNUC__
3599 #ifdef __VERSION__
3600         printf("%s\n", __VERSION__);
3601 #else
3602         printf("%s\n", "1");
3603 #endif
3604 #endif
3605         exit(0);
3606 }
3607 EOM
3608 if $cc -o gccvers gccvers.c >/dev/null 2>&1; then
3609         gccversion=`./gccvers`
3610         case "$gccversion" in
3611         '') echo "You are not using GNU cc." ;;
3612         *)  echo "You are using GNU cc $gccversion." ;;
3613         esac
3614 else
3615         echo " "
3616         echo "*** WHOA THERE!!! ***" >&4
3617         echo "    Your C compiler \"$cc\" doesn't seem to be working!" >&4
3618         case "$knowitall" in
3619         '')
3620         echo "    You'd better start hunting for one and let me know about it." >&4
3621                 exit 1
3622                 ;;
3623         esac
3624 fi
3625 $rm -f gccvers*
3626 case "$gccversion" in
3627 1*) cpp=`./loc gcc-cpp $cpp $pth` ;;
3628 esac
3629
3630 : What should the include directory be ?
3631 echo " "
3632 $echo $n "Hmm...  $c"
3633 dflt='/usr/include'
3634 incpath=''
3635 mips_type=''
3636 if $test -f /bin/mips && /bin/mips; then
3637         echo "Looks like a MIPS system..."
3638         $cat >usr.c <<'EOCP'
3639 #ifdef SYSTYPE_BSD43
3640 /bsd43
3641 #endif
3642 EOCP
3643         if $cc -E usr.c > usr.out && $contains / usr.out >/dev/null 2>&1; then
3644                 dflt='/bsd43/usr/include'
3645                 incpath='/bsd43'
3646                 mips_type='BSD 4.3'
3647         else
3648                 mips_type='System V'
3649         fi
3650         $rm -f usr.c usr.out
3651         echo "and you're compiling with the $mips_type compiler and libraries."
3652         xxx_prompt=y
3653         echo "exit 0" >mips
3654 else
3655         echo "Doesn't look like a MIPS system."
3656         xxx_prompt=n
3657         echo "exit 1" >mips
3658 fi
3659 chmod +x mips
3660 $eunicefix mips
3661 case "$usrinc" in
3662 '') ;;
3663 *) dflt="$usrinc";;
3664 esac
3665 case "$xxx_prompt" in
3666 y)      fn=d/
3667         echo " "
3668         rp='Where are the include files you want to use?'
3669         . ./getfile
3670         usrinc="$ans"
3671         ;;
3672 *)      usrinc="$dflt"
3673         ;;
3674 esac
3675
3676 : see how we invoke the C preprocessor
3677 echo " "
3678 echo "Now, how can we feed standard input to your C preprocessor..." >&4
3679 cat <<'EOT' >testcpp.c
3680 #define ABC abc
3681 #define XYZ xyz
3682 ABC.XYZ
3683 EOT
3684 cd ..
3685 if test ! -f cppstdin; then
3686         echo 'cat >.$$.c; '"$cc"' -E ${1+"$@"} .$$.c; rm .$$.c' >cppstdin
3687 else
3688         echo "Keeping your $hint cppstdin wrapper."
3689 fi
3690 chmod 755 cppstdin
3691 wrapper=`pwd`/cppstdin
3692 ok='false'
3693 cd UU
3694
3695 if $test "X$cppstdin" != "X" && \
3696         $cppstdin $cppminus <testcpp.c >testcpp.out 2>&1 && \
3697         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
3698 then
3699         echo "You used to use $cppstdin $cppminus so we'll use that again."
3700         case "$cpprun" in
3701         '') echo "But let's see if we can live without a wrapper..." ;;
3702         *)
3703                 if $cpprun $cpplast <testcpp.c >testcpp.out 2>&1 && \
3704                         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
3705                 then
3706                         echo "(And we'll use $cpprun $cpplast to preprocess directly.)"
3707                         ok='true'
3708                 else
3709                         echo "(However, $cpprun $cpplast does not work, let's see...)"
3710                 fi
3711                 ;;
3712         esac
3713 else
3714         case "$cppstdin" in
3715         '') ;;
3716         *)
3717                 echo "Good old $cppstdin $cppminus does not seem to be of any help..."
3718                 ;;
3719         esac
3720 fi
3721
3722 if $ok; then
3723         : nothing
3724 elif echo 'Maybe "'"$cc"' -E" will work...'; \
3725         $cc -E <testcpp.c >testcpp.out 2>&1; \
3726         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3727         echo "Yup, it does."
3728         x_cpp="$cc -E"
3729         x_minus='';
3730 elif echo 'Nope...maybe "'"$cc"' -E -" will work...'; \
3731         $cc -E - <testcpp.c >testcpp.out 2>&1; \
3732         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3733         echo "Yup, it does."
3734         x_cpp="$cc -E"
3735         x_minus='-';
3736 elif echo 'Nope...maybe "'"$cc"' -P" will work...'; \
3737         $cc -P <testcpp.c >testcpp.out 2>&1; \
3738         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3739         echo "Yipee, that works!"
3740         x_cpp="$cc -P"
3741         x_minus='';
3742 elif echo 'Nope...maybe "'"$cc"' -P -" will work...'; \
3743         $cc -P - <testcpp.c >testcpp.out 2>&1; \
3744         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3745         echo "At long last!"
3746         x_cpp="$cc -P"
3747         x_minus='-';
3748 elif echo 'No such luck, maybe "'$cpp'" will work...'; \
3749         $cpp <testcpp.c >testcpp.out 2>&1; \
3750         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3751         echo "It works!"
3752         x_cpp="$cpp"
3753         x_minus='';
3754 elif echo 'Nixed again...maybe "'$cpp' -" will work...'; \
3755         $cpp - <testcpp.c >testcpp.out 2>&1; \
3756         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3757         echo "Hooray, it works!  I was beginning to wonder."
3758         x_cpp="$cpp"
3759         x_minus='-';
3760 elif echo 'Uh-uh.  Time to get fancy.  Trying a wrapper...'; \
3761         $wrapper <testcpp.c >testcpp.out 2>&1; \
3762         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3763         x_cpp="$wrapper"
3764         x_minus=''
3765         echo "Eureka!"
3766 else
3767         dflt=''
3768         rp="No dice.  I can't find a C preprocessor.  Name one:"
3769         . ./myread
3770         x_cpp="$ans"
3771         x_minus=''
3772         $x_cpp <testcpp.c >testcpp.out 2>&1
3773         if $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3774                 echo "OK, that will do." >&4
3775         else
3776 echo "Sorry, I can't get that to work.  Go find one and rerun Configure." >&4
3777                 exit 1
3778         fi
3779 fi
3780
3781 case "$ok" in
3782 false)
3783         cppstdin="$x_cpp"
3784         cppminus="$x_minus"
3785         cpprun="$x_cpp"
3786         cpplast="$x_minus"
3787         set X $x_cpp
3788         shift
3789         case "$1" in
3790         "$cpp")
3791                 echo "Perhaps can we force $cc -E using a wrapper..."
3792                 if $wrapper <testcpp.c >testcpp.out 2>&1; \
3793                         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
3794                 then
3795                         echo "Yup, we can."
3796                         cppstdin="$wrapper"
3797                         cppminus='';
3798                 else
3799                         echo "Nope, we'll have to live without it..."
3800                 fi
3801                 ;;
3802         esac
3803         case "$cpprun" in
3804         "$wrapper")
3805                 cpprun=''
3806                 cpplast=''
3807                 ;;
3808         esac
3809         ;;
3810 esac
3811
3812 case "$cppstdin" in
3813 "$wrapper"|'cppstdin') ;;
3814 *) $rm -f $wrapper;;
3815 esac
3816 $rm -f testcpp.c testcpp.out
3817
3818 : Set private lib path
3819 case "$plibpth" in
3820 '') if ./mips; then
3821                 plibpth="$incpath/usr/lib /usr/local/lib /usr/ccs/lib"
3822         fi;;
3823 esac
3824 case "$libpth" in
3825 ' ') dlist='';;
3826 '') dlist="$loclibpth $plibpth $glibpth";;
3827 *) dlist="$libpth";;
3828 esac
3829
3830 : Now check and see which directories actually exist, avoiding duplicates
3831 libpth=''
3832 for xxx in $dlist
3833 do
3834     if $test -d $xxx; then
3835                 case " $libpth " in
3836                 *" $xxx "*) ;;
3837                 *) libpth="$libpth $xxx";;
3838                 esac
3839     fi
3840 done
3841 $cat <<'EOM'
3842
3843 Some systems have incompatible or broken versions of libraries.  Among
3844 the directories listed in the question below, please remove any you
3845 know not to be holding relevant libraries, and add any that are needed.
3846 Say "none" for none.
3847
3848 EOM
3849 case "$libpth" in
3850 '') dflt='none';;
3851 *)
3852         set X $libpth
3853         shift
3854         dflt=${1+"$@"}
3855         ;;
3856 esac
3857 rp="Directories to use for library searches?"
3858 . ./myread
3859 case "$ans" in
3860 none) libpth=' ';;
3861 *) libpth="$ans";;
3862 esac
3863
3864 : compute shared library extension
3865 case "$so" in
3866 '')
3867         if xxx=`./loc libc.sl X $libpth`; $test -f "$xxx"; then
3868                 dflt='sl'
3869         else
3870                 dflt='so'
3871         fi
3872         ;;
3873 *) dflt="$so";;
3874 esac
3875 $cat <<EOM
3876
3877 On some systems, shared libraries may be available.  Answer 'none' if
3878 you want to suppress searching of shared libraries for the remaining
3879 of this configuration.
3880
3881 EOM
3882 rp='What is the file extension used for shared libraries?'
3883 . ./myread
3884 so="$ans"
3885
3886 : Define several unixisms.
3887 : Hints files or command line option can be used to override them.
3888 : The convoluted testing is in case hints files set either the old
3889 : or the new name.
3890 case "$_exe" in
3891 '')     case "$exe_ext" in
3892     '') ;;
3893         *)      _exe="$exe_ext" ;;
3894         esac
3895         ;;
3896 esac
3897 case "$_a" in
3898 '')     case "$lib_ext" in
3899     '') _a='.a';;
3900         *)      _a="$lib_ext" ;;
3901         esac
3902         ;;
3903 esac
3904 case "$_o" in
3905 '') case "$obj_ext" in
3906         '')     _o='.o';;
3907         *)      _o="$obj_ext";;
3908         esac
3909         ;;
3910 esac
3911 case "$p_" in
3912 '') case "$path_sep" in
3913         '')     p_=':';;
3914         *)      p_="$path_sep";;
3915         esac
3916         ;;
3917 esac
3918 exe_ext=$_exe
3919 lib_ext=$_a
3920 obj_ext=$_o
3921 path_sep=$p_
3922
3923 : Which makefile gets called first.  This is used by make depend.
3924 case "$firstmakefile" in
3925 '') firstmakefile='makefile';;
3926 esac
3927
3928 : Looking for optional libraries
3929 echo " "
3930 echo "Checking for optional libraries..." >&4
3931 case "$libs" in
3932 ' '|'') dflt='';;
3933 *) dflt="$libs";;
3934 esac
3935 case "$libswanted" in
3936 '') libswanted='c_s';;
3937 esac
3938 for thislib in $libswanted; do
3939         
3940         if xxx=`./loc lib$thislib.$so.[0-9]'*' X $libpth`;
3941                 $test -f "$xxx" -a "X$ignore_versioned_solibs" = "X"; then
3942                 echo "Found -l$thislib (shared)."
3943                 case " $dflt " in
3944                 *"-l$thislib "*);;
3945                 *) dflt="$dflt -l$thislib";;
3946                 esac
3947         elif xxx=`./loc lib$thislib.$so X $libpth` ; $test -f "$xxx"; then
3948                 echo "Found -l$thislib (shared)."
3949                 case " $dflt " in
3950                 *"-l$thislib "*);;
3951                 *) dflt="$dflt -l$thislib";;
3952                 esac
3953         elif xxx=`./loc lib$thislib$_a X $libpth`; $test -f "$xxx"; then
3954                 echo "Found -l$thislib."
3955                 case " $dflt " in
3956                 *"-l$thislib "*);;
3957                 *) dflt="$dflt -l$thislib";;
3958                 esac
3959         elif xxx=`./loc $thislib$_a X $libpth`; $test -f "$xxx"; then
3960                 echo "Found -l$thislib."
3961                 case " $dflt " in
3962                 *"-l$thislib "*);;
3963                 *) dflt="$dflt -l$thislib";;
3964                 esac
3965         elif xxx=`./loc lib${thislib}_s$_a X $libpth`; $test -f "$xxx"; then
3966                 echo "Found -l${thislib}_s."
3967                 case " $dflt " in
3968                 *"-l$thislib "*);;
3969                 *) dflt="$dflt -l${thislib}_s";;
3970                 esac
3971         elif xxx=`./loc Slib$thislib$_a X $xlibpth`; $test -f "$xxx"; then
3972                 echo "Found -l$thislib."
3973                 case " $dflt " in
3974                 *"-l$thislib "*);;
3975                 *) dflt="$dflt -l$thislib";;
3976                 esac
3977         else
3978                 echo "No -l$thislib."
3979         fi
3980 done
3981 set X $dflt
3982 shift
3983 dflt="$*"
3984 case "$libs" in
3985 '') dflt="$dflt";;
3986 *) dflt="$libs";;
3987 esac
3988 case "$dflt" in
3989 ' '|'') dflt='none';;
3990 esac
3991
3992 $cat <<EOM
3993  
3994 Some versions of Unix support shared libraries, which make executables smaller
3995 but make load time slightly longer.
3996
3997 On some systems, mostly System V Release 3's, the shared library is included
3998 by putting the option "-lc_s" as the last thing on the cc command line when
3999 linking.  Other systems use shared libraries by default.  There may be other
4000 libraries needed to compile $package on your machine as well.  If your system
4001 needs the "-lc_s" option, include it here.  Include any other special libraries
4002 here as well.  Say "none" for none.
4003 EOM
4004
4005 echo " "
4006 rp="Any additional libraries?"
4007 . ./myread
4008 case "$ans" in
4009 none) libs=' ';;
4010 *) libs="$ans";;
4011 esac
4012
4013 : determine optimize, if desired, or use for debug flag also
4014 case "$optimize" in
4015 ' '|$undef) dflt='none';;
4016 '') dflt='-O';;
4017 *) dflt="$optimize";;
4018 esac
4019 $cat <<EOH
4020
4021 Some C compilers have problems with their optimizers.  By default, $package
4022 compiles with the -O flag to use the optimizer.  Alternately, you might want
4023 to use the symbolic debugger, which uses the -g flag (on traditional Unix
4024 systems).  Either flag can be specified here.  To use neither flag, specify
4025 the word "none".
4026
4027 EOH
4028 rp="What optimizer/debugger flag should be used?"
4029 . ./myread
4030 optimize="$ans"
4031 case "$optimize" in
4032 'none') optimize=" ";;
4033 esac
4034
4035 dflt=''
4036 : We will not override a previous value, but we might want to
4037 : augment a hint file
4038 case "$hint" in
4039 none|recommended)
4040         case "$gccversion" in
4041         1*) dflt='-fpcc-struct-return' ;;
4042         esac
4043         case "$optimize" in
4044         *-g*) dflt="$dflt -DDEBUGGING";;
4045         esac
4046         case "$gccversion" in
4047         2*) if test -d /etc/conf/kconfig.d &&
4048                         $contains _POSIX_VERSION $usrinc/sys/unistd.h >/dev/null 2>&1
4049                 then
4050                         dflt="$dflt -posix"
4051                 fi
4052                 ;;
4053         esac
4054         ;;
4055 esac
4056
4057 case "$mips_type" in
4058 *BSD*|'') inclwanted="$locincpth $usrinc";;
4059 *) inclwanted="$locincpth $inclwanted $usrinc/bsd";;
4060 esac
4061 for thisincl in $inclwanted; do
4062         if $test -d $thisincl; then
4063                 if $test x$thisincl != x$usrinc; then
4064                         case "$dflt" in
4065                         *$thisincl*);;
4066                         *) dflt="$dflt -I$thisincl";;
4067                         esac
4068                 fi
4069         fi
4070 done
4071
4072 inctest='if $contains $2 $usrinc/$1 >/dev/null 2>&1; then
4073         xxx=true;
4074 elif $contains $2 $usrinc/sys/$1 >/dev/null 2>&1; then
4075         xxx=true;
4076 else
4077         xxx=false;
4078 fi;
4079 if $xxx; then
4080         case "$dflt" in
4081         *$2*);;
4082         *) dflt="$dflt -D$2";;
4083         esac;
4084 fi'
4085
4086 set signal.h LANGUAGE_C; eval $inctest
4087
4088 case "$hint" in
4089 none|recommended) dflt="$ccflags $dflt" ;;
4090 *) dflt="$ccflags";;
4091 esac
4092
4093 case "$dflt" in
4094 ''|' ') dflt=none;;
4095 esac
4096 $cat <<EOH
4097
4098 Your C compiler may want other flags.  For this question you should include
4099 -I/whatever and -DWHATEVER flags and any other flags used by the C compiler,
4100 but you should NOT include libraries or ld flags like -lwhatever.  If you
4101 want $package to honor its debug switch, you should include -DDEBUGGING here.
4102 Your C compiler might also need additional flags, such as -D_POSIX_SOURCE.
4103
4104 To use no flags, specify the word "none".
4105
4106 EOH
4107 set X $dflt
4108 shift
4109 dflt=${1+"$@"}
4110 rp="Any additional cc flags?"
4111 . ./myread
4112 case "$ans" in
4113 none) ccflags='';;
4114 *) ccflags="$ans";;
4115 esac
4116
4117 : the following weeds options from ccflags that are of no interest to cpp
4118 cppflags="$ccflags"
4119 case "$gccversion" in
4120 1*) cppflags="$cppflags -D__GNUC__"
4121 esac
4122 case "$mips_type" in
4123 '');;
4124 *BSD*) cppflags="$cppflags -DSYSTYPE_BSD43";;
4125 esac
4126 case "$cppflags" in
4127 '');;
4128 *)
4129         echo " "
4130         echo "Let me guess what the preprocessor flags are..." >&4
4131         set X $cppflags
4132         shift
4133         cppflags=''
4134         $cat >cpp.c <<'EOM'
4135 #define BLURFL foo
4136
4137 BLURFL xx LFRULB
4138 EOM
4139         previous=''
4140         for flag in $*
4141         do
4142                 case "$flag" in
4143                 -*) ftry="$flag";;
4144                 *) ftry="$previous $flag";;
4145                 esac
4146                 if $cppstdin -DLFRULB=bar $cppflags $ftry $cppminus <cpp.c \
4147                         >cpp1.out 2>/dev/null && \
4148                         $cpprun -DLFRULB=bar $cppflags $ftry $cpplast <cpp.c \
4149                         >cpp2.out 2>/dev/null && \
4150                         $contains 'foo.*xx.*bar' cpp1.out >/dev/null 2>&1 && \
4151                         $contains 'foo.*xx.*bar' cpp2.out >/dev/null 2>&1
4152                 then
4153                         cppflags="$cppflags $ftry"
4154                         previous=''
4155                 else
4156                         previous="$flag"
4157                 fi
4158         done
4159         set X $cppflags
4160         shift
4161         cppflags=${1+"$@"}
4162         case "$cppflags" in
4163         *-*)  echo "They appear to be: $cppflags";;
4164         esac
4165         $rm -f cpp.c cpp?.out
4166         ;;
4167 esac
4168
4169 : flags used in final linking phase
4170 case "$ldflags" in
4171 '') if ./venix; then
4172                 dflt='-i -z'
4173         else
4174                 dflt=''
4175         fi
4176         case "$ccflags" in
4177         *-posix*) dflt="$dflt -posix" ;;
4178         esac
4179         ;;
4180 *) dflt="$ldflags";;
4181 esac
4182
4183 : Try to guess additional flags to pick up local libraries.
4184 for thislibdir in $libpth; do
4185         case " $loclibpth " in
4186         *" $thislibdir "*)
4187                 case "$dflt " in 
4188                 *"-L$thislibdir "*) ;;
4189                 *)  dflt="$dflt -L$thislibdir" ;;
4190                 esac
4191                 ;;
4192         esac
4193 done
4194
4195 case "$dflt" in
4196 '') dflt='none' ;;
4197 esac
4198
4199 $cat <<EOH
4200
4201 Your C linker may need flags.  For this question you should
4202 include -L/whatever and any other flags used by the C linker, but you
4203 should NOT include libraries like -lwhatever.
4204
4205 Make sure you include the appropriate -L/path flags if your C linker
4206 does not normally search all of the directories you specified above,
4207 namely
4208         $libpth
4209 To use no flags, specify the word "none".
4210
4211 EOH
4212
4213 rp="Any additional ld flags (NOT including libraries)?"
4214 . ./myread
4215 case "$ans" in
4216 none) ldflags='';;
4217 *) ldflags="$ans";;
4218 esac
4219 rmlist="$rmlist pdp11"
4220
4221 : coherency check
4222 echo " "
4223 echo "Checking your choice of C compiler and flags for coherency..." >&4
4224 $cat > try.c <<'EOF'
4225 #include <stdio.h>
4226 int main() { printf("Ok\n"); exit(0); }
4227 EOF
4228 set X $cc $optimize $ccflags -o try $ldflags try.c $libs
4229 shift
4230 $cat >try.msg <<'EOM'
4231 I've tried to compile and run the following simple program:
4232
4233 EOM
4234 $cat try.c >> try.msg
4235
4236 $cat >> try.msg <<EOM
4237
4238 I used the command:
4239
4240         $*
4241         ./try
4242
4243 and I got the following output:
4244
4245 EOM
4246 dflt=y
4247 if sh -c "$cc $optimize $ccflags -o try $ldflags try.c $libs" >>try.msg 2>&1; then
4248         if sh -c './try' >>try.msg 2>&1; then
4249                 xxx=`./try`
4250                 case "$xxx" in
4251                 "Ok") dflt=n ;;
4252                 *)      echo 'The program compiled OK, but produced no output.' >> try.msg
4253                         case " $libs " in
4254                         *" -lsfio "*)
4255                                 cat >> try.msg <<'EOQS'
4256 If $libs contains -lsfio, and sfio is mis-configured, then it
4257 sometimes (apparently) runs and exits with a 0 status, but with no
4258 output!  It may have to do with sfio's use of _exit vs. exit.
4259
4260 EOQS
4261                                 rp="You have a big problem.  Shall I abort Configure"
4262                                 dflt=y
4263                                 ;;
4264                         esac
4265                         ;;
4266                 esac
4267         else
4268                 echo "The program compiled OK, but exited with status $?." >>try.msg
4269                 rp="You have a problem.  Shall I abort Configure"
4270                 dflt=y
4271         fi
4272 else
4273         echo "I can't compile the test program." >>try.msg
4274         rp="You have a BIG problem.  Shall I abort Configure"
4275         dflt=y
4276 fi
4277 case "$dflt" in
4278 y)
4279         $cat try.msg >&4
4280         case "$knowitall" in
4281         '')
4282                 echo "(The supplied flags or libraries might be incorrect.)"
4283                 ;;
4284         *) dflt=n;;
4285         esac
4286         echo " "
4287         . ./myread
4288         case "$ans" in
4289         n*|N*) ;;
4290         *)      echo "Ok.  Stopping Configure." >&4
4291                 exit 1
4292                 ;;
4293         esac
4294         ;;
4295 n) echo "OK, that should do.";;
4296 esac
4297 $rm -f try try.* core
4298
4299 : determine filename position in cpp output
4300 echo " "
4301 echo "Computing filename position in cpp output for #include directives..." >&4
4302 echo '#include <stdio.h>' > foo.c
4303 $cat >fieldn <<EOF
4304 $startsh
4305 $cppstdin $cppflags $cppminus <foo.c 2>/dev/null | \
4306 $grep '^[       ]*#.*stdio\.h' | \
4307 while read cline; do
4308         pos=1
4309         set \$cline
4310         while $test \$# -gt 0; do
4311                 if $test -r \`echo \$1 | $tr -d '"'\`; then
4312                         echo "\$pos"
4313                         exit 0
4314                 fi
4315                 shift
4316                 pos=\`expr \$pos + 1\`
4317         done
4318 done
4319 EOF
4320 chmod +x fieldn
4321 fieldn=`./fieldn`
4322 $rm -f foo.c fieldn
4323 case $fieldn in
4324 '') pos='???';;
4325 1) pos=first;;
4326 2) pos=second;;
4327 3) pos=third;;
4328 *) pos="${fieldn}th";;
4329 esac
4330 echo "Your cpp writes the filename in the $pos field of the line."
4331
4332 : locate header file
4333 $cat >findhdr <<EOF
4334 $startsh
4335 wanted=\$1
4336 name=''
4337 if test -f $usrinc/\$wanted; then
4338         echo "$usrinc/\$wanted"
4339         exit 0
4340 fi
4341 awkprg='{ print \$$fieldn }'
4342 echo "#include <\$wanted>" > foo\$\$.c
4343 $cppstdin $cppminus $cppflags < foo\$\$.c 2>/dev/null | \
4344 $grep "^[       ]*#.*\$wanted" | \
4345 while read cline; do
4346         name=\`echo \$cline | $awk "\$awkprg" | $tr -d '"'\`
4347         case "\$name" in
4348         */\$wanted) echo "\$name"; exit 0;;
4349         *) name='';;
4350         esac;
4351 done;
4352 $rm -f foo\$\$.c;
4353 case "\$name" in
4354 '') exit 1;;
4355 esac
4356 EOF
4357 chmod +x findhdr
4358
4359 : define an alternate in-header-list? function
4360 inhdr='echo " "; td=$define; tu=$undef; yyy=$@;
4361 cont=true; xxf="echo \"<\$1> found.\" >&4";
4362 case $# in 2) xxnf="echo \"<\$1> NOT found.\" >&4";;
4363 *) xxnf="echo \"<\$1> NOT found, ...\" >&4";;
4364 esac;
4365 case $# in 4) instead=instead;; *) instead="at last";; esac;
4366 while $test "$cont"; do
4367         xxx=`./findhdr $1`
4368         var=$2; eval "was=\$$2";
4369         if $test "$xxx" && $test -r "$xxx";
4370         then eval $xxf;
4371         eval "case \"\$$var\" in $undef) . ./whoa; esac"; eval "$var=\$td";
4372                 cont="";
4373         else eval $xxnf;
4374         eval "case \"\$$var\" in $define) . ./whoa; esac"; eval "$var=\$tu"; fi;
4375         set $yyy; shift; shift; yyy=$@;
4376         case $# in 0) cont="";;
4377         2) xxf="echo \"but I found <\$1> $instead.\" >&4";
4378                 xxnf="echo \"and I did not find <\$1> either.\" >&4";;
4379         *) xxf="echo \"but I found <\$1\> instead.\" >&4";
4380                 xxnf="echo \"there is no <\$1>, ...\" >&4";;
4381         esac;
4382 done;
4383 while $test "$yyy";
4384 do set $yyy; var=$2; eval "was=\$$2";
4385         eval "case \"\$$var\" in $define) . ./whoa; esac"; eval "$var=\$tu";
4386         set $yyy; shift; shift; yyy=$@;
4387 done'
4388
4389 : see if this is a malloc.h system
4390 set malloc.h i_malloc
4391 eval $inhdr
4392
4393 : see if stdlib is available
4394 set stdlib.h i_stdlib
4395 eval $inhdr
4396
4397 : determine which malloc to compile in
4398 echo " "
4399 case "$usemymalloc" in
4400 ''|[yY]*|true|$define)  dflt='y' ;;
4401 *)      dflt='n' ;;
4402 esac
4403 rp="Do you wish to attempt to use the malloc that comes with $package?"
4404 . ./myread
4405 usemymalloc="$ans"
4406 case "$ans" in
4407 y*|true)
4408         usemymalloc='y'
4409         mallocsrc='malloc.c'
4410         mallocobj="malloc$_o"
4411         d_mymalloc="$define"
4412         case "$libs" in
4413         *-lmalloc*)
4414                 : Remove malloc from list of libraries to use
4415                 echo "Removing unneeded -lmalloc from library list" >&4
4416                 set `echo X $libs | $sed -e 's/-lmalloc / /' -e 's/-lmalloc$//'`
4417                 shift
4418                 libs="$*"
4419                 echo "libs = $libs" >&4
4420                 ;;
4421         esac
4422         ;;
4423 *)
4424         usemymalloc='n'
4425         mallocsrc=''
4426         mallocobj=''
4427         d_mymalloc="$undef"
4428         ;;
4429 esac
4430
4431 : compute the return types of malloc and free
4432 echo " "
4433 $cat >malloc.c <<END
4434 #$i_malloc I_MALLOC
4435 #$i_stdlib I_STDLIB
4436 #include <stdio.h>
4437 #include <sys/types.h>
4438 #ifdef I_MALLOC
4439 #include <malloc.h>
4440 #endif
4441 #ifdef I_STDLIB
4442 #include <stdlib.h>
4443 #endif
4444 #ifdef TRY_MALLOC
4445 void *malloc();
4446 #endif
4447 #ifdef TRY_FREE
4448 void free();
4449 #endif
4450 END
4451 case "$malloctype" in
4452 '')
4453         if $cc $ccflags -c -DTRY_MALLOC malloc.c >/dev/null 2>&1; then
4454                 malloctype='void *'
4455         else
4456                 malloctype='char *'
4457         fi
4458         ;;
4459 esac
4460 echo "Your system wants malloc to return '$malloctype', it would seem." >&4
4461
4462 case "$freetype" in
4463 '')
4464         if $cc $ccflags -c -DTRY_FREE malloc.c >/dev/null 2>&1; then
4465                 freetype='void'
4466         else
4467                 freetype='int'
4468         fi
4469         ;;
4470 esac
4471 echo "Your system uses $freetype free(), it would seem." >&4
4472 $rm -f malloc.[co]
4473 : Cruising for prototypes
4474 echo " "
4475 echo "Checking out function prototypes..." >&4
4476 $cat >prototype.c <<'EOCP'
4477 int main(int argc, char *argv[]) {
4478         exit(0);}
4479 EOCP
4480 if $cc $ccflags -c prototype.c >prototype.out 2>&1 ; then
4481         echo "Your C compiler appears to support function prototypes."
4482         val="$define"
4483 else
4484         echo "Your C compiler doesn't seem to understand function prototypes."
4485         val="$undef"
4486 fi
4487 set prototype
4488 eval $setvar
4489 $rm -f prototype*
4490
4491 case "$prototype" in
4492 "$define") ;;
4493 *)      ansi2knr='ansi2knr'
4494         echo " "
4495         cat <<EOM >&4
4496
4497 $me:  FATAL ERROR:
4498 This version of $package can only be compiled by a compiler that 
4499 understands function prototypes.  Unfortunately, your C compiler 
4500         $cc $ccflags
4501 doesn't seem to understand them.  Sorry about that.
4502
4503 If GNU cc is available for your system, perhaps you could try that instead.  
4504
4505 Eventually, we hope to support building Perl with pre-ANSI compilers.
4506 If you would like to help in that effort, please contact <perlbug@perl.org>.
4507
4508 Aborting Configure now.
4509 EOM
4510         exit 2
4511         ;;
4512 esac
4513
4514 : determine where public executables go
4515 echo " "
4516 set dflt bin bin
4517 eval $prefixit
4518 fn=d~
4519 rp='Pathname where the public executables will reside?'
4520 . ./getfile
4521 if $test "X$ansexp" != "X$binexp"; then
4522         installbin=''
4523 fi
4524 bin="$ans"
4525 binexp="$ansexp"
4526 if $afs; then
4527         $cat <<EOM
4528
4529 Since you are running AFS, I need to distinguish the directory in which
4530 executables reside from the directory in which they are installed (and from
4531 which they are presumably copied to the former directory by occult means).
4532
4533 EOM
4534         case "$installbin" in
4535         '') dflt=`echo $binexp | sed 's#^/afs/#/afs/.#'`;;
4536         *) dflt="$installbin";;
4537         esac
4538         fn=de~
4539         rp='Where will public executables be installed?'
4540         . ./getfile
4541         installbin="$ans"
4542 else
4543         installbin="$binexp"
4544 fi
4545
4546 : determine whether to install perl also as /usr/bin/perl
4547
4548 echo " "
4549 if test -d /usr/bin -a "X$installbin" != X/usr/bin; then
4550         $cat <<EOM
4551 Many scripts expect to perl to be installed as /usr/bin/perl.
4552 I can install the perl you are about to compile also as /usr/bin/perl
4553 (in addition to $installbin/perl).
4554 EOM
4555         case "$installusrbinperl" in
4556         "$undef"|[nN]*) dflt='n';;
4557         *)              dflt='y';;
4558         esac
4559         rp="Do you want to install perl as /usr/bin/perl?"
4560         . ./myread
4561         case "$ans" in
4562         [yY]*)  val="$define";;
4563         *)      val="$undef" ;;
4564         esac
4565 else
4566         val="$undef"
4567 fi
4568 set installusrbinperl
4569 eval $setvar
4570
4571 : define a shorthand compile call
4572 compile='
4573 mc_file=$1;
4574 shift;
4575 $cc $optimize $ccflags $ldflags -o ${mc_file} $* ${mc_file}.c $libs > /dev/null 2>&1;'
4576 : define a shorthand compile call for compilations that should be ok.
4577 compile_ok='
4578 mc_file=$1;
4579 shift;
4580 $cc $optimize $ccflags $ldflags -o ${mc_file} $* ${mc_file}.c $libs;'
4581
4582 echo " "
4583 echo "Checking for GNU C Library..." >&4
4584 cat >gnulibc.c <<EOM
4585 #include <stdio.h>
4586 int main()
4587 {
4588 #ifdef __GLIBC__
4589     exit(0);
4590 #else
4591     exit(1);
4592 #endif
4593 }
4594 EOM
4595 set gnulibc
4596 if eval $compile_ok && ./gnulibc; then
4597         val="$define"
4598         echo "You are using the GNU C Library"
4599 else
4600         val="$undef"
4601         echo "You are not using the GNU C Library"
4602 fi
4603 $rm -f gnulibc*
4604 set d_gnulibc
4605 eval $setvar
4606
4607 : see if nm is to be used to determine whether a symbol is defined or not
4608 case "$usenm" in
4609 '')
4610         dflt=''
4611         case "$d_gnulibc" in
4612         "$define")
4613                 echo " "
4614                 echo "nm probably won't work on the GNU C Library." >&4
4615                 dflt=n
4616                 ;;
4617         esac
4618         case "$dflt" in
4619         '') 
4620                 if $test "$osname" = aix -a ! -f /lib/syscalls.exp; then
4621                         echo " "
4622                         echo "Whoops!  This is an AIX system without /lib/syscalls.exp!" >&4
4623                         echo "'nm' won't be sufficient on this sytem." >&4
4624                         dflt=n
4625                 fi
4626                 ;;
4627         esac
4628         case "$dflt" in
4629         '') dflt=`$egrep 'inlibc|csym' $rsrc/Configure | wc -l 2>/dev/null`
4630                 if $test $dflt -gt 20; then
4631                         dflt=y
4632                 else
4633                         dflt=n
4634                 fi
4635                 ;;
4636         esac
4637         ;;
4638 *)
4639         case "$usenm" in
4640         true|$define) dflt=y;;
4641         *) dflt=n;;
4642         esac
4643         ;;
4644 esac
4645 $cat <<EOM
4646
4647 I can use $nm to extract the symbols from your C libraries. This
4648 is a time consuming task which may generate huge output on the disk (up
4649 to 3 megabytes) but that should make the symbols extraction faster. The
4650 alternative is to skip the 'nm' extraction part and to compile a small
4651 test program instead to determine whether each symbol is present. If
4652 you have a fast C compiler and/or if your 'nm' output cannot be parsed,
4653 this may be the best solution.
4654
4655 You probably shouldn't let me use 'nm' if you are using the GNU C Library.
4656
4657 EOM
4658 rp="Shall I use $nm to extract C symbols from the libraries?"
4659 . ./myread
4660 case "$ans" in
4661 [Nn]*) usenm=false;;
4662 *) usenm=true;;
4663 esac
4664
4665 runnm=$usenm
4666 case "$reuseval" in
4667 true) runnm=false;;
4668 esac
4669
4670 : nm options which may be necessary
4671 case "$nm_opt" in
4672 '') if $test -f /mach_boot; then
4673                 nm_opt=''       # Mach
4674         elif $test -d /usr/ccs/lib; then
4675                 nm_opt='-p'     # Solaris (and SunOS?)
4676         elif $test -f /dgux; then
4677                 nm_opt='-p'     # DG-UX
4678         elif $test -f /lib64/rld; then
4679                 nm_opt='-p'     # 64-bit Irix
4680         else
4681                 nm_opt=''
4682         fi;;
4683 esac
4684
4685 : nm options which may be necessary for shared libraries but illegal
4686 : for archive libraries.  Thank you, Linux.
4687 case "$nm_so_opt" in
4688 '')     case "$myuname" in
4689         *linux*)
4690                 if $nm --help | $grep 'dynamic' > /dev/null 2>&1; then
4691                         nm_so_opt='--dynamic'
4692                 fi
4693                 ;;
4694         esac
4695         ;;
4696 esac
4697
4698 case "$runnm" in
4699 true)
4700 : get list of predefined functions in a handy place
4701 echo " "
4702 case "$libc" in
4703 '') libc=unknown
4704         case "$libs" in
4705         *-lc_s*) libc=`./loc libc_s$_a $libc $libpth`
4706         esac
4707         ;;
4708 esac
4709 libnames='';
4710 case "$libs" in
4711 '') ;;
4712 *)  for thislib in $libs; do
4713         case "$thislib" in
4714         -lc|-lc_s)
4715                 : Handle C library specially below.
4716                 ;;
4717         -l*)
4718                 thislib=`echo $thislib | $sed -e 's/^-l//'`
4719                 if try=`./loc lib$thislib.$so.'*' X $libpth`; $test -f "$try"; then
4720                         :
4721                 elif try=`./loc lib$thislib.$so X $libpth`; $test -f "$try"; then
4722                         :
4723                 elif try=`./loc lib$thislib$_a X $libpth`; $test -f "$try"; then
4724                         :
4725                 elif try=`./loc $thislib$_a X $libpth`; $test -f "$try"; then
4726                         :
4727                 elif try=`./loc lib$thislib X $libpth`; $test -f "$try"; then
4728                         :
4729                 elif try=`./loc $thislib X $libpth`; $test -f "$try"; then
4730                         :
4731                 elif try=`./loc Slib$thislib$_a X $xlibpth`; $test -f "$try"; then
4732                         :
4733                 else
4734                         try=''
4735                 fi
4736                 libnames="$libnames $try"
4737                 ;;
4738         *) libnames="$libnames $thislib" ;;
4739         esac
4740         done
4741         ;;
4742 esac
4743 xxx=normal
4744 case "$libc" in
4745 unknown)
4746         set /lib/libc.$so
4747         for xxx in $libpth; do
4748                 $test -r $1 || set $xxx/libc.$so
4749                 : The messy sed command sorts on library version numbers.
4750                 $test -r $1 || \
4751                         set `echo blurfl; echo $xxx/libc.$so.[0-9]* | \
4752                         tr ' ' $trnl | egrep -v '\.[A-Za-z]*$' | $sed -e '
4753                                 h
4754                                 s/[0-9][0-9]*/0000&/g
4755                                 s/0*\([0-9][0-9][0-9][0-9][0-9]\)/\1/g
4756                                 G
4757                                 s/\n/ /' | \
4758                          sort | $sed -e 's/^.* //'`
4759                 eval set \$$#
4760         done
4761         $test -r $1 || set /usr/ccs/lib/libc.$so
4762         $test -r $1 || set /lib/libsys_s$_a
4763         ;;
4764 *)
4765         set blurfl
4766         ;;
4767 esac
4768 if $test -r "$1"; then
4769         echo "Your (shared) C library seems to be in $1."
4770         libc="$1"
4771 elif $test -r /lib/libc && $test -r /lib/clib; then
4772         echo "Your C library seems to be in both /lib/clib and /lib/libc."
4773         xxx=apollo
4774         libc='/lib/clib /lib/libc'
4775         if $test -r /lib/syslib; then
4776                 echo "(Your math library is in /lib/syslib.)"
4777                 libc="$libc /lib/syslib"
4778         fi
4779 elif $test -r "$libc" || (test -h "$libc") >/dev/null 2>&1; then
4780         echo "Your C library seems to be in $libc, as you said before."
4781 elif $test -r $incpath/usr/lib/libc$_a; then
4782         libc=$incpath/usr/lib/libc$_a;
4783         echo "Your C library seems to be in $libc.  That's fine."
4784 elif $test -r /lib/libc$_a; then
4785         libc=/lib/libc$_a;
4786         echo "Your C library seems to be in $libc.  You're normal."
4787 else
4788         if tans=`./loc libc$_a blurfl/dyick $libpth`; $test -r "$tans"; then
4789                 :
4790         elif tans=`./loc libc blurfl/dyick $libpth`; $test -r "$tans"; then
4791                 libnames="$libnames "`./loc clib blurfl/dyick $libpth`
4792         elif tans=`./loc clib blurfl/dyick $libpth`; $test -r "$tans"; then
4793                 :
4794         elif tans=`./loc Slibc$_a blurfl/dyick $xlibpth`; $test -r "$tans"; then
4795                 :
4796         elif tans=`./loc Mlibc$_a blurfl/dyick $xlibpth`; $test -r "$tans"; then
4797                 :
4798         else
4799                 tans=`./loc Llibc$_a blurfl/dyick $xlibpth`
4800         fi
4801         if $test -r "$tans"; then
4802                 echo "Your C library seems to be in $tans, of all places."
4803                 libc=$tans
4804         else
4805                 libc='blurfl'
4806         fi
4807 fi
4808 if $test $xxx = apollo -o -r "$libc" || (test -h "$libc") >/dev/null 2>&1; then
4809         dflt="$libc"
4810         cat <<EOM
4811
4812 If the guess above is wrong (which it might be if you're using a strange
4813 compiler, or your machine supports multiple models), you can override it here.
4814
4815 EOM
4816 else
4817         dflt=''
4818         echo $libpth | tr ' ' $trnl | sort | uniq > libpath
4819         cat >&4 <<EOM
4820 I can't seem to find your C library.  I've looked in the following places:
4821
4822 EOM
4823         $sed 's/^/      /' libpath
4824         cat <<EOM
4825
4826 None of these seems to contain your C library. I need to get its name...
4827
4828 EOM
4829 fi
4830 fn=f
4831 rp='Where is your C library?'
4832 . ./getfile
4833 libc="$ans"
4834
4835 echo " "
4836 echo $libc $libnames | tr ' ' $trnl | sort | uniq > libnames
4837 set X `cat libnames`
4838 shift
4839 xxx=files
4840 case $# in 1) xxx=file; esac
4841 echo "Extracting names from the following $xxx for later perusal:" >&4
4842 echo " "
4843 $sed 's/^/      /' libnames >&4
4844 echo " "
4845 $echo $n "This may take a while...$c" >&4
4846
4847 for file in $*; do
4848         case $file in
4849         *$so*) $nm $nm_so_opt $nm_opt $file 2>/dev/null;;
4850         *) $nm $nm_opt $file 2>/dev/null;;
4851         esac
4852 done >libc.tmp
4853
4854 $echo $n ".$c"
4855 $grep fprintf libc.tmp > libc.ptf
4856 xscan='eval "<libc.ptf $com >libc.list"; $echo $n ".$c" >&4'
4857 xrun='eval "<libc.tmp $com >libc.list"; echo "done" >&4'
4858 xxx='[ADTSIW]'
4859 if com="$sed -n -e 's/__IO//' -e 's/^.* $xxx  *_[_.]*//p' -e 's/^.* $xxx  *//p'";\
4860         eval $xscan;\
4861         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4862                 eval $xrun
4863 elif com="$sed -n -e 's/^__*//' -e 's/^\([a-zA-Z_0-9$]*\).*xtern.*/\1/p'";\
4864         eval $xscan;\
4865         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4866                 eval $xrun
4867 elif com="$sed -n -e '/|UNDEF/d' -e '/FUNC..GL/s/^.*|__*//p'";\
4868         eval $xscan;\
4869         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4870                 eval $xrun
4871 elif com="$sed -n -e 's/^.* D __*//p' -e 's/^.* D //p'";\
4872         eval $xscan;\
4873         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4874                 eval $xrun
4875 elif com="$sed -n -e 's/^_//' -e 's/^\([a-zA-Z_0-9]*\).*xtern.*text.*/\1/p'";\
4876         eval $xscan;\
4877         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4878                 eval $xrun
4879 elif com="$sed -n -e 's/^.*|FUNC |GLOB .*|//p'";\
4880         eval $xscan;\
4881         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4882                 eval $xrun
4883 elif com="$grep '|' | $sed -n -e '/|COMMON/d' -e '/|DATA/d' \
4884                                 -e '/ file/d' -e 's/^\([^       ]*\).*/\1/p'";\
4885         eval $xscan;\
4886         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4887                 eval $xrun
4888 elif com="$sed -n -e 's/^.*|FUNC |GLOB .*|//p' -e 's/^.*|FUNC |WEAK .*|//p'";\
4889         eval $xscan;\
4890         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4891                 eval $xrun
4892 elif com="$sed -n -e 's/^__//' -e '/|Undef/d' -e '/|Proc/s/ .*//p'";\
4893         eval $xscan;\
4894         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4895                 eval $xrun
4896 elif com="$sed -n -e 's/^.*|Proc .*|Text *| *//p'";\
4897         eval $xscan;\
4898         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4899                 eval $xrun
4900 elif com="$sed -n -e '/Def. Text/s/.* \([^ ]*\)\$/\1/p'";\
4901         eval $xscan;\
4902         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4903                 eval $xrun
4904 elif com="$sed -n -e 's/^[-0-9a-f ]*_\(.*\)=.*/\1/p'";\
4905         eval $xscan;\
4906         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4907                 eval $xrun
4908 elif com="$sed -n -e 's/.*\.text n\ \ \ \.//p'";\
4909         eval $xscan;\
4910         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4911                 eval $xrun
4912 elif com="sed -n -e 's/^__.*//' -e 's/[       ]*D[    ]*[0-9]*.*//p'";\
4913         eval $xscan;\
4914         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4915                 eval $xrun
4916 else
4917         $nm -p $* 2>/dev/null >libc.tmp
4918         $grep fprintf libc.tmp > libc.ptf
4919         if com="$sed -n -e 's/^.* [ADTSIW]  *_[_.]*//p' -e 's/^.* [ADTSIW] //p'";\
4920                 eval $xscan; $contains '^fprintf$' libc.list >/dev/null 2>&1
4921         then
4922                 nm_opt='-p'
4923                 eval $xrun
4924         else
4925                 echo " "
4926                 echo "$nm didn't seem to work right. Trying $ar instead..." >&4
4927                 com=''
4928                 if $ar t $libc > libc.tmp && $contains '^fprintf$' libc.tmp >/dev/null 2>&1; then
4929                         for thisname in $libnames $libc; do
4930                                 $ar t $thisname >>libc.tmp
4931                         done
4932                         $sed -e "s/\\$_o\$//" < libc.tmp > libc.list
4933                         echo "Ok." >&4
4934                 elif test "X$osname" = "Xos2" && $ar tv $libc > libc.tmp; then
4935                         # Repeat libc to extract forwarders to DLL entries too
4936                         for thisname in $libnames $libc; do
4937                                 $ar tv $thisname >>libc.tmp
4938                                 # Revision 50 of EMX has bug in $ar.
4939                                 # it will not extract forwarders to DLL entries
4940                                 # Use emximp which will extract exactly them.
4941                                 emximp -o tmp.imp $thisname \
4942                                     2>/dev/null && \
4943                                     $sed -e 's/^\([_a-zA-Z0-9]*\) .*$/\1/p' \
4944                                     < tmp.imp >>libc.tmp
4945                                 $rm tmp.imp
4946                         done
4947                         $sed -e "s/\\$_o\$//" -e 's/^ \+//' < libc.tmp > libc.list
4948                         echo "Ok." >&4
4949                 else
4950                         echo "$ar didn't seem to work right." >&4
4951                         echo "Maybe this is a Cray...trying bld instead..." >&4
4952                         if bld t $libc | $sed -e 's/.*\///' -e "s/\\$_o:.*\$//" > libc.list
4953                         then
4954                                 for thisname in $libnames; do
4955                                         bld t $libnames | \
4956                                         $sed -e 's/.*\///' -e "s/\\$_o:.*\$//" >>libc.list
4957                                         $ar t $thisname >>libc.tmp
4958                                 done
4959                                 echo "Ok." >&4
4960                         else
4961                                 echo "That didn't work either.  Giving up." >&4
4962                                 exit 1
4963                         fi
4964                 fi
4965         fi
4966 fi
4967 nm_extract="$com"
4968 if $test -f /lib/syscalls.exp; then
4969         echo " "
4970         echo "Also extracting names from /lib/syscalls.exp for good ole AIX..." >&4
4971         $sed -n 's/^\([^        ]*\)[   ]*syscall[0-9]*$/\1/p' /lib/syscalls.exp >>libc.list
4972 fi
4973 ;;
4974 esac
4975 $rm -f libnames libpath
4976
4977 : see if dld is available
4978 set dld.h i_dld
4979 eval $inhdr
4980
4981 : is a C symbol defined?
4982 csym='tlook=$1;
4983 case "$3" in
4984 -v) tf=libc.tmp; tc=""; tdc="";;
4985 -a) tf=libc.tmp; tc="[0]"; tdc="[]";;
4986 *) tlook="^$1\$"; tf=libc.list; tc="()"; tdc="()";;
4987 esac;
4988 tx=yes;
4989 case "$reuseval-$4" in
4990 true-) ;;
4991 true-*) tx=no; eval "tval=\$$4"; case "$tval" in "") tx=yes;; esac;;
4992 esac;
4993 case "$tx" in
4994 yes)
4995         case "$runnm" in
4996         true)
4997                 if $contains $tlook $tf >/dev/null 2>&1;
4998                 then tval=true;
4999                 else tval=false;
5000                 fi;;
5001         *)
5002                 echo "int main() { extern short $1$tdc; printf(\"%hd\", $1$tc); }" > t.c;
5003                 if $cc $optimize $ccflags $ldflags -o t t.c $libs >/dev/null 2>&1;
5004                 then tval=true;
5005                 else tval=false;
5006                 fi;
5007                 $rm -f t t.c;;
5008         esac;;
5009 *)
5010         case "$tval" in
5011         $define) tval=true;;
5012         *) tval=false;;
5013         esac;;
5014 esac;
5015 eval "$2=$tval"'
5016
5017 : define an is-in-libc? function
5018 inlibc='echo " "; td=$define; tu=$undef;
5019 sym=$1; var=$2; eval "was=\$$2";
5020 tx=yes;
5021 case "$reuseval$was" in
5022 true) ;;
5023 true*) tx=no;;
5024 esac;
5025 case "$tx" in
5026 yes)
5027         set $sym tres -f;
5028         eval $csym;
5029         case "$tres" in
5030         true)
5031                 echo "$sym() found." >&4;
5032                 case "$was" in $undef) . ./whoa; esac; eval "$var=\$td";;
5033         *)
5034                 echo "$sym() NOT found." >&4;
5035                 case "$was" in $define) . ./whoa; esac; eval "$var=\$tu";;
5036         esac;;
5037 *)
5038         case "$was" in
5039         $define) echo "$sym() found." >&4;;
5040         *) echo "$sym() NOT found." >&4;;
5041         esac;;
5042 esac'
5043
5044 : see if dlopen exists
5045 xxx_runnm="$runnm"
5046 runnm=false
5047 set dlopen d_dlopen
5048 eval $inlibc
5049 runnm="$xxx_runnm"
5050
5051 : determine which dynamic loading, if any, to compile in
5052 echo " "
5053 dldir="ext/DynaLoader"
5054 case "$usedl" in
5055 $define|y|true)
5056         dflt='y'
5057         usedl="$define"
5058         ;;
5059 $undef|n|false)
5060         dflt='n'
5061         usedl="$undef"
5062         ;;
5063 *) 
5064         dflt='n'
5065         case "$d_dlopen" in
5066             $define) dflt='y' ;;
5067         esac
5068         case "$i_dld" in
5069             $define) dflt='y' ;;
5070         esac
5071         : Does a dl_xxx.xs file exist for this operating system
5072         $test -f $rsrc/$dldir/dl_${osname}.xs && dflt='y'
5073         ;;
5074 esac
5075 rp="Do you wish to use dynamic loading?"
5076 . ./myread
5077 usedl="$ans"
5078 case "$ans" in
5079 y*) usedl="$define"
5080         case "$dlsrc" in
5081         '')
5082                 if $test -f $rsrc/$dldir/dl_${osname}.xs ; then
5083                         dflt="$dldir/dl_${osname}.xs"
5084                 elif $test "$d_dlopen" = "$define" ; then
5085                         dflt="$dldir/dl_dlopen.xs"
5086                 elif $test "$i_dld" = "$define" ; then
5087                         dflt="$dldir/dl_dld.xs"
5088                 else
5089                         dflt=''
5090                 fi
5091                 ;;
5092         *)      dflt="$dldir/$dlsrc"
5093                 ;;
5094         esac
5095     echo "The following dynamic loading files are available:"
5096         : Can not go over to $dldir because getfile has path hard-coded in.
5097         tdir=`pwd`; cd $rsrc; $ls -C $dldir/dl*.xs; cd $tdir
5098         rp="Source file to use for dynamic loading"
5099         fn="fne"
5100         # XXX This getfile call will fail the existence check if you try 
5101         # building away from $src (this is not supported yet).
5102         . ./getfile
5103         usedl="$define"
5104         : emulate basename
5105         dlsrc=`echo $ans | $sed -e 's@.*/\([^/]*\)$@\1@'`
5106
5107         $cat << EOM
5108
5109 Some systems may require passing special flags to $cc -c to
5110 compile modules that will be used to create a shared library.
5111 To use no flags, say "none".
5112
5113 EOM
5114     case "$cccdlflags" in
5115     '') case "$gccversion" in
5116                 '') case "$osname" in
5117                         hpux)   dflt='+z' ;;
5118                         next)   dflt='none' ;;
5119                         irix*)  dflt='-KPIC' ;;
5120                         svr4*|esix*|solaris) dflt='-KPIC' ;;
5121                         sunos)  dflt='-pic' ;;
5122                         *)      dflt='none' ;;
5123                     esac
5124                         ;;
5125                 *)  case "$osname" in
5126                         svr4*|esix*|solaris) dflt='-fPIC' ;;
5127                         *)      dflt='-fpic' ;;
5128                     esac ;;
5129             esac ;;
5130         ' ') dflt='none' ;;
5131     *)  dflt="$cccdlflags" ;;
5132     esac
5133     rp="Any special flags to pass to $cc -c to compile shared library modules?"
5134     . ./myread
5135     case "$ans" in
5136     none) cccdlflags=' ' ;;
5137     *) cccdlflags="$ans" ;;
5138     esac
5139
5140     cat << EOM
5141
5142 Some systems use ld to create libraries that can be dynamically loaded,
5143 while other systems (such as those using ELF) use $cc.
5144
5145 EOM
5146         case "$ld" in
5147         '')     $cat >try.c <<'EOM'
5148 /* Test for whether ELF binaries are produced */
5149 #include <fcntl.h>
5150 #include <stdlib.h>
5151 int main() {
5152         char b[4];
5153         int i = open("a.out",O_RDONLY);
5154         if(i == -1) 
5155                 exit(1); /* fail */
5156         if(read(i,b,4)==4 && b[0]==127 && b[1]=='E' && b[2]=='L' && b[3]=='F')
5157                 exit(0); /* succeed (yes, it's ELF) */
5158         else
5159                 exit(1); /* fail */
5160 }
5161 EOM
5162                 if $cc $ccflags try.c >/dev/null 2>&1 && ./a.out; then
5163                         cat <<EOM
5164 You appear to have ELF support.  I'll use $cc to build dynamic libraries.
5165 EOM
5166                         dflt="$cc"
5167                 else
5168                         echo "I'll use ld to build dynamic libraries."
5169                         dflt='ld'
5170                 fi
5171                 rm -f try.c a.out
5172                 ;;
5173         *)      dflt="$ld"
5174                 ;;
5175         esac
5176
5177     rp="What command should be used to create dynamic libraries?"
5178     . ./myread
5179         ld="$ans"
5180
5181     cat << EOM
5182
5183 Some systems may require passing special flags to $ld to create a
5184 library that can be dynamically loaded.  If your ld flags include
5185 -L/other/path options to locate libraries outside your loader's normal
5186 search path, you may need to specify those -L options here as well.  To
5187 use no flags, say "none".
5188
5189 EOM
5190     case "$lddlflags" in
5191     '') case "$osname" in
5192                         beos) dflt='-nostart' ;;
5193                         hpux)  dflt='-b' ;;
5194                         linux|irix*)    dflt='-shared' ;;
5195                         next)  dflt='none' ;;
5196                         solaris) dflt='-G' ;;
5197                         sunos) dflt='-assert nodefinitions' ;;
5198                         svr4*|esix*) dflt="-G $ldflags" ;;
5199                 *)     dflt='none' ;;
5200                         esac
5201                         ;;
5202     *) dflt="$lddlflags" ;;
5203     esac
5204
5205         : Try to guess additional flags to pick up local libraries.
5206         : Be careful not to append to a plain 'none'
5207         case "$dflt" in
5208         none) dflt='' ;;
5209         esac
5210         for thisflag in $ldflags; do
5211                 case "$thisflag" in
5212                 -L*)
5213                         case " $dflt " in
5214                         *" $thisflag "*) ;;
5215                         *) dflt="$dflt $thisflag" ;;
5216                         esac
5217                         ;;
5218                 esac
5219         done
5220
5221         case "$dflt" in
5222         ''|' ') dflt='none' ;;
5223         esac
5224
5225     rp="Any special flags to pass to $ld to create a dynamically loaded library?"
5226     . ./myread
5227     case "$ans" in
5228     none) lddlflags=' ' ;;
5229     *) lddlflags="$ans" ;;
5230     esac
5231
5232         cat <<EOM
5233
5234 Some systems may require passing special flags to $cc to indicate that
5235 the resulting executable will use dynamic linking.  To use no flags,
5236 say "none".
5237
5238 EOM
5239     case "$ccdlflags" in
5240     '') case "$osname" in
5241                 hpux)   dflt='-Wl,-E' ;;
5242                 linux)  dflt='-rdynamic' ;;
5243                 next)   dflt='none' ;;
5244                 sunos)  dflt='none' ;;
5245                 *)      dflt='none' ;;
5246             esac ;;
5247     ' ')  dflt='none' ;;
5248     *)  dflt="$ccdlflags" ;;
5249     esac
5250     rp="Any special flags to pass to $cc to use dynamic loading?"
5251     . ./myread
5252     case "$ans" in
5253     none) ccdlflags=' ' ;;
5254     *) ccdlflags="$ans" ;;
5255     esac
5256     ;;
5257 *)  usedl="$undef"
5258         ld='ld'
5259     dlsrc='dl_none.xs'
5260     lddlflags=''
5261     ccdlflags=''
5262     ;;
5263 esac
5264
5265 also=''
5266 case "$usedl" in
5267 $undef)
5268         # No dynamic loading being used, so don't bother even to prompt.
5269         useshrplib='false'
5270         ;;
5271 *)      case "$useshrplib" in
5272         '')     case "$osname" in
5273                 svr4*|dgux|dynixptx|esix|powerux|beos)
5274                         dflt=y
5275                         also='Building a shared libperl is required for dynamic loading to work on your system.'
5276                         ;;
5277                 next*)
5278                         case "$osvers" in
5279                         4*)     dflt=y
5280                                 also='Building a shared libperl is needed for MAB support.'
5281                                 ;;
5282                         *)      dflt=n
5283                                 ;;
5284                         esac
5285                         ;;
5286                 *)      dflt=n
5287                         ;;
5288                 esac
5289                 ;;
5290         $define|true|[Yy]*)
5291                 dflt=y
5292                 ;;
5293         *)      dflt=n
5294                 ;;
5295         esac
5296         $cat << EOM
5297
5298 The perl executable is normally obtained by linking perlmain.c with
5299 libperl${_a}, any static extensions (usually just DynaLoader), and
5300 any other libraries needed on this system (such as -lm, etc.).  Since
5301 your system supports dynamic loading, it is probably possible to build
5302 a shared libperl.$so.  If you will have more than one executable linked
5303 to libperl.$so, this will significantly reduce the size of each
5304 executable, but it may have a noticeable affect on performance.  The
5305 default is probably sensible for your system.
5306 $also
5307
5308 EOM
5309         rp="Build a shared libperl.$so (y/n)"
5310         . ./myread
5311         case "$ans" in
5312         true|$define|[Yy]*)
5313                 useshrplib='true'
5314                 # Why does next4 have to be so different?
5315                 case "${osname}${osvers}" in
5316                 next4*) xxx='DYLD_LIBRARY_PATH' ;;
5317                 os2*)   xxx='' ;; # Nothing special needed.
5318                 beos*)  xxx='' ;;
5319                 *)              xxx='LD_LIBRARY_PATH' ;;
5320                 esac
5321                 if test X"$xxx" != "X"; then
5322                         $cat <<EOM  | $tee -a ../config.msg >&4
5323
5324 To build perl, you must add the current working directory to your
5325 $xxx environment variable before running make.  You can do
5326 this with
5327    $xxx=\`pwd\`:\$$xxx; export $xxx
5328 for Bourne-style shells, or
5329    setenv $xxx \`pwd\`
5330 for Csh-style shells.  You *MUST* do this before running make.
5331
5332 EOM
5333                 fi
5334                 ;;
5335         *)      useshrplib='false' ;;
5336         esac
5337         ;;
5338 esac
5339
5340 case "$useshrplib" in
5341 true)
5342         case "$libperl" in
5343         '')
5344                 # Figure out a good name for libperl.so.  Since it gets stored in
5345                 # a version-specific architecture-dependent library, the version
5346                 # number isn't really that important, except for making cc/ld happy.
5347                 #
5348                 # A name such as libperl.so.3.1
5349                 majmin="libperl.$so.$patchlevel.$subversion"
5350                 # A name such as libperl.so.301
5351                 majonly=`echo $patchlevel $subversion |
5352                         $awk '{printf "%d%02d", $1, $2}'`
5353                 majonly=libperl.$so.$majonly
5354                 # I'd prefer to keep the os-specific stuff here to a minimum, and
5355                 # rely on figuring it out from the naming of libc.
5356                 case "${osname}${osvers}" in
5357                 next4*)
5358                         dflt=libperl.5.$so
5359                         # XXX How handle the --version stuff for MAB?
5360                         ;;
5361                 linux*)  # ld won't link with a bare -lperl otherwise.
5362                         dflt=libperl.$so
5363                         ;;
5364                 *)      # Try to guess based on whether libc has major.minor.
5365                         case "$libc" in
5366                         *libc.$so.[0-9]*.[0-9]*) dflt=$majmin ;;
5367                         *libc.$so.[0-9]*) dflt=$majonly ;;
5368                         *)      dflt=libperl.$so ;;
5369                         esac
5370                         ;;
5371                 esac
5372                 ;;
5373         *)      dflt=$libperl
5374                 ;;
5375         esac
5376         cat << EOM
5377
5378 I need to select a good name for the shared libperl.  If your system uses
5379 library names with major and minor numbers, then you might want something
5380 like $majmin.  Alternatively, if your system uses a single version
5381 number for shared libraries, then you might want to use $majonly.
5382 Or, your system might be quite happy with a simple libperl.$so.
5383
5384 Since the shared libperl will get installed into a version-specific
5385 architecture-dependent directory, the version number of the shared perl
5386 library probably isn't important, so the default should be o.k.
5387
5388 EOM
5389         rp='What name do you want to give to the shared libperl?'
5390         . ./myread
5391         libperl=$ans
5392         echo "Ok, I'll use $libperl"
5393         ;;
5394 *)
5395         libperl="libperl${_a}"
5396         ;;
5397 esac
5398
5399 # Detect old use of shrpdir via undocumented Configure -Dshrpdir
5400 case "$shrpdir" in
5401 '') ;;
5402 *)      $cat >&4 <<EOM
5403 WARNING:  Use of the shrpdir variable for the installation location of
5404 the shared $libperl is not supported.  It was never documented and
5405 will not work in this version.  Let me (perlbug@perl.com)
5406 know of any problems this may cause.
5407
5408 EOM
5409         case "$shrpdir" in
5410         "$archlibexp/CORE")
5411                 $cat >&4 <<EOM
5412 But your current setting of $shrpdir is
5413 the default anyway, so it's harmless.
5414 EOM
5415                 ;;
5416         *)
5417                 $cat >&4 <<EOM
5418 Further, your current attempted setting of $shrpdir
5419 conflicts with the value of $archlibexp/CORE
5420 that installperl will use.
5421 EOM
5422                 ;;
5423         esac
5424         ;;
5425 esac
5426
5427 # How will the perl executable find the installed shared $libperl?
5428 # Add $xxx to ccdlflags.
5429 # If we can't figure out a command-line option, use $shrpenv to
5430 # set env LD_RUN_PATH.  The main perl makefile uses this.
5431 shrpdir=$archlibexp/CORE
5432 xxx=''
5433 tmp_shrpenv=''
5434 if "$useshrplib"; then
5435     case "$osname" in 
5436         aix)
5437                 # We'll set it in Makefile.SH...
5438                 ;;
5439         solaris|netbsd)
5440                 xxx="-R $shrpdir"
5441                 ;;
5442         freebsd)
5443                 xxx="-Wl,-R$shrpdir"
5444                 ;;
5445         linux|irix*|dec_osf)
5446                 xxx="-Wl,-rpath,$shrpdir"
5447                 ;;
5448         next)
5449                 # next doesn't like the default...
5450                 ;;
5451         beos)
5452                 # beos doesn't like the default, either.
5453                 ;;
5454         *)
5455                 tmp_shrpenv="env LD_RUN_PATH=$shrpdir"
5456                 ;;
5457         esac
5458         case "$xxx" in
5459         '') ;;
5460         *)      
5461                 # Only add $xxx if it isn't already in ccdlflags.
5462                 case " $ccdlflags " in
5463                 *" $xxx "*)     ;;
5464                 *)      ccdlflags="$ccdlflags $xxx"
5465                         cat <<EOM >&4
5466
5467 Adding $xxx to the flags
5468 passed to $ld so that the perl executable will find the 
5469 installed shared $libperl.
5470
5471 EOM
5472                         ;;
5473                 esac
5474                 ;;
5475         esac
5476 fi
5477 # Respect a hint or command-line value.
5478 case "$shrpenv" in
5479 '') shrpenv="$tmp_shrpenv" ;;
5480 esac
5481
5482 : determine where manual pages go
5483 set man1dir man1dir none
5484 eval $prefixit
5485 $cat <<EOM
5486
5487 $spackage has manual pages available in source form.
5488 EOM
5489 case "$nroff" in
5490 nroff)
5491         echo "However, you don't have nroff, so they're probably useless to you."
5492         case "$man1dir" in
5493         '') man1dir="none";;
5494         esac;;
5495 esac
5496 echo "If you don't want the manual sources installed, answer 'none'."
5497 case "$man1dir" in
5498 ' ') dflt=none
5499         ;;
5500 '')
5501         lookpath="$prefixexp/man/man1 $prefixexp/man/l_man/man1"
5502         lookpath="$lookpath $prefixexp/man/p_man/man1"
5503         lookpath="$lookpath $prefixexp/man/u_man/man1"
5504         lookpath="$lookpath $prefixexp/man/man.1"
5505         case "$sysman" in
5506         */?_man*)       dflt=`./loc . $prefixexp/l_man/man1 $lookpath` ;;
5507         *)      dflt=`./loc . $prefixexp/man/man1 $lookpath` ;;
5508         esac
5509         set dflt
5510         eval $prefixup
5511         ;;
5512 *)  dflt="$man1dir"
5513         ;;
5514 esac
5515 echo " "
5516 fn=dn+~
5517 rp="Where do the main $spackage manual pages (source) go?"
5518 . ./getfile
5519 if $test "X$man1direxp" != "X$ansexp"; then
5520         installman1dir=''
5521 fi
5522 man1dir="$ans"
5523 man1direxp="$ansexp"
5524 case "$man1dir" in
5525 '') man1dir=' '
5526         installman1dir='';;
5527 esac
5528 if $afs; then
5529         $cat <<EOM
5530
5531 Since you are running AFS, I need to distinguish the directory in which
5532 manual pages reside from the directory in which they are installed (and from
5533 which they are presumably copied to the former directory by occult means).
5534
5535 EOM
5536         case "$installman1dir" in
5537         '') dflt=`echo $man1direxp | sed 's#^/afs/#/afs/.#'`;;
5538         *) dflt="$installman1dir";;
5539         esac
5540         fn=de~
5541         rp='Where will man pages be installed?'
5542         . ./getfile
5543         installman1dir="$ans"
5544 else
5545         installman1dir="$man1direxp"
5546 fi
5547
5548 : What suffix to use on installed man pages
5549
5550 case "$man1dir" in
5551 ' ')
5552         man1ext='0'
5553         ;;
5554 *)
5555         rp="What suffix should be used for the main $spackage man pages?"
5556         case "$man1ext" in
5557         '')     case "$man1dir" in
5558                 *1)  dflt=1 ;;
5559                 *1p) dflt=1p ;;
5560                 *1pm) dflt=1pm ;;
5561                 *l) dflt=l;;
5562                 *n) dflt=n;;
5563                 *o) dflt=o;;
5564                 *p) dflt=p;;
5565                 *C) dflt=C;;
5566                 *L) dflt=L;;
5567                 *L1) dflt=L1;;
5568                 *) dflt=1;;
5569                 esac
5570                 ;;
5571         *)      dflt="$man1ext";;
5572         esac
5573         . ./myread
5574         man1ext="$ans"
5575         ;;
5576 esac
5577
5578 : see if we can have long filenames
5579 echo " "
5580 rmlist="$rmlist /tmp/cf$$"
5581 $test -d /tmp/cf$$ || mkdir /tmp/cf$$
5582 first=123456789abcdef
5583 second=/tmp/cf$$/$first
5584 $rm -f $first $second
5585 if (echo hi >$first) 2>/dev/null; then
5586         if $test -f 123456789abcde; then
5587                 echo 'You cannot have filenames longer than 14 characters.  Sigh.' >&4
5588                 val="$undef"
5589         else
5590                 if (echo hi >$second) 2>/dev/null; then
5591                         if $test -f /tmp/cf$$/123456789abcde; then
5592                                 $cat <<'EOM'
5593 That's peculiar... You can have filenames longer than 14 characters, but only
5594 on some of the filesystems.  Maybe you are using NFS.  Anyway, to avoid problems
5595 I shall consider your system cannot support long filenames at all.
5596 EOM
5597                                 val="$undef"
5598                         else
5599                                 echo 'You can have filenames longer than 14 characters.' >&4
5600                                 val="$define"
5601                         fi
5602                 else
5603                         $cat <<'EOM'
5604 How confusing! Some of your filesystems are sane enough to allow filenames
5605 longer than 14 characters but some others like /tmp can't even think about them.
5606 So, for now on, I shall assume your kernel does not allow them at all.
5607 EOM
5608                         val="$undef"
5609                 fi
5610         fi
5611 else
5612         $cat <<'EOM'
5613 You can't have filenames longer than 14 chars.  You can't even think about them!
5614 EOM
5615         val="$undef"
5616 fi 
5617 set d_flexfnam
5618 eval $setvar
5619 $rm -rf /tmp/cf$$ 123456789abcde*
5620
5621 : determine where library module manual pages go
5622 set man3dir man3dir none
5623 eval $prefixit
5624 $cat <<EOM
5625
5626 $spackage has manual pages for many of the library modules.
5627 EOM
5628
5629 case "$nroff" in
5630 nroff)
5631         $cat <<'EOM'
5632 However, you don't have nroff, so they're probably useless to you.
5633 EOM
5634         case "$man3dir" in
5635         '') man3dir="none";;
5636         esac;;
5637 esac
5638
5639 case "$d_flexfnam" in
5640 undef)
5641         $cat <<'EOM'
5642 However, your system can't handle the long file names like File::Basename.3. 
5643 EOM
5644         case "$man3dir" in
5645         '') man3dir="none";;
5646         esac;;
5647 esac
5648
5649 echo "If you don't want the manual sources installed, answer 'none'."
5650 prog=`echo $package | $sed 's/-*[0-9.]*$//'`
5651 case "$man3dir" in
5652 '')     case "$prefix" in 
5653         *$prog*) dflt=`echo $man1dir | 
5654                         $sed -e 's/man1/man3/g' -e 's/man\.1/man\.3/g'` ;;
5655         *)      dflt="$privlib/man/man3" ;;
5656         esac
5657         ;;
5658 ' ') dflt=none;;
5659 *)      dflt="$man3dir" ;;
5660 esac
5661 echo " "
5662
5663 fn=dn+~
5664 rp="Where do the $package library man pages (source) go?"
5665 . ./getfile
5666 if test "X$man3direxp" != "X$ansexp"; then
5667         installman3dir=''
5668 fi
5669
5670 man3dir="$ans"
5671 man3direxp="$ansexp"
5672 case "$man3dir" in
5673 '') man3dir=' '
5674         installman3dir='';;
5675 esac
5676 if $afs; then
5677         $cat <<EOM
5678
5679 Since you are running AFS, I need to distinguish the directory in which
5680 manual pages reside from the directory in which they are installed (and from
5681 which they are presumably copied to the former directory by occult means).
5682
5683 EOM
5684         case "$installman3dir" in
5685         '') dflt=`echo $man3direxp | sed 's#^/afs/#/afs/.#'`;;
5686         *) dflt="$installman3dir";;
5687         esac
5688         fn=de~
5689         rp='Where will man pages be installed?'
5690         . ./getfile
5691         installman3dir="$ans"
5692 else
5693         installman3dir="$man3direxp"
5694 fi
5695
5696 : What suffix to use on installed man pages
5697
5698 case "$man3dir" in
5699 ' ')
5700         man3ext='0'
5701         ;;
5702 *)
5703         rp="What suffix should be used for the $package library man pages?"
5704         case "$man3ext" in
5705         '')     case "$man3dir" in
5706                 *3)  dflt=3 ;;
5707                 *3p) dflt=3p ;;
5708                 *3pm) dflt=3pm ;;
5709                 *l) dflt=l;;
5710                 *n) dflt=n;;
5711                 *o) dflt=o;;
5712                 *p) dflt=p;;
5713                 *C) dflt=C;;
5714                 *L) dflt=L;;
5715                 *L3) dflt=L3;;
5716                 *) dflt=3;;
5717                 esac
5718                 ;;
5719         *)      dflt="$man3ext";;
5720         esac
5721         . ./myread
5722         man3ext="$ans"
5723         ;;
5724 esac
5725
5726 : see if we have to deal with yellow pages, now NIS.
5727 if $test -d /usr/etc/yp || $test -d /etc/yp; then
5728         if $test -f /usr/etc/nibindd; then
5729                 echo " "
5730                 echo "I'm fairly confident you're on a NeXT."
5731                 echo " "
5732                 rp='Do you get the hosts file via NetInfo?'
5733                 dflt=y
5734                 case "$hostcat" in
5735                 nidump*) ;;
5736                 '') ;;
5737                 *) dflt=n;;
5738                 esac
5739                 . ./myread
5740                 case "$ans" in
5741                 y*) hostcat='nidump hosts .';;
5742                 *)      case "$hostcat" in
5743                         nidump*) hostcat='';;
5744                         esac
5745                         ;;
5746                 esac
5747         fi
5748         case "$hostcat" in
5749         nidump*) ;;
5750         *)
5751                 case "$hostcat" in
5752                 *ypcat*) dflt=y;;
5753                 '') if $contains '^\+' /etc/passwd >/dev/null 2>&1; then
5754                                 dflt=y
5755                         else
5756                                 dflt=n
5757                         fi;;
5758                 *) dflt=n;;
5759                 esac
5760                 echo " "
5761                 rp='Are you getting the hosts file via yellow pages?'
5762                 . ./myread
5763                 case "$ans" in
5764                 y*) hostcat='ypcat hosts';;
5765                 *) hostcat='cat /etc/hosts';;
5766                 esac
5767                 ;;
5768         esac
5769 fi
5770 case "$hostcat" in
5771 '') hostcat='cat /etc/hosts';;
5772 esac
5773 case "$groupcat" in
5774 '') groupcat='cat /etc/group';;
5775 esac
5776 case "$passcat" in
5777 '') passcat='cat /etc/passwd';;
5778 esac
5779
5780 : now get the host name
5781 echo " "
5782 echo "Figuring out host name..." >&4
5783 case "$myhostname" in
5784 '') cont=true
5785         echo 'Maybe "hostname" will work...'
5786         if tans=`sh -c hostname 2>&1` ; then
5787                 myhostname=$tans
5788                 phostname=hostname
5789                 cont=''
5790         fi
5791         ;;
5792 *) cont='';;
5793 esac
5794 if $test "$cont"; then
5795         if ./xenix; then
5796                 echo 'Oh, dear.  Maybe "/etc/systemid" is the key...'
5797                 if tans=`cat /etc/systemid 2>&1` ; then
5798                         myhostname=$tans
5799                         phostname='cat /etc/systemid'
5800                         echo "Whadyaknow.  Xenix always was a bit strange..."
5801                         cont=''
5802                 fi
5803         elif $test -r /etc/systemid; then
5804                 echo "(What is a non-Xenix system doing with /etc/systemid?)"
5805         fi
5806 fi
5807 if $test "$cont"; then
5808         echo 'No, maybe "uuname -l" will work...'
5809         if tans=`sh -c 'uuname -l' 2>&1` ; then
5810                 myhostname=$tans
5811                 phostname='uuname -l'
5812         else
5813                 echo 'Strange.  Maybe "uname -n" will work...'
5814                 if tans=`sh -c 'uname -n' 2>&1` ; then
5815                         myhostname=$tans
5816                         phostname='uname -n'
5817                 else
5818                         echo 'Oh well, maybe I can mine it out of whoami.h...'
5819                         if tans=`sh -c $contains' sysname $usrinc/whoami.h' 2>&1` ; then
5820                                 myhostname=`echo "$tans" | $sed 's/^.*"\(.*\)"/\1/'`
5821                                 phostname="sed -n -e '"'/sysname/s/^.*\"\\(.*\\)\"/\1/{'"' -e p -e q -e '}' <$usrinc/whoami.h"
5822                         else
5823                                 case "$myhostname" in
5824                                 '') echo "Does this machine have an identity crisis or something?"
5825                                         phostname='';;
5826                                 *)
5827                                         echo "Well, you said $myhostname before..."
5828                                         phostname='echo $myhostname';;
5829                                 esac
5830                         fi
5831                 fi
5832         fi
5833 fi
5834 : you do not want to know about this
5835 set $myhostname
5836 myhostname=$1
5837
5838 : verify guess
5839 if $test "$myhostname" ; then
5840         dflt=y
5841         rp='Your host name appears to be "'$myhostname'".'" Right?"
5842         . ./myread
5843         case "$ans" in
5844         y*) ;;
5845         *) myhostname='';;
5846         esac
5847 fi
5848
5849 : bad guess or no guess
5850 while $test "X$myhostname" = X ; do
5851         dflt=''
5852         rp="Please type the (one word) name of your host:"
5853         . ./myread
5854         myhostname="$ans"
5855 done
5856
5857 : translate upper to lower if necessary
5858 case "$myhostname" in
5859 *[A-Z]*)
5860         echo "(Normalizing case in your host name)"
5861         myhostname=`echo $myhostname | ./tr '[A-Z]' '[a-z]'`
5862         ;;
5863 esac
5864
5865 case "$myhostname" in
5866 *.*)
5867         dflt=`expr "X$myhostname" : "X[^.]*\(\..*\)"`
5868         myhostname=`expr "X$myhostname" : "X\([^.]*\)\."`
5869         echo "(Trimming domain name from host name--host name is now $myhostname)"
5870         ;;
5871 *) case "$mydomain" in
5872         '')
5873                 {
5874                         test "X$hostcat" = "Xypcat hosts" &&
5875                         ypmatch "$myhostname" hosts 2>/dev/null |\
5876                                 $sed -e 's/[     ]*#.*//; s/$/ /' > hosts && \
5877                         $test -s hosts
5878                 } || {
5879                         $hostcat | $sed -n -e "s/[       ]*#.*//; s/\$/ /
5880                                         /[       ]$myhostname[  . ]/p" > hosts
5881                 }
5882                 tmp_re="[       . ]"
5883                 $test x`$awk "/[0-9].*[  ]$myhostname$tmp_re/ { sum++ }
5884                              END { print sum }" hosts` = x1 || tmp_re="[         ]"
5885                 dflt=.`$awk "/[0-9].*[   ]$myhostname$tmp_re/ {for(i=2; i<=NF;i++) print \\\$i}" \
5886                         hosts | $sort | $uniq | \
5887                         $sed -n -e "s/$myhostname\.\([-a-zA-Z0-9_.]\)/\1/p"`
5888                 case `$echo X$dflt` in
5889                 X*\ *)  echo "(Several hosts in /etc/hosts matched hostname)"
5890                         dflt=.
5891                         ;;
5892                 X.) echo "(You do not have fully-qualified names in /etc/hosts)"
5893                         ;;
5894                 esac
5895                 case "$dflt" in
5896                 .)
5897                         tans=`./loc resolv.conf X /etc /usr/etc`
5898                         if $test -f "$tans"; then
5899                                 echo "(Attempting domain name extraction from $tans)"
5900                                 dflt=.`$sed -n -e 's/   / /g' \
5901                                   -e 's/^search  *\([^ ]*\).*/\1/p' $tans \
5902                                   | ./tr '[A-Z]' '[a-z]' 2>/dev/null`
5903                                 case "$dflt" in
5904                                 .) dflt=.`$sed -n -e 's/        / /g' \
5905                                      -e 's/^domain  *\([^ ]*\).*/\1/p' $tans \
5906                                      | ./tr '[A-Z]' '[a-z]' 2>/dev/null`
5907                                         ;;
5908                                 esac
5909                         fi
5910                         ;;
5911                 esac
5912                 case "$dflt" in
5913                 .) echo "(No help from resolv.conf either -- attempting clever guess)"
5914                         dflt=.`sh -c domainname 2>/dev/null`
5915                         case "$dflt" in
5916                         '') dflt='.';;
5917                         .nis.*|.yp.*|.main.*) dflt=`echo $dflt | $sed -e 's/^\.[^.]*//'`;;
5918                         esac
5919                         ;;
5920                 esac
5921                 case "$dflt" in
5922                 .) echo "(Lost all hope -- silly guess then)"
5923                         dflt='.uucp'
5924                         ;;
5925                 esac
5926                 $rm -f hosts
5927                 ;;
5928         *) dflt="$mydomain";;
5929         esac;;
5930 esac
5931 echo " "
5932 rp="What is your domain name?"
5933 . ./myread
5934 tans="$ans"
5935 case "$ans" in
5936 '') ;;
5937 .*) ;;
5938 *) tans=".$tans";;
5939 esac
5940 mydomain="$tans"
5941
5942 : translate upper to lower if necessary
5943 case "$mydomain" in
5944 *[A-Z]*)
5945         echo "(Normalizing case in your domain name)"
5946         mydomain=`echo $mydomain | ./tr '[A-Z]' '[a-z]'`
5947         ;;
5948 esac
5949
5950 : a little sanity check here
5951 case "$phostname" in
5952 '') ;;
5953 *)
5954         case `$phostname | ./tr '[A-Z]' '[a-z]'` in
5955         $myhostname$mydomain|$myhostname) ;;
5956         *)
5957                 case "$phostname" in
5958                 sed*)
5959                         echo "(That doesn't agree with your whoami.h file, by the way.)"
5960                         ;;
5961                 *)
5962                         echo "(That doesn't agree with your $phostname command, by the way.)"
5963                         ;;
5964                 esac
5965         ;;
5966         esac
5967         ;;
5968 esac
5969
5970 $cat <<EOM
5971
5972 I need to get your e-mail address in Internet format if possible, i.e.
5973 something like user@host.domain. Please answer accurately since I have
5974 no easy means to double check it. The default value provided below
5975 is most probably close to the reality but may not be valid from outside
5976 your organization...
5977
5978 EOM
5979 cont=x
5980 while test "$cont"; do
5981         case "$cf_email" in
5982         '') dflt="$cf_by@$myhostname$mydomain";;
5983         *) dflt="$cf_email";;
5984         esac
5985         rp='What is your e-mail address?'
5986         . ./myread
5987         cf_email="$ans"
5988         case "$cf_email" in
5989         *@*.*) cont='' ;;
5990         *)
5991                 rp='Address does not look like an Internet one.  Use it anyway?'
5992                 case "$fastread" in
5993                 yes) dflt=y ;;
5994                 *) dflt=n ;;
5995                 esac
5996                 . ./myread
5997                 case "$ans" in
5998                 y*) cont='' ;;
5999                 *) echo " " ;;
6000                 esac
6001                 ;;
6002         esac
6003 done
6004
6005 $cat <<EOM
6006
6007 If you or somebody else will be maintaining perl at your site, please
6008 fill in the correct e-mail address here so that they may be contacted
6009 if necessary. Currently, the "perlbug" program included with perl
6010 will send mail to this address in addition to perlbug@perl.com. You may
6011 enter "none" for no administrator.
6012
6013 EOM
6014 case "$perladmin" in
6015 '') dflt="$cf_email";;
6016 *) dflt="$perladmin";;
6017 esac
6018 rp='Perl administrator e-mail address'
6019 . ./myread
6020 perladmin="$ans"
6021
6022 : figure out how to guarantee perl startup
6023 case "$startperl" in
6024 '')
6025         case "$sharpbang" in
6026         *!)
6027                 $cat <<EOH
6028
6029 I can use the #! construct to start perl on your system. This will
6030 make startup of perl scripts faster, but may cause problems if you
6031 want to share those scripts and perl is not in a standard place
6032 ($binexp/perl) on all your platforms. The alternative is to force
6033 a shell by starting the script with a single ':' character.
6034
6035 EOH
6036                 dflt="$binexp/perl"
6037                 rp='What shall I put after the #! to start up perl ("none" to not use #!)?'
6038                 . ./myread
6039                 case "$ans" in
6040                 none)   startperl=": # use perl";;
6041                 *)      startperl="#!$ans"
6042                         if $test 30 -lt `echo "$ans" | wc -c`; then
6043                                 $cat >&4 <<EOM
6044
6045 WARNING:  Some systems limit the #! command to 32 characters.
6046 If you experience difficulty running Perl scripts with #!, try
6047 installing Perl in a directory with a shorter pathname.
6048
6049 EOM
6050                         fi ;;
6051                 esac
6052                 ;;
6053         *) startperl=": # use perl"
6054                 ;;
6055         esac
6056         ;;
6057 esac
6058 echo "I'll use $startperl to start perl scripts."
6059
6060 : figure best path for perl in scripts
6061 case "$perlpath" in
6062 '')
6063         perlpath="$binexp/perl"
6064         case "$startperl" in
6065         *!*) ;;
6066         *)
6067                 $cat <<EOH
6068
6069 I will use the "eval 'exec'" idiom to start Perl on your system.
6070 I can use the full path of your Perl binary for this purpose, but
6071 doing so may cause problems if you want to share those scripts and
6072 Perl is not always in a standard place ($binexp/perl).
6073
6074 EOH
6075                 dflt="$binexp/perl"
6076                 rp="What path shall I use in \"eval 'exec'\"?"
6077                 . ./myread
6078                 perlpath="$ans"
6079                 ;;
6080         esac
6081         ;;
6082 esac
6083 case "$startperl" in
6084 *!*)    ;;
6085 *)      echo "I'll use $perlpath in \"eval 'exec'\"" ;;
6086 esac
6087
6088 : determine where public executable scripts go
6089 set scriptdir scriptdir
6090 eval $prefixit
6091 case "$scriptdir" in
6092 '')
6093         dflt="$bin"
6094         : guess some guesses
6095         $test -d /usr/share/scripts && dflt=/usr/share/scripts
6096         $test -d /usr/share/bin && dflt=/usr/share/bin
6097         $test -d /usr/local/script && dflt=/usr/local/script
6098         $test -d $prefixexp/script && dflt=$prefixexp/script
6099         set dflt
6100         eval $prefixup
6101         ;;
6102 *)  dflt="$scriptdir"
6103         ;;
6104 esac
6105 $cat <<EOM
6106  
6107 Some installations have a separate directory just for executable scripts so
6108 that they can mount it across multiple architectures but keep the scripts in
6109 one spot.  You might, for example, have a subdirectory of /usr/share for this.
6110 Or you might just lump your scripts in with all your other executables.
6111  
6112 EOM
6113 fn=d~
6114 rp='Where do you keep publicly executable scripts?'
6115 . ./getfile
6116 if $test "X$ansexp" != "X$scriptdirexp"; then
6117         installscript=''
6118 fi
6119 scriptdir="$ans"
6120 scriptdirexp="$ansexp"
6121 if $afs; then
6122         $cat <<EOM
6123
6124 Since you are running AFS, I need to distinguish the directory in which
6125 scripts reside from the directory in which they are installed (and from
6126 which they are presumably copied to the former directory by occult means).
6127
6128 EOM
6129         case "$installscript" in
6130         '') dflt=`echo $scriptdirexp | sed 's#^/afs/#/afs/.#'`;;
6131         *) dflt="$installscript";;
6132         esac
6133         fn=de~
6134         rp='Where will public scripts be installed?'
6135         . ./getfile
6136         installscript="$ans"
6137 else
6138         installscript="$scriptdirexp"
6139 fi
6140
6141 : determine where site specific libraries go.
6142 : Usual default is /usr/local/lib/perl5/site_perl/$apiversion
6143 prog=`echo $package | $sed 's/-*[0-9.]*$//'`
6144 case "$prefix" in
6145 *perl*) set dflt sitelib lib/site_$prog/$apiversion ;;
6146 *)       set dflt sitelib lib/$package/site_$prog/$apiversion ;;
6147 esac
6148 eval $prefixit
6149 $cat <<EOM
6150
6151 The installation process will also create a directory for
6152 site-specific extensions and modules.  Some users find it convenient
6153 to place all site-specific files in this directory rather than in the
6154 main distribution directory.
6155
6156 EOM
6157 fn=d~+
6158 rp='Pathname for the site-specific library files?'
6159 . ./getfile
6160 if $test "X$sitelibexp" != "X$ansexp"; then
6161         installsitelib=''
6162 fi
6163 sitelib="$ans"
6164 sitelibexp="$ansexp"
6165 if $afs; then
6166         $cat <<EOM
6167
6168 Since you are running AFS, I need to distinguish the directory in
6169 which site-specific files reside from the directory in which they are
6170 installed (and from which they are presumably copied to the former
6171 directory by occult means).
6172
6173 EOM
6174         case "$installsitelib" in
6175         '') dflt=`echo $sitelibexp | sed 's#^/afs/#/afs/.#'`;;
6176         *) dflt="$installsitelib";;
6177         esac
6178         fn=de~
6179         rp='Where will site-specific files be installed?'
6180         . ./getfile
6181         installsitelib="$ans"
6182 else
6183         installsitelib="$sitelibexp"
6184 fi
6185
6186 : determine where site specific architecture-dependent libraries go.
6187 : sitelib  default is /usr/local/lib/perl5/site_perl/$apiversion
6188 : sitearch default is /usr/local/lib/perl5/site_perl/$apiversion/$archname
6189 : sitelib may have an optional trailing /share.
6190 tdflt=`echo $sitelib | $sed 's,/share$,,'`
6191 tdflt="$tdflt/$archname"
6192 set sitearch sitearch none
6193 eval $prefixit
6194 case "$sitearch" in
6195 '')     dflt="$tdflt" ;;
6196 *)      dflt="$sitearch" ;;
6197 esac
6198 $cat <<EOM
6199
6200 The installation process will also create a directory for
6201 architecture-dependent site-specific extensions and modules.
6202
6203 EOM
6204 fn=nd~+
6205 rp='Pathname for the site-specific architecture-dependent library files?'
6206 . ./getfile
6207 if $test "X$sitearchexp" != "X$ansexp"; then
6208         installsitearch=''
6209 fi
6210 sitearch="$ans"
6211 sitearchexp="$ansexp"
6212 if $afs; then
6213         $cat <<EOM
6214
6215 Since you are running AFS, I need to distinguish the directory in
6216 which site-specific architecture-dependent library files reside from
6217 the directory in which they are installed (and from which they are
6218 presumably copied to the former directory by occult means).
6219
6220 EOM
6221         case "$installsitearch" in
6222         '') dflt=`echo $sitearchexp | sed 's#^/afs/#/afs/.#'`;;
6223         *) dflt="$installsitearch";;
6224         esac
6225         fn=de~
6226         rp='Where will site-specific architecture-dependent files be installed?'
6227         . ./getfile
6228         installsitearch="$ans"
6229 else
6230         installsitearch="$sitearchexp"
6231 fi
6232
6233 cat <<EOM
6234
6235 Previous version of $package used the standard IO mechanisms as defined
6236 in <stdio.h>.  Versions 5.003_02 and later of perl allow alternate IO
6237 mechanisms via a "PerlIO" abstraction, but the stdio mechanism is still
6238 the default.  This abstraction layer can use AT&T's sfio (if you already
6239 have sfio installed) or regular stdio.  Using PerlIO with sfio may cause
6240 problems with some extension modules.  Using PerlIO with stdio is safe,
6241 but it is slower than plain stdio and therefore is not the default.
6242
6243 If this doesn't make any sense to you, just accept the default 'n'.
6244 EOM
6245 case "$useperlio" in
6246 $define|true|[yY]*)     dflt='y';;
6247 *) dflt='n';;
6248 esac
6249 rp='Use the experimental PerlIO abstraction layer?'
6250 . ./myread
6251 case "$ans" in
6252 y|Y) 
6253         val="$define"
6254         ;;     
6255 *)      
6256         echo "Ok, doing things the stdio way"
6257         val="$undef"
6258         ;;
6259 esac
6260 set useperlio
6261 eval $setvar 
6262
6263 : Check how to convert floats to strings.
6264 if test "X$d_Gconvert" = X; then
6265         echo " "
6266         echo "Checking for an efficient way to convert floats to strings."
6267         $cat >try.c <<'EOP'
6268 #ifdef TRY_gconvert
6269 #define Gconvert(x,n,t,b) gconvert((x),(n),(t),(b))
6270 char *myname = "gconvert";
6271 #endif
6272 #ifdef TRY_gcvt
6273 #define Gconvert(x,n,t,b) gcvt((x),(n),(b))
6274 char *myname = "gcvt";
6275 #endif
6276 #ifdef TRY_sprintf
6277 #define Gconvert(x,n,t,b) sprintf((b),"%.*g",(n),(x))
6278 char *myname = "sprintf";
6279 #endif
6280
6281 #include <stdio.h>
6282
6283 int
6284 checkit(expect, got)
6285 char *expect;
6286 char *got;
6287 {
6288     if (strcmp(expect, got)) {
6289                 printf("%s oddity:  Expected %s, got %s\n",
6290                         myname, expect, got);
6291                 exit(1);
6292         }
6293 }
6294
6295 int main()
6296
6297         char buf[64]; 
6298         buf[63] = '\0';
6299
6300         /* This must be 1st test on (which?) platform */
6301         /* Alan Burlison <AlanBurlsin@unn.unisys.com> */
6302         Gconvert(0.1, 8, 0, buf);
6303         checkit("0.1", buf);
6304
6305         Gconvert(1.0, 8, 0, buf); 
6306         checkit("1", buf);
6307
6308         Gconvert(0.0, 8, 0, buf); 
6309         checkit("0", buf);
6310
6311         Gconvert(-1.0, 8, 0, buf); 
6312         checkit("-1", buf);
6313
6314         /* Some Linux gcvt's give 1.e+5 here. */
6315         Gconvert(100000.0, 8, 0, buf); 
6316         checkit("100000", buf);
6317         
6318         /* Some Linux gcvt's give -1.e+5 here. */
6319         Gconvert(-100000.0, 8, 0, buf); 
6320         checkit("-100000", buf);
6321
6322         exit(0);
6323 }
6324 EOP
6325         case "$d_Gconvert" in
6326         gconvert*) xxx_list='gconvert gcvt sprintf' ;;
6327         gcvt*) xxx_list='gcvt gconvert sprintf' ;;
6328         sprintf*) xxx_list='sprintf gconvert gcvt' ;;
6329         *) xxx_list='gconvert gcvt sprintf' ;;
6330         esac
6331
6332         for xxx_convert in $xxx_list; do
6333                 echo "Trying $xxx_convert"
6334                 $rm -f try try$_o
6335                 set try -DTRY_$xxx_convert
6336                 if eval $compile; then
6337                         echo "$xxx_convert" found. >&4
6338                         if ./try; then
6339                                 echo "I'll use $xxx_convert to convert floats into a string." >&4
6340                                 break;
6341                         else
6342                                 echo "...But $xxx_convert didn't work as I expected."
6343                         fi
6344                 else
6345                         echo "$xxx_convert NOT found." >&4
6346                 fi
6347         done
6348                 
6349         case "$xxx_convert" in
6350         gconvert) d_Gconvert='gconvert((x),(n),(t),(b))' ;;
6351         gcvt) d_Gconvert='gcvt((x),(n),(b))' ;;
6352         *) d_Gconvert='sprintf((b),"%.*g",(n),(x))' ;;
6353         esac
6354 fi
6355
6356 : Initialize h_fcntl
6357 h_fcntl=false
6358
6359 : Initialize h_sysfile
6360 h_sysfile=false
6361
6362 : access call always available on UNIX
6363 set access d_access
6364 eval $inlibc
6365
6366 : locate the flags for 'access()'
6367 case "$d_access" in
6368 "$define")
6369         echo " "
6370         $cat >access.c <<'EOCP'
6371 #include <sys/types.h>
6372 #ifdef I_FCNTL
6373 #include <fcntl.h>
6374 #endif
6375 #ifdef I_SYS_FILE
6376 #include <sys/file.h>
6377 #endif
6378 #ifdef I_UNISTD
6379 #include <unistd.h>
6380 #endif
6381 int main() {
6382         exit(R_OK);
6383 }
6384 EOCP
6385         : check sys/file.h first, no particular reason here
6386         if $test `./findhdr sys/file.h` && \
6387                 $cc $cppflags -DI_SYS_FILE -o access access.c >/dev/null 2>&1 ; then
6388                 h_sysfile=true;
6389                 echo "<sys/file.h> defines the *_OK access constants." >&4
6390         elif $test `./findhdr fcntl.h` && \
6391                 $cc $cppflags -DI_FCNTL -o access access.c >/dev/null 2>&1 ; then
6392                 h_fcntl=true;
6393                 echo "<fcntl.h> defines the *_OK access constants." >&4
6394         elif $test `./findhdr unistd.h` && \
6395                 $cc $cppflags -DI_UNISTD -o access access.c >/dev/null 2>&1 ; then
6396                 echo "<unistd.h> defines the *_OK access constants." >&4
6397         else
6398                 echo "I can't find the four *_OK access constants--I'll use mine." >&4
6399         fi
6400         ;;
6401 esac
6402 $rm -f access*
6403
6404 : see if accessx exists
6405 set accessx d_accessx
6406 eval $inlibc
6407
6408 : see if alarm exists
6409 set alarm d_alarm
6410 eval $inlibc
6411
6412 : Look for GNU-cc style attribute checking
6413 echo " "
6414 echo "Checking whether your compiler can handle __attribute__ ..." >&4
6415 $cat >attrib.c <<'EOCP'
6416 #include <stdio.h>
6417 void croak (char* pat,...) __attribute__((format(printf,1,2),noreturn));
6418 EOCP
6419 if $cc $ccflags -c attrib.c >attrib.out 2>&1 ; then
6420         if $contains 'warning' attrib.out >/dev/null 2>&1; then
6421                 echo "Your C compiler doesn't fully support __attribute__."
6422                 val="$undef"
6423         else
6424                 echo "Your C compiler supports __attribute__."
6425                 val="$define"
6426         fi
6427 else
6428         echo "Your C compiler doesn't seem to understand __attribute__ at all."
6429         val="$undef"
6430 fi
6431 set d_attribut
6432 eval $setvar
6433 $rm -f attrib*
6434
6435 : see if bcmp exists
6436 set bcmp d_bcmp
6437 eval $inlibc
6438
6439 : see if bcopy exists
6440 set bcopy d_bcopy
6441 eval $inlibc
6442
6443 : see if this is a unistd.h system
6444 set unistd.h i_unistd
6445 eval $inhdr
6446
6447 : see if getpgrp exists
6448 set getpgrp d_getpgrp
6449 eval $inlibc
6450
6451 case "$d_getpgrp" in
6452 "$define")
6453         echo " "
6454         echo "Checking to see which flavor of getpgrp is in use..."
6455         $cat >set.c <<EOP
6456 #$i_unistd I_UNISTD
6457 #include <sys/types.h>
6458 #ifdef I_UNISTD
6459 #  include <unistd.h>
6460 #endif
6461 int main()
6462 {
6463         if (getuid() == 0) {
6464                 printf("(I see you are running Configure as super-user...)\n");
6465                 setuid(1);
6466         }
6467 #ifdef TRY_BSD_PGRP
6468         if (getpgrp(1) == 0)
6469                 exit(0);
6470 #else
6471         if (getpgrp() > 0)
6472                 exit(0);
6473 #endif
6474         exit(1);
6475 }
6476 EOP
6477         if $cc -DTRY_BSD_PGRP $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1 && ./set; then
6478                 echo "You have to use getpgrp(pid) instead of getpgrp()." >&4
6479                 val="$define"
6480         elif $cc $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1 && ./set; then
6481                 echo "You have to use getpgrp() instead of getpgrp(pid)." >&4
6482                 val="$undef"
6483         else
6484                 echo "I can't seem to compile and run the test program."
6485                 if ./usg; then
6486                         xxx="a USG one, i.e. you use getpgrp()."
6487                 else
6488                         # SVR4 systems can appear rather BSD-ish.
6489                         case "$i_unistd" in
6490                         $undef)
6491                                 xxx="a BSD one, i.e. you use getpgrp(pid)."
6492                                 val="$define"
6493                                 ;;
6494                         $define)
6495                                 xxx="probably a USG one, i.e. you use getpgrp()."
6496                                 val="$undef"
6497                                 ;;
6498                         esac
6499                 fi
6500                 echo "Assuming your getpgrp is $xxx" >&4
6501         fi
6502         ;;
6503 *) val="$undef";;
6504 esac
6505 set d_bsdgetpgrp
6506 eval $setvar
6507 $rm -f set set.c
6508
6509 : see if setpgrp exists
6510 set setpgrp d_setpgrp
6511 eval $inlibc
6512
6513 case "$d_setpgrp" in
6514 "$define")
6515         echo " "
6516         echo "Checking to see which flavor of setpgrp is in use..."
6517         $cat >set.c <<EOP
6518 #$i_unistd I_UNISTD
6519 #include <sys/types.h>
6520 #ifdef I_UNISTD
6521 #  include <unistd.h>
6522 #endif
6523 int main()
6524 {
6525         if (getuid() == 0) {
6526                 printf("(I see you are running Configure as super-user...)\n");
6527                 setuid(1);
6528         }
6529 #ifdef TRY_BSD_PGRP
6530         if (-1 == setpgrp(1, 1))
6531                 exit(0);
6532 #else
6533         if (setpgrp() != -1)
6534                 exit(0);
6535 #endif
6536         exit(1);
6537 }
6538 EOP
6539         if $cc -DTRY_BSD_PGRP $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1 && ./set; then
6540                 echo 'You have to use setpgrp(pid,pgrp) instead of setpgrp().' >&4
6541                 val="$define"
6542         elif $cc $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1 && ./set; then
6543                 echo 'You have to use setpgrp() instead of setpgrp(pid,pgrp).' >&4
6544                 val="$undef"
6545         else
6546                 echo "(I can't seem to compile and run the test program.)"
6547                 if ./usg; then
6548                         xxx="a USG one, i.e. you use setpgrp()."
6549                 else
6550                         # SVR4 systems can appear rather BSD-ish.
6551                         case "$i_unistd" in
6552                         $undef)
6553                                 xxx="a BSD one, i.e. you use setpgrp(pid,pgrp)."
6554                                 val="$define"
6555                                 ;;
6556                         $define)
6557                                 xxx="probably a USG one, i.e. you use setpgrp()."
6558                                 val="$undef"
6559                                 ;;
6560                         esac
6561                 fi
6562                 echo "Assuming your setpgrp is $xxx" >&4
6563         fi
6564         ;;
6565 *) val="$undef";;
6566 esac
6567 set d_bsdsetpgrp
6568 eval $setvar
6569 $rm -f set set.c
6570 : see if bzero exists
6571 set bzero d_bzero
6572 eval $inlibc
6573
6574 : check for lengths of integral types
6575 echo " "
6576 case "$intsize" in
6577 '')
6578         echo "Checking to see how big your integers are..." >&4
6579         $cat >intsize.c <<'EOCP'
6580 #include <stdio.h>
6581 int main()
6582 {
6583         printf("intsize=%d;\n", sizeof(int));
6584         printf("longsize=%d;\n", sizeof(long));
6585         printf("shortsize=%d;\n", sizeof(short));
6586         exit(0);
6587 }
6588 EOCP
6589         set intsize
6590         if eval $compile_ok && ./intsize > /dev/null; then
6591                 eval `./intsize`
6592                 echo "Your integers are $intsize bytes long."
6593                 echo "Your long integers are $longsize bytes long."
6594                 echo "Your short integers are $shortsize bytes long."
6595         else
6596                 $cat >&4 <<EOM
6597 !
6598 Help! I can't compile and run the intsize test program: please enlighten me!
6599 (This is probably a misconfiguration in your system or libraries, and
6600 you really ought to fix it.  Still, I'll try anyway.)
6601 !
6602 EOM
6603                 dflt=4
6604                 rp="What is the size of an integer (in bytes)?"
6605                 . ./myread
6606                 intsize="$ans"
6607                 dflt=$intsize
6608                 rp="What is the size of a long integer (in bytes)?"
6609                 . ./myread
6610                 longsize="$ans"
6611                 dflt=2
6612                 rp="What is the size of a short integer (in bytes)?"
6613                 . ./myread
6614                 shortsize="$ans"
6615         fi
6616         ;;
6617 esac
6618 $rm -f intsize intsize.*
6619
6620 : see if signal is declared as pointer to function returning int or void
6621 echo " "
6622 xxx=`./findhdr signal.h`
6623 $test "$xxx" && $cppstdin $cppminus $cppflags < $xxx >$$.tmp 2>/dev/null
6624 if $contains 'int.*\*[  ]*signal' $$.tmp >/dev/null 2>&1 ; then
6625         echo "You have int (*signal())() instead of void." >&4
6626         val="$undef"
6627 elif $contains 'void.*\*[       ]*signal' $$.tmp >/dev/null 2>&1 ; then
6628         echo "You have void (*signal())()." >&4
6629         val="$define"
6630 elif $contains 'extern[         ]*[(\*]*signal' $$.tmp >/dev/null 2>&1 ; then
6631         echo "You have int (*signal())() instead of void." >&4
6632         val="$undef"
6633 elif $contains 'void.*\*.*sig' $$.tmp >/dev/null 2>&1 ; then
6634         echo "You have void (*signal())()." >&4
6635         val="$define"
6636 else
6637         case "$d_voidsig" in
6638         '')
6639         echo "I can't determine whether signal handler returns void or int..." >&4
6640                 dflt=void
6641                 rp="What type does your signal handler return?"
6642                 . ./myread
6643                 case "$ans" in
6644                 v*) val="$define";;
6645                 *) val="$undef";;
6646                 esac;;
6647         "$define")
6648                 echo "As you already told me, signal handler returns void." >&4
6649                 val="$define"
6650                 ;;
6651         *)      echo "As you already told me, signal handler returns int." >&4
6652                 val="$undef"
6653                 ;;
6654         esac
6655 fi
6656 set d_voidsig
6657 eval $setvar
6658 case "$d_voidsig" in
6659 "$define") signal_t="void";;
6660 *) signal_t="int";;
6661 esac
6662 $rm -f $$.tmp
6663
6664 : check for ability to cast large floats to 32-bit ints.
6665 echo " "
6666 echo 'Checking whether your C compiler can cast large floats to int32.' >&4
6667 if $test "$intsize" -ge 4; then
6668         xxx=int
6669 else
6670         xxx=long
6671 fi
6672 $cat >try.c <<EOCP
6673 #include <stdio.h>
6674 #include <sys/types.h>
6675 #include <signal.h>
6676 $signal_t blech(s) int s; { exit(3); }
6677 int main()
6678 {
6679         $xxx i32;
6680         double f, g;
6681         int result = 0;
6682         char str[16];
6683         signal(SIGFPE, blech);
6684
6685         /* Don't let compiler optimize the test away.  Store the number 
6686            in a writable string for gcc to pass to sscanf under HP/UX.
6687         */
6688         sprintf(str, "2147483647");
6689         sscanf(str, "%lf", &f); /* f = (double) 0x7fffffff; */
6690         g = 10 * f;
6691         i32  = ($xxx) g;
6692
6693         /* x86 processors will probably give 0x8000 0000, which is a
6694        sign change.  We don't want that.  We want to mimic SPARC
6695            behavior here, which is to preserve the sign and give
6696            back 0x7fff ffff.
6697         */
6698         if (i32 != ($xxx) f)
6699                 result |= 1;
6700         exit(result);
6701 }
6702 EOCP
6703 set try
6704 if eval $compile_ok; then
6705         ./try
6706         yyy=$?
6707 else
6708         echo "(I can't seem to compile the test program--assuming it can't)"
6709         yyy=1
6710 fi
6711 case "$yyy" in
6712 0)      val="$define"
6713         echo "Yup, it can."
6714         ;;
6715 *)      val="$undef"
6716         echo "Nope, it can't."
6717         ;;
6718 esac
6719 set d_casti32
6720 eval $setvar
6721 $rm -f try try.*
6722
6723 : check for ability to cast negative floats to unsigned
6724 echo " "
6725 echo 'Checking whether your C compiler can cast negative float to unsigned.' >&4
6726 $cat >try.c <<EOCP
6727 #include <stdio.h>
6728 #include <sys/types.h>
6729 #include <signal.h>
6730 $signal_t blech(s) int s; { exit(7); }
6731 $signal_t blech_in_list(s) int s; { exit(4); }
6732 unsigned long dummy_long(p) unsigned long p; { return p; }
6733 unsigned int dummy_int(p) unsigned int p; { return p; }
6734 unsigned short dummy_short(p) unsigned short p; { return p; }
6735 int main()
6736 {
6737         double f;
6738         unsigned long along;
6739         unsigned int aint;
6740         unsigned short ashort;
6741         int result = 0;
6742         char str[16];
6743         
6744         /* Frustrate gcc-2.7.2's optimizer which failed this test with
6745            a direct f = -123. assignment.  gcc-2.8.0 reportedly
6746            optimized the whole file away
6747         */
6748         /* Store the number in a writable string for gcc to pass to 
6749            sscanf under HP/UX.
6750         */
6751         sprintf(str, "-123");
6752         sscanf(str, "%lf", &f);  /* f = -123.; */
6753
6754         signal(SIGFPE, blech);
6755         along = (unsigned long)f;
6756         aint = (unsigned int)f;
6757         ashort = (unsigned short)f;
6758         if (along != (unsigned long)-123)
6759                 result |= 1;
6760         if (aint != (unsigned int)-123)
6761                 result |= 1;
6762         if (ashort != (unsigned short)-123)
6763                 result |= 1;
6764         sprintf(str, "1073741824.");
6765         sscanf(str, "%lf", &f); /* f = (double)0x40000000; */
6766         f = f + f;
6767         along = 0;
6768         along = (unsigned long)f;
6769         if (along != 0x80000000)
6770                 result |= 2;
6771         f -= 1.;
6772         along = 0;
6773         along = (unsigned long)f;
6774         if (along != 0x7fffffff)
6775                 result |= 1;
6776         f += 2.;
6777         along = 0;
6778         along = (unsigned long)f;
6779         if (along != 0x80000001)
6780                 result |= 2;
6781         if (result)
6782                 exit(result);
6783         signal(SIGFPE, blech_in_list);
6784         sprintf(str, "123.");
6785         sscanf(str, "%lf", &f);  /* f = 123.; */
6786         along = dummy_long((unsigned long)f);
6787         aint = dummy_int((unsigned int)f);
6788         ashort = dummy_short((unsigned short)f);
6789         if (along != (unsigned long)123)
6790                 result |= 4;
6791         if (aint != (unsigned int)123)
6792                 result |= 4;
6793         if (ashort != (unsigned short)123)
6794                 result |= 4;
6795         exit(result);
6796
6797 }
6798 EOCP
6799 set try
6800 if eval $compile_ok; then
6801         ./try
6802         castflags=$?
6803 else
6804         echo "(I can't seem to compile the test program--assuming it can't)"
6805         castflags=7
6806 fi
6807 case "$castflags" in
6808 0)      val="$define"
6809         echo "Yup, it can."
6810         ;;
6811 *)      val="$undef"
6812         echo "Nope, it can't."
6813         ;;
6814 esac
6815 set d_castneg
6816 eval $setvar
6817 $rm -f try.*
6818
6819 : see if vprintf exists
6820 echo " "
6821 if set vprintf val -f d_vprintf; eval $csym; $val; then
6822         echo 'vprintf() found.' >&4
6823         val="$define"
6824         $cat >vprintf.c <<'EOF'
6825 #include <varargs.h>
6826
6827 int main() { xxx("foo"); }
6828
6829 xxx(va_alist)
6830 va_dcl
6831 {
6832         va_list args;
6833         char buf[10];
6834
6835         va_start(args);
6836         exit((unsigned long)vsprintf(buf,"%s",args) > 10L);
6837 }
6838 EOF
6839         set vprintf
6840         if eval $compile && ./vprintf; then
6841                 echo "Your vsprintf() returns (int)." >&4
6842                 val2="$undef"
6843         else
6844                 echo "Your vsprintf() returns (char*)." >&4
6845                 val2="$define"
6846         fi
6847 else
6848         echo 'vprintf() NOT found.' >&4
6849                 val="$undef"
6850                 val2="$undef"
6851 fi
6852 set d_vprintf
6853 eval $setvar
6854 val=$val2
6855 set d_charvspr
6856 eval $setvar
6857
6858 : see if chown exists
6859 set chown d_chown
6860 eval $inlibc
6861
6862 : see if chroot exists
6863 set chroot d_chroot
6864 eval $inlibc
6865
6866 : see if chsize exists
6867 set chsize d_chsize
6868 eval $inlibc
6869
6870 hasfield='varname=$1; struct=$2; field=$3; shift; shift; shift;
6871 while $test $# -ge 2; do
6872         case "$1" in
6873         $define) echo "#include <$2>";;
6874         esac ;
6875     shift 2;
6876 done > try.c;
6877 echo "int main () { struct $struct foo; foo.$field = 0; }" >> try.c;
6878 if eval $cc $optimize $ccflags -c try.c >/dev/null 2>&1; then
6879         val="$define";
6880 else
6881         val="$undef";
6882 fi;
6883 set $varname;
6884 eval $setvar;
6885 $rm -f try.c try.o'
6886
6887 : see if this is a sys/uio.h system
6888 set sys/uio.h i_sysuio
6889 eval $inhdr
6890
6891 echo "Checking to see if your system supports struct iovec..." >&4
6892 set d_iovec_s iovec iov_base $i_sysuio sys/uio.h
6893 eval $hasfield
6894 case "$d_iovec_s" in
6895 "$define")      echo "Yup, it does." >&4
6896                 ;;
6897 *)              echo "Nope, it doesn't." >&4
6898                 ;;
6899 esac
6900
6901 socketlib=''
6902 sockethdr=''
6903 : see whether socket exists
6904 echo " "
6905 $echo $n "Hmm... $c" >&4
6906 if set socket val -f d_socket; eval $csym; $val; then
6907         echo "Looks like you have Berkeley networking support." >&4
6908         d_socket="$define"
6909         if set setsockopt val -f; eval $csym; $val; then
6910                 d_oldsock="$undef"
6911         else
6912                 echo "...but it uses the old BSD 4.1c interface, rather than 4.2." >&4
6913                 d_oldsock="$define"
6914         fi
6915 else
6916         if $contains socklib libc.list >/dev/null 2>&1; then
6917                 echo "Looks like you have Berkeley networking support." >&4
6918                 d_socket="$define"
6919                 : we will have to assume that it supports the 4.2 BSD interface
6920                 d_oldsock="$undef"
6921         else
6922                 echo "You don't have Berkeley networking in libc$_a..." >&4
6923                 if test "X$d_socket" = "X$define"; then
6924                    echo "...but you seem to believe that you have sockets." >&4
6925                 else
6926                         for net in net socket
6927                         do
6928                                 if test -f /usr/lib/lib$net$_a; then
6929                                         ( ($nm $nm_opt /usr/lib/lib$net$_a | eval $nm_extract) ||  \
6930                                         $ar t /usr/lib/lib$net$_a) 2>/dev/null >> libc.list
6931                                         if $contains socket libc.list >/dev/null 2>&1; then
6932                                                 d_socket="$define"
6933                                                 socketlib="-l$net"
6934                                                 case "$net" in
6935                                                 net)
6936                                                         echo "...but the Wollongong group seems to have hacked it in." >&4
6937                                                         sockethdr="-I/usr/netinclude"
6938                                                         ;;
6939                                                 esac
6940                                                 echo "Found Berkeley sockets interface in lib$net." >& 4 
6941                                                 if $contains setsockopt libc.list >/dev/null 2>&1; then
6942                                                         d_oldsock="$undef"
6943                                                 else
6944                                                         echo "...using the old BSD 4.1c interface, rather than 4.2." >&4
6945                                                         d_oldsock="$define"
6946                                                 fi
6947                                                 break
6948                                         fi
6949                                 fi
6950                         done
6951                         if test "X$d_socket" != "X$define"; then
6952                            echo "or anywhere else I see." >&4
6953                            d_socket="$undef"
6954                            d_oldsock="$undef"
6955                         fi
6956                 fi
6957         fi
6958 fi
6959
6960 : see if socketpair exists
6961 set socketpair d_sockpair
6962 eval $inlibc
6963
6964
6965 echo " "
6966 echo "Checking the availability of certain socket constants..." >& 4
6967 for ENUM in MSG_CTRUNC MSG_DONTROUTE MSG_OOB MSG_PEEK MSG_PROXY SCM_RIGHTS; do
6968         enum=`$echo $ENUM|./tr '[A-Z]' '[a-z]'`
6969         $cat >try.c <<EOF
6970 #include <sys/types.h>
6971 #include <sys/socket.h>
6972 int main() {
6973     int i = $ENUM;
6974 }
6975 EOF
6976         val="$undef"
6977         set try; if eval $compile; then
6978                 val="$define"
6979         fi
6980         set d_${enum}; eval $setvar
6981         $rm -f try.c try
6982 done
6983
6984 set sendmsg d_sendmsg
6985 eval $inlibc
6986
6987 set recvmsg d_recvmsg
6988 eval $inlibc
6989
6990 echo " "
6991 $echo $n "Checking to see if your system supports struct msghdr...$c" >&4
6992 set d_msghdr_s msghdr msg_name define sys/types.h $d_socket sys/socket.h $i_sysuio sys/uio.h
6993 eval $hasfield
6994 case "$d_msghdr_s" in
6995 "$define")      echo "Yup, it does." >&4
6996                 ;;
6997 *)              echo "Nope, it doesn't." >&4
6998                 ;;
6999 esac
7000
7001 $echo $n "Checking to see if your system supports struct cmsghdr...$c" >&4
7002 set d_cmsghdr_s cmsghdr cmsg_len define sys/types.h $d_socket sys/socket.h $i_sysuio sys/uio.h
7003 eval $hasfield
7004 case "$d_cmsghdr_s" in
7005 "$define")      echo "Yup, it does." >&4
7006                 ;;
7007 *)              echo "Nope, it doesn't." >&4
7008                 ;;
7009 esac
7010
7011 : check for const keyword
7012 echo " "
7013 echo 'Checking to see if your C compiler knows about "const"...' >&4
7014 $cat >const.c <<'EOCP'
7015 typedef struct spug { int drokk; } spug;
7016 int main()
7017 {
7018         const char *foo;
7019         const spug y;
7020 }
7021 EOCP
7022 if $cc -c $ccflags const.c >/dev/null 2>&1 ; then
7023         val="$define"
7024         echo "Yup, it does."
7025 else
7026         val="$undef"
7027         echo "Nope, it doesn't."
7028 fi
7029 set d_const
7030 eval $setvar
7031
7032 : see if crypt exists
7033 echo " "
7034 if set crypt val -f d_crypt; eval $csym; $val; then
7035         echo 'crypt() found.' >&4
7036         val="$define"
7037         cryptlib=''
7038 else
7039         cryptlib=`./loc Slibcrypt$_a "" $xlibpth`
7040         if $test -z "$cryptlib"; then
7041                 cryptlib=`./loc Mlibcrypt$_a "" $xlibpth`
7042         else
7043                 cryptlib=-lcrypt
7044         fi
7045         if $test -z "$cryptlib"; then
7046                 cryptlib=`./loc Llibcrypt$_a "" $xlibpth`
7047         else
7048                 cryptlib=-lcrypt
7049         fi
7050         if $test -z "$cryptlib"; then
7051                 cryptlib=`./loc libcrypt$_a "" $libpth`
7052         else
7053                 cryptlib=-lcrypt
7054         fi
7055         if $test -z "$cryptlib"; then
7056                 echo 'crypt() NOT found.' >&4
7057                 val="$undef"
7058         else
7059                 val="$define"
7060         fi
7061 fi
7062 set d_crypt
7063 eval $setvar
7064
7065 : get csh whereabouts
7066 case "$csh" in
7067 'csh') val="$undef" ;;
7068 *) val="$define" ;;
7069 esac
7070 set d_csh
7071 eval $setvar
7072 : Respect a hint or command line value for full_csh.
7073 case "$full_csh" in
7074 '') full_csh=$csh ;;
7075 esac
7076
7077 : see if cuserid exists
7078 set cuserid d_cuserid
7079 eval $inlibc
7080
7081 : see if this is a limits.h system
7082 set limits.h i_limits
7083 eval $inhdr
7084
7085 : see if this is a float.h system
7086 set float.h i_float
7087 eval $inhdr
7088
7089 : See if number of significant digits in a double precision number is known
7090 echo " "
7091 $cat >dbl_dig.c <<EOM
7092 #$i_limits I_LIMITS
7093 #$i_float I_FLOAT
7094 #ifdef I_LIMITS
7095 #include <limits.h>
7096 #endif
7097 #ifdef I_FLOAT
7098 #include <float.h>
7099 #endif
7100 #ifdef DBL_DIG
7101 printf("Contains DBL_DIG");
7102 #endif
7103 EOM
7104 $cppstdin $cppflags $cppminus < dbl_dig.c >dbl_dig.E 2>/dev/null
7105 if $contains 'DBL_DIG' dbl_dig.E >/dev/null 2>&1; then
7106         echo "DBL_DIG found." >&4
7107         val="$define"
7108 else
7109         echo "DBL_DIG NOT found." >&4
7110         val="$undef"
7111 fi
7112 $rm -f dbl_dig.?
7113 set d_dbl_dig
7114 eval $setvar
7115
7116
7117 if $test X"$use64bits" = X"$define"; then
7118         : see if dbminit64 exists
7119         set dbminit64 d_dbminit64
7120         eval $inlibc
7121
7122         : see if dbmclose64 exists
7123         set dbmclose64 d_dbmclose64
7124         eval $inlibc
7125
7126         : see if fetch64 exists
7127         set fetch64 d_fetch64
7128         eval $inlibc
7129
7130         : see if store64 exists
7131         set store64 d_store64
7132         eval $inlibc
7133
7134         : see if delete64 exists
7135         set delete64 d_delete64
7136         eval $inlibc
7137
7138         : see if firstkey64 exists
7139         set firstkey64 d_firstkey64
7140         eval $inlibc
7141
7142         : see if nextkey64 exists
7143         set nextkey64 d_nextkey64
7144         eval $inlibc
7145 else
7146         val="$undef"
7147         for xxx in d_dbminit64 d_dbmclose64 d_fetch64 d_store64 d_delete64 d_firstkey64 d_nextkey64
7148         do
7149                 set $xxx
7150                 eval $setvar
7151         done
7152 fi
7153
7154 : see if difftime exists
7155 set difftime d_difftime
7156 eval $inlibc
7157
7158 : see if sys/stat.h is available
7159 set sys/stat.h i_sysstat
7160 eval $inhdr
7161
7162 : see if this is a dirent system
7163 echo " "
7164 if xinc=`./findhdr dirent.h`; $test "$xinc"; then
7165         val="$define"
7166         echo "<dirent.h> found." >&4
7167 else
7168         val="$undef"
7169         if xinc=`./findhdr sys/dir.h`; $test "$xinc"; then
7170                 echo "<sys/dir.h> found." >&4
7171                 echo " "
7172         else
7173                 xinc=`./findhdr sys/ndir.h`
7174         fi
7175         echo "<dirent.h> NOT found." >&4
7176 fi
7177 set i_dirent
7178 eval $setvar
7179
7180 : Look for type of directory structure.
7181 echo " "
7182 $cppstdin $cppflags $cppminus < "$xinc" > try.c
7183
7184 case "$direntrytype" in
7185 ''|' ')
7186         case "$i_dirent" in
7187         $define) guess1='struct dirent' ;;
7188         *) guess1='struct direct'  ;;
7189         esac
7190         ;;
7191 *)      guess1="$direntrytype"
7192         ;;
7193 esac
7194
7195 case "$guess1" in
7196 'struct dirent') guess2='struct direct' ;;
7197 *) guess2='struct dirent' ;;
7198 esac
7199                 
7200 if $contains "$guess1" try.c >/dev/null 2>&1; then
7201         direntrytype="$guess1"
7202         echo "Your directory entries are $direntrytype." >&4
7203 elif $contains "$guess2" try.c >/dev/null 2>&1; then
7204         direntrytype="$guess2"
7205         echo "Your directory entries seem to be $direntrytype." >&4
7206 else
7207         echo "I don't recognize your system's directory entries." >&4
7208         rp="What type is used for directory entries on this system?"
7209         dflt="$guess1"
7210         . ./myread
7211         direntrytype="$ans"
7212 fi
7213 $rm -f try.c
7214
7215
7216 : see if the directory entry stores field length
7217 echo " "
7218 $cppstdin $cppflags $cppminus < "$xinc" > try.c
7219 if $contains 'd_namlen' try.c >/dev/null 2>&1; then
7220         echo "Good, your directory entry keeps length information in d_namlen." >&4
7221         val="$define"
7222 else
7223         echo "Your directory entry does not know about the d_namlen field." >&4
7224         val="$undef"
7225 fi
7226 set d_dirnamlen
7227 eval $setvar
7228 $rm -f try.c
7229
7230
7231 if $test X"$use64bits" = X"$define"; then
7232         : see if fstat64 exists
7233         set fstat64 d_fstat64
7234         eval $inlibc
7235
7236         : see if ftruncate64 exists
7237         set ftruncate64 d_ftruncate64
7238         eval $inlibc
7239
7240         : see if lockf64 exists
7241         set lockf64 d_lockf64
7242         eval $inlibc
7243
7244         : see if lseek64 exists
7245         set lseek64 d_lseek64
7246         eval $inlibc
7247
7248         : see if lstat64 exists
7249         set lstat64 d_lstat64
7250         eval $inlibc
7251
7252         : see if open64 exists
7253         set open64 d_open64
7254         eval $inlibc
7255
7256         : see if opendir64 exists
7257         set opendir64 d_opendir64
7258         eval $inlibc
7259
7260         : see if readdir64 exists
7261         set readdir64 d_readdir64
7262         eval $inlibc
7263
7264         : see if seekdir64 exists
7265         set seekdir64 d_seekdir64
7266         eval $inlibc
7267
7268         : see if stat64 exists
7269         set stat64 d_stat64
7270         eval $inlibc
7271
7272         : see if telldir64 exists
7273         set telldir64 d_telldir64
7274         eval $inlibc
7275
7276         : see if truncate64 exists
7277         set truncate64 d_truncate64
7278         eval $inlibc
7279
7280         : check for off64_t
7281         echo " "
7282         echo $n "Checking to see if your system supports off64_t...$c" >&4
7283         $cat >try.c <<EOCP
7284 #include <sys/types.h>
7285 off64_t foo() { off64_t x; x = 7; return x; }'
7286 EOCP
7287         if $cc $optimize $ccflags -c try.c >/dev/null 2>&1; then
7288                 val="$define"
7289                 echo " Yup, it does." >&4
7290         else
7291                 val="$undef"
7292                 echo " Nope, it doesn't." >&4
7293         fi
7294         $rm -f try.*
7295         set d_off64t
7296         eval $setvar
7297
7298         : check for ino64_t
7299         echo " "
7300         echo $n "Checking to see if your system supports ino64_t...$c" >&4
7301         val="$undef"
7302         case "$i_sysstat" in
7303         "$define" )
7304                 $cat >try.c <<EOCP
7305 #include <sys/types.h>
7306 #include <sys/stat.h>
7307 ino64_t foo() { ino64_t x; x = 7; return x; }'
7308 EOCP
7309                 if $cc $optimize $ccflags -c try.c >/dev/null 2>&1; then
7310                         val="$define"
7311                 fi
7312                 $rm -f try.*
7313                 ;;
7314         esac
7315         if $test "X$val" = X"$define"; then
7316                 echo " Yup, it does." >&4
7317         else
7318                 echo " Nope, it doesn't." >&4
7319         fi
7320         set d_ino64t
7321         eval $setvar
7322
7323         : check for struct flock64
7324         echo " "
7325         echo "Checking to see if your system supports struct flock64..." >&4
7326         if $h_fcntl; then
7327                 set d_flock64_s flock64 l_len define fcntl.h
7328                 eval $hasfield
7329         else
7330                 val="$undef"
7331                 set d_flock64_s
7332                 eval $setvar
7333         fi
7334         case "$d_flock64_s" in
7335         "$define")      echo "Yup, it does." >&4
7336                         ;;
7337         *)              echo "Nope, it doesn't." >&4
7338                         ;;
7339         esac
7340
7341         : check for struct dirent64
7342         echo " "
7343         echo "Checking to see if your system supports struct dirent64..." >&4
7344         set d_dirent64_s dirent64 d_off $i_dirent dirent.h
7345         eval $hasfield
7346         case "$d_dirent64_s" in
7347         "$define")      echo "Yup, it does." >&4
7348                         ;;
7349         *)              echo "Nope, it doesn't." >&4
7350                         ;;
7351         esac
7352
7353 else
7354         val="$undef"
7355         for xxx in d_fstat64 d_ftruncate64 d_lockf64 d_lseek64 d_lstat64 d_open64 d_opendir64 d_readdir64 d_seekdir64 d_stat64 d_telldir64 d_truncate64 d_off64t d_ino64t d_flock64_s d_dirent64_s
7356         do
7357                 set $xxx
7358                 eval $setvar
7359         done
7360 fi
7361
7362 : see if dlerror exists
7363 xxx_runnm="$runnm"
7364 runnm=false
7365 set dlerror d_dlerror
7366 eval $inlibc
7367 runnm="$xxx_runnm"
7368
7369 : see if dlfcn is available
7370 set dlfcn.h i_dlfcn
7371 eval $inhdr
7372
7373 case "$usedl" in
7374 $define|y|true)
7375         $cat << EOM
7376
7377 On a few systems, the dynamically loaded modules that perl generates and uses
7378 will need a different extension than shared libs. The default will probably
7379 be appropriate.
7380
7381 EOM
7382         case "$dlext" in
7383         '')     dflt="$so" ;;
7384         *)      dflt="$dlext" ;;
7385         esac
7386         rp='What is the extension of dynamically loaded modules'
7387         . ./myread
7388         dlext="$ans"
7389         ;;
7390 *)
7391         dlext="none"
7392         ;;
7393 esac
7394
7395 : Check if dlsym need a leading underscore
7396 echo " "
7397 val="$undef"
7398
7399 case "$dlsrc" in
7400 dl_dlopen.xs)
7401         echo "Checking whether your dlsym() needs a leading underscore ..." >&4
7402         $cat >dyna.c <<'EOM'
7403 fred () { }
7404 EOM
7405
7406 $cat >fred.c<<EOM
7407
7408 #include <stdio.h>
7409 #$i_dlfcn I_DLFCN
7410 #ifdef I_DLFCN
7411 #include <dlfcn.h>      /* the dynamic linker include file for Sunos/Solaris */
7412 #else
7413 #include <sys/types.h>
7414 #include <nlist.h>
7415 #include <link.h>
7416 #endif
7417
7418 extern int fred() ;
7419
7420 int main()
7421 {
7422     void * handle ;
7423     void * symbol ;
7424 #ifndef RTLD_LAZY
7425     int mode = 1 ;
7426 #else
7427     int mode = RTLD_LAZY ;
7428 #endif
7429     handle = dlopen("./dyna.$dlext", mode) ;
7430     if (handle == NULL) {
7431         printf ("1\n") ;
7432         fflush (stdout) ;
7433         exit(0);
7434     }
7435     symbol = dlsym(handle, "fred") ;
7436     if (symbol == NULL) {
7437         /* try putting a leading underscore */
7438         symbol = dlsym(handle, "_fred") ;
7439         if (symbol == NULL) {
7440             printf ("2\n") ;
7441             fflush (stdout) ;
7442             exit(0);
7443         }
7444         printf ("3\n") ;
7445     }
7446     else
7447         printf ("4\n") ;
7448     fflush (stdout) ;
7449     exit(0);
7450 }
7451 EOM
7452         : Call the object file tmp-dyna.o in case dlext=o.
7453         if $cc $ccflags $cccdlflags -c dyna.c > /dev/null 2>&1 && 
7454                 mv dyna${_o} tmp-dyna${_o} > /dev/null 2>&1 && 
7455                 $ld $lddlflags -o dyna.$dlext tmp-dyna${_o} > /dev/null 2>&1 && 
7456                 $cc $ccflags -o fred $ldflags $cccdlflags $ccdlflags fred.c $libs > /dev/null 2>&1; then
7457                 xxx=`./fred`
7458                 case $xxx in
7459                 1)      echo "Test program failed using dlopen." >&4
7460                         echo "Perhaps you should not use dynamic loading." >&4;;
7461                 2)      echo "Test program failed using dlsym." >&4
7462                         echo "Perhaps you should not use dynamic loading." >&4;;
7463                 3)      echo "dlsym needs a leading underscore" >&4
7464                         val="$define" ;;
7465                 4)      echo "dlsym doesn't need a leading underscore." >&4;;
7466                 esac
7467         else
7468                 echo "I can't compile and run the test program." >&4
7469         fi
7470         ;;
7471 esac
7472                 
7473 $rm -f fred fred.? dyna.$dlext dyna.? tmp-dyna.?
7474
7475 set d_dlsymun
7476 eval $setvar
7477
7478 hasproto='varname=$1; func=$2; shift; shift;
7479 while $test $# -ge 2; do
7480         case "$1" in
7481         $define) echo "#include <$2>";;
7482         esac ;
7483     shift 2;
7484 done > try.c;
7485 $cppstdin $cppflags $cppminus < try.c > tryout.c 2>/dev/null;
7486 if $contains "$func.*(" tryout.c >/dev/null 2>&1; then
7487         echo "$func() prototype found.";
7488         val="$define";
7489 else
7490         echo "$func() prototype NOT found.";
7491         val="$undef";
7492 fi;
7493 set $varname;
7494 eval $setvar;
7495 $rm -f try.c tryout.c'
7496
7497 : see if prototype for drand48 is available
7498 echo " "
7499 set d_drand48proto drand48 $i_stdlib stdlib.h $i_unistd unistd.h
7500 eval $hasproto
7501
7502 : see if dup2 exists
7503 set dup2 d_dup2
7504 eval $inlibc
7505
7506 : see if eaccess exists
7507 set eaccess d_eaccess
7508 eval $inlibc
7509
7510 : see if endgrent exists
7511 set endgrent d_endgrent
7512 eval $inlibc
7513
7514 : see if endhostent exists
7515 set endhostent d_endhent
7516 eval $inlibc
7517
7518 : see if endnetent exists
7519 set endnetent d_endnent
7520 eval $inlibc
7521
7522 : see if endprotoent exists
7523 set endprotoent d_endpent
7524 eval $inlibc
7525
7526 : see if endpwent exists
7527 set endpwent d_endpwent
7528 eval $inlibc
7529
7530 : see if endservent exists
7531 set endservent d_endsent
7532 eval $inlibc
7533
7534 : Locate the flags for 'open()'
7535 echo " "
7536 $cat >open3.c <<'EOCP'
7537 #include <sys/types.h>
7538 #ifdef I_FCNTL
7539 #include <fcntl.h>
7540 #endif
7541 #ifdef I_SYS_FILE
7542 #include <sys/file.h>
7543 #endif
7544 int main() {
7545         if(O_RDONLY);
7546 #ifdef O_TRUNC
7547         exit(0);
7548 #else
7549         exit(1);
7550 #endif
7551 }
7552 EOCP
7553 : check sys/file.h first to get FREAD on Sun
7554 if $test `./findhdr sys/file.h` && \
7555                 set open3 -DI_SYS_FILE && eval $compile; then
7556         h_sysfile=true;
7557         echo "<sys/file.h> defines the O_* constants..." >&4
7558         if ./open3; then
7559                 echo "and you have the 3 argument form of open()." >&4
7560                 val="$define"
7561         else
7562                 echo "but not the 3 argument form of open().  Oh, well." >&4
7563                 val="$undef"
7564         fi
7565 elif $test `./findhdr fcntl.h` && \
7566                 set open3 -DI_FCNTL && eval $compile; then
7567         h_fcntl=true;
7568         echo "<fcntl.h> defines the O_* constants..." >&4
7569         if ./open3; then
7570                 echo "and you have the 3 argument form of open()." >&4
7571                 val="$define"
7572         else
7573                 echo "but not the 3 argument form of open().  Oh, well." >&4
7574                 val="$undef"
7575         fi
7576 else
7577         val="$undef"
7578         echo "I can't find the O_* constant definitions!  You got problems." >&4
7579 fi
7580 set d_open3
7581 eval $setvar
7582 $rm -f open3*
7583
7584 : check for non-blocking I/O stuff
7585 case "$h_sysfile" in
7586 true) echo "#include <sys/file.h>" > head.c;;
7587 *)
7588         case "$h_fcntl" in
7589         true) echo "#include <fcntl.h>" > head.c;;
7590         *) echo "#include <sys/fcntl.h>" > head.c;;
7591         esac
7592         ;;
7593 esac
7594 echo " "
7595 echo "Figuring out the flag used by open() for non-blocking I/O..." >&4
7596 case "$o_nonblock" in
7597 '')
7598         $cat head.c > try.c
7599         $cat >>try.c <<'EOCP'
7600 int main() {
7601 #ifdef O_NONBLOCK
7602         printf("O_NONBLOCK\n");
7603         exit(0);
7604 #endif
7605 #ifdef O_NDELAY
7606         printf("O_NDELAY\n");
7607         exit(0);
7608 #endif
7609 #ifdef FNDELAY
7610         printf("FNDELAY\n");
7611         exit(0);
7612 #endif
7613         exit(0);
7614 }
7615 EOCP
7616         set try
7617         if eval $compile_ok; then
7618                 o_nonblock=`./try`
7619                 case "$o_nonblock" in
7620                 '') echo "I can't figure it out, assuming O_NONBLOCK will do.";;
7621                 *) echo "Seems like we can use $o_nonblock.";;
7622                 esac
7623         else
7624                 echo "(I can't compile the test program; pray O_NONBLOCK is right!)"
7625         fi
7626         ;;
7627 *) echo "Using $hint value $o_nonblock.";;
7628 esac
7629 $rm -f try try.* .out core
7630
7631 echo " "
7632 echo "Let's see what value errno gets from read() on a $o_nonblock file..." >&4
7633 case "$eagain" in
7634 '')
7635         $cat head.c > try.c
7636         $cat >>try.c <<EOCP
7637 #include <errno.h>
7638 #include <sys/types.h>
7639 #include <signal.h>
7640 #define MY_O_NONBLOCK $o_nonblock
7641 #ifndef errno  /* XXX need better Configure test */
7642 extern int errno;
7643 #endif
7644 $signal_t blech(x) int x; { exit(3); }
7645 EOCP
7646         $cat >> try.c <<'EOCP'
7647 int main()
7648 {
7649         int pd[2];
7650         int pu[2];
7651         char buf[1];
7652         char string[100];
7653
7654         pipe(pd);       /* Down: child -> parent */
7655         pipe(pu);       /* Up: parent -> child */
7656         if (0 != fork()) {
7657                 int ret;
7658                 close(pd[1]);   /* Parent reads from pd[0] */
7659                 close(pu[0]);   /* Parent writes (blocking) to pu[1] */
7660                 if (-1 == fcntl(pd[0], F_SETFL, MY_O_NONBLOCK))
7661                         exit(1);
7662                 signal(SIGALRM, blech);
7663                 alarm(5);
7664                 if ((ret = read(pd[0], buf, 1)) > 0)    /* Nothing to read! */
7665                         exit(2);
7666                 sprintf(string, "%d\n", ret);
7667                 write(2, string, strlen(string));
7668                 alarm(0);
7669 #ifdef EAGAIN
7670                 if (errno == EAGAIN) {
7671                         printf("EAGAIN\n");
7672                         goto ok;
7673                 }
7674 #endif
7675 #ifdef EWOULDBLOCK
7676                 if (errno == EWOULDBLOCK)
7677                         printf("EWOULDBLOCK\n");
7678 #endif
7679         ok:
7680                 write(pu[1], buf, 1);   /* Unblocks child, tell it to close our pipe */
7681                 sleep(2);                               /* Give it time to close our pipe */
7682                 alarm(5);
7683                 ret = read(pd[0], buf, 1);      /* Should read EOF */
7684                 alarm(0);
7685                 sprintf(string, "%d\n", ret);
7686                 write(3, string, strlen(string));
7687                 exit(0);
7688         }
7689
7690         close(pd[0]);                   /* We write to pd[1] */
7691         close(pu[1]);                   /* We read from pu[0] */
7692         read(pu[0], buf, 1);    /* Wait for parent to signal us we may continue */
7693         close(pd[1]);                   /* Pipe pd is now fully closed! */
7694         exit(0);                                /* Bye bye, thank you for playing! */
7695 }
7696 EOCP
7697         set try
7698         if eval $compile_ok; then
7699                 echo "$startsh" >mtry
7700                 echo "./try >try.out 2>try.ret 3>try.err || exit 4" >>mtry
7701                 chmod +x mtry
7702                 ./mtry >/dev/null 2>&1
7703                 case $? in
7704                 0) eagain=`$cat try.out`;;
7705                 1) echo "Could not perform non-blocking setting!";;
7706                 2) echo "I did a successful read() for something that was not there!";;
7707                 3) echo "Hmm... non-blocking I/O does not seem to be working!";;
7708                 *) echo "Something terribly wrong happened during testing.";;
7709                 esac
7710                 rd_nodata=`$cat try.ret`
7711                 echo "A read() system call with no data present returns $rd_nodata."
7712                 case "$rd_nodata" in
7713                 0|-1) ;;
7714                 *)
7715                         echo "(That's peculiar, fixing that to be -1.)"
7716                         rd_nodata=-1
7717                         ;;
7718                 esac
7719                 case "$eagain" in
7720                 '')
7721                         echo "Forcing errno EAGAIN on read() with no data available."
7722                         eagain=EAGAIN
7723                         ;;
7724                 *)
7725                         echo "Your read() sets errno to $eagain when no data is available."
7726                         ;;
7727                 esac
7728                 status=`$cat try.err`
7729                 case "$status" in
7730                 0) echo "And it correctly returns 0 to signal EOF.";;
7731                 -1) echo "But it also returns -1 to signal EOF, so be careful!";;
7732                 *) echo "However, your read() returns '$status' on EOF??";;
7733                 esac
7734                 val="$define"
7735                 if test "$status" = "$rd_nodata"; then
7736                         echo "WARNING: you can't distinguish between EOF and no data!"
7737                         val="$undef"
7738                 fi
7739         else
7740                 echo "I can't compile the test program--assuming errno EAGAIN will do."
7741                 eagain=EAGAIN
7742         fi
7743         set d_eofnblk
7744         eval $setvar
7745         ;;
7746 *)
7747         echo "Using $hint value $eagain."
7748         echo "Your read() returns $rd_nodata when no data is present."
7749         case "$d_eofnblk" in
7750         "$define") echo "And you can see EOF because read() returns 0.";;
7751         "$undef") echo "But you can't see EOF status from read() returned value.";;
7752         *)
7753                 echo "(Assuming you can't see EOF status from read anyway.)"
7754                 d_eofnblk=$undef
7755                 ;;
7756         esac
7757         ;;
7758 esac
7759 $rm -f try try.* .out core head.c mtry
7760
7761 : see if fchmod exists
7762 set fchmod d_fchmod
7763 eval $inlibc
7764
7765 : see if fchown exists
7766 set fchown d_fchown
7767 eval $inlibc
7768
7769 : see if this is an fcntl system
7770 set fcntl d_fcntl
7771 eval $inlibc
7772
7773 : see if sys/select.h has to be included
7774 set sys/select.h i_sysselct
7775 eval $inhdr
7776
7777 : see if we should include time.h, sys/time.h, or both
7778 echo " "
7779 if test "X$timeincl" = X; then
7780         echo "Testing to see if we should include <time.h>, <sys/time.h> or both." >&4
7781         $echo $n "I'm now running the test program...$c"
7782         $cat >try.c <<'EOCP'
7783 #include <sys/types.h>
7784 #ifdef I_TIME
7785 #include <time.h>
7786 #endif
7787 #ifdef I_SYSTIME
7788 #ifdef SYSTIMEKERNEL
7789 #define KERNEL
7790 #endif
7791 #include <sys/time.h>
7792 #endif
7793 #ifdef I_SYSSELECT
7794 #include <sys/select.h>
7795 #endif
7796 int main()
7797 {
7798         struct tm foo;
7799 #ifdef S_TIMEVAL
7800         struct timeval bar;
7801 #endif
7802 #ifdef S_TIMEZONE
7803         struct timezone tzp;
7804 #endif
7805         if (foo.tm_sec == foo.tm_sec)
7806                 exit(0);
7807 #ifdef S_TIMEVAL
7808         if (bar.tv_sec == bar.tv_sec)
7809                 exit(0);
7810 #endif
7811         exit(1);
7812 }
7813 EOCP
7814         flags=''
7815         for s_timezone in '-DS_TIMEZONE' ''; do
7816         sysselect=''
7817         for s_timeval in '-DS_TIMEVAL' ''; do
7818         for i_systimek in '' '-DSYSTIMEKERNEL'; do
7819         for i_time in '' '-DI_TIME'; do
7820         for i_systime in '-DI_SYSTIME' ''; do
7821                 case "$flags" in
7822                 '') $echo $n ".$c"
7823                         set try $i_time $i_systime $i_systimek $sysselect $s_timeval $s_timezone
7824                         if eval $compile; then
7825                                 set X $i_time $i_systime $i_systimek $sysselect $s_timeval
7826                                 shift
7827                                 flags="$*"
7828                                 echo " "
7829                                 $echo $n "Succeeded with $flags$c"
7830                         fi
7831                         ;;
7832                 esac
7833         done
7834         done
7835         done
7836         done
7837         done
7838         timeincl=''
7839         echo " "
7840         case "$flags" in
7841         *SYSTIMEKERNEL*) i_systimek="$define"
7842                 timeincl=`./findhdr sys/time.h`
7843                 echo "We'll include <sys/time.h> with KERNEL defined." >&4;;
7844         *) i_systimek="$undef";;
7845         esac
7846         case "$flags" in
7847         *I_TIME*) i_time="$define"
7848                 timeincl=`./findhdr time.h`" $timeincl"
7849                 echo "We'll include <time.h>." >&4;;
7850         *) i_time="$undef";;
7851         esac
7852         case "$flags" in
7853         *I_SYSTIME*) i_systime="$define"
7854                 timeincl=`./findhdr sys/time.h`" $timeincl"
7855                 echo "We'll include <sys/time.h>." >&4;;
7856         *) i_systime="$undef";;
7857         esac
7858         $rm -f try.c try
7859 fi
7860
7861 : check for fd_set items
7862 $cat <<EOM
7863
7864 Checking to see how well your C compiler handles fd_set and friends ...
7865 EOM
7866 $cat >fd_set.c <<EOCP
7867 #$i_systime I_SYS_TIME
7868 #$i_sysselct I_SYS_SELECT
7869 #$d_socket HAS_SOCKET
7870 #include <sys/types.h>
7871 #ifdef HAS_SOCKET
7872 #include <sys/socket.h> /* Might include <sys/bsdtypes.h> */
7873 #endif
7874 #ifdef I_SYS_TIME
7875 #include <sys/time.h>
7876 #endif
7877 #ifdef I_SYS_SELECT
7878 #include <sys/select.h>
7879 #endif
7880 int main() {
7881         fd_set fds;
7882
7883 #ifdef TRYBITS
7884         if(fds.fds_bits);
7885 #endif
7886
7887 #if defined(FD_SET) && defined(FD_CLR) && defined(FD_ISSET) && defined(FD_ZERO)
7888         exit(0);
7889 #else
7890         exit(1);
7891 #endif
7892 }
7893 EOCP
7894 set fd_set -DTRYBITS
7895 if eval $compile; then
7896         d_fds_bits="$define"
7897         d_fd_set="$define"
7898         echo "Well, your system knows about the normal fd_set typedef..." >&4
7899         if ./fd_set; then
7900                 echo "and you have the normal fd_set macros (just as I'd expect)." >&4
7901                 d_fd_macros="$define"
7902         else
7903                 $cat >&4 <<'EOM'
7904 but not the normal fd_set macros!  Gaaack!  I'll have to cover for you.
7905 EOM
7906                 d_fd_macros="$undef"
7907         fi
7908 else
7909         $cat <<'EOM'
7910 Hmm, your compiler has some difficulty with fd_set.  Checking further...
7911 EOM
7912         set fd_set
7913         if eval $compile; then
7914                 d_fds_bits="$undef"
7915                 d_fd_set="$define"
7916                 echo "Well, your system has some sort of fd_set available..." >&4
7917                 if ./fd_set; then
7918                         echo "and you have the normal fd_set macros." >&4
7919                         d_fd_macros="$define"
7920                 else
7921                         $cat <<'EOM'
7922 but not the normal fd_set macros!  Gross!  More work for me...
7923 EOM
7924                         d_fd_macros="$undef"
7925                 fi
7926         else
7927         echo "Well, you got zip.  That's OK, I can roll my own fd_set stuff." >&4
7928                 d_fd_set="$undef"
7929                 d_fds_bits="$undef"
7930                 d_fd_macros="$undef"
7931         fi
7932 fi
7933 $rm -f fd_set*
7934
7935 : see if fgetpos exists
7936 set fgetpos d_fgetpos
7937 eval $inlibc
7938
7939
7940 if $test X"$use64bits" = X"$define"; then
7941         : see if fgetpos64 exists
7942         set fgetpos64 d_fgetpos64
7943         eval $inlibc
7944
7945         : see if fopen64 exists
7946         set freopen64 d_fopen64
7947         eval $inlibc
7948
7949         : see if freopen64 exists
7950         set freopen64 d_freopen64
7951         eval $inlibc
7952
7953         : see if fseek64 exists
7954         set fseek64 d_fseek64
7955         eval $inlibc
7956
7957         : see if fseeko64 exists
7958         set fseeko64 d_fseeko64
7959         eval $inlibc
7960
7961         : see if fsetpos64 exists
7962         set fsetpos64 d_fsetpos64
7963         eval $inlibc
7964
7965         : see if ftell64 exists
7966         set ftell64 d_ftell64
7967         eval $inlibc
7968
7969         : see if ftello64 exists
7970         set ftello64 d_ftello64
7971         eval $inlibc
7972
7973         : see if tmpfile64 exists
7974         set tmpfile64 d_tmpfile64
7975         eval $inlibc
7976 else
7977         val="$undef"
7978         for xxx in d_fgetpos64 d_fopen64 d_freopen64 d_fseek64 d_fseeko64 d_fsetpos64 d_ftell64 d_ftello64 d_tmpfile64
7979         do
7980                 set $xxx
7981                 eval $setvar
7982         done
7983 fi
7984
7985 : see if flock exists
7986 set flock d_flock
7987 eval $inlibc
7988
7989 : see if fork exists
7990 set fork d_fork
7991 eval $inlibc
7992
7993 : see if pathconf exists
7994 set pathconf d_pathconf
7995 eval $inlibc
7996
7997 : see if fpathconf exists
7998 set fpathconf d_fpathconf
7999 eval $inlibc
8000
8001 : see if fseeko exists
8002 set fseeko d_fseeko
8003 eval $inlibc
8004
8005 : see if fsetpos exists
8006 set fsetpos d_fsetpos
8007 eval $inlibc
8008
8009 : see if this is a sys/param system
8010 set sys/param.h i_sysparam
8011 eval $inhdr
8012
8013 : see if this is a sys/mount.h system
8014 set sys/mount.h i_sysmount
8015 eval $inhdr
8016
8017
8018 : see if statfs exists
8019 set statfs d_statfs
8020 eval $inlibc
8021
8022 : see if fstatfs exists
8023 set fstatfs d_fstatfs
8024 eval $inlibc
8025
8026 : see if statfs knows about mount flags
8027 set d_statfsflags statfs f_flags $i_sysparam sys/param.h $i_sysmount sys/mount.h
8028 eval $hasfield
8029
8030
8031 : see if statvfs exists
8032 set statvfs d_statvfs
8033 eval $inlibc
8034
8035 : see if fstatvfs exists
8036 set fstatvfs d_fstatvfs
8037 eval $inlibc
8038
8039
8040 : see if ftello exists
8041 set ftello d_ftello
8042 eval $inlibc
8043
8044 : see if getgrent exists
8045 set getgrent d_getgrent
8046 eval $inlibc
8047
8048 : see if gethostbyaddr exists
8049 set gethostbyaddr d_gethbyaddr
8050 eval $inlibc
8051
8052 : see if gethostbyname exists
8053 set gethostbyname d_gethbyname
8054 eval $inlibc
8055
8056 : see if gethostent exists
8057 set gethostent d_gethent
8058 eval $inlibc
8059
8060 : see how we will look up host name
8061 echo " "
8062 if false; then
8063         : dummy stub to allow use of elif
8064 elif set gethostname val -f d_gethname; eval $csym; $val; then
8065         echo 'gethostname() found.' >&4
8066         d_gethname="$define"
8067         call=gethostname
8068 elif set uname val -f d_uname; eval $csym; $val; then
8069         if ./xenix; then
8070                 $cat <<'EOM'
8071 uname() was found, but you're running xenix, and older versions of xenix
8072 have a broken uname(). If you don't really know whether your xenix is old
8073 enough to have a broken system call, use the default answer.
8074
8075 EOM
8076                 dflt=y
8077                 case "$d_uname" in
8078                 "$define") dflt=n;;
8079                 esac
8080                 rp='Is your uname() broken?'
8081                 . ./myread
8082                 case "$ans" in
8083                 n*) d_uname="$define"; call=uname;;
8084                 esac
8085         else
8086                 echo 'uname() found.' >&4
8087                 d_uname="$define"
8088                 call=uname
8089         fi
8090 fi
8091 case "$d_gethname" in
8092 '') d_gethname="$undef";;
8093 esac
8094 case "$d_uname" in
8095 '') d_uname="$undef";;
8096 esac
8097 case "$d_uname$d_gethname" in
8098 *define*)
8099         dflt=n
8100         cat <<EOM
8101  
8102 Every now and then someone has a $call() that lies about the hostname
8103 but can't be fixed for political or economic reasons.  If you wish, I can
8104 pretend $call() isn't there and maybe compute hostname at run-time
8105 thanks to the '$phostname' command.
8106
8107 EOM
8108         rp="Shall I ignore $call() from now on?"
8109         . ./myread
8110         case "$ans" in
8111         y*) d_uname="$undef" d_gethname="$undef"; $echo $n "Okay...$c";;
8112         esac;;
8113 esac
8114 case "$phostname" in
8115 '') aphostname='';;
8116 *) case "$aphostname" in
8117         /*) ;;
8118         *) set X $phostname
8119                 shift
8120                 file=$1
8121                 shift
8122                 file=`./loc $file $file $pth`
8123                 aphostname=`echo $file $*`
8124                 ;;
8125         esac
8126         ;;
8127 esac
8128 case "$d_uname$d_gethname" in
8129 *define*) ;;
8130 *)
8131         case "$phostname" in
8132         '')
8133                 echo "There will be no way for $package to get your hostname." >&4;;
8134         *)
8135         echo "I'll use 'popen("'"'$aphostname'", "r")'"' to get your hostname." >&4
8136                 ;;
8137         esac;;
8138 esac
8139 case "$d_phostname" in
8140 '') d_phostname="$undef";;
8141 esac
8142
8143 : see if this is a netdb.h system
8144 set netdb.h i_netdb
8145 eval $inhdr
8146
8147 : see if prototypes for various gethostxxx netdb.h functions are available
8148 echo " "
8149 set d_gethostprotos gethostent $i_netdb netdb.h
8150 eval $hasproto
8151
8152 : see if getlogin exists
8153 set getlogin d_getlogin
8154 eval $inlibc
8155
8156 : see if getmntent exists
8157 set getmntent d_getmntent
8158 eval $inlibc
8159
8160 : see if getnetbyaddr exists
8161 set getnetbyaddr d_getnbyaddr
8162 eval $inlibc
8163
8164 : see if getnetbyname exists
8165 set getnetbyname d_getnbyname
8166 eval $inlibc
8167
8168 : see if getnetent exists
8169 set getnetent d_getnent
8170 eval $inlibc
8171
8172 : see if prototypes for various getnetxxx netdb.h functions are available
8173 echo " "
8174 set d_getnetprotos getnetent $i_netdb netdb.h
8175 eval $hasproto
8176
8177
8178 : see if getprotobyname exists
8179 set getprotobyname d_getpbyname
8180 eval $inlibc
8181
8182 : see if getprotobynumber exists
8183 set getprotobynumber d_getpbynumber
8184 eval $inlibc
8185
8186 : see if getprotoent exists
8187 set getprotoent d_getpent
8188 eval $inlibc
8189
8190 : see if getpgid exists
8191 set getpgid d_getpgid
8192 eval $inlibc
8193
8194 : see if getpgrp2 exists
8195 set getpgrp2 d_getpgrp2
8196 eval $inlibc
8197
8198 : see if getppid exists
8199 set getppid d_getppid
8200 eval $inlibc
8201
8202 : see if getpriority exists
8203 set getpriority d_getprior
8204 eval $inlibc
8205
8206 : see if prototypes for various getprotoxxx netdb.h functions are available
8207 echo " "
8208 set d_getprotoprotos getprotoent $i_netdb netdb.h
8209 eval $hasproto
8210
8211 : see if getpwent exists
8212 set getpwent d_getpwent
8213 eval $inlibc
8214
8215
8216 : see if getservbyname exists
8217 set getservbyname d_getsbyname
8218 eval $inlibc
8219
8220 : see if getservbyport exists
8221 set getservbyport d_getsbyport
8222 eval $inlibc
8223
8224 : see if getservent exists
8225 set getservent d_getsent
8226 eval $inlibc
8227
8228 : see if prototypes for various getservxxx netdb.h functions are available
8229 echo " "
8230 set d_getservprotos getservent $i_netdb netdb.h
8231 eval $hasproto
8232
8233 : see if gettimeofday or ftime exists
8234 set gettimeofday d_gettimeod
8235 eval $inlibc
8236 case "$d_gettimeod" in
8237 "$undef")
8238         set ftime d_ftime 
8239         eval $inlibc
8240         ;;
8241 *)
8242         val="$undef"; set d_ftime; eval $setvar
8243         ;;
8244 esac
8245 case "$d_gettimeod$d_ftime" in
8246 "$undef$undef")
8247         echo " "
8248         echo 'No ftime() nor gettimeofday() -- timing may be less accurate.' >&4
8249         ;;
8250 esac
8251
8252 : see if this is an grp system
8253 set grp.h i_grp
8254 eval $inhdr
8255
8256 case "$i_grp" in
8257 $define)
8258         xxx=`./findhdr grp.h`
8259         $cppstdin $cppflags $cppminus < $xxx >$$.h
8260
8261         if $contains 'gr_passwd' $$.h >/dev/null 2>&1; then
8262                 val="$define"
8263         else
8264                 val="$undef"
8265         fi
8266         set d_grpasswd
8267         eval $setvar
8268
8269         $rm -f $$.h
8270         ;;
8271 *)
8272         val="$undef";
8273         set d_grpasswd; eval $setvar
8274         ;;
8275 esac
8276
8277 : see if hasmntopt exists
8278 set hasmntopt d_hasmntopt
8279 eval $inlibc
8280
8281 : see if this is a netinet/in.h or sys/in.h system
8282 set netinet/in.h i_niin sys/in.h i_sysin
8283 eval $inhdr
8284
8285 : see if arpa/inet.h has to be included
8286 set arpa/inet.h i_arpainet
8287 eval $inhdr
8288
8289 : see if htonl --and friends-- exists
8290 val=''
8291 set htonl val
8292 eval $inlibc
8293
8294 : Maybe they are macros.
8295 case "$val" in
8296 $undef)
8297         $cat >htonl.c <<EOM
8298 #include <stdio.h>
8299 #include <sys/types.h>
8300 #$i_niin I_NETINET_IN
8301 #$i_sysin I_SYS_IN
8302 #$i_arpainet I_ARPA_INET
8303 #ifdef I_NETINET_IN
8304 #include <netinet/in.h>
8305 #endif
8306 #ifdef I_SYS_IN
8307 #include <sys/in.h>
8308 #endif
8309 #ifdef I_ARPA_INET
8310 #include <arpa/inet.h>
8311 #endif
8312 #ifdef htonl
8313 printf("Defined as a macro.");
8314 #endif
8315 EOM
8316         $cppstdin $cppflags $cppminus < htonl.c >htonl.E 2>/dev/null
8317         if $contains 'Defined as a macro' htonl.E >/dev/null 2>&1; then
8318                 val="$define"
8319                 echo "But it seems to be defined as a macro." >&4
8320         fi
8321         $rm -f htonl.?
8322         ;;
8323 esac
8324 set d_htonl
8325 eval $setvar
8326
8327 : see which of string.h or strings.h is needed
8328 echo " "
8329 strings=`./findhdr string.h`
8330 if $test "$strings" && $test -r "$strings"; then
8331         echo "Using <string.h> instead of <strings.h>." >&4
8332         val="$define"
8333 else
8334         val="$undef"
8335         strings=`./findhdr strings.h`
8336         if $test "$strings" && $test -r "$strings"; then
8337                 echo "Using <strings.h> instead of <string.h>." >&4
8338         else
8339                 echo "No string header found -- You'll surely have problems." >&4
8340         fi
8341 fi
8342 set i_string
8343 eval $setvar
8344 case "$i_string" in
8345 "$undef") strings=`./findhdr strings.h`;;
8346 *)        strings=`./findhdr string.h`;;
8347 esac
8348
8349 : index or strchr
8350 echo " "
8351 if set index val -f; eval $csym; $val; then
8352         if set strchr val -f d_strchr; eval $csym; $val; then
8353                 if $contains strchr "$strings" >/dev/null 2>&1 ; then
8354                         val="$define"
8355                         vali="$undef"
8356                         echo "strchr() found." >&4
8357                 else
8358                         val="$undef"
8359                         vali="$define"
8360                         echo "index() found." >&4
8361                 fi
8362         else
8363                 val="$undef"
8364                 vali="$define"
8365                 echo "index() found." >&4
8366         fi
8367 else
8368         if set strchr val -f d_strchr; eval $csym; $val; then
8369                 val="$define"
8370                 vali="$undef"
8371                 echo "strchr() found." >&4
8372         else
8373                 echo "No index() or strchr() found!" >&4
8374                 val="$undef"
8375                 vali="$undef"
8376         fi
8377 fi
8378 set d_strchr; eval $setvar
8379 val="$vali"
8380 set d_index; eval $setvar
8381
8382 : check whether inet_aton exists
8383 set inet_aton d_inetaton
8384 eval $inlibc
8385
8386 : see if inttypes.h is available
8387 : we want a real compile instead of Inhdr because some systems
8388 : have an inttypes.h which includes non-existent headers
8389 echo " "
8390 $cat >try.c <<EOCP
8391 #include <inttypes.h>
8392 int main() {
8393         static int32_t foo32 = 0x12345678;
8394 }
8395 EOCP
8396 set try
8397 if eval $compile; then
8398         echo "<inttypes.h> found." >&4
8399         val="$define"
8400 else
8401         echo "<inttypes.h> NOT found." >&4
8402         val="$undef"
8403 fi
8404 $rm -f try.c try
8405 set i_inttypes
8406 eval $setvar
8407
8408 : check for int64_t
8409 case "$use64bits" in
8410 "$define" )
8411         echo " "
8412         echo $n "Checking to see if your system supports int64_t...$c" >&4
8413         $cat >try.c <<EOCP
8414 #include <sys/types.h>
8415 #$i_inttypes I_INTTYPES
8416 #ifdef I_INTTYPES
8417 #include <inttypes.h>
8418 #endif
8419 int64_t foo() { int64_t x; x = 7; return x; }
8420 EOCP
8421         if $cc $optimize $ccflags -c try.c >/dev/null 2>&1; then
8422                 val="$define"
8423                 echo " Yup, it does." >&4
8424         else
8425                 val="$undef"
8426                 echo " Nope, it doesn't." >&4
8427         fi
8428         $rm -f try.*
8429         ;;
8430 *)      val="$undef"
8431         ;;
8432 esac
8433 set d_int64t
8434 eval $setvar
8435
8436
8437 : Look for isascii
8438 echo " "
8439 $cat >isascii.c <<'EOCP'
8440 #include <stdio.h>
8441 #include <ctype.h>
8442 int main() {
8443         int c = 'A';
8444         if (isascii(c))
8445                 exit(0);
8446         else
8447                 exit(1);
8448 }
8449 EOCP
8450 set isascii
8451 if eval $compile; then
8452         echo "isascii() found." >&4
8453         val="$define"
8454 else
8455         echo "isascii() NOT found." >&4
8456         val="$undef"
8457 fi
8458 set d_isascii
8459 eval $setvar
8460 $rm -f isascii*
8461
8462 : see if killpg exists
8463 set killpg d_killpg
8464 eval $inlibc
8465
8466 : see if lchown exists
8467 echo " "
8468 $cat > try.c <<'EOCP'
8469 /* System header to define __stub macros and hopefully few prototypes,
8470     which can conflict with char lchown(); below.  */
8471 #include <assert.h>
8472 /* Override any gcc2 internal prototype to avoid an error.  */
8473 /* We use char because int might match the return type of a gcc2
8474    builtin and then its argument prototype would still apply.  */
8475 char lchown();
8476 int main() {
8477     /*  The GNU C library defines this for functions which it implements
8478         to always fail with ENOSYS.  Some functions are actually named
8479         something starting with __ and the normal name is an alias.  */
8480 #if defined (__stub_lchown) || defined (__stub___lchown)
8481 choke me
8482 #else
8483 lchown();
8484 #endif
8485 ; return 0; }
8486 EOCP
8487 set try
8488 if eval $compile; then
8489     $echo "lchown() found." >&4
8490     val="$define"
8491 else
8492     $echo "lchown() NOT found." >&4
8493     val="$undef"
8494 fi
8495 set d_lchown
8496 eval $setvar
8497
8498 : see if link exists
8499 set link d_link
8500 eval $inlibc
8501
8502 : see if localeconv exists
8503 set localeconv d_locconv
8504 eval $inlibc
8505
8506 : see if lockf exists
8507 set lockf d_lockf
8508 eval $inlibc
8509
8510 : check for length of double
8511 echo " "
8512 case "$doublesize" in
8513 '')
8514         $echo $n "Checking to see how big your double precision numbers are...$c" >&4
8515         $cat >try.c <<'EOCP'
8516 #include <stdio.h>
8517 int main()
8518 {
8519         printf("%d\n", sizeof(double));
8520 }
8521 EOCP
8522         set try
8523         if eval $compile_ok; then
8524                 doublesize=`./try`
8525                 $echo " $doublesize bytes." >&4
8526         else
8527                 dflt='8'
8528                 echo "(I can't seem to compile the test program.  Guessing...)"
8529                 rp="What is the size of a double precision number (in bytes)?"
8530                 . ./myread
8531                 doublesize="$ans"
8532         fi
8533         ;;
8534 esac
8535 $rm -f try.c try
8536
8537 : check for long doubles
8538 echo " "
8539 echo $n "Checking to see if your system supports long doubles...$c" >&4
8540 echo 'long double foo() { long double x; x = 7.0; return x; }' > try.c
8541 if $cc $optimize $ccflags -c try.c >/dev/null 2>&1; then
8542         val="$define"
8543         echo " Yup, it does." >&4
8544 else
8545         val="$undef"
8546         echo " Nope, it doesn't." >&4
8547 fi
8548 $rm try.*
8549 set d_longdbl
8550 eval $setvar
8551
8552 : check for length of long double
8553 case "${d_longdbl}${longdblsize}" in
8554 $define)
8555         echo " "
8556         $echo $n "Checking to see how big your long doubles are...$c" >&4
8557         $cat >try.c <<'EOCP'
8558 #include <stdio.h>
8559 int main()
8560 {
8561         printf("%d\n", sizeof(long double));
8562 }
8563 EOCP
8564         set try
8565         if eval $compile; then
8566                 longdblsize=`./try`
8567                 $echo " $longdblsize bytes." >&4
8568         else
8569                 dflt='8'
8570                 echo " "
8571                 echo "(I can't seem to compile the test program.  Guessing...)" >&4
8572                 rp="What is the size of a long double (in bytes)?"
8573                 . ./myread
8574                 longdblsize="$ans"
8575         fi
8576         if $test "X$doublesize" = "X$longdblsize"; then
8577                 echo "(That isn't any different from an ordinary double.)"
8578         fi      
8579         ;;
8580 esac
8581 $rm -f try.c try
8582
8583 : check for long long
8584 echo " "
8585 echo $n "Checking to see if your system supports long long...$c" >&4
8586 echo 'long long foo() { long long x; x = 7; return x; }' > try.c
8587 if $cc $optimize $ccflags -c try.c >/dev/null 2>&1; then
8588         val="$define"
8589         echo " Yup, it does." >&4
8590 else
8591         val="$undef"
8592         echo " Nope, it doesn't." >&4
8593 fi
8594 $rm try.*
8595 set d_longlong
8596 eval $setvar
8597
8598 : check for length of long long
8599 case "${d_longlong}${longlongsize}" in
8600 $define)
8601         echo " "
8602         $echo $n "Checking to see how big your long longs are...$c" >&4
8603         $cat >try.c <<'EOCP'
8604 #include <stdio.h>
8605 int main()
8606 {
8607         printf("%d\n", sizeof(long long));
8608 }
8609 EOCP
8610         set try
8611         if eval $compile_ok; then
8612                 longlongsize=`./try`
8613                 $echo " $longlongsize bytes." >&4
8614         else
8615                 dflt='8'
8616                 echo " "
8617                 echo "(I can't seem to compile the test program.  Guessing...)"
8618                 rp="What is the size of a long long (in bytes)?"
8619                 . ./myread
8620                 longlongsize="$ans"
8621         fi
8622         if $test "X$longsize" = "X$longlongsize"; then
8623                 echo "(That isn't any different from an ordinary long.)"
8624         fi      
8625         ;;
8626 esac
8627 $rm -f try.c try
8628
8629 : see if lstat exists
8630 set lstat d_lstat
8631 eval $inlibc
8632
8633 : see if madvise exists
8634 set madvise d_madvise
8635 eval $inlibc
8636
8637 : see if mblen exists
8638 set mblen d_mblen
8639 eval $inlibc
8640
8641 : see if mbstowcs exists
8642 set mbstowcs d_mbstowcs
8643 eval $inlibc
8644
8645 : see if mbtowc exists
8646 set mbtowc d_mbtowc
8647 eval $inlibc
8648
8649 : see if memcmp exists
8650 set memcmp d_memcmp
8651 eval $inlibc
8652
8653 : see if memcpy exists
8654 set memcpy d_memcpy
8655 eval $inlibc
8656
8657 : see if memmove exists
8658 set memmove d_memmove
8659 eval $inlibc
8660
8661 : see if memset exists
8662 set memset d_memset
8663 eval $inlibc
8664
8665 : see if mkdir exists
8666 set mkdir d_mkdir
8667 eval $inlibc
8668
8669 : see if mkfifo exists
8670 set mkfifo d_mkfifo
8671 eval $inlibc
8672
8673 : see if mktime exists
8674 set mktime d_mktime
8675 eval $inlibc
8676
8677 : see if this is a sys/mman.h system
8678 set sys/mman.h i_sysmman
8679 eval $inhdr
8680
8681 : see if mmap exists
8682 set mmap d_mmap
8683 eval $inlibc
8684 : see what shmat returns
8685 : default to something harmless
8686 mmaptype='void *'
8687 case "$i_sysmman$d_mmap" in
8688 "$define$define")
8689         $cat >mmap.c <<'END'
8690 #include <sys/mman.h>
8691 void *mmap();
8692 END
8693         if $cc $ccflags -c mmap.c >/dev/null 2>&1; then
8694                 mmaptype='void *'
8695         else
8696                 mmaptype='caddr_t'
8697         fi
8698         echo "and it returns ($mmaptype)." >&4
8699         ;;
8700 esac
8701
8702
8703
8704 : see if mprotect exists
8705 set mprotect d_mprotect
8706 eval $inlibc
8707
8708 : see if msgctl exists
8709 set msgctl d_msgctl
8710 eval $inlibc
8711
8712 : see if msgget exists
8713 set msgget d_msgget
8714 eval $inlibc
8715
8716 : see if msgsnd exists
8717 set msgsnd d_msgsnd
8718 eval $inlibc
8719
8720 : see if msgrcv exists
8721 set msgrcv d_msgrcv
8722 eval $inlibc
8723
8724 : see how much of the 'msg*(2)' library is present.
8725 h_msg=true
8726 echo " "
8727 case "$d_msgctl$d_msgget$d_msgsnd$d_msgrcv" in
8728 *"$undef"*) h_msg=false;;
8729 esac
8730 case "$osname" in
8731 freebsd)
8732     case "`ipcs 2>&1`" in
8733     "SVID messages"*"not configured"*)
8734         echo "Your $osname does not have the msg*(2) configured." >&4
8735         h_msg=false
8736         val="$undef"
8737         set msgctl d_msgctl
8738         eval $setvar
8739         set msgget d_msgget
8740         eval $setvar
8741         set msgsnd d_msgsnd
8742         eval $setvar
8743         set msgrcv d_msgrcv
8744         eval $setvar
8745         ;;
8746     esac
8747     ;;
8748 esac
8749 : we could also check for sys/ipc.h ...
8750 if $h_msg && $test `./findhdr sys/msg.h`; then
8751         echo "You have the full msg*(2) library." >&4
8752         val="$define"
8753 else
8754         echo "You don't have the full msg*(2) library." >&4
8755         val="$undef"
8756 fi
8757 set d_msg
8758 eval $setvar
8759
8760 : see if msync exists
8761 set msync d_msync
8762 eval $inlibc
8763
8764 : see if munmap exists
8765 set munmap d_munmap
8766 eval $inlibc
8767
8768 : see if nice exists
8769 set nice d_nice
8770 eval $inlibc
8771
8772 : see if POSIX threads are available
8773 if test "X$usethreads" = "X$define"; then
8774         set pthread.h i_pthread
8775         eval $inhdr
8776 else
8777         i_pthread="$undef"
8778 fi
8779
8780
8781
8782 : how to create joinable pthreads
8783 if test "X$usethreads" = "X$define" -a "X$i_pthread" = "X$define"; then
8784         echo " "
8785         echo "Checking what constant to use for creating joinable pthreads..." >&4 
8786         $cat >try.c <<'EOCP'
8787 #include <pthread.h>
8788 int main() {
8789     int detachstate = JOINABLE;
8790 }
8791 EOCP
8792         set try -DJOINABLE=PTHREAD_CREATE_JOINABLE
8793         if eval $compile; then
8794                 echo "You seem to use PTHREAD_CREATE_JOINABLE." >&4
8795                 val="$undef" # Yes, undef.
8796                 set d_old_pthread_create_joinable
8797                 eval $setvar
8798                 val=""
8799                 set old_pthread_create_joinable
8800                 eval $setvar
8801         else
8802                 set try -DJOINABLE=PTHREAD_CREATE_UNDETACHED
8803                 if eval $compile; then
8804                         echo "You seem to use PTHREAD_CREATE_UNDETACHED." >&4
8805                         val="$define"
8806                         set d_old_pthread_create_joinable
8807                         eval $setvar
8808                         val=PTHREAD_CREATE_UNDETACHED
8809                         set old_pthread_create_joinable
8810                         eval $setvar
8811                 else            
8812                         set try -DJOINABLE=__UNDETACHED
8813                         if eval $compile; then
8814                                 echo "You seem to use __UNDETACHED." >&4
8815                                 val="$define"
8816                                 set d_old_pthread_create_joinable
8817                                 eval $setvar
8818                                 val=__UNDETACHED
8819                                 set old_pthread_create_joinable
8820                                 eval $setvar
8821                         else
8822                                 echo "Egads, nothing obvious found.  Guessing that you use 0." >&4
8823                                 val="$define"
8824                                 set d_old_pthread_create_joinable
8825                                 eval $setvar
8826                                 val=0
8827                                 set old_pthread_create_joinable
8828                                 eval $setvar
8829                         fi
8830                 fi
8831         fi
8832         $rm -f try try.*
8833 else
8834     d_old_pthread_create_joinable="$undef"
8835     old_pthread_create_joinable=""
8836 fi
8837
8838 : see if pause exists
8839 set pause d_pause
8840 eval $inlibc
8841
8842 : see if pipe exists
8843 set pipe d_pipe
8844 eval $inlibc
8845
8846 : see if poll exists
8847 set poll d_poll
8848 eval $inlibc
8849
8850
8851 : see whether the various POSIXish _yields exist
8852 $cat >try.c <<EOP
8853 #include <pthread.h>
8854 #include <stdio.h>
8855 int main() {
8856 #ifdef SCHED_YIELD
8857         sched_yield();
8858 #else
8859 #ifdef PTHREAD_YIELD
8860         pthread_yield();
8861 #else
8862 #ifdef PTHREAD_YIELD_NULL
8863         pthread_yield(NULL);
8864 #endif
8865 #endif
8866 #endif
8867 }
8868 EOP
8869 : see if sched_yield exists
8870 set try -DSCHED_YIELD
8871 if eval $compile; then
8872     val="$define"
8873     sched_yield='sched_yield()'
8874 else
8875     val="$undef"
8876 fi
8877 case "$usethreads" in
8878 $define)
8879         case "$val" in
8880         $define) echo 'sched_yield() found.' >&4        ;;
8881         *)       echo 'sched_yield() NOT found.' >&4    ;;
8882         esac
8883 esac
8884 set d_sched_yield
8885 eval $setvar
8886
8887 : see if pthread_yield exists
8888 set try -DPTHREAD_YIELD
8889 if eval $compile; then
8890     val="$define"
8891     case "$sched_yield" in
8892     '') sched_yield='pthread_yield()' ;;
8893     esac
8894 else
8895     set try -DPTHREAD_YIELD_NULL
8896     if eval $compile; then
8897         val="$define"
8898         case "$sched_yield" in
8899         '') sched_yield='pthread_yield(NULL)' ;;
8900         esac
8901     else
8902         val="$undef"
8903     fi
8904 fi
8905 case "$usethreads" in
8906 $define)
8907         case "$val" in
8908         $define) echo 'pthread_yield() found.' >&4      ;;
8909         *)       echo 'pthread_yield() NOT found.' >&4  ;;
8910         esac
8911         ;;
8912 esac
8913 set d_pthread_yield
8914 eval $setvar
8915
8916 case "$sched_yield" in
8917 '') sched_yield=undef ;;
8918 esac
8919
8920 $rm -f try try.*
8921
8922 : see if this is a pwd.h system
8923 set pwd.h i_pwd
8924 eval $inhdr
8925
8926 case "$i_pwd" in
8927 $define)
8928         xxx=`./findhdr pwd.h`
8929         $cppstdin $cppflags $cppminus < $xxx >$$.h
8930
8931         if $contains 'pw_quota' $$.h >/dev/null 2>&1; then
8932                 val="$define"
8933         else
8934                 val="$undef"
8935         fi
8936         set d_pwquota
8937         eval $setvar
8938
8939         if $contains 'pw_age' $$.h >/dev/null 2>&1; then
8940                 val="$define"
8941         else
8942                 val="$undef"
8943         fi
8944         set d_pwage
8945         eval $setvar
8946
8947         if $contains 'pw_change' $$.h >/dev/null 2>&1; then
8948                 val="$define"
8949         else
8950                 val="$undef"
8951         fi
8952         set d_pwchange
8953         eval $setvar
8954
8955         if $contains 'pw_class' $$.h >/dev/null 2>&1; then
8956                 val="$define"
8957         else
8958                 val="$undef"
8959         fi
8960         set d_pwclass
8961         eval $setvar
8962
8963         if $contains 'pw_expire' $$.h >/dev/null 2>&1; then
8964                 val="$define"
8965         else
8966                 val="$undef"
8967         fi
8968         set d_pwexpire
8969         eval $setvar
8970
8971         if $contains 'pw_comment' $$.h >/dev/null 2>&1; then
8972                 val="$define"
8973         else
8974                 val="$undef"
8975         fi
8976         set d_pwcomment
8977         eval $setvar
8978
8979         if $contains 'pw_gecos' $$.h >/dev/null 2>&1; then
8980                 val="$define"
8981         else
8982                 val="$undef"
8983         fi
8984         set d_pwgecos
8985         eval $setvar
8986
8987         if $contains 'pw_passwd' $$.h >/dev/null 2>&1; then
8988                 val="$define"
8989         else
8990                 val="$undef"
8991         fi
8992         set d_pwpasswd
8993         eval $setvar
8994
8995         $rm -f $$.h
8996         ;;
8997 *)
8998         val="$undef"; 
8999         set d_pwquota; eval $setvar
9000         set d_pwage; eval $setvar
9001         set d_pwchange; eval $setvar
9002         set d_pwclass; eval $setvar
9003         set d_pwexpire; eval $setvar
9004         set d_pwcomment; eval $setvar
9005         set d_pwgecos; eval $setvar
9006         set d_pwpasswd; eval $setvar
9007         ;;
9008 esac
9009
9010 : see if readdir and friends exist
9011 set readdir d_readdir
9012 eval $inlibc
9013 set seekdir d_seekdir
9014 eval $inlibc
9015 set telldir d_telldir
9016 eval $inlibc
9017 set rewinddir d_rewinddir
9018 eval $inlibc
9019
9020 : see if readlink exists
9021 set readlink d_readlink
9022 eval $inlibc
9023
9024 : see if readv exists
9025 set readv d_readv
9026 eval $inlibc
9027
9028 : see if rename exists
9029 set rename d_rename
9030 eval $inlibc
9031
9032 : see if rmdir exists
9033 set rmdir d_rmdir
9034 eval $inlibc
9035
9036 : see if memory.h is available.
9037 val=''
9038 set memory.h val
9039 eval $inhdr
9040
9041 : See if it conflicts with string.h
9042 case "$val" in
9043 $define)
9044         case "$strings" in
9045         '') ;;
9046         *)
9047                 $cppstdin $cppflags $cppminus < $strings > mem.h
9048                 if $contains 'memcpy' mem.h >/dev/null 2>&1; then
9049                         echo " "
9050                         echo "We won't be including <memory.h>."
9051                         val="$undef"
9052                 fi
9053                 $rm -f mem.h
9054                 ;;
9055         esac
9056 esac
9057 set i_memory
9058 eval $setvar
9059
9060 : can bcopy handle overlapping blocks?
9061 val="$undef"
9062 case "$d_bcopy" in
9063 "$define")
9064         echo " "
9065         echo "Checking to see if your bcopy() can do overlapping copies..." >&4
9066         $cat >try.c <<EOCP
9067 #$i_memory I_MEMORY
9068 #$i_stdlib I_STDLIB
9069 #$i_string I_STRING
9070 #$i_unistd I_UNISTD
9071 EOCP
9072         $cat >>try.c <<'EOCP'
9073 #include <stdio.h>
9074 #ifdef I_MEMORY
9075 #  include <memory.h>
9076 #endif
9077 #ifdef I_STDLIB
9078 #  include <stdlib.h>
9079 #endif
9080 #ifdef I_STRING
9081 #  include <string.h>
9082 #else
9083 #  include <strings.h>
9084 #endif
9085 #ifdef I_UNISTD
9086 #  include <unistd.h>  /* Needed for NetBSD */
9087 #endif
9088 int main()
9089 {
9090 char buf[128], abc[128];
9091 char *b;
9092 int len;
9093 int off;
9094 int align;
9095
9096 bcopy("abcdefghijklmnopqrstuvwxyz0123456789", abc, 36);
9097
9098 for (align = 7; align >= 0; align--) {
9099         for (len = 36; len; len--) {
9100                 b = buf+align;
9101                 bcopy(abc, b, len);
9102                 for (off = 1; off <= len; off++) {
9103                         bcopy(b, b+off, len);
9104                         bcopy(b+off, b, len);
9105                         if (bcmp(b, abc, len))
9106                                 exit(1);
9107                 }
9108         }
9109 }
9110 exit(0);
9111 }
9112 EOCP
9113         set try
9114         if eval $compile_ok; then
9115                 if ./try 2>/dev/null; then
9116                         echo "Yes, it can."
9117                         val="$define"
9118                 else
9119                         echo "It can't, sorry."
9120                         case "$d_memmove" in
9121                         "$define") echo "But that's Ok since you have memmove()." ;;
9122                         esac
9123                 fi
9124         else
9125                 echo "(I can't compile the test program, so we'll assume not...)"
9126                 case "$d_memmove" in
9127                 "$define") echo "But that's Ok since you have memmove()." ;;
9128                 esac
9129         fi
9130         ;;
9131 esac
9132 $rm -f try.* try core
9133 set d_safebcpy
9134 eval $setvar
9135
9136 : can memcpy handle overlapping blocks?
9137 val="$undef"
9138 case "$d_memcpy" in
9139 "$define")
9140         echo " "
9141         echo "Checking to see if your memcpy() can do overlapping copies..." >&4
9142         $cat >try.c <<EOCP
9143 #$i_memory I_MEMORY
9144 #$i_stdlib I_STDLIB
9145 #$i_string I_STRING
9146 #$i_unistd I_UNISTD
9147 EOCP
9148         $cat >>try.c <<'EOCP'
9149 #include <stdio.h>
9150 #ifdef I_MEMORY
9151 #  include <memory.h>
9152 #endif
9153 #ifdef I_STDLIB
9154 #  include <stdlib.h>
9155 #endif
9156 #ifdef I_STRING
9157 #  include <string.h>
9158 #else
9159 #  include <strings.h>
9160 #endif
9161 #ifdef I_UNISTD
9162 #  include <unistd.h>  /* Needed for NetBSD */
9163 #endif
9164 int main()
9165 {
9166 char buf[128], abc[128];
9167 char *b;
9168 int len;
9169 int off;
9170 int align;
9171
9172 /* Copy "abcde..." string to char abc[] so that gcc doesn't
9173    try to store the string in read-only memory. */
9174 memcpy(abc, "abcdefghijklmnopqrstuvwxyz0123456789", 36);
9175
9176 for (align = 7; align >= 0; align--) {
9177         for (len = 36; len; len--) {
9178                 b = buf+align;
9179                 memcpy(b, abc, len);
9180                 for (off = 1; off <= len; off++) {
9181                         memcpy(b+off, b, len);
9182                         memcpy(b, b+off, len);
9183                         if (memcmp(b, abc, len))
9184                                 exit(1);
9185                 }
9186         }
9187 }
9188 exit(0);
9189 }
9190 EOCP
9191         set try
9192         if eval $compile_ok; then
9193                 if ./try 2>/dev/null; then
9194                         echo "Yes, it can."
9195                         val="$define"
9196                 else
9197                         echo "It can't, sorry."
9198                         case "$d_memmove" in
9199                         "$define") echo "But that's Ok since you have memmove()." ;;
9200                         esac
9201                 fi
9202         else
9203                 echo "(I can't compile the test program, so we'll assume not...)"
9204                 case "$d_memmove" in
9205                 "$define") echo "But that's Ok since you have memmove()." ;;
9206                 esac
9207         fi
9208         ;;
9209 esac
9210 $rm -f try.* try core
9211 set d_safemcpy
9212 eval $setvar
9213
9214 : can memcmp be trusted to compare relative magnitude?
9215 val="$undef"
9216 case "$d_memcmp" in
9217 "$define")
9218         echo " "
9219         echo "Checking if your memcmp() can compare relative magnitude..." >&4
9220         $cat >try.c <<EOCP
9221 #$i_memory I_MEMORY
9222 #$i_stdlib I_STDLIB
9223 #$i_string I_STRING
9224 #$i_unistd I_UNISTD
9225 EOCP
9226         $cat >>try.c <<'EOCP'
9227 #include <stdio.h>
9228 #ifdef I_MEMORY
9229 #  include <memory.h>
9230 #endif
9231 #ifdef I_STDLIB
9232 #  include <stdlib.h>
9233 #endif
9234 #ifdef I_STRING
9235 #  include <string.h>
9236 #else
9237 #  include <strings.h>
9238 #endif
9239 #ifdef I_UNISTD
9240 #  include <unistd.h>  /* Needed for NetBSD */
9241 #endif
9242 int main()
9243 {
9244 char a = -1;
9245 char b = 0;
9246 if ((a < b) && memcmp(&a, &b, 1) < 0)
9247         exit(1);
9248 exit(0);
9249 }
9250 EOCP
9251         set try
9252         if eval $compile_ok; then
9253                 if ./try 2>/dev/null; then
9254                         echo "Yes, it can."
9255                         val="$define"
9256                 else
9257                         echo "No, it can't (it uses signed chars)."
9258                 fi
9259         else
9260                 echo "(I can't compile the test program, so we'll assume not...)"
9261         fi
9262         ;;
9263 esac
9264 $rm -f try.* try core
9265 set d_sanemcmp
9266 eval $setvar
9267
9268 : see if select exists
9269 set select d_select
9270 eval $inlibc
9271
9272 : see if semctl exists
9273 set semctl d_semctl
9274 eval $inlibc
9275
9276 : see if semget exists
9277 set semget d_semget
9278 eval $inlibc
9279
9280 : see if semop exists
9281 set semop d_semop
9282 eval $inlibc
9283
9284 : see how much of the 'sem*(2)' library is present.
9285 h_sem=true
9286 echo " "
9287 case "$d_semctl$d_semget$d_semop" in
9288 *"$undef"*) h_sem=false;;
9289 esac
9290 case "$osname" in
9291 freebsd)
9292     case "`ipcs 2>&1`" in
9293     "SVID messages"*"not configured"*)
9294         echo "Your $osname does not have the sem*(2) configured." >&4
9295         h_sem=false
9296         val="$undef"
9297         set semctl d_semctl
9298         eval $setvar
9299         set semget d_semget
9300         eval $setvar
9301         set semop d_semop
9302         eval $setvar
9303         ;;
9304     esac
9305     ;;
9306 esac
9307 : we could also check for sys/ipc.h ...
9308 if $h_sem && $test `./findhdr sys/sem.h`; then
9309         echo "You have the full sem*(2) library." >&4
9310         val="$define"
9311 else
9312         echo "You don't have the full sem*(2) library." >&4
9313         val="$undef"
9314 fi
9315 set d_sem
9316 eval $setvar
9317
9318 : see whether sys/sem.h defines union semun
9319 echo " "
9320 $cat > try.c <<'END'
9321 #include <sys/types.h>
9322 #include <sys/ipc.h>
9323 #include <sys/sem.h>
9324 int main () { union semun semun; semun.buf = 0; }
9325 END
9326 set try
9327 if eval $compile; then
9328     echo "You have union semun in <sys/sem.h>." >&4
9329     val="$define"
9330 else
9331     echo "You do not have union semun in <sys/sem.h>." >&4
9332     val="$undef"
9333 fi
9334 $rm -f try try.c try.h
9335 set d_union_semun
9336 eval $setvar
9337
9338 : see how to do semctl IPC_STAT
9339 case "$d_sem" in
9340 $define)
9341     : see whether semctl IPC_STAT can use union semun
9342     echo " "
9343     $cat > try.h <<END
9344 #ifndef S_IRUSR
9345 #   ifdef S_IREAD
9346 #       define S_IRUSR S_IREAD
9347 #       define S_IWUSR S_IWRITE
9348 #       define S_IXUSR S_IEXEC
9349 #   else
9350 #       define S_IRUSR 0400
9351 #       define S_IWUSR 0200
9352 #       define S_IXUSR 0100
9353 #   endif
9354 #   define S_IRGRP (S_IRUSR>>3)
9355 #   define S_IWGRP (S_IWUSR>>3)
9356 #   define S_IXGRP (S_IXUSR>>3)
9357 #   define S_IROTH (S_IRUSR>>6)
9358 #   define S_IWOTH (S_IWUSR>>6)
9359 #   define S_IXOTH (S_IXUSR>>6)
9360 #endif
9361 #ifndef S_IRWXU
9362 #   define S_IRWXU (S_IRUSR|S_IWUSR|S_IXUSR)
9363 #   define S_IRWXG (S_IRGRP|S_IWGRP|S_IXGRP)
9364 #   define S_IRWXO (S_IROTH|S_IWOTH|S_IXOTH)
9365 #endif
9366 END
9367
9368     $cat > try.c <<END
9369 #include <sys/types.h>
9370 #include <sys/ipc.h>
9371 #include <sys/sem.h>
9372 #include <sys/stat.h>
9373 #include <stdio.h>
9374 #include <errno.h>
9375 #include "try.h"
9376 #ifndef errno
9377 extern int errno;
9378 #endif
9379 #$d_union_semun HAS_UNION_SEMUN
9380 int main() {
9381     union semun
9382 #ifndef HAS_UNION_SEMUN
9383     {
9384         int val;
9385         struct semid_ds *buf;
9386         unsigned short *array;
9387     }
9388 #endif
9389     arg;
9390     int sem, st;
9391
9392 #if defined(IPC_PRIVATE) && defined(S_IRWXU) && defined(S_IRWXG) && defined(S_IRWXO) && defined(IPC_CREAT)
9393     sem = semget(IPC_PRIVATE, 1, S_IRWXU|S_IRWXG|S_IRWXO|IPC_CREAT);
9394     if (sem > -1) {
9395         struct semid_ds argbuf;
9396         arg.buf = &argbuf;
9397 #       ifdef IPC_STAT
9398         st = semctl(sem, 0, IPC_STAT, arg);
9399         if (st == 0)
9400             printf("semun\n");
9401         else
9402 #       endif /* IPC_STAT */
9403             printf("semctl IPC_STAT failed: errno = %d\n", errno);
9404 #       ifdef IPC_RMID
9405         if (semctl(sem, 0, IPC_RMID, arg) != 0)
9406 #       endif /* IPC_RMID */
9407             printf("semctl IPC_RMID failed: errno = %d\n", errno);
9408     } else
9409 #endif /* IPC_PRIVATE && ... */
9410         printf("semget failed: errno = %d\n", errno);
9411   return 0;
9412 }
9413 END
9414     val="$undef"
9415     set try
9416     if eval $compile; then
9417         xxx=`./try`
9418         case "$xxx" in
9419         semun) val="$define" ;;
9420         esac
9421     fi
9422     $rm -f try try.c
9423     set d_semctl_semun
9424     eval $setvar
9425     case "$d_semctl_semun" in
9426     $define)
9427         echo "You can use union semun for semctl IPC_STAT." >&4
9428         also='also'
9429         ;;
9430     *)  echo "You cannot use union semun for semctl IPC_STAT." >&4
9431         also=''
9432         ;;
9433     esac
9434
9435     : see whether semctl IPC_STAT can use struct semid_ds pointer
9436     $cat > try.c <<'END'
9437 #include <sys/types.h>
9438 #include <sys/ipc.h>
9439 #include <sys/sem.h>
9440 #include <sys/stat.h>
9441 #include "try.h"
9442 #include <stdio.h>
9443 #include <errno.h>
9444 #ifndef errno
9445 extern int errno;
9446 #endif
9447 int main() {
9448     struct semid_ds arg;
9449     int sem, st;
9450
9451 #if defined(IPC_PRIVATE) && defined(S_IRWXU) && defined(S_IRWXG) &&  defined(S_IRWXO) && defined(IPC_CREAT)
9452     sem = semget(IPC_PRIVATE, 1, S_IRWXU|S_IRWXG|S_IRWXO|IPC_CREAT);
9453     if (sem > -1) {
9454 #       ifdef IPC_STAT
9455         st = semctl(sem, 0, IPC_STAT, &arg);
9456         if (st == 0)
9457             printf("semid_ds\n");
9458         else
9459 #       endif /* IPC_STAT */
9460             printf("semctl IPC_STAT failed: errno = %d\n", errno);
9461 #       ifdef IPC_RMID
9462         if (semctl(sem, 0, IPC_RMID, &arg) != 0)
9463 #       endif /* IPC_RMID */
9464             printf("semctl IPC_RMID failed: errno = %d\n", errno);
9465     } else
9466 #endif /* IPC_PRIVATE && ... */
9467         printf("semget failed: errno = %d\n", errno);
9468
9469     return 0;
9470 }
9471 END
9472     val="$undef"
9473     set try
9474     if eval $compile; then
9475         xxx=`./try`
9476         case "$xxx" in
9477         semid_ds) val="$define" ;;
9478         esac
9479     fi
9480     $rm -f try try.c
9481     set d_semctl_semid_ds
9482     eval $setvar
9483     case "$d_semctl_semid_ds" in
9484     $define)
9485         echo "You can $also use struct semid_ds* for semctl IPC_STAT." >&4
9486         ;;
9487     *)  echo "You cannot use struct semid_ds* for semctl IPC_STAT." >&4
9488         ;;
9489     esac
9490     $rm -f try.h
9491     ;;
9492 *)  val="$undef"
9493
9494     # We do not have the full sem*(2) library, so assume we can not
9495     # use either.
9496
9497     set d_semctl_semun
9498     eval $setvar
9499
9500     set d_semctl_semid_ds
9501     eval $setvar
9502     ;;
9503 esac
9504
9505 : see if setegid exists
9506 set setegid d_setegid
9507 eval $inlibc
9508
9509 : see if seteuid exists
9510 set seteuid d_seteuid
9511 eval $inlibc
9512
9513 : see if setgrent exists
9514 set setgrent d_setgrent
9515 eval $inlibc
9516
9517 : see if sethostent exists
9518 set sethostent d_sethent
9519 eval $inlibc
9520
9521 : see if setlinebuf exists
9522 set setlinebuf d_setlinebuf
9523 eval $inlibc
9524
9525 : see if setlocale exists
9526 set setlocale d_setlocale
9527 eval $inlibc
9528
9529 : see if setnetent exists
9530 set setnetent d_setnent
9531 eval $inlibc
9532
9533 : see if setprotoent exists
9534 set setprotoent d_setpent
9535 eval $inlibc
9536
9537 : see if setpgid exists
9538 set setpgid d_setpgid
9539 eval $inlibc
9540
9541 : see if setpgrp2 exists
9542 set setpgrp2 d_setpgrp2
9543 eval $inlibc
9544
9545 : see if setpriority exists
9546 set setpriority d_setprior
9547 eval $inlibc
9548
9549 : see if setpwent exists
9550 set setpwent d_setpwent
9551 eval $inlibc
9552
9553 : see if setregid exists
9554 set setregid d_setregid
9555 eval $inlibc
9556 set setresgid d_setresgid
9557 eval $inlibc
9558
9559 : see if setreuid exists
9560 set setreuid d_setreuid
9561 eval $inlibc
9562 set setresuid d_setresuid
9563 eval $inlibc
9564
9565 : see if setrgid exists
9566 set setrgid d_setrgid
9567 eval $inlibc
9568
9569 : see if setruid exists
9570 set setruid d_setruid
9571 eval $inlibc
9572
9573 : see if setservent exists
9574 set setservent d_setsent
9575 eval $inlibc
9576
9577 : see if setsid exists
9578 set setsid d_setsid
9579 eval $inlibc
9580
9581 : see if setvbuf exists
9582 set setvbuf d_setvbuf
9583 eval $inlibc
9584
9585 : see if sfio.h is available
9586 set sfio.h i_sfio
9587 eval $inhdr
9588
9589
9590 : see if sfio library is available
9591 case "$i_sfio" in
9592 $define)
9593         val=''
9594         set sfreserve val
9595         eval $inlibc
9596         ;;
9597 *)
9598         val="$undef"
9599         ;;
9600 esac
9601 : Ok, but do we want to use it.
9602 case "$val" in
9603 $define)
9604         case "$usesfio" in
9605         true|$define|[yY]*) dflt='y';;
9606         *) dflt='n';;
9607         esac
9608         echo "$package can use the sfio library, but it is experimental."
9609         rp="You seem to have sfio available, do you want to try using it?"
9610         . ./myread
9611         case "$ans" in
9612         y|Y) ;;
9613         *)      echo "Ok, avoiding sfio this time.  I'll use stdio instead."
9614                 val="$undef"
9615                 : Remove sfio from list of libraries to use
9616                 set `echo X $libs | $sed -e 's/-lsfio / /' -e 's/-lsfio$//'`
9617                 shift
9618                 libs="$*"
9619                 echo "libs = $libs" >&4
9620                 ;;
9621         esac
9622         ;;
9623 *)      case "$usesfio" in
9624         true|$define|[yY]*)
9625                 echo "Sorry, cannot find sfio on this machine" >&4
9626                 echo "Ignoring your setting of usesfio=$usesfio" >&4
9627                 ;;
9628         esac
9629         ;;
9630 esac
9631 set d_sfio
9632 eval $setvar
9633 case "$d_sfio" in
9634 $define) usesfio='true';;
9635 *) usesfio='false';;
9636 esac
9637
9638 : see if shmctl exists
9639 set shmctl d_shmctl
9640 eval $inlibc
9641
9642 : see if shmget exists
9643 set shmget d_shmget
9644 eval $inlibc
9645
9646 : see if shmat exists
9647 set shmat d_shmat
9648 eval $inlibc
9649 : see what shmat returns
9650 case "$d_shmat" in
9651 "$define")
9652         $cat >shmat.c <<'END'
9653 #include <sys/shm.h>
9654 void *shmat();
9655 END
9656         if $cc $ccflags -c shmat.c >/dev/null 2>&1; then
9657                 shmattype='void *'
9658         else
9659                 shmattype='char *'
9660         fi
9661         echo "and it returns ($shmattype)." >&4
9662         : see if a prototype for shmat is available
9663         xxx=`./findhdr sys/shm.h`
9664         $cppstdin $cppflags $cppminus < $xxx > shmat.c 2>/dev/null
9665         if $contains 'shmat.*(' shmat.c >/dev/null 2>&1; then
9666                 val="$define"
9667         else
9668                 val="$undef"
9669         fi
9670         $rm -f shmat.[co]
9671         ;;
9672 *)
9673         val="$undef"
9674         ;;
9675 esac
9676 set d_shmatprototype
9677 eval $setvar
9678
9679 : see if shmdt exists
9680 set shmdt d_shmdt
9681 eval $inlibc
9682
9683 : see how much of the 'shm*(2)' library is present.
9684 h_shm=true
9685 echo " "
9686 case "$d_shmctl$d_shmget$d_shmat$d_shmdt" in
9687 *"$undef"*) h_shm=false;;
9688 esac
9689 case "$osname" in
9690 freebsd)
9691     case "`ipcs 2>&1`" in
9692     "SVID shared memory"*"not configured"*)
9693         echo "Your $osname does not have the shm*(2) configured." >&4
9694         h_shm=false
9695         val="$undef"
9696         set shmctl d_shmctl
9697         evat $setvar
9698         set shmget d_shmget
9699         evat $setvar
9700         set shmat d_shmat
9701         evat $setvar
9702         set shmdt d_shmdt
9703         evat $setvar
9704         ;;
9705     esac
9706     ;;
9707 esac
9708 : we could also check for sys/ipc.h ...
9709 if $h_shm && $test `./findhdr sys/shm.h`; then
9710         echo "You have the full shm*(2) library." >&4
9711         val="$define"
9712 else
9713         echo "You don't have the full shm*(2) library." >&4
9714         val="$undef"
9715 fi
9716 set d_shm
9717 eval $setvar
9718
9719 echo " "
9720 : see if we have sigaction
9721 if set sigaction val -f d_sigaction; eval $csym; $val; then
9722         echo 'sigaction() found.' >&4
9723         $cat > try.c <<'EOP'
9724 #include <stdio.h>
9725 #include <sys/types.h>
9726 #include <signal.h>
9727 int main()
9728 {
9729     struct sigaction act, oact;
9730 }
9731 EOP
9732         set try
9733         if eval $compile_ok; then
9734                 val="$define"
9735         else
9736                 echo "But you don't seem to have a useable struct sigaction." >&4
9737                 val="$undef"
9738         fi
9739 else
9740         echo 'sigaction NOT found.' >&4
9741         val="$undef"
9742 fi
9743 set d_sigaction; eval $setvar
9744 $rm -f try try$_o try.c
9745
9746 : see if sigsetjmp exists
9747 echo " "
9748 case "$d_sigsetjmp" in
9749 '')
9750         $cat >try.c <<'EOP'
9751 #include <setjmp.h>
9752 sigjmp_buf env;
9753 int set = 1;
9754 int main()
9755 {
9756         if (sigsetjmp(env,1))
9757                 exit(set);
9758         set = 0;
9759         siglongjmp(env, 1);
9760         exit(1);
9761 }
9762 EOP
9763         set try
9764         if eval $compile; then
9765                 if ./try >/dev/null 2>&1; then
9766                         echo "POSIX sigsetjmp found." >&4
9767                         val="$define"
9768                 else
9769                         $cat >&4 <<EOM
9770 Uh-Oh! You have POSIX sigsetjmp and siglongjmp, but they do not work properly!!
9771 I'll ignore them.
9772 EOM
9773                         val="$undef"
9774                 fi
9775         else
9776                 echo "sigsetjmp not found." >&4
9777                 val="$undef"
9778         fi
9779         ;;
9780 *) val="$d_sigsetjmp"
9781         case "$d_sigsetjmp" in
9782         $define) echo "POSIX sigsetjmp found." >&4;;
9783         $undef) echo "sigsetjmp not found." >&4;;
9784         esac
9785         ;;
9786 esac
9787 set d_sigsetjmp
9788 eval $setvar
9789 $rm -f try.c try
9790
9791 : see if stat knows about block sizes
9792 echo " "
9793 set d_statblks stat st_blocks $i_sysstat sys/stat.h
9794 eval $hasfield
9795
9796 : see if _ptr and _cnt from stdio act std
9797 echo " "
9798 if $contains '_IO_fpos_t' `./findhdr stdio.h` >/dev/null 2>&1 ; then
9799         echo "(Looks like you have stdio.h from Linux.)"
9800         case "$stdio_ptr" in
9801         '') stdio_ptr='((fp)->_IO_read_ptr)'
9802                 ptr_lval=$define
9803                 ;;
9804         *)      ptr_lval=$d_stdio_ptr_lval;;
9805         esac
9806         case "$stdio_cnt" in
9807         '') stdio_cnt='((fp)->_IO_read_end - (fp)->_IO_read_ptr)'
9808                 cnt_lval=$undef
9809                 ;;
9810         *)      cnt_lval=$d_stdio_cnt_lval;;
9811         esac
9812         case "$stdio_base" in
9813         '') stdio_base='((fp)->_IO_read_base)';;
9814         esac
9815         case "$stdio_bufsiz" in
9816         '') stdio_bufsiz='((fp)->_IO_read_end - (fp)->_IO_read_base)';;
9817         esac
9818 else
9819         case "$stdio_ptr" in
9820         '') stdio_ptr='((fp)->_ptr)'
9821                 ptr_lval=$define
9822                 ;;
9823         *)      ptr_lval=$d_stdio_ptr_lval;;
9824         esac
9825         case "$stdio_cnt" in
9826         '') stdio_cnt='((fp)->_cnt)'
9827                 cnt_lval=$define
9828                 ;;
9829         *)      cnt_lval=$d_stdio_cnt_lval;;
9830         esac
9831         case "$stdio_base" in
9832         '') stdio_base='((fp)->_base)';;
9833         esac
9834         case "$stdio_bufsiz" in
9835         '') stdio_bufsiz='((fp)->_cnt + (fp)->_ptr - (fp)->_base)';;
9836         esac
9837 fi
9838 : test whether _ptr and _cnt really work
9839 echo "Checking how std your stdio is..." >&4
9840 $cat >try.c <<EOP
9841 #include <stdio.h>
9842 #define FILE_ptr(fp)    $stdio_ptr
9843 #define FILE_cnt(fp)    $stdio_cnt
9844 int main() {
9845         FILE *fp = fopen("try.c", "r");
9846         char c = getc(fp);
9847         if (
9848                 18 <= FILE_cnt(fp) &&
9849                 strncmp(FILE_ptr(fp), "include <stdio.h>\n", 18) == 0
9850         )
9851                 exit(0);
9852         exit(1);
9853 }
9854 EOP
9855 val="$undef"
9856 set try
9857 if eval $compile; then
9858         if ./try; then
9859                 echo "Your stdio acts pretty std."
9860                 val="$define"
9861         else
9862                 echo "Your stdio isn't very std."
9863         fi
9864 else
9865         echo "Your stdio doesn't appear very std."
9866 fi
9867 $rm -f try.c try
9868 set d_stdstdio
9869 eval $setvar
9870
9871 : Can _ptr be used as an lvalue?
9872 case "$d_stdstdio$ptr_lval" in
9873 $define$define) val=$define ;;
9874 *) val=$undef ;;
9875 esac
9876 set d_stdio_ptr_lval
9877 eval $setvar
9878
9879 : Can _cnt be used as an lvalue?
9880 case "$d_stdstdio$cnt_lval" in
9881 $define$define) val=$define ;;
9882 *) val=$undef ;;
9883 esac
9884 set d_stdio_cnt_lval
9885 eval $setvar
9886
9887 : see if _base is also standard
9888 val="$undef"
9889 case "$d_stdstdio" in
9890 $define)
9891         $cat >try.c <<EOP
9892 #include <stdio.h>
9893 #define FILE_base(fp)   $stdio_base
9894 #define FILE_bufsiz(fp) $stdio_bufsiz
9895 int main() {
9896         FILE *fp = fopen("try.c", "r");
9897         char c = getc(fp);
9898         if (
9899                 19 <= FILE_bufsiz(fp) &&
9900                 strncmp(FILE_base(fp), "#include <stdio.h>\n", 19) == 0
9901         )
9902                 exit(0);
9903         exit(1);
9904 }
9905 EOP
9906         set try
9907         if eval $compile; then
9908                 if ./try; then
9909                         echo "And its _base field acts std."
9910                         val="$define"
9911                 else
9912                         echo "But its _base field isn't std."
9913                 fi
9914         else
9915                 echo "However, it seems to be lacking the _base field."
9916         fi
9917         $rm -f try.c try
9918         ;;
9919 esac
9920 set d_stdiobase
9921 eval $setvar
9922
9923 : see if strcoll exists
9924 set strcoll d_strcoll
9925 eval $inlibc
9926
9927 : check for structure copying
9928 echo " "
9929 echo "Checking to see if your C compiler can copy structs..." >&4
9930 $cat >try.c <<'EOCP'
9931 int main()
9932 {
9933         struct blurfl {
9934                 int dyick;
9935         } foo, bar;
9936
9937         foo = bar;
9938 }
9939 EOCP
9940 if $cc -c try.c >/dev/null 2>&1 ; then
9941         val="$define"
9942         echo "Yup, it can."
9943 else
9944         val="$undef"
9945         echo "Nope, it can't."
9946 fi
9947 set d_strctcpy
9948 eval $setvar
9949 $rm -f try.*
9950
9951 : see if strerror and/or sys_errlist[] exist
9952 echo " "
9953 if test "X$d_strerror" = X -o "X$d_syserrlst" = X; then
9954     if set strerror val -f d_strerror; eval $csym; $val; then
9955                 echo 'strerror() found.' >&4
9956                 d_strerror="$define"
9957                 d_strerrm='strerror(e)'
9958                 if set sys_errlist val -a d_syserrlst; eval $csym; $val; then   
9959                         echo "(You also have sys_errlist[], so we could roll our own strerror.)" 
9960                         d_syserrlst="$define"
9961                 else
9962                         echo "(Since you don't have sys_errlist[], sterror() is welcome.)"
9963                         d_syserrlst="$undef"
9964                 fi
9965     elif xxx=`./findhdr string.h`; test "$xxx" || xxx=`./findhdr strings.h`; \
9966                         $contains '#[   ]*define.*strerror' "$xxx" >/dev/null 2>&1; then
9967                 echo 'strerror() found in string header.' >&4
9968                 d_strerror="$define"
9969                 d_strerrm='strerror(e)'
9970                 if set sys_errlist val -a d_syserrlst; eval $csym; $val; then   
9971                         echo "(Most probably, strerror() uses sys_errlist[] for descriptions.)"
9972                                 d_syserrlst="$define"
9973                 else
9974                         echo "(You don't appear to have any sys_errlist[], how can this be?)"
9975                         d_syserrlst="$undef"
9976                 fi
9977     elif set sys_errlist val -a d_syserrlst; eval $csym; $val; then
9978                 echo "strerror() not found, but you have sys_errlist[] so we'll use that." >&4
9979                 d_strerror="$undef"
9980                 d_syserrlst="$define"
9981                 d_strerrm='((e)<0||(e)>=sys_nerr?"unknown":sys_errlist[e])'
9982     else
9983                 echo 'strerror() and sys_errlist[] NOT found.' >&4
9984                 d_strerror="$undef"
9985                 d_syserrlst="$undef"
9986                 d_strerrm='"unknown"'
9987     fi
9988 fi
9989
9990 : see if strtod exists
9991 set strtod d_strtod
9992 eval $inlibc
9993
9994 : see if strtol exists
9995 set strtol d_strtol
9996 eval $inlibc
9997
9998 : see if strtoul exists
9999 set strtoul d_strtoul
10000 eval $inlibc
10001
10002 : see if strxfrm exists
10003 set strxfrm d_strxfrm
10004 eval $inlibc
10005
10006 : see if symlink exists
10007 set symlink d_symlink
10008 eval $inlibc
10009
10010 : see if syscall exists
10011 set syscall d_syscall
10012 eval $inlibc
10013
10014 : see if sysconf exists
10015 set sysconf d_sysconf
10016 eval $inlibc
10017
10018 : see if system exists
10019 set system d_system
10020 eval $inlibc
10021
10022 : see if tcgetpgrp exists
10023 set tcgetpgrp d_tcgetpgrp
10024 eval $inlibc
10025
10026 : see if tcsetpgrp exists
10027 set tcsetpgrp d_tcsetpgrp
10028 eval $inlibc
10029
10030 : see if sys/types.h has to be included
10031 set sys/types.h i_systypes
10032 eval $inhdr
10033
10034 : see if prototype for telldir is available
10035 echo " "
10036 set d_telldirproto telldir $i_systypes sys/types.h $i_dirent dirent.h
10037 eval $hasproto
10038
10039 : define an is-a-typedef? function
10040 typedef='type=$1; var=$2; def=$3; shift; shift; shift; inclist=$@;
10041 case "$inclist" in
10042 "") inclist="sys/types.h";;
10043 esac;
10044 eval "varval=\$$var";
10045 case "$varval" in
10046 "")
10047         $rm -f temp.c;
10048         for inc in $inclist; do
10049                 echo "#include <$inc>" >>temp.c;
10050         done;
10051         echo "#ifdef $type" >> temp.c;
10052         echo "printf(\"We have $type\");" >> temp.c;
10053         echo "#endif" >> temp.c;
10054         $cppstdin $cppflags $cppminus < temp.c >temp.E 2>/dev/null;
10055         if $contains $type temp.E >/dev/null 2>&1; then
10056                 eval "$var=\$type";
10057         else
10058                 eval "$var=\$def";
10059         fi;
10060         $rm -f temp.?;;
10061 *) eval "$var=\$varval";;
10062 esac'
10063
10064 : define an is-a-typedef? function that prompts if the type is not available.
10065 typedef_ask='type=$1; var=$2; def=$3; shift; shift; shift; inclist=$@;
10066 case "$inclist" in
10067 "") inclist="sys/types.h";;
10068 esac;
10069 eval "varval=\$$var";
10070 case "$varval" in
10071 "")
10072         $rm -f temp.c;
10073         for inc in $inclist; do
10074                 echo "#include <$inc>" >>temp.c;
10075         done;
10076         echo "#ifdef $type" >> temp.c;
10077         echo "printf(\"We have $type\");" >> temp.c;
10078         echo "#endif" >> temp.c;
10079         $cppstdin $cppflags $cppminus < temp.c >temp.E 2>/dev/null;
10080         echo " " ;
10081         echo "$rp" | $sed -e "s/What is/Looking for/" -e "s/?/./";
10082         if $contains $type temp.E >/dev/null 2>&1; then
10083                 echo "$type found." >&4;
10084                 eval "$var=\$type";
10085         else
10086                 echo "$type NOT found." >&4;
10087                 dflt="$def";
10088                 . ./myread ;
10089                 eval "$var=\$ans";
10090         fi;
10091         $rm -f temp.?;;
10092 *) eval "$var=\$varval";;
10093 esac'
10094
10095 : see if this is a sys/times.h system
10096 set sys/times.h i_systimes
10097 eval $inhdr
10098
10099 : see if times exists
10100 echo " "
10101 if set times val -f d_times; eval $csym; $val; then
10102         echo 'times() found.' >&4
10103         d_times="$define"
10104         inc=''
10105         case "$i_systimes" in
10106         "$define") inc='sys/times.h';;
10107         esac
10108         rp="What is the type returned by times() on this system?"
10109         set clock_t clocktype long stdio.h sys/types.h $inc
10110         eval $typedef_ask
10111 else
10112         echo 'times() NOT found, hope that will do.' >&4
10113         d_times="$undef"
10114         clocktype='int'
10115 fi
10116
10117 : see if truncate exists
10118 set truncate d_truncate
10119 eval $inlibc
10120
10121 : see if tzname[] exists
10122 echo " "
10123 if set tzname val -a d_tzname; eval $csym; $val; then
10124         val="$define"
10125         echo 'tzname[] found.' >&4
10126 else
10127         val="$undef"
10128         echo 'tzname[] NOT found.' >&4
10129 fi
10130 set d_tzname
10131 eval $setvar
10132
10133 : see if umask exists
10134 set umask d_umask
10135 eval $inlibc
10136
10137 : backward compatibility for d_hvfork
10138 if test X$d_hvfork != X; then
10139         d_vfork="$d_hvfork"
10140         d_hvfork=''
10141 fi
10142 : see if there is a vfork
10143 val=''
10144 set vfork val
10145 eval $inlibc
10146
10147 : Ok, but do we want to use it. vfork is reportedly unreliable in 
10148 : perl on Solaris 2.x, and probably elsewhere.
10149 case "$val" in
10150 $define)
10151         echo " "
10152         case "$usevfork" in
10153         false) dflt='n';;
10154         *) dflt='y';;
10155         esac
10156         rp="Some systems have problems with vfork().  Do you want to use it?"
10157         . ./myread
10158         case "$ans" in
10159         y|Y) ;;
10160         *)
10161                 echo "Ok, we won't use vfork()."
10162                 val="$undef"
10163                 ;;
10164         esac
10165         ;;
10166 esac
10167 set d_vfork
10168 eval $setvar
10169 case "$d_vfork" in
10170 $define) usevfork='true';;
10171 *) usevfork='false';;
10172 esac
10173
10174 : see if this is an sysdir system
10175 set sys/dir.h i_sysdir
10176 eval $inhdr
10177
10178 : see if this is an sysndir system
10179 set sys/ndir.h i_sysndir
10180 eval $inhdr
10181
10182 : see if closedir exists
10183 set closedir d_closedir
10184 eval $inlibc
10185
10186 case "$d_closedir" in
10187 "$define")
10188         echo " "
10189         echo "Checking whether closedir() returns a status..." >&4
10190         cat > closedir.c <<EOM
10191 #$i_dirent I_DIRENT             /**/
10192 #$i_sysdir I_SYS_DIR            /**/
10193 #$i_sysndir I_SYS_NDIR          /**/
10194 #$i_systypes I_SYS_TYPES        /**/
10195
10196 #if defined(I_SYS_TYPES)
10197 #include <sys/types.h>
10198 #endif
10199 #if defined(I_DIRENT)
10200 #include <dirent.h>
10201 #if defined(NeXT) && defined(I_SYS_DIR) /* NeXT needs dirent + sys/dir.h */
10202 #include <sys/dir.h>
10203 #endif
10204 #else
10205 #ifdef I_SYS_NDIR
10206 #include <sys/ndir.h>
10207 #else
10208 #ifdef I_SYS_DIR
10209 #ifdef hp9000s500
10210 #include <ndir.h>       /* may be wrong in the future */
10211 #else
10212 #include <sys/dir.h>
10213 #endif
10214 #endif
10215 #endif
10216 #endif 
10217 int main() { return closedir(opendir(".")); }
10218 EOM
10219         set closedir
10220         if eval $compile_ok; then
10221                 if ./closedir > /dev/null 2>&1 ; then
10222                         echo "Yes, it does."
10223                         val="$undef"
10224                 else
10225                         echo "No, it doesn't."
10226                         val="$define"
10227                 fi
10228         else
10229                 echo "(I can't seem to compile the test program--assuming it doesn't)"
10230                 val="$define"
10231         fi
10232         ;;
10233 *)
10234         val="$undef";
10235         ;;
10236 esac
10237 set d_void_closedir
10238 eval $setvar
10239 $rm -f closedir*
10240 : check for volatile keyword
10241 echo " "
10242 echo 'Checking to see if your C compiler knows about "volatile"...' >&4
10243 $cat >try.c <<'EOCP'
10244 int main()
10245 {
10246         typedef struct _goo_struct goo_struct;
10247         goo_struct * volatile goo = ((goo_struct *)0);
10248         struct _goo_struct {
10249                 long long_int;
10250                 int reg_int;
10251                 char char_var;
10252         };
10253         typedef unsigned short foo_t;
10254         char *volatile foo;
10255         volatile int bar;
10256         volatile foo_t blech;
10257         foo = foo;
10258 }
10259 EOCP
10260 if $cc -c $ccflags try.c >/dev/null 2>&1 ; then
10261         val="$define"
10262         echo "Yup, it does."
10263 else
10264         val="$undef"
10265         echo "Nope, it doesn't."
10266 fi
10267 set d_volatile
10268 eval $setvar
10269 $rm -f try.*
10270
10271 : see if there is a wait4
10272 set wait4 d_wait4
10273 eval $inlibc
10274
10275 : see if waitpid exists
10276 set waitpid d_waitpid
10277 eval $inlibc
10278
10279 : see if wcstombs exists
10280 set wcstombs d_wcstombs
10281 eval $inlibc
10282
10283 : see if wctomb exists
10284 set wctomb d_wctomb
10285 eval $inlibc
10286
10287 : see if writev exists
10288 set writev d_writev
10289 eval $inlibc
10290
10291 : preserve RCS keywords in files with variable substitution, grrr
10292 Date='$Date'
10293 Id='$Id'
10294 Log='$Log'
10295 RCSfile='$RCSfile'
10296 Revision='$Revision'
10297
10298 case "$crosscompile" in
10299 ''|[nN]*) crosscompile="$undef" ;;
10300 esac
10301
10302 case "$osname" in
10303 next) multiarch="$define" ;;
10304 esac
10305 case "$multiarch" in
10306 ''|[nN]*) multiarch="$undef" ;;
10307 esac
10308
10309 : check for alignment requirements
10310 echo " "
10311 case "$crosscompile$multiarch" in
10312 *$define*)
10313         $cat <<EOM
10314 You seem to be either cross-compiling or doing a multiarchitecture build,
10315 skipping the memory alignment check.
10316
10317 EOM
10318         case "$alignbytes" in
10319         '') alignbytes=8 ;;
10320         esac
10321         ;;
10322 *)
10323         case "$alignbytes" in
10324         '') echo "Checking alignment constraints..." >&4
10325                 $cat >try.c <<'EOCP'
10326 struct foobar {
10327         char foo;
10328         double bar;
10329 } try_algn;
10330 int main()
10331 {
10332         printf("%d\n", (char *)&try_algn.bar - (char *)&try_algn.foo);
10333 }
10334 EOCP
10335                 set try
10336                 if eval $compile_ok; then
10337                         dflt=`./try`
10338                 else
10339                         dflt='8'
10340                         echo "(I can't seem to compile the test program...)"
10341                 fi
10342                 ;;
10343         *) dflt="$alignbytes"
10344                 ;;
10345         esac
10346         rp="Doubles must be aligned on a how-many-byte boundary?"
10347         . ./myread
10348         alignbytes="$ans"
10349         $rm -f try.c try
10350         ;;
10351 esac
10352
10353
10354 : check for ordering of bytes in a long
10355 echo " "
10356 case "$crosscompile$multiarch" in
10357 *$define*)
10358         $cat <<EOM
10359 You seem to be either cross-compiling or doing a multiarchitecture build,
10360 skipping the byteorder check.
10361
10362 EOM
10363         byteorder=''
10364         ;;
10365 *)
10366         case "$byteorder" in
10367         '')
10368                 $cat <<'EOM'
10369 In the following, larger digits indicate more significance.  A big-endian
10370 machine like a Pyramid or a Motorola 680?0 chip will come out to 4321. A
10371 little-endian machine like a Vax or an Intel 80?86 chip would be 1234. Other
10372 machines may have weird orders like 3412.  A Cray will report 87654321. If
10373 the test program works the default is probably right.
10374 I'm now running the test program...
10375 EOM
10376                 $cat >try.c <<'EOCP'
10377 #include <stdio.h>
10378 int main()
10379 {
10380         int i;
10381         union {
10382                 unsigned long l;
10383                 char c[sizeof(long)];
10384         } u;
10385
10386         if (sizeof(long) > 4)
10387                 u.l = (0x08070605L << 32) | 0x04030201L;
10388         else
10389                 u.l = 0x04030201L;
10390         for (i = 0; i < sizeof(long); i++)
10391                 printf("%c", u.c[i]+'0');
10392         printf("\n");
10393         exit(0);
10394 }
10395 EOCP
10396                 xxx_prompt=y
10397                 set try
10398                 if eval $compile && ./try > /dev/null; then
10399                         dflt=`./try`
10400                         case "$dflt" in
10401                         [1-4][1-4][1-4][1-4]|12345678|87654321)
10402                                 echo "(The test program ran ok.)"
10403                                 echo "byteorder=$dflt"
10404                                 xxx_prompt=n
10405                         ;;
10406                         ????|????????) echo "(The test program ran ok.)" ;;
10407                         *) echo "(The test program didn't run right for some reason.)" ;;
10408                         esac
10409                 else
10410                         dflt='4321'
10411                         cat <<'EOM'
10412 (I can't seem to compile the test program.  Guessing big-endian...)
10413 EOM
10414                 fi
10415                 case "$xxx_prompt" in
10416                 y)
10417                         rp="What is the order of bytes in a long?"
10418                         . ./myread
10419                         byteorder="$ans"
10420                         ;;
10421                 *)      byteorder=$dflt
10422                         ;;
10423                 esac
10424                 ;;
10425         esac
10426         $rm -f try.c try
10427         ;;
10428 esac
10429
10430
10431 : how do we catenate cpp tokens here?
10432 echo " "
10433 echo "Checking to see how your cpp does stuff like catenate tokens..." >&4
10434 $cat >cpp_stuff.c <<'EOCP'
10435 #define RCAT(a,b)a/**/b
10436 #define ACAT(a,b)a ## b
10437 RCAT(Rei,ser)
10438 ACAT(Cir,cus)
10439 EOCP
10440 $cppstdin $cppflags $cppminus <cpp_stuff.c >cpp_stuff.out 2>&1
10441 if $contains 'Circus' cpp_stuff.out >/dev/null 2>&1; then
10442         echo "Oh!  Smells like ANSI's been here." >&4
10443         echo "We can catify or stringify, separately or together!"
10444         cpp_stuff=42
10445 elif $contains 'Reiser' cpp_stuff.out >/dev/null 2>&1; then
10446         echo "Ah, yes!  The good old days!" >&4
10447         echo "However, in the good old days we don't know how to stringify and"
10448         echo "catify at the same time."
10449         cpp_stuff=1
10450 else
10451         $cat >&4 <<EOM
10452 Hmm, I don't seem to be able to catenate tokens with your cpp.  You're going
10453 to have to edit the values of CAT[2-5] in config.h...
10454 EOM
10455         cpp_stuff="/* Help! How do we handle cpp_stuff? */*/"
10456 fi
10457 $rm -f cpp_stuff.*
10458
10459 : see if this is a db.h system
10460 set db.h i_db
10461 eval $inhdr
10462
10463 case "$i_db" in
10464 $define)
10465         : Check db version.
10466         echo " "
10467         echo "Checking Berkeley DB version ..." >&4
10468         $cat >try.c <<EOCP
10469 #$d_const HASCONST
10470 #ifndef HASCONST
10471 #define const
10472 #endif
10473 #include <sys/types.h>
10474 #include <stdio.h>
10475 #include <db.h>
10476 int main()
10477 {
10478 #ifdef DB_VERSION_MAJOR /* DB version >= 2 */
10479     int Major, Minor, Patch ;
10480     unsigned long Version ;
10481     (void)db_version(&Major, &Minor, &Patch) ;
10482     printf("You have Berkeley DB Version 2 or greater\n");
10483
10484     printf("db.h is from Berkeley DB Version %d.%d.%d\n",
10485                 DB_VERSION_MAJOR, DB_VERSION_MINOR, DB_VERSION_PATCH);
10486     printf("libdb is from Berkeley DB Version %d.%d.%d\n",
10487                 Major, Minor, Patch) ;
10488
10489     /* check that db.h & libdb are compatible */
10490     if (DB_VERSION_MAJOR != Major || DB_VERSION_MINOR != Minor || DB_VERSION_PATCH != Patch) {
10491         printf("db.h and libdb are incompatible\n") ;
10492         exit(3);        
10493     }
10494
10495     printf("db.h and libdb are compatible\n") ;
10496
10497     Version = DB_VERSION_MAJOR * 1000000 + DB_VERSION_MINOR * 1000
10498                 + DB_VERSION_PATCH ;
10499
10500     /* needs to be >= 2.3.4 */
10501     if (Version < 2003004) {
10502     /* if (DB_VERSION_MAJOR == 2 && DB_VERSION_MINOR == 0 && DB_VERSION_PATCH < 5) { */
10503         printf("but Perl needs Berkeley DB 2.3.4 or greater\n") ;
10504         exit(2);        
10505     }
10506
10507     exit(0);
10508 #else
10509 #if defined(_DB_H_) && defined(BTREEMAGIC) && defined(HASHMAGIC)
10510     printf("You have Berkeley DB Version 1\n");
10511     exit(0);    /* DB version < 2: the coast is clear. */
10512 #else
10513     exit(1);    /* <db.h> not Berkeley DB? */
10514 #endif
10515 #endif
10516 }
10517 EOCP
10518         set try
10519         if eval $compile && ./try; then
10520                 echo 'Looks OK.' >&4
10521         else
10522                 echo "I can't use Berkeley DB with your <db.h>.  I'll disable Berkeley DB." >&4
10523                 i_db=$undef
10524                 case " $libs " in
10525                 *"-ldb "*)
10526                         : Remove db from list of libraries to use
10527                         echo "Removing unusable -ldb from library list" >&4
10528                         set `echo X $libs | $sed -e 's/-ldb / /' -e 's/-ldb$//'`
10529                         shift
10530                         libs="$*"
10531                         echo "libs = $libs" >&4
10532                         ;;
10533                 esac
10534         fi
10535         $rm -f try.*
10536         ;;
10537 esac
10538
10539 case "$i_db" in
10540 define)
10541         : Check the return type needed for hash 
10542         echo " "
10543         echo "Checking return type needed for hash for Berkeley DB ..." >&4
10544         $cat >try.c <<EOCP
10545 #$d_const HASCONST
10546 #ifndef HASCONST
10547 #define const
10548 #endif
10549 #include <sys/types.h>
10550 #include <db.h>
10551
10552 #ifndef DB_VERSION_MAJOR
10553 u_int32_t hash_cb (ptr, size)
10554 const void *ptr;
10555 size_t size;
10556 {
10557 }
10558 HASHINFO info;
10559 int main()
10560 {
10561         info.hash = hash_cb;
10562 }
10563 #endif
10564 EOCP
10565         if $cc $ccflags -c try.c >try.out 2>&1 ; then
10566                 if $contains warning try.out >>/dev/null 2>&1 ; then
10567                         db_hashtype='int'
10568                 else
10569                         db_hashtype='u_int32_t'
10570                 fi
10571         else
10572                 : XXX Maybe we should just give up here.
10573                 db_hashtype=u_int32_t
10574                 $cat try.out >&4
10575                 echo "Help:  I can't seem to compile the db test program." >&4
10576                 echo "Something's wrong, but I'll assume you use $db_hashtype." >&4
10577         fi
10578         $rm -f try.*
10579         echo "Your version of Berkeley DB uses $db_hashtype for hash."
10580         ;;
10581 *)      db_hashtype=u_int32_t
10582         ;;
10583 esac
10584 case "$i_db" in
10585 define)
10586         : Check the return type needed for prefix 
10587         echo " "
10588         echo "Checking return type needed for prefix for Berkeley DB ..." >&4
10589         cat >try.c <<EOCP
10590 #$d_const HASCONST
10591 #ifndef HASCONST
10592 #define const
10593 #endif
10594 #include <sys/types.h>
10595 #include <db.h>
10596
10597 #ifndef DB_VERSION_MAJOR
10598 size_t prefix_cb (key1, key2)
10599 const DBT *key1;
10600 const DBT *key2;
10601 {
10602 }
10603 BTREEINFO info;
10604 int main()
10605 {
10606         info.prefix = prefix_cb;
10607 }
10608 #endif
10609 EOCP
10610         if $cc $ccflags -c try.c  >try.out 2>&1 ; then
10611                 if $contains warning try.out >>/dev/null 2>&1 ; then
10612                         db_prefixtype='int'
10613                 else
10614                         db_prefixtype='size_t'
10615                 fi
10616         else
10617                 db_prefixtype='size_t'
10618                 : XXX Maybe we should just give up here.
10619                 $cat try.out >&4
10620                 echo "Help:  I can't seem to compile the db test program." >&4
10621                 echo "Something's wrong, but I'll assume you use $db_prefixtype." >&4
10622         fi
10623         $rm -f try.*
10624         echo "Your version of Berkeley DB uses $db_prefixtype for prefix."
10625         ;;
10626 *)      db_prefixtype='size_t'
10627         ;;
10628 esac
10629
10630 : check for void type
10631 echo " "
10632 echo "Checking to see how well your C compiler groks the void type..." >&4
10633 case "$voidflags" in
10634 '')
10635         $cat >try.c <<'EOCP'
10636 #if TRY & 1
10637 void sub() {
10638 #else
10639 sub() {
10640 #endif
10641         extern void moo();      /* function returning void */
10642         void (*goo)();          /* ptr to func returning void */
10643 #if TRY & 8
10644         void *hue;              /* generic ptr */
10645 #endif
10646 #if TRY & 2
10647         void (*foo[10])();
10648 #endif
10649
10650 #if TRY & 4
10651         if(goo == moo) {
10652                 exit(0);
10653         }
10654 #endif
10655         exit(0);
10656 }
10657 int main() { sub(); }
10658 EOCP
10659         if $cc $ccflags -c -DTRY=$defvoidused try.c >.out 2>&1 ; then
10660                 voidflags=$defvoidused
10661         echo "Good.  It appears to support void to the level $package wants.">&4
10662                 if $contains warning .out >/dev/null 2>&1; then
10663                         echo "However, you might get some warnings that look like this:"
10664                         $cat .out
10665                 fi
10666         else
10667 echo "Hmm, your compiler has some difficulty with void. Checking further..." >&4
10668                 if $cc $ccflags -c -DTRY=1 try.c >/dev/null 2>&1; then
10669                         echo "It supports 1..."
10670                         if $cc $ccflags -c -DTRY=3 try.c >/dev/null 2>&1; then
10671                                 echo "It also supports 2..."
10672                                 if $cc $ccflags -c -DTRY=7 try.c >/dev/null 2>&1; then
10673                                         voidflags=7
10674                                         echo "And it supports 4 but not 8 definitely."
10675                                 else
10676                                         echo "It doesn't support 4..."
10677                                         if $cc $ccflags -c -DTRY=11 try.c >/dev/null 2>&1; then
10678                                                 voidflags=11
10679                                                 echo "But it supports 8."
10680                                         else
10681                                                 voidflags=3
10682                                                 echo "Neither does it support 8."
10683                                         fi
10684                                 fi
10685                         else
10686                                 echo "It does not support 2..."
10687                                 if $cc $ccflags -c -DTRY=13 try.c >/dev/null 2>&1; then
10688                                         voidflags=13
10689                                         echo "But it supports 4 and 8."
10690                                 else
10691                                         if $cc $ccflags -c -DTRY=5 try.c >/dev/null 2>&1; then
10692                                                 voidflags=5
10693                                                 echo "And it supports 4 but has not heard about 8."
10694                                         else
10695                                                 echo "However it supports 8 but not 4."
10696                                         fi
10697                                 fi
10698                         fi
10699                 else
10700                         echo "There is no support at all for void."
10701                         voidflags=0
10702                 fi
10703         fi
10704 esac
10705 case "$voidflags" in
10706 "$defvoidused") ;;
10707 *)      $cat >&4 <<'EOM'
10708   Support flag bits are:
10709     1: basic void declarations.
10710     2: arrays of pointers to functions returning void.
10711     4: operations between pointers to and addresses of void functions.
10712     8: generic void pointers.
10713 EOM
10714         dflt="$voidflags";
10715         rp="Your void support flags add up to what?"
10716         . ./myread
10717         voidflags="$ans"
10718         ;;
10719 esac
10720 $rm -f try.* .out
10721
10722
10723 : How can we generate normalized random numbers ?
10724 echo " "
10725 echo "Looking for a random number function..." >&4
10726 case "$randfunc" in
10727 '')
10728         if set drand48 val -f; eval $csym; $val; then
10729                 dflt="drand48"
10730                 echo "Good, found drand48()." >&4
10731         elif set random val -f; eval $csym; $val; then
10732                 dflt="random"
10733                 echo "OK, found random()." >&4
10734         else
10735                 dflt="rand"
10736                 echo "Yick, looks like I have to use rand()." >&4
10737         fi
10738         echo " "
10739         ;;
10740 *)
10741         dflt="$randfunc"
10742         ;;
10743 esac
10744 cont=true
10745
10746 case "$ccflags" in
10747 *-Dmy_rand=*|*-Dmy_srand=*)
10748         echo "Removing obsolete -Dmy_rand, -Dmy_srand, and -Drandbits from ccflags." >&4
10749         ccflags="`echo $ccflags | sed -e 's/-Dmy_rand=random/ /'`"
10750         ccflags="`echo $ccflags | sed -e 's/-Dmy_srand=srandom/ /'`"
10751         ccflags="`echo $ccflags | sed -e 's/-Drandbits=[0-9][0-9]*/ /'`"
10752         ;;
10753 esac
10754
10755 while $test "$cont"; do
10756         rp="Use which function to generate random numbers?"
10757         . ./myread
10758         if $test "$ans" = "$dflt"; then
10759                 : null
10760         else
10761                 randbits=''
10762         fi
10763         randfunc="$ans"
10764         if set $ans val -f; eval $csym; $val; then
10765                 cont=''
10766         else
10767                 dflt=y
10768                 rp="I cannot find function $ans. Use that name anyway?"
10769                 . ./myread
10770                 dflt=rand
10771                 case "$ans" in
10772                         [yY]*) cont='';;
10773                 esac
10774         fi
10775         case "$cont" in
10776         '')
10777                 case "$randfunc" in
10778                 drand48)
10779                         drand01="drand48()"
10780                         seedfunc="srand48"
10781                         randbits=48
10782                         randseedtype=long
10783                         ;;
10784                 rand|random)
10785                         case "$randbits" in
10786                         '')
10787 echo "Checking to see how many bits your $randfunc() function produces..." >&4
10788                                 $cat >try.c <<EOCP
10789 #$i_unistd I_UNISTD
10790 #$i_stdlib I_STDLIB
10791 #include <stdio.h>
10792 #ifdef I_UNISTD
10793 #  include <unistd.h>
10794 #endif
10795 #ifdef I_STDLIB
10796 #  include <stdlib.h>
10797 #endif
10798 int main()
10799 {
10800         register int i;
10801         register unsigned long tmp;
10802         register unsigned long max = 0L;
10803
10804         for (i = 1000; i; i--) {
10805                 tmp = (unsigned long) $randfunc();
10806                 if (tmp > max) max = tmp;
10807         }
10808         for (i = 0; max; i++)
10809                 max /= 2;
10810         printf("%d\n",i);
10811 }
10812 EOCP
10813                                 set try
10814                                 if eval $compile_ok; then
10815                                         dflt=`try`
10816                                 else
10817                                         dflt='?'
10818                                         echo "(I can't seem to compile the test program...)"
10819                                 fi
10820                                 ;;
10821                         *)
10822                                 dflt="$randbits"
10823                                 ;;
10824                         esac
10825                         rp="How many bits does your $randfunc() function produce?"
10826                         . ./myread
10827                         randbits="$ans"
10828                         $rm -f try.c try
10829                         drand01="($randfunc() / (double) ((unsigned long)1 << $randbits))"
10830                         seedfunc="s$randfunc"
10831                         randseedtype=unsigned
10832                         ;;
10833                 *)
10834                         dflt="31"
10835                         rp="How many bits does your $randfunc() function produce?"
10836                         . ./myread
10837                         randbits="$ans"
10838                         seedfunc="s$randfunc"
10839                         drand01="($randfunc() / (double) ((unsigned long)1 << $randbits))"
10840                         if set $seedfunc val -f; eval $csym; $val; then
10841                                 echo "(Using $seedfunc() to seed random generator)"
10842                         else
10843                                 echo "(Warning: no $seedfunc() to seed random generator)"
10844                                 seedfunc=rand
10845                         fi
10846                         randseedtype=unsigned
10847                         ;;
10848                 esac
10849                 ;;
10850         esac
10851 done
10852
10853 echo " "
10854 echo "Determining whether or not we are on an EBCDIC system..." >&4
10855 $cat >tebcdic.c <<'EOM'
10856 int main()
10857 {
10858   if ('M'==0xd4) return 0;
10859   return 1;
10860 }
10861 EOM
10862
10863 val=$undef
10864 set tebcdic
10865 if eval $compile_ok; then
10866         if ./tebcdic; then
10867                 echo "You have EBCDIC." >&4
10868                 val="$define"
10869         else
10870                 echo "Nope, no EBCDIC.  Assuming ASCII or some ISO Latin." >&4
10871         fi
10872 else
10873         echo "I'm unable to compile the test program." >&4
10874         echo "I'll assume ASCII or some ISO Latin." >&4
10875 fi
10876 $rm -f tebcdic.c tebcdic
10877 set ebcdic
10878 eval $setvar
10879
10880 : see what type file positions are declared as in the library
10881 rp="What is the type for file position used by fsetpos()?"
10882 set fpos_t fpostype long stdio.h sys/types.h
10883 eval $typedef_ask
10884
10885 : Store the full pathname to the ar program for use in the C program
10886 : Respect a hint or command line value for full_ar.
10887 case "$full_ar" in
10888 '') full_ar=$ar ;;
10889 esac
10890
10891 : Store the full pathname to the sed program for use in the C program
10892 full_sed=$sed
10893
10894 : see what type gids are declared as in the kernel
10895 echo " "
10896 echo "Looking for the type for group ids returned by getgid()."
10897 set gid_t gidtype xxx stdio.h sys/types.h
10898 eval $typedef
10899 case "$gidtype" in
10900 xxx)
10901         xxx=`./findhdr sys/user.h`
10902         set `grep 'groups\[NGROUPS\];' "$xxx" 2>/dev/null` unsigned short
10903         case $1 in
10904         unsigned) dflt="$1 $2" ;;
10905         *) dflt="$1" ;;
10906         esac
10907         ;;
10908 *) dflt="$gidtype";;
10909 esac
10910 case "$gidtype" in
10911 gid_t) echo "gid_t found." ;;
10912 *)      rp="What is the type for group ids returned by getgid()?"
10913         . ./myread
10914         gidtype="$ans"
10915         ;;
10916 esac
10917
10918 : see if getgroups exists
10919 set getgroups d_getgrps
10920 eval $inlibc
10921
10922 : see if setgroups exists
10923 set setgroups d_setgrps
10924 eval $inlibc
10925
10926
10927 : Find type of 2nd arg to 'getgroups()' and 'setgroups()'
10928 echo " "
10929 case "$d_getgrps$d_setgrps" in
10930 *define*)
10931         case "$groupstype" in
10932         '') dflt="$gidtype" ;;
10933         *)  dflt="$groupstype" ;;
10934         esac
10935         $cat <<EOM
10936 What type of pointer is the second argument to getgroups() and setgroups()?
10937 Usually this is the same as group ids, $gidtype, but not always.
10938
10939 EOM
10940         rp='What type pointer is the second argument to getgroups() and setgroups()?'
10941         . ./myread
10942         groupstype="$ans"
10943         ;;
10944 *)  groupstype="$gidtype";;
10945 esac
10946
10947 : see what type lseek is declared as in the kernel
10948 rp="What is the type used for lseek's offset on this system?"
10949 set off_t lseektype long stdio.h sys/types.h
10950 eval $typedef_ask
10951
10952 echo " "
10953 $echo $n "Checking to see how big your file offsets are...$c" >&4
10954 $cat >try.c <<EOCP
10955 #include <sys/types.h>
10956 #include <stdio.h>
10957 int main()
10958 {
10959         printf("%d\n", sizeof($lseektype));
10960 }
10961 EOCP
10962 set try
10963 if eval $compile_ok; then
10964         lseeksize=`./try`
10965         $echo " $lseeksize bytes." >&4
10966 else
10967         dflt='4'
10968         echo " "
10969         echo "(I can't seem to compile the test program.  Guessing...)"
10970         rp="What is the size of your file offsets (in bytes)?"
10971         . ./myread
10972         lseeksize="$ans"
10973 fi
10974 $rm -f try.c try
10975
10976 echo " "
10977 echo "Checking if your $make program sets \$(MAKE)..." >&4
10978 case "$make_set_make" in
10979 '')
10980         $sed 's/^X //' > testmake.mak << 'EOF'
10981 Xall:
10982 X       @echo 'maketemp="$(MAKE)"'
10983 EOF
10984         case "`$make -f testmake.mak 2>/dev/null`" in
10985         *maketemp=*) make_set_make='#' ;;
10986         *)      make_set_make="MAKE=$make" ;;
10987         esac
10988         $rm -f testmake.mak
10989         ;;
10990 esac
10991 case "$make_set_make" in
10992 '#') echo "Yup, it does.";;
10993 *) echo "Nope, it doesn't.";;
10994 esac
10995
10996 : see what type is used for mode_t
10997 rp="What is the type used for file modes for system calls (e.g. fchmod())?"
10998 set mode_t modetype int stdio.h sys/types.h
10999 eval $typedef_ask
11000
11001 : define a fucntion to check prototypes
11002 $cat > protochk <<EOSH
11003 $startsh
11004 cc="$cc"
11005 optimize="$optimize"
11006 ccflags="$ccflags"
11007 prototype="$prototype"
11008 define="$define"
11009 rm=$rm
11010 EOSH
11011
11012 $cat >> protochk <<'EOSH'
11013
11014 $rm -f try.c
11015 foo="$1"
11016 shift
11017 while test $# -ge 2; do
11018         case "$1" in
11019                 $define) echo "#include <$2>" >> try.c ;;
11020                 literal) echo "$2" >> try.c ;;
11021         esac
11022     shift 2
11023 done
11024 test "$prototype" = "$define"  && echo '#define CAN_PROTOTYPE' >> try.c
11025 cat >> try.c <<'EOCP'
11026 #ifdef CAN_PROTOTYPE
11027 #define _(args) args
11028 #else
11029 #define _(args) ()
11030 #endif
11031 EOCP
11032 echo "$foo" >> try.c
11033 echo 'int no_real_function_has_this_name _((void)) { return 0; }' >> try.c
11034 $cc $optimize $ccflags -c try.c > /dev/null 2>&1
11035 status=$?
11036 $rm -f try.[co]
11037 exit $status
11038 EOSH
11039 chmod +x protochk
11040 $eunicefix protochk
11041
11042 : see what type is used for size_t
11043 rp="What is the type used for the length parameter for string functions?"
11044 set size_t sizetype 'unsigned int' stdio.h sys/types.h
11045 eval $typedef_ask
11046
11047 : check for type of arguments to gethostbyaddr. 
11048 if test "X$netdb_host_type" = X -o "X$netdb_hlen_type" = X; then
11049         case "$d_gethbyaddr" in
11050         $define)
11051                 $cat <<EOM
11052
11053 Checking to see what type of arguments are accepted by gethostbyaddr().
11054 EOM
11055                 hdrs="$define sys/types.h
11056                         $d_socket sys/socket.h 
11057                         $i_niin netinet/in.h 
11058                         $i_netdb netdb.h
11059                         $i_unistd unistd.h"
11060                 : The first arg can 'char *' or 'void *'
11061                 : The second arg is some of integral type
11062                 for xxx in in_addr_t 'const void *' 'const char *' 'void *' 'char *'; do
11063                         for yyy in size_t long int; do
11064                                 case "$netdb_host_type" in
11065                                 '')     try="extern struct hostent *gethostbyaddr($xxx, $yyy, int);"
11066                                         if ./protochk "$try" $hdrs; then
11067                                                 echo "Your system accepts $xxx for the first arg."
11068                                                 echo "...and $yyy for the second arg."
11069                                                 netdb_host_type="$xxx"
11070                                                 netdb_hlen_type="$yyy"
11071                                         fi
11072                                         ;;
11073                                 esac
11074                         done
11075                 done
11076                 : In case none of those worked, prompt the user.
11077                 case "$netdb_host_type" in
11078                 '')     rp='What is the type for the 1st argument to gethostbyaddr?'
11079                         dflt='char *'
11080                         . ./myread
11081                         netdb_host_type=$ans
11082                         rp='What is the type for the 2nd argument to gethostbyaddr?'
11083                         dflt="$sizetype"
11084                         . ./myread
11085                         netdb_hlen_type=$ans
11086                         ;;
11087                 esac
11088                 ;;
11089         *)      : no gethostbyaddr, so pick harmless defaults
11090                 netdb_host_type='char *'
11091                 netdb_hlen_type="$sizetype"
11092                 ;;
11093         esac
11094         # Remove the "const" if needed. -- but then we'll have a 
11095         # prototype clash!
11096         # netdb_host_type=`echo "$netdb_host_type" | sed 's/^const //'`
11097 fi
11098
11099 : check for type of argument to gethostbyname. 
11100 if test "X$netdb_name_type" = X ; then
11101         case "$d_gethbyname" in
11102         $define)
11103                 $cat <<EOM
11104
11105 Checking to see what type of argument is accepted by gethostbyname().
11106 EOM
11107                 hdrs="$define sys/types.h
11108                         $d_socket sys/socket.h 
11109                         $i_niin netinet/in.h 
11110                         $i_netdb netdb.h
11111                         $i_unistd unistd.h"
11112                 for xxx in "const char *" "char *"; do
11113                         case "$netdb_name_type" in
11114                         '')     try="extern struct hostent *gethostbyname($xxx);"
11115                                 if ./protochk "$try" $hdrs; then
11116                                         echo "Your system accepts $xxx."
11117                                         netdb_name_type="$xxx"
11118                                 fi
11119                                 ;;
11120                         esac
11121                 done
11122                 : In case none of those worked, prompt the user.
11123                 case "$netdb_name_type" in
11124                 '')     rp='What is the type for the 1st argument to gethostbyname?'
11125                         dflt='char *'
11126                         . ./myread
11127                         netdb_name_type=$ans
11128                         ;;
11129                 esac
11130                 ;;
11131         *)      : no gethostbyname, so pick harmless default
11132                 netdb_name_type='char *'
11133                 ;;
11134         esac
11135 fi
11136
11137 : check for type of 1st argument to getnetbyaddr. 
11138 if test "X$netdb_net_type" = X ; then
11139         case "$d_getnbyaddr" in
11140         $define)
11141                 $cat <<EOM
11142
11143 Checking to see what type of 1st argument is accepted by getnetbyaddr().
11144 EOM
11145                 hdrs="$define sys/types.h
11146                         $d_socket sys/socket.h 
11147                         $i_niin netinet/in.h 
11148                         $i_netdb netdb.h
11149                         $i_unistd unistd.h"
11150                 for xxx in in_addr_t "unsigned long" long "unsigned int" int; do
11151                         case "$netdb_net_type" in
11152                         '')     try="extern struct netent *getnetbyaddr($xxx, int);"
11153                                 if ./protochk "$try" $hdrs; then
11154                                         echo "Your system accepts $xxx."
11155                                         netdb_net_type="$xxx"
11156                                 fi
11157                                 ;;
11158                         esac
11159                 done
11160                 : In case none of those worked, prompt the user.
11161                 case "$netdb_net_type" in
11162                 '')     rp='What is the type for the 1st argument to getnetbyaddr?'
11163                         dflt='long'
11164                         . ./myread
11165                         netdb_net_type=$ans
11166                         ;;
11167                 esac
11168                 ;;
11169         *)      : no getnetbyaddr, so pick harmless default
11170                 netdb_net_type='long'
11171                 ;;
11172         esac
11173 fi
11174 : locate the preferred pager for this system
11175 case "$pager" in
11176 '')
11177         dflt=''
11178         case "$pg" in
11179         /*) dflt=$pg;;
11180         esac
11181         case "$more" in
11182         /*) dflt=$more;;
11183         esac
11184         case "$less" in
11185         /*) dflt=$less;;
11186         esac
11187         case "$dflt" in
11188         '') dflt=/usr/ucb/more;;
11189         esac
11190         ;;
11191 *) dflt="$pager";;
11192 esac
11193 echo " "
11194 fn=f/
11195 rp='What pager is used on your system?'
11196 . ./getfile
11197 pager="$ans"
11198
11199 : see what type pids are declared as in the kernel
11200 rp="What is the type of process ids on this system?"
11201 set pid_t pidtype int stdio.h sys/types.h
11202 eval $typedef_ask
11203
11204 : check for length of pointer
11205 echo " "
11206 case "$ptrsize" in
11207 '')
11208         $echo $n "Checking to see how big your pointers are...$c" >&4
11209         if test "$voidflags" -gt 7; then
11210                 echo '#define VOID_PTR char *' > try.c
11211         else
11212                 echo '#define VOID_PTR void *' > try.c
11213         fi
11214         $cat >>try.c <<'EOCP'
11215 #include <stdio.h>
11216 int main()
11217 {
11218         printf("%d\n", sizeof(VOID_PTR));
11219         exit(0);
11220 }
11221 EOCP
11222         set try
11223         if eval $compile_ok; then
11224                 ptrsize=`./try`
11225                 $echo " $ptrsize bytes." >&4
11226         else
11227                 dflt='4'
11228                 echo "(I can't seem to compile the test program.  Guessing...)" >&4
11229                 rp="What is the size of a pointer (in bytes)?"
11230                 . ./myread
11231                 ptrsize="$ans"
11232         fi
11233         ;;
11234 esac
11235 $rm -f try.c try
11236
11237 : see if ar generates random libraries by itself
11238 echo " "
11239 echo "Checking how to generate random libraries on your machine..." >&4
11240 echo 'int bar1() { return bar2(); }' > bar1.c
11241 echo 'int bar2() { return 2; }' > bar2.c
11242 $cat > foo.c <<'EOP'
11243 int main() { printf("%d\n", bar1()); exit(0); }
11244 EOP
11245 $cc $ccflags -c bar1.c >/dev/null 2>&1
11246 $cc $ccflags -c bar2.c >/dev/null 2>&1
11247 $cc $ccflags -c foo.c >/dev/null 2>&1
11248 $ar rc bar$_a bar2$_o bar1$_o >/dev/null 2>&1
11249 if $cc $ccflags $ldflags -o foobar foo$_o bar$_a $libs > /dev/null 2>&1 &&
11250         ./foobar >/dev/null 2>&1; then
11251         echo "$ar appears to generate random libraries itself."
11252         orderlib=false
11253         ranlib=":"
11254 elif $ar ts bar$_a >/dev/null 2>&1 &&
11255         $cc $ccflags $ldflags -o foobar foo$_o bar$_a $libs > /dev/null 2>&1 &&
11256         ./foobar >/dev/null 2>&1; then
11257                 echo "a table of contents needs to be added with '$ar ts'."
11258                 orderlib=false
11259                 ranlib="$ar ts"
11260 else
11261         case "$ranlib" in
11262         :) ranlib='';;
11263         '')
11264                 ranlib=`./loc ranlib X /usr/bin /bin /usr/local/bin`
11265                 $test -f $ranlib || ranlib=''
11266                 ;;
11267         esac
11268         if $test -n "$ranlib"; then
11269                 echo "your system has '$ranlib'; we'll use that."
11270                 orderlib=false
11271         else
11272                 echo "your system doesn't seem to support random libraries"
11273                 echo "so we'll use lorder and tsort to order the libraries."
11274                 orderlib=true
11275                 ranlib=":"
11276         fi
11277 fi
11278 $rm -f foo* bar* 
11279
11280 : check for type of arguments to select. 
11281 case "$selecttype" in
11282 '') case "$d_select" in
11283         $define)
11284                 $cat <<EOM
11285 Checking to see what type of arguments are accepted by select().
11286 EOM
11287                 hdrs="$define sys/types.h
11288                         $i_systime sys/time.h 
11289                         $i_sysselct sys/select.h
11290                         $d_socket sys/socket.h"
11291                 : The first arg can be int, unsigned, or size_t
11292                 : The last arg may or may not be 'const'
11293                 val=''
11294                 : void pointer has been seen but using that
11295                 : breaks the selectminbits test
11296                 for xxx in 'fd_set *' 'int *'; do
11297                         for nfd in 'int' 'size_t' 'unsigned long' 'unsigned' ; do
11298                                 for tmo in 'struct timeval *' 'const struct timeval *'; do
11299                                         case "$val" in
11300                                         '')     try="extern select _(($nfd, $xxx, $xxx, $xxx, $tmo));"
11301                                                 if ./protochk "$try" $hdrs; then
11302                                                         echo "Your system accepts $xxx."
11303                                                         val="$xxx"
11304                                                 fi
11305                                                 ;;
11306                                         esac
11307                                 done
11308                         done
11309                 done
11310                 case "$val" in
11311                 '')     rp='What is the type for the 2nd, 3rd, and 4th arguments to select?'
11312                         case "$d_fd_set" in
11313                                 $define) dflt="fd_set *" ;;
11314                                 *)              dflt="int *" ;;
11315                         esac
11316                         . ./myread
11317                         val=$ans
11318                         ;;
11319                 esac
11320                 selecttype="$val"
11321                 ;;
11322         *)      : no select, so pick a harmless default
11323                 selecttype='int *'
11324                 ;;
11325         esac
11326         ;;
11327 esac
11328
11329 : check for the select 'width'
11330 case "$selectminbits" in
11331 '') case "$d_select" in
11332         $define)
11333                 $cat <<EOM
11334
11335 Checking to see on how many bits at a time your select() operates...
11336 EOM
11337                 $cat >try.c <<EOCP
11338 #include <sys/types.h>
11339 #$i_time I_TIME
11340 #$i_systime I_SYS_TIME
11341 #$i_systimek I_SYS_TIME_KERNEL
11342 #ifdef I_TIME
11343 #   include <time.h>
11344 #endif
11345 #ifdef I_SYS_TIME
11346 #   ifdef I_SYS_TIME_KERNEL
11347 #       define KERNEL
11348 #   endif
11349 #   include <sys/time.h>
11350 #   ifdef I_SYS_TIME_KERNEL
11351 #       undef KERNEL
11352 #   endif
11353 #endif
11354 #$i_sysselct I_SYS_SELECT
11355 #ifdef I_SYS_SELECT
11356 #include <sys/select.h>
11357 #endif
11358 #include <stdio.h>
11359 $selecttype b;
11360 #define S sizeof(*(b))
11361 #define MINBITS 64
11362 #define NBYTES (S * 8 > MINBITS ? S : MINBITS/8)
11363 #define NBITS  (NBYTES * 8)
11364 int main() {
11365     char s[NBYTES];
11366     struct timeval t;
11367     int i;
11368     FILE* fp;
11369     int fd;
11370
11371     fclose(stdin);
11372     fp = fopen("try.c", "r");
11373     if (fp == 0)
11374       exit(1);
11375     fd = fileno(fp);
11376     if (fd < 0)
11377       exit(2);
11378     b = ($selecttype)s;
11379     for (i = 0; i < NBITS; i++)
11380         FD_SET(i, b);
11381     t.tv_sec  = 0;
11382     t.tv_usec = 0;
11383     select(fd + 1, b, 0, 0, &t);
11384     for (i = NBITS - 1; i > fd && FD_ISSET(i, b); i--);
11385     printf("%d\n", i + 1);
11386     return 0;
11387 }
11388 EOCP
11389                 set try
11390                 if eval $compile_ok; then
11391                         selectminbits=`./try`
11392                         case "$selectminbits" in
11393                         '')     cat >&4 <<EOM
11394 Cannot figure out on how many bits at a time your select() operates.
11395 I'll play safe and guess it is 32 bits.
11396 EOM
11397                                 selectminbits=32
11398                                 bits="32 bits"
11399                                 ;;
11400                         1)      bits="1 bit" ;;
11401                         *)      bits="$selectminbits bits" ;;
11402                         esac
11403                         echo "Your select() operates on $bits at a time." >&4
11404                 else
11405                         rp='What is the minimum number of bits your select() operates on?'
11406                         case "$byteorder" in
11407                         1234|12345678)  dflt=32 ;;
11408                         *)              dflt=1  ;;
11409                         esac
11410                         . ./myread
11411                         val=$ans
11412                         selectminbits="$val"
11413                 fi
11414                 $rm -f try.* try
11415                 ;;
11416         *)      : no select, so pick a harmless default
11417                 selectminbits='32'
11418                 ;;
11419         esac
11420         ;;
11421 esac
11422
11423 : Trace out the files included by signal.h, then look for SIGxxx names.
11424 : Remove SIGARRAYSIZE used by HPUX.
11425 : Remove SIGTYP void lines used by OS2.
11426 xxx=`echo '#include <signal.h>' |
11427         $cppstdin $cppminus $cppflags 2>/dev/null |
11428         $grep '^[       ]*#.*include' | 
11429         $awk "{print \\$$fieldn}" | $sed 's!"!!g' | $sort | $uniq`
11430 : Check this list of files to be sure we have parsed the cpp output ok.
11431 : This will also avoid potentially non-existent files, such 
11432 : as ../foo/bar.h
11433 xxxfiles=''
11434 for xx in $xxx /dev/null ; do
11435         $test -f "$xx" && xxxfiles="$xxxfiles $xx"
11436 done
11437 : If we have found no files, at least try signal.h
11438 case "$xxxfiles" in
11439 '')     xxxfiles=`./findhdr signal.h` ;;
11440 esac
11441 xxx=`awk '
11442 $1 ~ /^#define$/ && $2 ~ /^SIG[A-Z0-9]*$/ && $2 !~ /SIGARRAYSIZE/ && $3 !~ /void/ {
11443         print substr($2, 4, 20)
11444 }
11445 $1 == "#" && $2 ~ /^define$/ && $3 ~ /^SIG[A-Z0-9]*$/ && $3 !~ /SIGARRAYSIZE/ && $4 !~ /void/ {
11446         print substr($3, 4, 20)
11447 }' $xxxfiles`
11448 : Append some common names just in case the awk scan failed.
11449 xxx="$xxx ABRT ALRM BUS CHLD CLD CONT DIL EMT FPE HUP ILL INT IO IOT KILL"
11450 xxx="$xxx LOST PHONE PIPE POLL PROF PWR QUIT SEGV STKFLT STOP SYS TERM TRAP"
11451 xxx="$xxx TSTP TTIN TTOU URG USR1 USR2 USR3 USR4 VTALRM"
11452 xxx="$xxx WINCH WIND WINDOW XCPU XFSZ"
11453 : generate a few handy files for later
11454 $cat > signal.c <<'EOCP'
11455 #include <sys/types.h>
11456 #include <signal.h>
11457 #include <stdio.h>
11458 int main() {
11459
11460 /* Strange style to avoid deeply-nested #if/#else/#endif */
11461 #ifndef NSIG
11462 #  ifdef _NSIG
11463 #    define NSIG (_NSIG)
11464 #  endif
11465 #endif
11466
11467 #ifndef NSIG
11468 #  ifdef SIGMAX
11469 #    define NSIG (SIGMAX+1)
11470 #  endif
11471 #endif
11472
11473 #ifndef NSIG
11474 #  ifdef SIG_MAX
11475 #    define NSIG (SIG_MAX+1)
11476 #  endif
11477 #endif
11478
11479 #ifndef NSIG
11480 #  ifdef MAXSIG
11481 #    define NSIG (MAXSIG+1)
11482 #  endif
11483 #endif
11484
11485 #ifndef NSIG
11486 #  ifdef MAX_SIG
11487 #    define NSIG (MAX_SIG+1)
11488 #  endif
11489 #endif
11490
11491 #ifndef NSIG
11492 #  ifdef SIGARRAYSIZE
11493 #    define NSIG (SIGARRAYSIZE+1) /* Not sure of the +1 */
11494 #  endif
11495 #endif
11496
11497 #ifndef NSIG
11498 #  ifdef _sys_nsig
11499 #    define NSIG (_sys_nsig) /* Solaris 2.5 */
11500 #  endif
11501 #endif
11502
11503 /* Default to some arbitrary number that's big enough to get most
11504    of the common signals.
11505 */
11506 #ifndef NSIG
11507 #    define NSIG 50
11508 #endif
11509
11510 printf("NSIG %d\n", NSIG);
11511
11512 #ifndef JUST_NSIG
11513
11514 EOCP
11515
11516 echo $xxx | $tr ' ' $trnl | $sort | $uniq | $awk '
11517 {
11518         printf "#ifdef SIG"; printf $1; printf "\n"
11519         printf "printf(\""; printf $1; printf " %%d\\n\",SIG";
11520         printf $1; printf ");\n"
11521         printf "#endif\n"
11522 }
11523 END {
11524         printf "#endif /* JUST_NSIG */\n";
11525         printf "}\n";
11526 }
11527 ' >>signal.c
11528 $cat >signal.awk <<'EOP'
11529 BEGIN { ndups = 0 }
11530 $1 ~ /^NSIG$/ { nsig = $2 }
11531 ($1 !~ /^NSIG$/) && (NF == 2) {
11532     if ($2 > maxsig) { maxsig = $2 }
11533     if (sig_name[$2]) {
11534         dup_name[ndups] = $1
11535         dup_num[ndups] = $2
11536         ndups++ 
11537     }
11538     else {
11539         sig_name[$2] = $1
11540         sig_num[$2] = $2
11541     }
11542
11543 }
11544 END { 
11545     if (nsig == 0) { nsig = maxsig + 1 }
11546         for (n = 1; n < nsig; n++) {
11547                 if (sig_name[n]) {
11548                         printf("%s %d\n", sig_name[n], sig_num[n])
11549                 }
11550                 else {
11551                         printf("NUM%d %d\n", n, n) 
11552                 }
11553         }
11554     for (n = 0; n < ndups; n++) {
11555                 printf("%s %d\n", dup_name[n], dup_num[n])
11556     }
11557 }
11558 EOP
11559 $cat >signal_cmd <<EOS
11560 $startsh
11561 if $test -s signal.lst; then
11562     echo "Using your existing signal.lst file"
11563         exit 0
11564 fi
11565 xxx="$xxx"
11566 EOS
11567 $cat >>signal_cmd <<'EOS'
11568
11569 set signal
11570 if eval $compile_ok; then
11571         ./signal$_exe | $sort -n +1 | $uniq | $awk -f signal.awk >signal.lst
11572 else
11573         echo "(I can't seem be able to compile the whole test program)" >&4
11574         echo "(I'll try it in little pieces.)" >&4
11575         set signal -DJUST_NSIG
11576         if eval $compile_ok; then
11577                 ./signal$_exe > signal.nsg
11578                 $cat signal.nsg
11579         else
11580                 echo "I can't seem to figure out how many signals you have." >&4
11581                 echo "Guessing 50." >&4
11582                 echo 'NSIG 50' > signal.nsg
11583         fi
11584         : Now look at all the signal names, one at a time.
11585         for xx in `echo $xxx | $tr ' ' $trnl | $sort | $uniq`; do
11586                 $cat > signal.c <<EOCP
11587 #include <sys/types.h>
11588 #include <signal.h>
11589 #include <stdio.h>
11590 int main() {
11591 printf("$xx %d\n", SIG${xx});
11592 return 0;
11593 }
11594 EOCP
11595                 set signal
11596                 if eval $compile; then
11597                         echo "SIG${xx} found."
11598                         ./signal$_exe  >> signal.ls1
11599                 else
11600                         echo "SIG${xx} NOT found."
11601                 fi
11602         done
11603         if $test -s signal.ls1; then
11604                 $cat signal.nsg signal.ls1 |
11605                         $sort -n +1 | $uniq | $awk -f signal.awk >signal.lst
11606         fi
11607
11608 fi
11609 if $test -s signal.lst; then
11610         :
11611 else
11612         echo "(AAK! I can't compile the test programs -- Guessing)" >&4
11613         echo 'kill -l' >signal
11614         set X `csh -f <signal`
11615         $rm -f signal
11616         shift
11617         case $# in
11618         0) set HUP INT QUIT ILL TRAP ABRT EMT FPE KILL BUS SEGV SYS PIPE ALRM TERM;;
11619         esac
11620         echo $@ | $tr ' ' $trnl | \
11621                 $awk '{ printf $1; printf " %d\n", ++s; }' >signal.lst
11622 fi
11623 $rm -f signal.c signal$_exe signal$_o signal.nsg signal.ls1
11624 EOS
11625 chmod a+x signal_cmd
11626 $eunicefix signal_cmd
11627
11628 : generate list of signal names
11629 echo " "
11630 case "$sig_name_init" in
11631 '') doinit=yes ;;
11632 *)  case "$sig_num_init" in
11633     ''|*,*) doinit=yes ;;
11634     esac ;;
11635 esac
11636 case "$doinit" in
11637 yes)
11638         echo "Generating a list of signal names and numbers..." >&4
11639         . ./signal_cmd
11640         sig_name=`$awk '{printf "%s ", $1}' signal.lst`
11641         sig_name="ZERO $sig_name"
11642         sig_name_init=`$awk 'BEGIN { printf "\"ZERO\", " }
11643                                                 { printf "\"%s\", ", $1 }
11644                                                 END { printf "0\n" }' signal.lst`
11645         sig_num=`$awk '{printf "%d ", $2}' signal.lst`
11646         sig_num="0 $sig_num"
11647         sig_num_init=`$awk 'BEGIN { printf "0, " }
11648                                         { printf "%d, ", $2}
11649                                         END { printf "0\n"}' signal.lst`
11650         ;;
11651 esac
11652 echo "The following signals are available:"
11653 echo " "
11654 echo $sig_name | $awk \
11655 'BEGIN { linelen = 0 }
11656 {
11657         for (i = 1; i <= NF; i++) {
11658                 name = "SIG" $i " "
11659                 linelen = linelen + length(name)
11660                 if (linelen > 70) {
11661                         printf "\n"
11662                         linelen = length(name)
11663                 }
11664                 printf "%s", name
11665         }
11666         printf "\n"
11667 }'
11668 $rm -f signal signal.c signal.awk signal.lst signal_cmd 
11669
11670 : see what type is used for signed size_t
11671 set ssize_t ssizetype int stdio.h sys/types.h
11672 eval $typedef
11673 dflt="$ssizetype"
11674 $cat > ssize.c <<EOM
11675 #include <stdio.h>
11676 #include <sys/types.h>
11677 #define Size_t $sizetype
11678 #define SSize_t $dflt
11679 int main()
11680 {
11681         if (sizeof(Size_t) == sizeof(SSize_t))
11682                 printf("$dflt\n");
11683         else if (sizeof(Size_t) == sizeof(int))
11684                 printf("int\n");
11685         else 
11686                 printf("long\n");
11687         exit(0);
11688 }
11689 EOM
11690 echo " "
11691 set ssize
11692 if eval $compile_ok && ./ssize > /dev/null; then
11693         ssizetype=`./ssize`
11694         echo "I'll be using $ssizetype for functions returning a byte count." >&4
11695 else
11696         $cat >&4 <<EOM
11697 Help! I can't compile and run the ssize_t test program: please enlighten me!
11698 (This is probably a misconfiguration in your system or libraries, and
11699 you really ought to fix it.  Still, I'll try anyway.)
11700
11701 I need a type that is the same size as $sizetype, but is guaranteed to
11702 be signed.  Common values are ssize_t, int and long.
11703
11704 EOM
11705         rp="What signed type is the same size as $sizetype?"
11706         . ./myread
11707         ssizetype="$ans"
11708 fi
11709 $rm -f ssize ssize.*
11710
11711 : see what type of char stdio uses.
11712 echo " "
11713 if $contains 'unsigned.*char.*_ptr;' `./findhdr stdio.h` >/dev/null 2>&1 ; then
11714         echo "Your stdio uses unsigned chars." >&4
11715         stdchar="unsigned char"
11716 else
11717         echo "Your stdio uses signed chars." >&4
11718         stdchar="char"
11719 fi
11720
11721 : see if time exists
11722 echo " "
11723 if test "X$d_time" = X -o X"$timetype" = X; then
11724     if set time val -f d_time; eval $csym; $val; then
11725                 echo 'time() found.' >&4
11726                 val="$define"
11727                 rp="What is the type returned by time() on this system?"
11728                 set time_t timetype long stdio.h sys/types.h
11729                 eval $typedef_ask
11730     else
11731                 echo 'time() not found, hope that will do.' >&4
11732                 val="$undef"
11733                 timetype='int';
11734     fi
11735     set d_time
11736     eval $setvar
11737 fi
11738
11739 : see what type uids are declared as in the kernel
11740 echo " "
11741 echo "Looking for the type for user ids returned by getuid()."
11742 set uid_t uidtype xxx stdio.h sys/types.h
11743 eval $typedef
11744 case "$uidtype" in
11745 xxx)
11746         xxx=`./findhdr sys/user.h`
11747         set `grep '_ruid;' "$xxx" 2>/dev/null` unsigned short
11748         case $1 in
11749         unsigned) dflt="$1 $2" ;;
11750         *) dflt="$1" ;;
11751         esac
11752         ;;
11753 *) dflt="$uidtype";;
11754 esac
11755 case "$uidtype" in
11756 uid_t)  echo "uid_t found." ;;
11757 *)      rp="What is the type for user ids returned by getuid()?"
11758         . ./myread
11759         uidtype="$ans"
11760         ;;
11761 esac
11762
11763 : see if dbm.h is available
11764 : see if dbmclose exists
11765 set dbmclose d_dbmclose
11766 eval $inlibc
11767
11768 case "$d_dbmclose" in
11769 $define)
11770         set dbm.h i_dbm
11771         eval $inhdr
11772         case "$i_dbm" in
11773         $define)
11774                 val="$undef"
11775                 set i_rpcsvcdbm
11776                 eval $setvar
11777                 ;;
11778         *)      set rpcsvc/dbm.h i_rpcsvcdbm
11779                 eval $inhdr
11780                 ;;
11781         esac
11782         ;;
11783 *)      echo "We won't be including <dbm.h>"
11784         val="$undef"
11785         set i_dbm
11786         eval $setvar
11787         val="$undef"
11788         set i_rpcsvcdbm
11789         eval $setvar
11790         ;;
11791 esac
11792
11793 : see if this is a sys/file.h system
11794 val=''
11795 set sys/file.h val
11796 eval $inhdr
11797
11798 : do we need to include sys/file.h ?
11799 case "$val" in
11800 "$define")
11801         echo " "
11802         if $h_sysfile; then
11803                 val="$define"
11804                 echo "We'll be including <sys/file.h>." >&4
11805         else
11806                 val="$undef"
11807                 echo "We won't be including <sys/file.h>." >&4
11808         fi
11809         ;;
11810 *)
11811         h_sysfile=false
11812         ;;
11813 esac
11814 set i_sysfile
11815 eval $setvar
11816
11817 : see if fcntl.h is there
11818 val=''
11819 set fcntl.h val
11820 eval $inhdr
11821
11822 : see if we can include fcntl.h
11823 case "$val" in
11824 "$define")
11825         echo " "
11826         if $h_fcntl; then
11827                 val="$define"
11828                 echo "We'll be including <fcntl.h>." >&4
11829         else
11830                 val="$undef"
11831                 if $h_sysfile; then
11832         echo "We don't need to include <fcntl.h> if we include <sys/file.h>." >&4
11833                 else
11834                         echo "We won't be including <fcntl.h>." >&4
11835                 fi
11836         fi
11837         ;;
11838 *)
11839         h_fcntl=false
11840         val="$undef"
11841         ;;
11842 esac
11843 set i_fcntl
11844 eval $setvar
11845
11846 : see if locale.h is available
11847 set locale.h i_locale
11848 eval $inhdr
11849
11850 : see if mach cthreads are available
11851 if test "X$usethreads" = "X$define"; then
11852         set mach/cthreads.h i_machcthr
11853         eval $inhdr
11854 else
11855         i_machcthr="$undef"
11856 fi
11857
11858
11859
11860 : see if this is a math.h system
11861 set math.h i_math
11862 eval $inhdr
11863
11864 : see if this is a mntent.h system
11865 set mntent.h i_mntent
11866 eval $inhdr
11867
11868 : see if ndbm.h is available
11869 set ndbm.h t_ndbm
11870 eval $inhdr
11871 case "$t_ndbm" in
11872 $define)
11873         : see if dbm_open exists
11874         set dbm_open d_dbm_open
11875         eval $inlibc
11876         case "$d_dbm_open" in
11877         $undef)
11878                 t_ndbm="$undef"
11879                 echo "We won't be including <ndbm.h>"
11880                 ;;
11881         esac
11882         ;;
11883 esac
11884 val="$t_ndbm"
11885 set i_ndbm
11886 eval $setvar
11887
11888 : see if net/errno.h is available
11889 val=''
11890 set net/errno.h val
11891 eval $inhdr
11892
11893 : Unfortunately, it causes problems on some systems.  Arrgh.
11894 case "$val" in
11895 $define)
11896         cat > try.c <<'EOM'
11897 #include <stdio.h>
11898 #include <errno.h>
11899 #include <net/errno.h>
11900 int func()
11901 {
11902         return ENOTSOCK;
11903 }
11904 EOM
11905         if $cc $ccflags -c try.c >/dev/null 2>&1; then
11906                 echo "We'll be including <net/errno.h>." >&4
11907         else
11908                 echo "We won't be including <net/errno.h>." >&4
11909                 val="$undef"
11910         fi
11911         $rm -f try.* try
11912         ;;
11913 esac
11914 set i_neterrno
11915 eval $setvar
11916
11917 : see if this is a poll.h system
11918 set poll.h i_poll
11919 eval $inhdr
11920
11921 : get C preprocessor symbols handy
11922 echo " "
11923 $echo $n "Hmm... $c"
11924 echo $al | $tr ' ' $trnl >Cppsym.know
11925 $cat <<EOSS >Cppsym
11926 $startsh
11927 case "\$1" in
11928 -l) list=true
11929         shift
11930         ;;
11931 esac
11932 unknown=''
11933 case "\$list\$#" in
11934 1|2)
11935         for sym do
11936                 if $contains "^\$1$" Cppsym.true >/dev/null 2>&1; then
11937                         exit 0
11938                 elif $contains "^\$1$" Cppsym.know >/dev/null 2>&1; then
11939                         :
11940                 else
11941                         unknown="\$unknown \$sym"
11942                 fi
11943         done
11944         set X \$unknown
11945         shift
11946         ;;
11947 esac
11948 case \$# in
11949 0) exit 1;;
11950 esac
11951 echo \$* | $tr ' ' '$trnl' | $sed -e 's/\(.*\)/\\
11952 #ifdef \1\\
11953 exit 0; _ _ _ _\1\\      \1\\
11954 #endif\\
11955 /' >Cppsym\$\$
11956 echo "exit 1; _ _ _" >>Cppsym\$\$
11957 $cppstdin $cppminus <Cppsym\$\$ | $grep '^exit [01]; _ _'  >Cppsym2\$\$
11958 case "\$list" in
11959 true) $awk 'NF > 5 {print substr(\$6,2,100)}' <Cppsym2\$\$ ;;
11960 *)
11961         sh Cppsym2\$\$
11962         status=\$?
11963         ;;
11964 esac
11965 $rm -f Cppsym\$\$ Cppsym2\$\$
11966 exit \$status
11967 EOSS
11968 chmod +x Cppsym
11969 $eunicefix Cppsym
11970 ./Cppsym -l $al | $sort | $grep -v '^$' >Cppsym.true
11971
11972 : now check the C compiler for additional symbols
11973 postprocess_cc_v=''
11974 case "$osname" in
11975 aix) postprocess_cc_v="|$tr , ' '" ;;
11976 esac
11977 $cat >ccsym <<EOS
11978 $startsh
11979 $cat >tmp.c <<EOF
11980 extern int foo;
11981 EOF
11982 for i in \`$cc -v -c tmp.c 2>&1 $postprocess_cc_v\`
11983 do
11984         case "\$i" in
11985         -D*) echo "\$i" | $sed 's/^-D//';;
11986         -A*) $test "$gccversion" && echo "\$i" | $sed 's/^-A\(.*\)(\(.*\))/\1=\2/';;
11987         esac
11988 done
11989 $rm -f try.c
11990 EOS
11991 unset postprocess_cc_v
11992 chmod +x ccsym
11993 $eunicefix ccsym
11994 ./ccsym > ccsym1.raw
11995 if $test -s ccsym1.raw; then
11996        $sort ccsym1.raw | $uniq >ccsym.raw
11997 else
11998        mv ccsym1.raw ccsym.raw
11999 fi
12000
12001 $awk '/\=/ { print $0; next }
12002         { print $0"=1" }' ccsym.raw >ccsym.list
12003 $awk '{ print $0"=1" }' Cppsym.true >ccsym.true
12004 $comm -13 ccsym.true ccsym.list >ccsym.own
12005 $comm -12 ccsym.true ccsym.list >ccsym.com
12006 $comm -23 ccsym.true ccsym.list >ccsym.cpp
12007 also=''
12008 if $test -z ccsym.raw; then
12009         echo "Your C compiler doesn't seem to define any symbols!" >&4
12010         echo " "
12011         echo "However, your C preprocessor defines the following symbols:"
12012         $cat Cppsym.true
12013         ccsymbols=''
12014         cppsymbols=`$cat Cppsym.true`
12015         cppsymbols=`echo $cppsymbols`
12016         cppccsymbols="$cppsymbols"
12017 else
12018         if $test -s ccsym.com; then
12019                 echo "Your C compiler and pre-processor define these symbols:"
12020                 $sed -e 's/\(.*\)=.*/\1/' ccsym.com
12021                 also='also '
12022                 symbols='ones'
12023                 cppccsymbols=`$cat ccsym.com`
12024                 cppccsymbols=`echo $cppccsymbols`
12025                 $test "$silent" || sleep 1
12026         fi
12027         if $test -s ccsym.cpp; then
12028                 $test "$also" && echo " "
12029                 echo "Your C pre-processor ${also}defines the following symbols:"
12030                 $sed -e 's/\(.*\)=.*/\1/' ccsym.cpp
12031                 also='further '
12032                 cppsymbols=`$cat ccsym.cpp`
12033                 cppsymbols=`echo $cppsymbols`
12034                 $test "$silent" || sleep 1
12035         fi
12036         if $test -s ccsym.own; then
12037                 $test "$also" && echo " "
12038                 echo "Your C compiler ${also}defines the following cpp symbols:"
12039                 $sed -e 's/\(.*\)=1/\1/' ccsym.own
12040                 $sed -e 's/\(.*\)=.*/\1/' ccsym.own | $uniq >>Cppsym.true
12041                 ccsymbols=`$cat ccsym.own`
12042                 ccsymbols=`echo $ccsymbols`
12043                 $test "$silent" || sleep 1
12044         fi
12045 fi
12046 $rm -f ccsym*
12047
12048 : see if this is a termio system
12049 val="$undef"
12050 val2="$undef"
12051 val3="$undef"
12052 if $test `./findhdr termios.h`; then
12053         set tcsetattr i_termios
12054         eval $inlibc
12055         val3="$i_termios"
12056 fi
12057 echo " "
12058 case "$val3" in
12059 "$define") echo "You have POSIX termios.h... good!" >&4;;
12060 *) if ./Cppsym pyr; then
12061                 case "`/bin/universe`" in
12062                 ucb) if $test `./findhdr sgtty.h`; then
12063                                 val2="$define"
12064                                 echo "<sgtty.h> found." >&4
12065                         else
12066                                 echo "System is pyramid with BSD universe."
12067                                 echo "<sgtty.h> not found--you could have problems." >&4
12068                         fi;;
12069                 *) if $test `./findhdr termio.h`; then
12070                                 val="$define"
12071                                 echo "<termio.h> found." >&4
12072                         else
12073                                 echo "System is pyramid with USG universe."
12074                                 echo "<termio.h> not found--you could have problems." >&4
12075                         fi;;
12076                 esac
12077         elif ./usg; then
12078                 if $test `./findhdr termio.h`; then
12079                         echo "<termio.h> found." >&4
12080                         val="$define"
12081                 elif $test `./findhdr sgtty.h`; then
12082                         echo "<sgtty.h> found." >&4
12083                         val2="$define"
12084                 else
12085 echo "Neither <termio.h> nor <sgtty.h> found--you could have problems." >&4
12086                 fi
12087         else
12088                 if $test `./findhdr sgtty.h`; then
12089                         echo "<sgtty.h> found." >&4
12090                         val2="$define"
12091                 elif $test `./findhdr termio.h`; then
12092                         echo "<termio.h> found." >&4
12093                         val="$define"
12094                 else
12095 echo "Neither <sgtty.h> nor <termio.h> found--you could have problems." >&4
12096                 fi
12097         fi;;
12098 esac
12099 set i_termio; eval $setvar
12100 val=$val2; set i_sgtty; eval $setvar
12101 val=$val3; set i_termios; eval $setvar
12102
12103 : see if stdarg is available
12104 echo " "
12105 if $test `./findhdr stdarg.h`; then
12106         echo "<stdarg.h> found." >&4
12107         valstd="$define"
12108 else
12109         echo "<stdarg.h> NOT found." >&4
12110         valstd="$undef"
12111 fi
12112
12113 : see if varags is available
12114 echo " "
12115 if $test `./findhdr varargs.h`; then
12116         echo "<varargs.h> found." >&4
12117 else
12118         echo "<varargs.h> NOT found, but that's ok (I hope)." >&4
12119 fi
12120
12121 : set up the varargs testing programs
12122 $cat > varargs.c <<EOP
12123 #ifdef I_STDARG
12124 #include <stdarg.h>
12125 #endif
12126 #ifdef I_VARARGS
12127 #include <varargs.h>
12128 #endif
12129
12130 #ifdef I_STDARG
12131 int f(char *p, ...)
12132 #else
12133 int f(va_alist)
12134 va_dcl
12135 #endif
12136 {
12137         va_list ap;
12138 #ifndef I_STDARG
12139         char *p;
12140 #endif
12141 #ifdef I_STDARG
12142         va_start(ap,p);
12143 #else
12144         va_start(ap);
12145         p = va_arg(ap, char *);
12146 #endif
12147         va_end(ap);
12148 }
12149 EOP
12150 $cat > varargs <<EOP
12151 $startsh
12152 if $cc -c $ccflags -D\$1 varargs.c >/dev/null 2>&1; then
12153         echo "true"
12154 else
12155         echo "false"
12156 fi
12157 $rm -f varargs$_o
12158 EOP
12159 chmod +x varargs
12160
12161 : now check which varargs header should be included
12162 echo " "
12163 i_varhdr=''
12164 case "$valstd" in
12165 "$define")
12166         if `./varargs I_STDARG`; then
12167                 val='stdarg.h'
12168         elif `./varargs I_VARARGS`; then
12169                 val='varargs.h'
12170         fi
12171         ;;
12172 *)
12173         if `./varargs I_VARARGS`; then
12174                 val='varargs.h'
12175         fi
12176         ;;
12177 esac
12178 case "$val" in
12179 '')
12180 echo "I could not find the definition for va_dcl... You have problems..." >&4
12181         val="$undef"; set i_stdarg; eval $setvar
12182         val="$undef"; set i_varargs; eval $setvar
12183         ;;
12184 *) 
12185         set i_varhdr
12186         eval $setvar
12187         case "$i_varhdr" in
12188         stdarg.h)
12189                 val="$define"; set i_stdarg; eval $setvar
12190                 val="$undef"; set i_varargs; eval $setvar
12191                 ;;
12192         varargs.h)
12193                 val="$undef"; set i_stdarg; eval $setvar
12194                 val="$define"; set i_varargs; eval $setvar
12195                 ;;
12196         esac
12197         echo "We'll include <$i_varhdr> to get va_dcl definition." >&4;;
12198 esac
12199 $rm -f varargs*
12200
12201 : see if stddef is available
12202 set stddef.h i_stddef
12203 eval $inhdr
12204
12205 : see if sys/access.h is available
12206 set sys/access.h i_sysaccess
12207 eval $inhdr
12208
12209 : see if ioctl defs are in sgtty, termio, sys/filio or sys/ioctl
12210 set sys/filio.h i_sysfilio
12211 eval $inhdr
12212 echo " "
12213 if $test `./findhdr sys/ioctl.h`; then
12214         val="$define"
12215         echo '<sys/ioctl.h> found.' >&4
12216 else
12217         val="$undef"
12218         if $test $i_sysfilio = "$define"; then
12219             echo '<sys/ioctl.h> NOT found.' >&4
12220         else
12221                 $test $i_sgtty = "$define" && xxx="sgtty.h"
12222                 $test $i_termio = "$define" && xxx="termio.h"
12223                 $test $i_termios = "$define" && xxx="termios.h"
12224 echo "No <sys/ioctl.h> found, assuming ioctl args are defined in <$xxx>." >&4
12225         fi
12226 fi
12227 set i_sysioctl
12228 eval $setvar
12229
12230 : see if sys/resource.h has to be included
12231 set sys/resource.h i_sysresrc
12232 eval $inhdr
12233
12234 : see if sys/security.h is available
12235 set sys/security.h i_syssecrt
12236 eval $inhdr
12237
12238 : see if this is a sys/statvfs.h system
12239 set sys/statvfs.h i_sysstatvfs
12240 eval $inhdr
12241
12242 : see if this is a sys/un.h system
12243 set sys/un.h i_sysun
12244 eval $inhdr
12245
12246 : see if this is a syswait system
12247 set sys/wait.h i_syswait
12248 eval $inhdr
12249
12250 : see if this is an utime system
12251 set utime.h i_utime
12252 eval $inhdr
12253
12254 : see if this is a values.h system
12255 set values.h i_values
12256 eval $inhdr
12257
12258 : see if this is a vfork system
12259 case "$d_vfork" in
12260 "$define")
12261         set vfork.h i_vfork
12262         eval $inhdr
12263         ;;
12264 *)
12265         i_vfork="$undef"
12266         ;;
12267 esac
12268
12269 : see if gdbm.h is available
12270 set gdbm.h t_gdbm
12271 eval $inhdr
12272 case "$t_gdbm" in
12273 $define)
12274         : see if gdbm_open exists
12275         set gdbm_open d_gdbm_open
12276         eval $inlibc
12277         case "$d_gdbm_open" in
12278         $undef)
12279                 t_gdbm="$undef"
12280                 echo "We won't be including <gdbm.h>"
12281                 ;;
12282         esac
12283         ;;
12284 esac
12285 val="$t_gdbm"
12286 set i_gdbm
12287 eval $setvar
12288
12289 echo " "
12290 echo "Looking for extensions..." >&4
12291 tdir=`pwd`
12292 cd $rsrc/ext
12293 : If we are using the old config.sh, known_extensions may contain
12294 : old or inaccurate or duplicate values.
12295 known_extensions=''
12296 nonxs_extensions=''
12297 : We do not use find because it might not be available.
12298 : We do not just use MANIFEST because the user may have dropped
12299 : some additional extensions into the source tree and expect them
12300 : to be built.
12301 for xxx in * ; do
12302         case "$xxx" in
12303         DynaLoader|dynaload) ;;
12304         *)      if $test -f $xxx/$xxx.xs; then
12305                         known_extensions="$known_extensions $xxx"
12306                 elif $test -f $xxx/Makefile.PL; then
12307                         nonxs_extensions="$nonxs_extensions $xxx"
12308                 else
12309                         if $test -d $xxx; then
12310                                 # Look for nested extensions, eg. Devel/Dprof.
12311                                 cd $xxx
12312                                 for yyy in * ; do
12313                                 if $test -f $yyy/$yyy.xs; then
12314                                         known_extensions="$known_extensions $xxx/$yyy"
12315                                 elif $test -f $yyy/Makefile.PL; then
12316                                         nonxs_extensions="$nonxs_extensions $xxx/$yyy"
12317                                 fi
12318                                 done
12319                                 cd ..
12320                         fi
12321                 fi 
12322                 ;;
12323         esac
12324 done
12325 set X $nonxs_extensions
12326 shift
12327 nonxs_extensions="$*"
12328 set X $known_extensions
12329 shift
12330 known_extensions="$*"
12331 cd $tdir
12332
12333 : Now see which are supported on this system.
12334 avail_ext=''
12335 for xxx in $known_extensions ; do
12336         case "$xxx" in
12337         DB_File|db_file)
12338                 case "$i_db" in
12339                 $define) avail_ext="$avail_ext $xxx" ;;
12340                 esac
12341                 ;;
12342         GDBM_File|gdbm_fil)
12343                 case "$i_gdbm" in 
12344                 $define) avail_ext="$avail_ext $xxx" ;;
12345                 esac
12346                 ;;
12347         NDBM_File|ndbm_fil)
12348                 case "$i_ndbm" in
12349                 $define) avail_ext="$avail_ext $xxx" ;;
12350                 esac
12351                 ;;
12352         ODBM_File|odbm_fil) 
12353                 case "${i_dbm}${i_rpcsvcdbm}" in
12354                 *"${define}"*) avail_ext="$avail_ext $xxx" ;;
12355                 esac
12356                 ;;
12357         POSIX|posix)
12358                 case "$useposix" in
12359                 true|define|y) avail_ext="$avail_ext $xxx" ;;
12360                 esac
12361                 ;;
12362         Opcode|opcode)
12363                 case "$useopcode" in
12364                 true|define|y) avail_ext="$avail_ext $xxx" ;;
12365                 esac
12366                 ;;
12367         Socket|socket)
12368                 case "$d_socket" in 
12369                 true|$define|y) avail_ext="$avail_ext $xxx" ;;
12370                 esac
12371                 ;;
12372         Thread|thread)
12373                 case "$usethreads" in 
12374                 true|$define|y) avail_ext="$avail_ext $xxx" ;;
12375                 esac
12376                 ;;
12377         IPC/SysV|ipc/sysv)
12378                 : XXX Do we need a useipcsysv variable here
12379                 case "${d_msg}${d_sem}${d_shm}" in 
12380                 *"${define}"*) avail_ext="$avail_ext $xxx" ;;
12381                 esac
12382                 ;;
12383         *)      avail_ext="$avail_ext $xxx"
12384                 ;;
12385         esac
12386 done
12387
12388 set X $avail_ext
12389 shift
12390 avail_ext="$*"
12391
12392 : Now see which nonxs extensions are supported on this system.
12393 : For now assume all are.
12394 nonxs_ext=''
12395 for xxx in $nonxs_extensions ; do
12396         case "$xxx" in
12397         *)      nonxs_ext="$nonxs_ext $xxx"
12398                 ;;
12399         esac
12400 done
12401
12402 set X $nonxs_ext
12403 shift
12404 nonxs_ext="$*"
12405
12406 case $usedl in
12407 $define)
12408         $cat <<EOM
12409 A number of extensions are supplied with $package.  You may choose to
12410 compile these extensions for dynamic loading (the default), compile
12411 them into the $package executable (static loading), or not include
12412 them at all.  Answer "none" to include no extensions.
12413 Note that DynaLoader is always built and need not be mentioned here.
12414
12415 EOM
12416         case "$dynamic_ext" in
12417         '') dflt="$avail_ext" ;;
12418         *)      dflt="$dynamic_ext"
12419                 # Perhaps we are reusing an old out-of-date config.sh.
12420                 case "$hint" in
12421                 previous)
12422                         if test X"$dynamic_ext" != X"$avail_ext"; then
12423                                 $cat <<EOM
12424 NOTICE:  Your previous config.sh list may be incorrect. 
12425 The extensions now available to you are 
12426         ${avail_ext}
12427 but the default list from your previous config.sh is
12428         ${dynamic_ext} 
12429
12430 EOM
12431                         fi
12432                         ;;
12433                 esac
12434                 ;;
12435         esac
12436         case "$dflt" in
12437         '')     dflt=none;;
12438         esac
12439         rp="What extensions do you wish to load dynamically?"
12440         . ./myread
12441         case "$ans" in
12442         none) dynamic_ext=' ' ;;
12443         *) dynamic_ext="$ans" ;;
12444         esac
12445
12446         case "$static_ext" in
12447         '')
12448                 : Exclude those already listed in dynamic linking
12449                 dflt=''
12450                 for xxx in $avail_ext; do
12451                         case " $dynamic_ext " in
12452                         *" $xxx "*) ;;
12453                         *) dflt="$dflt $xxx" ;;
12454                         esac
12455                 done
12456                 set X $dflt
12457                 shift
12458                 dflt="$*"
12459                 ;;
12460         *)  dflt="$static_ext" 
12461                 ;;
12462         esac
12463
12464         case "$dflt" in
12465         '')     dflt=none;;
12466         esac
12467         rp="What extensions do you wish to load statically?"
12468         . ./myread
12469         case "$ans" in
12470         none) static_ext=' ' ;;
12471         *) static_ext="$ans" ;;
12472         esac
12473         ;;
12474 *)
12475         $cat <<EOM
12476 A number of extensions are supplied with $package.  Answer "none" 
12477 to include no extensions. 
12478 Note that DynaLoader is always built and need not be mentioned here.
12479
12480 EOM
12481         case "$static_ext" in
12482         '') dflt="$avail_ext" ;;
12483         *)      dflt="$static_ext"
12484                 # Perhaps we are reusing an old out-of-date config.sh.
12485                 case "$hint" in
12486                 previous)
12487                         if test X"$static_ext" != X"$avail_ext"; then
12488                                 $cat <<EOM
12489 NOTICE:  Your previous config.sh list may be incorrect. 
12490 The extensions now available to you are 
12491         ${avail_ext}
12492 but the default list from your previous config.sh is
12493         ${static_ext} 
12494
12495 EOM
12496                         fi
12497                         ;;
12498                 esac
12499                 ;;
12500         esac
12501         : Exclude those that are not xs extensions
12502         case "$dflt" in
12503         '')     dflt=none;;
12504         esac
12505         rp="What extensions do you wish to include?"
12506         . ./myread
12507         case "$ans" in
12508         none) static_ext=' ' ;;
12509         *) static_ext="$ans" ;;
12510         esac
12511         ;;
12512 esac
12513
12514 set X $dynamic_ext $static_ext $nonxs_ext
12515 shift
12516 extensions="$*"
12517
12518 : Remove build directory name from cppstdin so it can be used from
12519 : either the present location or the final installed location.
12520 echo " "
12521 : Get out of the UU directory to get correct path name.
12522 cd ..
12523 case "$cppstdin" in
12524 `pwd`/cppstdin)
12525         echo "Stripping down cppstdin path name"
12526         cppstdin=cppstdin
12527         ;;
12528 esac
12529 cd UU
12530
12531 : end of configuration questions
12532 echo " "
12533 echo "End of configuration questions."
12534 echo " "
12535
12536 : back to where it started
12537 if test -d ../UU; then
12538         cd ..
12539 fi
12540
12541 : configuration may be patched via a 'config.over' file
12542 if $test -f config.over; then
12543         echo " "
12544         dflt=y
12545         rp='I see a config.over file.  Do you wish to load it?'
12546         . UU/myread
12547         case "$ans" in
12548         n*) echo "OK, I'll ignore it.";;
12549         *)      . ./config.over
12550                 echo "Configuration override changes have been loaded."
12551                 ;;
12552         esac
12553 fi
12554
12555 : in case they want portability, strip down executable paths
12556 case "$d_portable" in
12557 "$define")
12558         echo " "
12559         echo "Stripping down executable paths..." >&4
12560         for file in $loclist $trylist; do
12561                 if test X$file != Xln -a X$file != Xar -o X$osname != Xos2; then
12562                         eval $file="\$file"
12563                 fi
12564         done
12565         ;;
12566 esac
12567
12568 : create config.sh file
12569 echo " "
12570 echo "Creating config.sh..." >&4
12571 $spitshell <<EOT >config.sh
12572 $startsh
12573 #
12574 # This file was produced by running the Configure script. It holds all the
12575 # definitions figured out by Configure. Should you modify one of these values,
12576 # do not forget to propagate your changes by running "Configure -der". You may
12577 # instead choose to run each of the .SH files by yourself, or "Configure -S".
12578 #
12579
12580 # Package name      : $package
12581 # Source directory  : $src
12582 # Configuration time: $cf_time
12583 # Configured by     : $cf_by
12584 # Target system     : $myuname
12585
12586 Author='$Author'
12587 Date='$Date'
12588 Header='$Header'
12589 Id='$Id'
12590 Locker='$Locker'
12591 Log='$Log'
12592 Mcc='$Mcc'
12593 RCSfile='$RCSfile'
12594 Revision='$Revision'
12595 Source='$Source'
12596 State='$State'
12597 _a='$_a'
12598 _exe='$_exe'
12599 _o='$_o'
12600 afs='$afs'
12601 alignbytes='$alignbytes'
12602 ansi2knr='$ansi2knr'
12603 aphostname='$aphostname'
12604 apiversion='$apiversion'
12605 ar='$ar'
12606 archlib='$archlib'
12607 archlibexp='$archlibexp'
12608 archname64='$archname64'
12609 archname='$archname'
12610 archobjs='$archobjs'
12611 awk='$awk'
12612 baserev='$baserev'
12613 bash='$bash'
12614 bin='$bin'
12615 binexp='$binexp'
12616 bison='$bison'
12617 byacc='$byacc'
12618 byteorder='$byteorder'
12619 c='$c'
12620 castflags='$castflags'
12621 cat='$cat'
12622 cc='$cc'
12623 cccdlflags='$cccdlflags'
12624 ccdlflags='$ccdlflags'
12625 ccflags='$ccflags'
12626 ccsymbols='$ccsymbols'
12627 cf_by='$cf_by'
12628 cf_email='$cf_email'
12629 cf_time='$cf_time'
12630 chgrp='$chgrp'
12631 chmod='$chmod'
12632 chown='$chown'
12633 clocktype='$clocktype'
12634 comm='$comm'
12635 compress='$compress'
12636 contains='$contains'
12637 cp='$cp'
12638 cpio='$cpio'
12639 cpp='$cpp'
12640 cpp_stuff='$cpp_stuff'
12641 cppccsymbols='$cppccsymbols'
12642 cppflags='$cppflags'
12643 cpplast='$cpplast'
12644 cppminus='$cppminus'
12645 cpprun='$cpprun'
12646 cppstdin='$cppstdin'
12647 cppsymbols='$cppsymbols'
12648 crosscompile='$crosscompile'
12649 cryptlib='$cryptlib'
12650 csh='$csh'
12651 d_Gconvert='$d_Gconvert'
12652 d_access='$d_access'
12653 d_accessx='$d_accessx'
12654 d_alarm='$d_alarm'
12655 d_archlib='$d_archlib'
12656 d_attribut='$d_attribut'
12657 d_bcmp='$d_bcmp'
12658 d_bcopy='$d_bcopy'
12659 d_bsd='$d_bsd'
12660 d_bsdgetpgrp='$d_bsdgetpgrp'
12661 d_bsdsetpgrp='$d_bsdsetpgrp'
12662 d_bzero='$d_bzero'
12663 d_casti32='$d_casti32'
12664 d_castneg='$d_castneg'
12665 d_charvspr='$d_charvspr'
12666 d_chown='$d_chown'
12667 d_chroot='$d_chroot'
12668 d_chsize='$d_chsize'
12669 d_closedir='$d_closedir'
12670 d_cmsghdr_s='$d_cmsghdr_s'
12671 d_const='$d_const'
12672 d_crypt='$d_crypt'
12673 d_csh='$d_csh'
12674 d_cuserid='$d_cuserid'
12675 d_dbl_dig='$d_dbl_dig'
12676 d_dbmclose64='$d_dbmclose64'
12677 d_dbminit64='$d_dbminit64'
12678 d_delete64='$d_delete64'
12679 d_difftime='$d_difftime'
12680 d_dirent64_s='$d_dirent64_s'
12681 d_dirnamlen='$d_dirnamlen'
12682 d_dlerror='$d_dlerror'
12683 d_dlopen='$d_dlopen'
12684 d_dlsymun='$d_dlsymun'
12685 d_dosuid='$d_dosuid'
12686 d_drand48proto='$d_drand48proto'
12687 d_dup2='$d_dup2'
12688 d_eaccess='$d_eaccess'
12689 d_endgrent='$d_endgrent'
12690 d_endhent='$d_endhent'
12691 d_endnent='$d_endnent'
12692 d_endpent='$d_endpent'
12693 d_endpwent='$d_endpwent'
12694 d_endsent='$d_endsent'
12695 d_eofnblk='$d_eofnblk'
12696 d_eunice='$d_eunice'
12697 d_fchmod='$d_fchmod'
12698 d_fchown='$d_fchown'
12699 d_fcntl='$d_fcntl'
12700 d_fd_macros='$d_fd_macros'
12701 d_fd_set='$d_fd_set'
12702 d_fds_bits='$d_fds_bits'
12703 d_fetch64='$d_fetch64'
12704 d_fgetpos64='$d_fgetpos64'
12705 d_fgetpos='$d_fgetpos'
12706 d_firstkey64='$d_firstkey64'
12707 d_flexfnam='$d_flexfnam'
12708 d_flock64_s='$d_flock64_s'
12709 d_flock='$d_flock'
12710 d_fopen64='$d_fopen64'
12711 d_fork='$d_fork'
12712 d_fpathconf='$d_fpathconf'
12713 d_freopen64='$d_freopen64'
12714 d_fseek64='$d_fseek64'
12715 d_fseeko64='$d_fseeko64'
12716 d_fseeko='$d_fseeko'
12717 d_fsetpos64='$d_fsetpos64'
12718 d_fsetpos='$d_fsetpos'
12719 d_fstat64='$d_fstat64'
12720 d_fstatfs='$d_fstatfs'
12721 d_fstatvfs='$d_fstatvfs'
12722 d_ftell64='$d_ftell64'
12723 d_ftello64='$d_ftello64'
12724 d_ftello='$d_ftello'
12725 d_ftime='$d_ftime'
12726 d_ftruncate64='$d_ftruncate64'
12727 d_getgrent='$d_getgrent'
12728 d_getgrps='$d_getgrps'
12729 d_gethbyaddr='$d_gethbyaddr'
12730 d_gethbyname='$d_gethbyname'
12731 d_gethent='$d_gethent'
12732 d_gethname='$d_gethname'
12733 d_gethostprotos='$d_gethostprotos'
12734 d_getlogin='$d_getlogin'
12735 d_getmntent='$d_getmntent'
12736 d_getnbyaddr='$d_getnbyaddr'
12737 d_getnbyname='$d_getnbyname'
12738 d_getnent='$d_getnent'
12739 d_getnetprotos='$d_getnetprotos'
12740 d_getpbyname='$d_getpbyname'
12741 d_getpbynumber='$d_getpbynumber'
12742 d_getpent='$d_getpent'
12743 d_getpgid='$d_getpgid'
12744 d_getpgrp2='$d_getpgrp2'
12745 d_getpgrp='$d_getpgrp'
12746 d_getppid='$d_getppid'
12747 d_getprior='$d_getprior'
12748 d_getprotoprotos='$d_getprotoprotos'
12749 d_getpwent='$d_getpwent'
12750 d_getsbyname='$d_getsbyname'
12751 d_getsbyport='$d_getsbyport'
12752 d_getsent='$d_getsent'
12753 d_getservprotos='$d_getservprotos'
12754 d_gettimeod='$d_gettimeod'
12755 d_gnulibc='$d_gnulibc'
12756 d_grpasswd='$d_grpasswd'
12757 d_hasmntopt='$d_hasmntopt'
12758 d_htonl='$d_htonl'
12759 d_index='$d_index'
12760 d_inetaton='$d_inetaton'
12761 d_ino64t='$d_ino64t'
12762 d_int64t='$d_int64t'
12763 d_iovec_s='$d_iovec_s'
12764 d_isascii='$d_isascii'
12765 d_killpg='$d_killpg'
12766 d_lchown='$d_lchown'
12767 d_link='$d_link'
12768 d_locconv='$d_locconv'
12769 d_lockf64='$d_lockf64'
12770 d_lockf='$d_lockf'
12771 d_longdbl='$d_longdbl'
12772 d_longlong='$d_longlong'
12773 d_lseek64='$d_lseek64'
12774 d_lstat64='$d_lstat64'
12775 d_lstat='$d_lstat'
12776 d_madvise='$d_madvise'
12777 d_mblen='$d_mblen'
12778 d_mbstowcs='$d_mbstowcs'
12779 d_mbtowc='$d_mbtowc'
12780 d_memcmp='$d_memcmp'
12781 d_memcpy='$d_memcpy'
12782 d_memmove='$d_memmove'
12783 d_memset='$d_memset'
12784 d_mkdir='$d_mkdir'
12785 d_mkfifo='$d_mkfifo'
12786 d_mktime='$d_mktime'
12787 d_mmap='$d_mmap'
12788 d_mprotect='$d_mprotect'
12789 d_msg='$d_msg'
12790 d_msg_ctrunc='$d_msg_ctrunc'
12791 d_msg_dontroute='$d_msg_dontroute'
12792 d_msg_oob='$d_msg_oob'
12793 d_msg_peek='$d_msg_peek'
12794 d_msg_proxy='$d_msg_proxy'
12795 d_msgctl='$d_msgctl'
12796 d_msgget='$d_msgget'
12797 d_msghdr_s='$d_msghdr_s'
12798 d_msgrcv='$d_msgrcv'
12799 d_msgsnd='$d_msgsnd'
12800 d_msync='$d_msync'
12801 d_munmap='$d_munmap'
12802 d_mymalloc='$d_mymalloc'
12803 d_nextkey64='$d_nextkey64'
12804 d_nice='$d_nice'
12805 d_off64t='$d_off64t'
12806 d_old_pthread_create_joinable='$d_old_pthread_create_joinable'
12807 d_oldpthreads='$d_oldpthreads'
12808 d_oldsock='$d_oldsock'
12809 d_open3='$d_open3'
12810 d_open64='$d_open64'
12811 d_opendir64='$d_opendir64'
12812 d_pathconf='$d_pathconf'
12813 d_pause='$d_pause'
12814 d_phostname='$d_phostname'
12815 d_pipe='$d_pipe'
12816 d_poll='$d_poll'
12817 d_portable='$d_portable'
12818 d_pthread_yield='$d_pthread_yield'
12819 d_pwage='$d_pwage'
12820 d_pwchange='$d_pwchange'
12821 d_pwclass='$d_pwclass'
12822 d_pwcomment='$d_pwcomment'
12823 d_pwexpire='$d_pwexpire'
12824 d_pwgecos='$d_pwgecos'
12825 d_pwpasswd='$d_pwpasswd'
12826 d_pwquota='$d_pwquota'
12827 d_readdir64='$d_readdir64'
12828 d_readdir='$d_readdir'
12829 d_readlink='$d_readlink'
12830 d_readv='$d_readv'
12831 d_recvmsg='$d_recvmsg'
12832 d_rename='$d_rename'
12833 d_rewinddir='$d_rewinddir'
12834 d_rmdir='$d_rmdir'
12835 d_safebcpy='$d_safebcpy'
12836 d_safemcpy='$d_safemcpy'
12837 d_sanemcmp='$d_sanemcmp'
12838 d_sched_yield='$d_sched_yield'
12839 d_scm_rights='$d_scm_rights'
12840 d_seekdir64='$d_seekdir64'
12841 d_seekdir='$d_seekdir'
12842 d_select='$d_select'
12843 d_sem='$d_sem'
12844 d_semctl='$d_semctl'
12845 d_semctl_semid_ds='$d_semctl_semid_ds'
12846 d_semctl_semun='$d_semctl_semun'
12847 d_semget='$d_semget'
12848 d_semop='$d_semop'
12849 d_sendmsg='$d_sendmsg'
12850 d_setegid='$d_setegid'
12851 d_seteuid='$d_seteuid'
12852 d_setgrent='$d_setgrent'
12853 d_setgrps='$d_setgrps'
12854 d_sethent='$d_sethent'
12855 d_setlinebuf='$d_setlinebuf'
12856 d_setlocale='$d_setlocale'
12857 d_setnent='$d_setnent'
12858 d_setpent='$d_setpent'
12859 d_setpgid='$d_setpgid'
12860 d_setpgrp2='$d_setpgrp2'
12861 d_setpgrp='$d_setpgrp'
12862 d_setprior='$d_setprior'
12863 d_setpwent='$d_setpwent'
12864 d_setregid='$d_setregid'
12865 d_setresgid='$d_setresgid'
12866 d_setresuid='$d_setresuid'
12867 d_setreuid='$d_setreuid'
12868 d_setrgid='$d_setrgid'
12869 d_setruid='$d_setruid'
12870 d_setsent='$d_setsent'
12871 d_setsid='$d_setsid'
12872 d_setvbuf='$d_setvbuf'
12873 d_sfio='$d_sfio'
12874 d_shm='$d_shm'
12875 d_shmat='$d_shmat'
12876 d_shmatprototype='$d_shmatprototype'
12877 d_shmctl='$d_shmctl'
12878 d_shmdt='$d_shmdt'
12879 d_shmget='$d_shmget'
12880 d_sigaction='$d_sigaction'
12881 d_sigsetjmp='$d_sigsetjmp'
12882 d_socket='$d_socket'
12883 d_sockpair='$d_sockpair'
12884 d_stat64='$d_stat64'
12885 d_statblks='$d_statblks'
12886 d_statfs='$d_statfs'
12887 d_statfsflags='$d_statfsflags'
12888 d_statvfs='$d_statvfs'
12889 d_stdio_cnt_lval='$d_stdio_cnt_lval'
12890 d_stdio_ptr_lval='$d_stdio_ptr_lval'
12891 d_stdiobase='$d_stdiobase'
12892 d_stdstdio='$d_stdstdio'
12893 d_store64='$d_store64'
12894 d_strchr='$d_strchr'
12895 d_strcoll='$d_strcoll'
12896 d_strctcpy='$d_strctcpy'
12897 d_strerrm='$d_strerrm'
12898 d_strerror='$d_strerror'
12899 d_strtod='$d_strtod'
12900 d_strtol='$d_strtol'
12901 d_strtoul='$d_strtoul'
12902 d_strxfrm='$d_strxfrm'
12903 d_suidsafe='$d_suidsafe'
12904 d_symlink='$d_symlink'
12905 d_syscall='$d_syscall'
12906 d_sysconf='$d_sysconf'
12907 d_sysernlst='$d_sysernlst'
12908 d_syserrlst='$d_syserrlst'
12909 d_system='$d_system'
12910 d_tcgetpgrp='$d_tcgetpgrp'
12911 d_tcsetpgrp='$d_tcsetpgrp'
12912 d_telldir64='$d_telldir64'
12913 d_telldir='$d_telldir'
12914 d_telldirproto='$d_telldirproto'
12915 d_time='$d_time'
12916 d_times='$d_times'
12917 d_tmpfile64='$d_tmpfile64'
12918 d_truncate64='$d_truncate64'
12919 d_truncate='$d_truncate'
12920 d_tzname='$d_tzname'
12921 d_umask='$d_umask'
12922 d_uname='$d_uname'
12923 d_union_semun='$d_union_semun'
12924 d_vfork='$d_vfork'
12925 d_void_closedir='$d_void_closedir'
12926 d_voidsig='$d_voidsig'
12927 d_voidtty='$d_voidtty'
12928 d_volatile='$d_volatile'
12929 d_vprintf='$d_vprintf'
12930 d_wait4='$d_wait4'
12931 d_waitpid='$d_waitpid'
12932 d_wcstombs='$d_wcstombs'
12933 d_wctomb='$d_wctomb'
12934 d_writev='$d_writev'
12935 d_xenix='$d_xenix'
12936 date='$date'
12937 db_hashtype='$db_hashtype'
12938 db_prefixtype='$db_prefixtype'
12939 defvoidused='$defvoidused'
12940 direntrytype='$direntrytype'
12941 dlext='$dlext'
12942 dlsrc='$dlsrc'
12943 doublesize='$doublesize'
12944 drand01='$drand01'
12945 dynamic_ext='$dynamic_ext'
12946 eagain='$eagain'
12947 ebcdic='$ebcdic'
12948 echo='$echo'
12949 egrep='$egrep'
12950 emacs='$emacs'
12951 eunicefix='$eunicefix'
12952 exe_ext='$exe_ext'
12953 expr='$expr'
12954 extensions='$extensions'
12955 find='$find'
12956 firstmakefile='$firstmakefile'
12957 flex='$flex'
12958 fpostype='$fpostype'
12959 freetype='$freetype'
12960 full_ar='$full_ar'
12961 full_csh='$full_csh'
12962 full_sed='$full_sed'
12963 gccversion='$gccversion'
12964 gidtype='$gidtype'
12965 glibpth='$glibpth'
12966 grep='$grep'
12967 groupcat='$groupcat'
12968 groupstype='$groupstype'
12969 gzip='$gzip'
12970 h_fcntl='$h_fcntl'
12971 h_sysfile='$h_sysfile'
12972 hint='$hint'
12973 hostcat='$hostcat'
12974 huge='$huge'
12975 i_arpainet='$i_arpainet'
12976 i_bsdioctl='$i_bsdioctl'
12977 i_db='$i_db'
12978 i_dbm='$i_dbm'
12979 i_dirent='$i_dirent'
12980 i_dld='$i_dld'
12981 i_dlfcn='$i_dlfcn'
12982 i_fcntl='$i_fcntl'
12983 i_float='$i_float'
12984 i_gdbm='$i_gdbm'
12985 i_grp='$i_grp'
12986 i_inttypes='$i_inttypes'
12987 i_limits='$i_limits'
12988 i_locale='$i_locale'
12989 i_machcthr='$i_machcthr'
12990 i_malloc='$i_malloc'
12991 i_math='$i_math'
12992 i_memory='$i_memory'
12993 i_mntent='$i_mntent'
12994 i_ndbm='$i_ndbm'
12995 i_netdb='$i_netdb'
12996 i_neterrno='$i_neterrno'
12997 i_niin='$i_niin'
12998 i_poll='$i_poll'
12999 i_pthread='$i_pthread'
13000 i_pwd='$i_pwd'
13001 i_rpcsvcdbm='$i_rpcsvcdbm'
13002 i_sfio='$i_sfio'
13003 i_sgtty='$i_sgtty'
13004 i_stdarg='$i_stdarg'
13005 i_stddef='$i_stddef'
13006 i_stdlib='$i_stdlib'
13007 i_string='$i_string'
13008 i_sysaccess='$i_sysaccess'
13009 i_sysdir='$i_sysdir'
13010 i_sysfile='$i_sysfile'
13011 i_sysfilio='$i_sysfilio'
13012 i_sysin='$i_sysin'
13013 i_sysioctl='$i_sysioctl'
13014 i_sysmman='$i_sysmman'
13015 i_sysmount='$i_sysmount'
13016 i_sysndir='$i_sysndir'
13017 i_sysparam='$i_sysparam'
13018 i_sysresrc='$i_sysresrc'
13019 i_syssecrt='$i_syssecrt'
13020 i_sysselct='$i_sysselct'
13021 i_syssockio='$i_syssockio'
13022 i_sysstat='$i_sysstat'
13023 i_sysstatvfs='$i_sysstatvfs'
13024 i_systime='$i_systime'
13025 i_systimek='$i_systimek'
13026 i_systimes='$i_systimes'
13027 i_systypes='$i_systypes'
13028 i_sysuio='$i_sysuio'
13029 i_sysun='$i_sysun'
13030 i_syswait='$i_syswait'
13031 i_termio='$i_termio'
13032 i_termios='$i_termios'
13033 i_time='$i_time'
13034 i_unistd='$i_unistd'
13035 i_utime='$i_utime'
13036 i_values='$i_values'
13037 i_varargs='$i_varargs'
13038 i_varhdr='$i_varhdr'
13039 i_vfork='$i_vfork'
13040 ignore_versioned_solibs='$ignore_versioned_solibs'
13041 incpath='$incpath'
13042 inews='$inews'
13043 installarchlib='$installarchlib'
13044 installbin='$installbin'
13045 installman1dir='$installman1dir'
13046 installman3dir='$installman3dir'
13047 installprivlib='$installprivlib'
13048 installscript='$installscript'
13049 installsitearch='$installsitearch'
13050 installsitelib='$installsitelib'
13051 installusrbinperl='$installusrbinperl'
13052 intsize='$intsize'
13053 known_extensions='$known_extensions'
13054 ksh='$ksh'
13055 large='$large'
13056 ld='$ld'
13057 lddlflags='$lddlflags'
13058 ldflags='$ldflags'
13059 less='$less'
13060 lib_ext='$lib_ext'
13061 libc='$libc'
13062 libperl='$libperl'
13063 libpth='$libpth'
13064 libs='$libs'
13065 libswanted='$libswanted'
13066 line='$line'
13067 lint='$lint'
13068 lkflags='$lkflags'
13069 ln='$ln'
13070 lns='$lns'
13071 locincpth='$locincpth'
13072 loclibpth='$loclibpth'
13073 longdblsize='$longdblsize'
13074 longlongsize='$longlongsize'
13075 longsize='$longsize'
13076 lp='$lp'
13077 lpr='$lpr'
13078 ls='$ls'
13079 lseeksize='$lseeksize'
13080 lseektype='$lseektype'
13081 mail='$mail'
13082 mailx='$mailx'
13083 make='$make'
13084 make_set_make='$make_set_make'
13085 mallocobj='$mallocobj'
13086 mallocsrc='$mallocsrc'
13087 malloctype='$malloctype'
13088 man1dir='$man1dir'
13089 man1direxp='$man1direxp'
13090 man1ext='$man1ext'
13091 man3dir='$man3dir'
13092 man3direxp='$man3direxp'
13093 man3ext='$man3ext'
13094 medium='$medium'
13095 mips='$mips'
13096 mips_type='$mips_type'
13097 mkdir='$mkdir'
13098 mmaptype='$mmaptype'
13099 models='$models'
13100 modetype='$modetype'
13101 more='$more'
13102 multiarch='$multiarch'
13103 mv='$mv'
13104 myarchname='$myarchname'
13105 mydomain='$mydomain'
13106 myhostname='$myhostname'
13107 myuname='$myuname'
13108 n='$n'
13109 netdb_hlen_type='$netdb_hlen_type'
13110 netdb_host_type='$netdb_host_type'
13111 netdb_name_type='$netdb_name_type'
13112 netdb_net_type='$netdb_net_type'
13113 nm='$nm'
13114 nm_opt='$nm_opt'
13115 nm_so_opt='$nm_so_opt'
13116 nonxs_ext='$nonxs_ext'
13117 nroff='$nroff'
13118 o_nonblock='$o_nonblock'
13119 obj_ext='$obj_ext'
13120 old_pthread_create_joinable='$old_pthread_create_joinable'
13121 optimize='$optimize'
13122 orderlib='$orderlib'
13123 osname='$osname'
13124 osvers='$osvers'
13125 package='$package'
13126 pager='$pager'
13127 passcat='$passcat'
13128 patchlevel='$patchlevel'
13129 path_sep='$path_sep'
13130 perl='$perl'
13131 perladmin='$perladmin'
13132 perlpath='$perlpath'
13133 pg='$pg'
13134 phostname='$phostname'
13135 pidtype='$pidtype'
13136 plibpth='$plibpth'
13137 pmake='$pmake'
13138 pr='$pr'
13139 prefix='$prefix'
13140 prefixexp='$prefixexp'
13141 privlib='$privlib'
13142 privlibexp='$privlibexp'
13143 prototype='$prototype'
13144 ptrsize='$ptrsize'
13145 randbits='$randbits'
13146 randfunc='$randfunc'
13147 randseedtype='$randseedtype'
13148 ranlib='$ranlib'
13149 rd_nodata='$rd_nodata'
13150 rm='$rm'
13151 rmail='$rmail'
13152 runnm='$runnm'
13153 sched_yield='$sched_yield'
13154 scriptdir='$scriptdir'
13155 scriptdirexp='$scriptdirexp'
13156 sed='$sed'
13157 seedfunc='$seedfunc'
13158 selectminbits='$selectminbits'
13159 selecttype='$selecttype'
13160 sendmail='$sendmail'
13161 sh='$sh'
13162 shar='$shar'
13163 sharpbang='$sharpbang'
13164 shmattype='$shmattype'
13165 shortsize='$shortsize'
13166 shrpenv='$shrpenv'
13167 shsharp='$shsharp'
13168 sig_name='$sig_name'
13169 sig_name_init='$sig_name_init'
13170 sig_num='$sig_num'
13171 sig_num_init='$sig_num_init'
13172 signal_t='$signal_t'
13173 sitearch='$sitearch'
13174 sitearchexp='$sitearchexp'
13175 sitelib='$sitelib'
13176 sitelibexp='$sitelibexp'
13177 sizetype='$sizetype'
13178 sleep='$sleep'
13179 smail='$smail'
13180 small='$small'
13181 so='$so'
13182 sockethdr='$sockethdr'
13183 socketlib='$socketlib'
13184 sort='$sort'
13185 spackage='$spackage'
13186 spitshell='$spitshell'
13187 split='$split'
13188 src='$src'
13189 ssizetype='$ssizetype'
13190 startperl='$startperl'
13191 startsh='$startsh'
13192 static_ext='$static_ext'
13193 stdchar='$stdchar'
13194 stdio_base='$stdio_base'
13195 stdio_bufsiz='$stdio_bufsiz'
13196 stdio_cnt='$stdio_cnt'
13197 stdio_filbuf='$stdio_filbuf'
13198 stdio_ptr='$stdio_ptr'
13199 strings='$strings'
13200 submit='$submit'
13201 subversion='$subversion'
13202 sysman='$sysman'
13203 tail='$tail'
13204 tar='$tar'
13205 tbl='$tbl'
13206 tee='$tee'
13207 test='$test'
13208 timeincl='$timeincl'
13209 timetype='$timetype'
13210 touch='$touch'
13211 tr='$tr'
13212 trnl='$trnl'
13213 troff='$troff'
13214 uidtype='$uidtype'
13215 uname='$uname'
13216 uniq='$uniq'
13217 use64bits='$use64bits'
13218 usedl='$usedl'
13219 usemultiplicity='$usemultiplicity'
13220 usemymalloc='$usemymalloc'
13221 usenm='$usenm'
13222 useopcode='$useopcode'
13223 useperlio='$useperlio'
13224 useposix='$useposix'
13225 usesfio='$usesfio'
13226 useshrplib='$useshrplib'
13227 usethreads='$usethreads'
13228 usevfork='$usevfork'
13229 usrinc='$usrinc'
13230 uuname='$uuname'
13231 version='$version'
13232 vi='$vi'
13233 voidflags='$voidflags'
13234 xlibpth='$xlibpth'
13235 zcat='$zcat'
13236 zip='$zip'
13237 EOT
13238
13239 : Add in command line options if available
13240 $test -f UU/cmdline.opt && $cat UU/cmdline.opt >> config.sh
13241
13242 : add special variables
13243 $test -f $src/patchlevel.h && \
13244 awk '/^#define[         ]+PERL_/ {printf "%s=%s\n",$2,$3}' $src/patchlevel.h >>config.sh
13245 echo "CONFIG=true" >>config.sh
13246
13247 : propagate old symbols
13248 if $test -f UU/config.sh; then
13249         <UU/config.sh sort | uniq >UU/oldconfig.sh
13250         sed -n 's/^\([a-zA-Z_0-9]*\)=.*/\1/p' config.sh config.sh UU/oldconfig.sh |\
13251         sort | uniq -u >UU/oldsyms
13252         set X `cat UU/oldsyms`
13253         shift
13254         case $# in
13255         0) ;;
13256         *)
13257                 cat <<EOM
13258 Hmm...You had some extra variables I don't know about...I'll try to keep 'em...
13259 EOM
13260                 echo "# Variables propagated from previous config.sh file." >>config.sh
13261                 for sym in `cat UU/oldsyms`; do
13262                         echo "    Propagating $hint variable "'$'"$sym..."
13263                         eval 'tmp="$'"${sym}"'"'
13264                         echo "$tmp" | \
13265                                 sed -e "s/'/'\"'\"'/g" -e "s/^/$sym='/" -e "s/$/'/" >>config.sh
13266                 done
13267                 ;;
13268         esac
13269 fi
13270
13271 : Finish up by extracting the .SH files
13272 case "$alldone" in
13273 exit)
13274         $rm -rf UU
13275         echo "Done."
13276         exit 0
13277         ;;
13278 cont)
13279         ;;
13280 '')
13281         dflt=''
13282         nostick=true
13283         $cat <<EOM
13284
13285 If you'd like to make any changes to the config.sh file before I begin
13286 to configure things, do it as a shell escape now (e.g. !vi config.sh).
13287
13288 EOM
13289         rp="Press return or use a shell escape to edit config.sh:"
13290         . UU/myread
13291         nostick=''
13292         case "$ans" in
13293         '') ;;
13294         *) : in case they cannot read
13295                 sh 1>&4 -c "$ans";;
13296         esac
13297         ;;
13298 esac
13299
13300 : if this fails, just run all the .SH files by hand
13301 . ./config.sh
13302
13303 echo " "
13304 exec 1>&4
13305 . ./UU/extract
13306
13307 if $contains '^depend:' [Mm]akefile >/dev/null 2>&1; then
13308         dflt=y
13309         case "$silent" in
13310         true) ;;
13311         *)
13312                 $cat <<EOM
13313
13314 Now you need to generate make dependencies by running "$make depend".
13315 You might prefer to run it in background: "$make depend > makedepend.out &"
13316 It can take a while, so you might not want to run it right now.
13317
13318 EOM
13319                 ;;
13320         esac
13321         rp="Run $make depend now?"
13322         . UU/myread
13323         case "$ans" in
13324         y*)
13325                 $make depend && echo "Now you must run a $make."
13326                 ;;
13327         *)
13328                 echo "You must run '$make depend' then '$make'."
13329                 ;;
13330         esac
13331 elif test -f [Mm]akefile; then
13332         echo " "
13333         echo "Now you must run a $make."
13334 else
13335         echo "Done."
13336 fi
13337
13338 if $test -f Policy.sh; then
13339     $cat <<EOM
13340
13341 If you compile $package on a different machine or from a different object
13342 directory, copy the Policy.sh file from this object directory to the
13343 new one before you run Configure -- this will help you with most of
13344 the policy defaults.
13345
13346 EOM
13347 fi
13348 if $test -f config.msg; then
13349     echo "Hmm.  I also noted the following information while running:"
13350     echo " "
13351     $cat config.msg >&4
13352     $rm -f config.msg
13353 fi
13354 $rm -f kit*isdone ark*isdone
13355 $rm -rf UU
13356
13357 : End of Configure
13358