45c47617b7156f6a4f52f6162a87f1bcb439a5de
[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 Mon Mar 15 18:36:13 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*|rhapsody*)
5317                         xxx='DYLD_LIBRARY_PATH' ;;
5318                 os2*)   xxx='' ;; # Nothing special needed.
5319                 beos*)  xxx='' ;;
5320                 *)              xxx='LD_LIBRARY_PATH' ;;
5321                 esac
5322                 if test X"$xxx" != "X"; then
5323                         $cat <<EOM  | $tee -a ../config.msg >&4
5324
5325 To build perl, you must add the current working directory to your
5326 $xxx environment variable before running make.  You can do
5327 this with
5328    $xxx=\`pwd\`:\$$xxx; export $xxx
5329 for Bourne-style shells, or
5330    setenv $xxx \`pwd\`
5331 for Csh-style shells.  You *MUST* do this before running make.
5332
5333 EOM
5334                 fi
5335                 ;;
5336         *)      useshrplib='false' ;;
5337         esac
5338         ;;
5339 esac
5340
5341 case "$useshrplib" in
5342 true)
5343         case "$libperl" in
5344         '')
5345                 # Figure out a good name for libperl.so.  Since it gets stored in
5346                 # a version-specific architecture-dependent library, the version
5347                 # number isn't really that important, except for making cc/ld happy.
5348                 #
5349                 # A name such as libperl.so.3.1
5350                 majmin="libperl.$so.$patchlevel.$subversion"
5351                 # A name such as libperl.so.301
5352                 majonly=`echo $patchlevel $subversion |
5353                         $awk '{printf "%d%02d", $1, $2}'`
5354                 majonly=libperl.$so.$majonly
5355                 # I'd prefer to keep the os-specific stuff here to a minimum, and
5356                 # rely on figuring it out from the naming of libc.
5357                 case "${osname}${osvers}" in
5358                 next4*)
5359                         dflt=libperl.5.$so
5360                         # XXX How handle the --version stuff for MAB?
5361                         ;;
5362                 linux*)  # ld won't link with a bare -lperl otherwise.
5363                         dflt=libperl.$so
5364                         ;;
5365                 *)      # Try to guess based on whether libc has major.minor.
5366                         case "$libc" in
5367                         *libc.$so.[0-9]*.[0-9]*) dflt=$majmin ;;
5368                         *libc.$so.[0-9]*) dflt=$majonly ;;
5369                         *)      dflt=libperl.$so ;;
5370                         esac
5371                         ;;
5372                 esac
5373                 ;;
5374         *)      dflt=$libperl
5375                 ;;
5376         esac
5377         cat << EOM
5378
5379 I need to select a good name for the shared libperl.  If your system uses
5380 library names with major and minor numbers, then you might want something
5381 like $majmin.  Alternatively, if your system uses a single version
5382 number for shared libraries, then you might want to use $majonly.
5383 Or, your system might be quite happy with a simple libperl.$so.
5384
5385 Since the shared libperl will get installed into a version-specific
5386 architecture-dependent directory, the version number of the shared perl
5387 library probably isn't important, so the default should be o.k.
5388
5389 EOM
5390         rp='What name do you want to give to the shared libperl?'
5391         . ./myread
5392         libperl=$ans
5393         echo "Ok, I'll use $libperl"
5394         ;;
5395 *)
5396         libperl="libperl${_a}"
5397         ;;
5398 esac
5399
5400 # Detect old use of shrpdir via undocumented Configure -Dshrpdir
5401 case "$shrpdir" in
5402 '') ;;
5403 *)      $cat >&4 <<EOM
5404 WARNING:  Use of the shrpdir variable for the installation location of
5405 the shared $libperl is not supported.  It was never documented and
5406 will not work in this version.  Let me (perlbug@perl.com)
5407 know of any problems this may cause.
5408
5409 EOM
5410         case "$shrpdir" in
5411         "$archlibexp/CORE")
5412                 $cat >&4 <<EOM
5413 But your current setting of $shrpdir is
5414 the default anyway, so it's harmless.
5415 EOM
5416                 ;;
5417         *)
5418                 $cat >&4 <<EOM
5419 Further, your current attempted setting of $shrpdir
5420 conflicts with the value of $archlibexp/CORE
5421 that installperl will use.
5422 EOM
5423                 ;;
5424         esac
5425         ;;
5426 esac
5427
5428 # How will the perl executable find the installed shared $libperl?
5429 # Add $xxx to ccdlflags.
5430 # If we can't figure out a command-line option, use $shrpenv to
5431 # set env LD_RUN_PATH.  The main perl makefile uses this.
5432 shrpdir=$archlibexp/CORE
5433 xxx=''
5434 tmp_shrpenv=''
5435 if "$useshrplib"; then
5436     case "$osname" in 
5437         aix)
5438                 # We'll set it in Makefile.SH...
5439                 ;;
5440         solaris|netbsd)
5441                 xxx="-R $shrpdir"
5442                 ;;
5443         freebsd)
5444                 xxx="-Wl,-R$shrpdir"
5445                 ;;
5446         linux|irix*|dec_osf)
5447                 xxx="-Wl,-rpath,$shrpdir"
5448                 ;;
5449         next)
5450                 # next doesn't like the default...
5451                 ;;
5452         beos)
5453                 # beos doesn't like the default, either.
5454                 ;;
5455         *)
5456                 tmp_shrpenv="env LD_RUN_PATH=$shrpdir"
5457                 ;;
5458         esac
5459         case "$xxx" in
5460         '') ;;
5461         *)      
5462                 # Only add $xxx if it isn't already in ccdlflags.
5463                 case " $ccdlflags " in
5464                 *" $xxx "*)     ;;
5465                 *)      ccdlflags="$ccdlflags $xxx"
5466                         cat <<EOM >&4
5467
5468 Adding $xxx to the flags
5469 passed to $ld so that the perl executable will find the 
5470 installed shared $libperl.
5471
5472 EOM
5473                         ;;
5474                 esac
5475                 ;;
5476         esac
5477 fi
5478 # Respect a hint or command-line value.
5479 case "$shrpenv" in
5480 '') shrpenv="$tmp_shrpenv" ;;
5481 esac
5482
5483 : determine where manual pages go
5484 set man1dir man1dir none
5485 eval $prefixit
5486 $cat <<EOM
5487
5488 $spackage has manual pages available in source form.
5489 EOM
5490 case "$nroff" in
5491 nroff)
5492         echo "However, you don't have nroff, so they're probably useless to you."
5493         case "$man1dir" in
5494         '') man1dir="none";;
5495         esac;;
5496 esac
5497 echo "If you don't want the manual sources installed, answer 'none'."
5498 case "$man1dir" in
5499 ' ') dflt=none
5500         ;;
5501 '')
5502         lookpath="$prefixexp/man/man1 $prefixexp/man/l_man/man1"
5503         lookpath="$lookpath $prefixexp/man/p_man/man1"
5504         lookpath="$lookpath $prefixexp/man/u_man/man1"
5505         lookpath="$lookpath $prefixexp/man/man.1"
5506         case "$sysman" in
5507         */?_man*)       dflt=`./loc . $prefixexp/l_man/man1 $lookpath` ;;
5508         *)      dflt=`./loc . $prefixexp/man/man1 $lookpath` ;;
5509         esac
5510         set dflt
5511         eval $prefixup
5512         ;;
5513 *)  dflt="$man1dir"
5514         ;;
5515 esac
5516 echo " "
5517 fn=dn+~
5518 rp="Where do the main $spackage manual pages (source) go?"
5519 . ./getfile
5520 if $test "X$man1direxp" != "X$ansexp"; then
5521         installman1dir=''
5522 fi
5523 man1dir="$ans"
5524 man1direxp="$ansexp"
5525 case "$man1dir" in
5526 '') man1dir=' '
5527         installman1dir='';;
5528 esac
5529 if $afs; then
5530         $cat <<EOM
5531
5532 Since you are running AFS, I need to distinguish the directory in which
5533 manual pages reside from the directory in which they are installed (and from
5534 which they are presumably copied to the former directory by occult means).
5535
5536 EOM
5537         case "$installman1dir" in
5538         '') dflt=`echo $man1direxp | sed 's#^/afs/#/afs/.#'`;;
5539         *) dflt="$installman1dir";;
5540         esac
5541         fn=de~
5542         rp='Where will man pages be installed?'
5543         . ./getfile
5544         installman1dir="$ans"
5545 else
5546         installman1dir="$man1direxp"
5547 fi
5548
5549 : What suffix to use on installed man pages
5550
5551 case "$man1dir" in
5552 ' ')
5553         man1ext='0'
5554         ;;
5555 *)
5556         rp="What suffix should be used for the main $spackage man pages?"
5557         case "$man1ext" in
5558         '')     case "$man1dir" in
5559                 *1)  dflt=1 ;;
5560                 *1p) dflt=1p ;;
5561                 *1pm) dflt=1pm ;;
5562                 *l) dflt=l;;
5563                 *n) dflt=n;;
5564                 *o) dflt=o;;
5565                 *p) dflt=p;;
5566                 *C) dflt=C;;
5567                 *L) dflt=L;;
5568                 *L1) dflt=L1;;
5569                 *) dflt=1;;
5570                 esac
5571                 ;;
5572         *)      dflt="$man1ext";;
5573         esac
5574         . ./myread
5575         man1ext="$ans"
5576         ;;
5577 esac
5578
5579 : see if we can have long filenames
5580 echo " "
5581 rmlist="$rmlist /tmp/cf$$"
5582 $test -d /tmp/cf$$ || mkdir /tmp/cf$$
5583 first=123456789abcdef
5584 second=/tmp/cf$$/$first
5585 $rm -f $first $second
5586 if (echo hi >$first) 2>/dev/null; then
5587         if $test -f 123456789abcde; then
5588                 echo 'You cannot have filenames longer than 14 characters.  Sigh.' >&4
5589                 val="$undef"
5590         else
5591                 if (echo hi >$second) 2>/dev/null; then
5592                         if $test -f /tmp/cf$$/123456789abcde; then
5593                                 $cat <<'EOM'
5594 That's peculiar... You can have filenames longer than 14 characters, but only
5595 on some of the filesystems.  Maybe you are using NFS.  Anyway, to avoid problems
5596 I shall consider your system cannot support long filenames at all.
5597 EOM
5598                                 val="$undef"
5599                         else
5600                                 echo 'You can have filenames longer than 14 characters.' >&4
5601                                 val="$define"
5602                         fi
5603                 else
5604                         $cat <<'EOM'
5605 How confusing! Some of your filesystems are sane enough to allow filenames
5606 longer than 14 characters but some others like /tmp can't even think about them.
5607 So, for now on, I shall assume your kernel does not allow them at all.
5608 EOM
5609                         val="$undef"
5610                 fi
5611         fi
5612 else
5613         $cat <<'EOM'
5614 You can't have filenames longer than 14 chars.  You can't even think about them!
5615 EOM
5616         val="$undef"
5617 fi 
5618 set d_flexfnam
5619 eval $setvar
5620 $rm -rf /tmp/cf$$ 123456789abcde*
5621
5622 : determine where library module manual pages go
5623 set man3dir man3dir none
5624 eval $prefixit
5625 $cat <<EOM
5626
5627 $spackage has manual pages for many of the library modules.
5628 EOM
5629
5630 case "$nroff" in
5631 nroff)
5632         $cat <<'EOM'
5633 However, you don't have nroff, so they're probably useless to you.
5634 EOM
5635         case "$man3dir" in
5636         '') man3dir="none";;
5637         esac;;
5638 esac
5639
5640 case "$d_flexfnam" in
5641 undef)
5642         $cat <<'EOM'
5643 However, your system can't handle the long file names like File::Basename.3. 
5644 EOM
5645         case "$man3dir" in
5646         '') man3dir="none";;
5647         esac;;
5648 esac
5649
5650 echo "If you don't want the manual sources installed, answer 'none'."
5651 prog=`echo $package | $sed 's/-*[0-9.]*$//'`
5652 case "$man3dir" in
5653 '')     case "$prefix" in 
5654         *$prog*) dflt=`echo $man1dir | 
5655                         $sed -e 's/man1/man3/g' -e 's/man\.1/man\.3/g'` ;;
5656         *)      dflt="$privlib/man/man3" ;;
5657         esac
5658         ;;
5659 ' ') dflt=none;;
5660 *)      dflt="$man3dir" ;;
5661 esac
5662 echo " "
5663
5664 fn=dn+~
5665 rp="Where do the $package library man pages (source) go?"
5666 . ./getfile
5667 if test "X$man3direxp" != "X$ansexp"; then
5668         installman3dir=''
5669 fi
5670
5671 man3dir="$ans"
5672 man3direxp="$ansexp"
5673 case "$man3dir" in
5674 '') man3dir=' '
5675         installman3dir='';;
5676 esac
5677 if $afs; then
5678         $cat <<EOM
5679
5680 Since you are running AFS, I need to distinguish the directory in which
5681 manual pages reside from the directory in which they are installed (and from
5682 which they are presumably copied to the former directory by occult means).
5683
5684 EOM
5685         case "$installman3dir" in
5686         '') dflt=`echo $man3direxp | sed 's#^/afs/#/afs/.#'`;;
5687         *) dflt="$installman3dir";;
5688         esac
5689         fn=de~
5690         rp='Where will man pages be installed?'
5691         . ./getfile
5692         installman3dir="$ans"
5693 else
5694         installman3dir="$man3direxp"
5695 fi
5696
5697 : What suffix to use on installed man pages
5698
5699 case "$man3dir" in
5700 ' ')
5701         man3ext='0'
5702         ;;
5703 *)
5704         rp="What suffix should be used for the $package library man pages?"
5705         case "$man3ext" in
5706         '')     case "$man3dir" in
5707                 *3)  dflt=3 ;;
5708                 *3p) dflt=3p ;;
5709                 *3pm) dflt=3pm ;;
5710                 *l) dflt=l;;
5711                 *n) dflt=n;;
5712                 *o) dflt=o;;
5713                 *p) dflt=p;;
5714                 *C) dflt=C;;
5715                 *L) dflt=L;;
5716                 *L3) dflt=L3;;
5717                 *) dflt=3;;
5718                 esac
5719                 ;;
5720         *)      dflt="$man3ext";;
5721         esac
5722         . ./myread
5723         man3ext="$ans"
5724         ;;
5725 esac
5726
5727 : see if we have to deal with yellow pages, now NIS.
5728 if $test -d /usr/etc/yp || $test -d /etc/yp; then
5729         if $test -f /usr/etc/nibindd; then
5730                 echo " "
5731                 echo "I'm fairly confident you're on a NeXT."
5732                 echo " "
5733                 rp='Do you get the hosts file via NetInfo?'
5734                 dflt=y
5735                 case "$hostcat" in
5736                 nidump*) ;;
5737                 '') ;;
5738                 *) dflt=n;;
5739                 esac
5740                 . ./myread
5741                 case "$ans" in
5742                 y*) hostcat='nidump hosts .';;
5743                 *)      case "$hostcat" in
5744                         nidump*) hostcat='';;
5745                         esac
5746                         ;;
5747                 esac
5748         fi
5749         case "$hostcat" in
5750         nidump*) ;;
5751         *)
5752                 case "$hostcat" in
5753                 *ypcat*) dflt=y;;
5754                 '') if $contains '^\+' /etc/passwd >/dev/null 2>&1; then
5755                                 dflt=y
5756                         else
5757                                 dflt=n
5758                         fi;;
5759                 *) dflt=n;;
5760                 esac
5761                 echo " "
5762                 rp='Are you getting the hosts file via yellow pages?'
5763                 . ./myread
5764                 case "$ans" in
5765                 y*) hostcat='ypcat hosts';;
5766                 *) hostcat='cat /etc/hosts';;
5767                 esac
5768                 ;;
5769         esac
5770 fi
5771 case "$hostcat" in
5772 '') hostcat='cat /etc/hosts';;
5773 esac
5774 case "$groupcat" in
5775 '') groupcat='cat /etc/group';;
5776 esac
5777 case "$passcat" in
5778 '') passcat='cat /etc/passwd';;
5779 esac
5780
5781 : now get the host name
5782 echo " "
5783 echo "Figuring out host name..." >&4
5784 case "$myhostname" in
5785 '') cont=true
5786         echo 'Maybe "hostname" will work...'
5787         if tans=`sh -c hostname 2>&1` ; then
5788                 myhostname=$tans
5789                 phostname=hostname
5790                 cont=''
5791         fi
5792         ;;
5793 *) cont='';;
5794 esac
5795 if $test "$cont"; then
5796         if ./xenix; then
5797                 echo 'Oh, dear.  Maybe "/etc/systemid" is the key...'
5798                 if tans=`cat /etc/systemid 2>&1` ; then
5799                         myhostname=$tans
5800                         phostname='cat /etc/systemid'
5801                         echo "Whadyaknow.  Xenix always was a bit strange..."
5802                         cont=''
5803                 fi
5804         elif $test -r /etc/systemid; then
5805                 echo "(What is a non-Xenix system doing with /etc/systemid?)"
5806         fi
5807 fi
5808 if $test "$cont"; then
5809         echo 'No, maybe "uuname -l" will work...'
5810         if tans=`sh -c 'uuname -l' 2>&1` ; then
5811                 myhostname=$tans
5812                 phostname='uuname -l'
5813         else
5814                 echo 'Strange.  Maybe "uname -n" will work...'
5815                 if tans=`sh -c 'uname -n' 2>&1` ; then
5816                         myhostname=$tans
5817                         phostname='uname -n'
5818                 else
5819                         echo 'Oh well, maybe I can mine it out of whoami.h...'
5820                         if tans=`sh -c $contains' sysname $usrinc/whoami.h' 2>&1` ; then
5821                                 myhostname=`echo "$tans" | $sed 's/^.*"\(.*\)"/\1/'`
5822                                 phostname="sed -n -e '"'/sysname/s/^.*\"\\(.*\\)\"/\1/{'"' -e p -e q -e '}' <$usrinc/whoami.h"
5823                         else
5824                                 case "$myhostname" in
5825                                 '') echo "Does this machine have an identity crisis or something?"
5826                                         phostname='';;
5827                                 *)
5828                                         echo "Well, you said $myhostname before..."
5829                                         phostname='echo $myhostname';;
5830                                 esac
5831                         fi
5832                 fi
5833         fi
5834 fi
5835 : you do not want to know about this
5836 set $myhostname
5837 myhostname=$1
5838
5839 : verify guess
5840 if $test "$myhostname" ; then
5841         dflt=y
5842         rp='Your host name appears to be "'$myhostname'".'" Right?"
5843         . ./myread
5844         case "$ans" in
5845         y*) ;;
5846         *) myhostname='';;
5847         esac
5848 fi
5849
5850 : bad guess or no guess
5851 while $test "X$myhostname" = X ; do
5852         dflt=''
5853         rp="Please type the (one word) name of your host:"
5854         . ./myread
5855         myhostname="$ans"
5856 done
5857
5858 : translate upper to lower if necessary
5859 case "$myhostname" in
5860 *[A-Z]*)
5861         echo "(Normalizing case in your host name)"
5862         myhostname=`echo $myhostname | ./tr '[A-Z]' '[a-z]'`
5863         ;;
5864 esac
5865
5866 case "$myhostname" in
5867 *.*)
5868         dflt=`expr "X$myhostname" : "X[^.]*\(\..*\)"`
5869         myhostname=`expr "X$myhostname" : "X\([^.]*\)\."`
5870         echo "(Trimming domain name from host name--host name is now $myhostname)"
5871         ;;
5872 *) case "$mydomain" in
5873         '')
5874                 {
5875                         test "X$hostcat" = "Xypcat hosts" &&
5876                         ypmatch "$myhostname" hosts 2>/dev/null |\
5877                                 $sed -e 's/[     ]*#.*//; s/$/ /' > hosts && \
5878                         $test -s hosts
5879                 } || {
5880                         $hostcat | $sed -n -e "s/[       ]*#.*//; s/\$/ /
5881                                         /[       ]$myhostname[  . ]/p" > hosts
5882                 }
5883                 tmp_re="[       . ]"
5884                 $test x`$awk "/[0-9].*[  ]$myhostname$tmp_re/ { sum++ }
5885                              END { print sum }" hosts` = x1 || tmp_re="[         ]"
5886                 dflt=.`$awk "/[0-9].*[   ]$myhostname$tmp_re/ {for(i=2; i<=NF;i++) print \\\$i}" \
5887                         hosts | $sort | $uniq | \
5888                         $sed -n -e "s/$myhostname\.\([-a-zA-Z0-9_.]\)/\1/p"`
5889                 case `$echo X$dflt` in
5890                 X*\ *)  echo "(Several hosts in /etc/hosts matched hostname)"
5891                         dflt=.
5892                         ;;
5893                 X.) echo "(You do not have fully-qualified names in /etc/hosts)"
5894                         ;;
5895                 esac
5896                 case "$dflt" in
5897                 .)
5898                         tans=`./loc resolv.conf X /etc /usr/etc`
5899                         if $test -f "$tans"; then
5900                                 echo "(Attempting domain name extraction from $tans)"
5901                                 dflt=.`$sed -n -e 's/   / /g' \
5902                                   -e 's/^search  *\([^ ]*\).*/\1/p' $tans \
5903                                   | ./tr '[A-Z]' '[a-z]' 2>/dev/null`
5904                                 case "$dflt" in
5905                                 .) dflt=.`$sed -n -e 's/        / /g' \
5906                                      -e 's/^domain  *\([^ ]*\).*/\1/p' $tans \
5907                                      | ./tr '[A-Z]' '[a-z]' 2>/dev/null`
5908                                         ;;
5909                                 esac
5910                         fi
5911                         ;;
5912                 esac
5913                 case "$dflt" in
5914                 .) echo "(No help from resolv.conf either -- attempting clever guess)"
5915                         dflt=.`sh -c domainname 2>/dev/null`
5916                         case "$dflt" in
5917                         '') dflt='.';;
5918                         .nis.*|.yp.*|.main.*) dflt=`echo $dflt | $sed -e 's/^\.[^.]*//'`;;
5919                         esac
5920                         ;;
5921                 esac
5922                 case "$dflt" in
5923                 .) echo "(Lost all hope -- silly guess then)"
5924                         dflt='.uucp'
5925                         ;;
5926                 esac
5927                 $rm -f hosts
5928                 ;;
5929         *) dflt="$mydomain";;
5930         esac;;
5931 esac
5932 echo " "
5933 rp="What is your domain name?"
5934 . ./myread
5935 tans="$ans"
5936 case "$ans" in
5937 '') ;;
5938 .*) ;;
5939 *) tans=".$tans";;
5940 esac
5941 mydomain="$tans"
5942
5943 : translate upper to lower if necessary
5944 case "$mydomain" in
5945 *[A-Z]*)
5946         echo "(Normalizing case in your domain name)"
5947         mydomain=`echo $mydomain | ./tr '[A-Z]' '[a-z]'`
5948         ;;
5949 esac
5950
5951 : a little sanity check here
5952 case "$phostname" in
5953 '') ;;
5954 *)
5955         case `$phostname | ./tr '[A-Z]' '[a-z]'` in
5956         $myhostname$mydomain|$myhostname) ;;
5957         *)
5958                 case "$phostname" in
5959                 sed*)
5960                         echo "(That doesn't agree with your whoami.h file, by the way.)"
5961                         ;;
5962                 *)
5963                         echo "(That doesn't agree with your $phostname command, by the way.)"
5964                         ;;
5965                 esac
5966         ;;
5967         esac
5968         ;;
5969 esac
5970
5971 $cat <<EOM
5972
5973 I need to get your e-mail address in Internet format if possible, i.e.
5974 something like user@host.domain. Please answer accurately since I have
5975 no easy means to double check it. The default value provided below
5976 is most probably close to the reality but may not be valid from outside
5977 your organization...
5978
5979 EOM
5980 cont=x
5981 while test "$cont"; do
5982         case "$cf_email" in
5983         '') dflt="$cf_by@$myhostname$mydomain";;
5984         *) dflt="$cf_email";;
5985         esac
5986         rp='What is your e-mail address?'
5987         . ./myread
5988         cf_email="$ans"
5989         case "$cf_email" in
5990         *@*.*) cont='' ;;
5991         *)
5992                 rp='Address does not look like an Internet one.  Use it anyway?'
5993                 case "$fastread" in
5994                 yes) dflt=y ;;
5995                 *) dflt=n ;;
5996                 esac
5997                 . ./myread
5998                 case "$ans" in
5999                 y*) cont='' ;;
6000                 *) echo " " ;;
6001                 esac
6002                 ;;
6003         esac
6004 done
6005
6006 $cat <<EOM
6007
6008 If you or somebody else will be maintaining perl at your site, please
6009 fill in the correct e-mail address here so that they may be contacted
6010 if necessary. Currently, the "perlbug" program included with perl
6011 will send mail to this address in addition to perlbug@perl.com. You may
6012 enter "none" for no administrator.
6013
6014 EOM
6015 case "$perladmin" in
6016 '') dflt="$cf_email";;
6017 *) dflt="$perladmin";;
6018 esac
6019 rp='Perl administrator e-mail address'
6020 . ./myread
6021 perladmin="$ans"
6022
6023 : figure out how to guarantee perl startup
6024 case "$startperl" in
6025 '')
6026         case "$sharpbang" in
6027         *!)
6028                 $cat <<EOH
6029
6030 I can use the #! construct to start perl on your system. This will
6031 make startup of perl scripts faster, but may cause problems if you
6032 want to share those scripts and perl is not in a standard place
6033 ($binexp/perl) on all your platforms. The alternative is to force
6034 a shell by starting the script with a single ':' character.
6035
6036 EOH
6037                 dflt="$binexp/perl"
6038                 rp='What shall I put after the #! to start up perl ("none" to not use #!)?'
6039                 . ./myread
6040                 case "$ans" in
6041                 none)   startperl=": # use perl";;
6042                 *)      startperl="#!$ans"
6043                         if $test 30 -lt `echo "$ans" | wc -c`; then
6044                                 $cat >&4 <<EOM
6045
6046 WARNING:  Some systems limit the #! command to 32 characters.
6047 If you experience difficulty running Perl scripts with #!, try
6048 installing Perl in a directory with a shorter pathname.
6049
6050 EOM
6051                         fi ;;
6052                 esac
6053                 ;;
6054         *) startperl=": # use perl"
6055                 ;;
6056         esac
6057         ;;
6058 esac
6059 echo "I'll use $startperl to start perl scripts."
6060
6061 : figure best path for perl in scripts
6062 case "$perlpath" in
6063 '')
6064         perlpath="$binexp/perl"
6065         case "$startperl" in
6066         *!*) ;;
6067         *)
6068                 $cat <<EOH
6069
6070 I will use the "eval 'exec'" idiom to start Perl on your system.
6071 I can use the full path of your Perl binary for this purpose, but
6072 doing so may cause problems if you want to share those scripts and
6073 Perl is not always in a standard place ($binexp/perl).
6074
6075 EOH
6076                 dflt="$binexp/perl"
6077                 rp="What path shall I use in \"eval 'exec'\"?"
6078                 . ./myread
6079                 perlpath="$ans"
6080                 ;;
6081         esac
6082         ;;
6083 esac
6084 case "$startperl" in
6085 *!*)    ;;
6086 *)      echo "I'll use $perlpath in \"eval 'exec'\"" ;;
6087 esac
6088
6089 : determine where public executable scripts go
6090 set scriptdir scriptdir
6091 eval $prefixit
6092 case "$scriptdir" in
6093 '')
6094         dflt="$bin"
6095         : guess some guesses
6096         $test -d /usr/share/scripts && dflt=/usr/share/scripts
6097         $test -d /usr/share/bin && dflt=/usr/share/bin
6098         $test -d /usr/local/script && dflt=/usr/local/script
6099         $test -d $prefixexp/script && dflt=$prefixexp/script
6100         set dflt
6101         eval $prefixup
6102         ;;
6103 *)  dflt="$scriptdir"
6104         ;;
6105 esac
6106 $cat <<EOM
6107  
6108 Some installations have a separate directory just for executable scripts so
6109 that they can mount it across multiple architectures but keep the scripts in
6110 one spot.  You might, for example, have a subdirectory of /usr/share for this.
6111 Or you might just lump your scripts in with all your other executables.
6112  
6113 EOM
6114 fn=d~
6115 rp='Where do you keep publicly executable scripts?'
6116 . ./getfile
6117 if $test "X$ansexp" != "X$scriptdirexp"; then
6118         installscript=''
6119 fi
6120 scriptdir="$ans"
6121 scriptdirexp="$ansexp"
6122 if $afs; then
6123         $cat <<EOM
6124
6125 Since you are running AFS, I need to distinguish the directory in which
6126 scripts reside from the directory in which they are installed (and from
6127 which they are presumably copied to the former directory by occult means).
6128
6129 EOM
6130         case "$installscript" in
6131         '') dflt=`echo $scriptdirexp | sed 's#^/afs/#/afs/.#'`;;
6132         *) dflt="$installscript";;
6133         esac
6134         fn=de~
6135         rp='Where will public scripts be installed?'
6136         . ./getfile
6137         installscript="$ans"
6138 else
6139         installscript="$scriptdirexp"
6140 fi
6141
6142 : determine where site specific libraries go.
6143 : Usual default is /usr/local/lib/perl5/site_perl/$apiversion
6144 prog=`echo $package | $sed 's/-*[0-9.]*$//'`
6145 case "$prefix" in
6146 *perl*) set dflt sitelib lib/site_$prog/$apiversion ;;
6147 *)       set dflt sitelib lib/$package/site_$prog/$apiversion ;;
6148 esac
6149 eval $prefixit
6150 $cat <<EOM
6151
6152 The installation process will also create a directory for
6153 site-specific extensions and modules.  Some users find it convenient
6154 to place all site-specific files in this directory rather than in the
6155 main distribution directory.
6156
6157 EOM
6158 fn=d~+
6159 rp='Pathname for the site-specific library files?'
6160 . ./getfile
6161 if $test "X$sitelibexp" != "X$ansexp"; then
6162         installsitelib=''
6163 fi
6164 sitelib="$ans"
6165 sitelibexp="$ansexp"
6166 if $afs; then
6167         $cat <<EOM
6168
6169 Since you are running AFS, I need to distinguish the directory in
6170 which site-specific files reside from the directory in which they are
6171 installed (and from which they are presumably copied to the former
6172 directory by occult means).
6173
6174 EOM
6175         case "$installsitelib" in
6176         '') dflt=`echo $sitelibexp | sed 's#^/afs/#/afs/.#'`;;
6177         *) dflt="$installsitelib";;
6178         esac
6179         fn=de~
6180         rp='Where will site-specific files be installed?'
6181         . ./getfile
6182         installsitelib="$ans"
6183 else
6184         installsitelib="$sitelibexp"
6185 fi
6186
6187 : determine where site specific architecture-dependent libraries go.
6188 : sitelib  default is /usr/local/lib/perl5/site_perl/$apiversion
6189 : sitearch default is /usr/local/lib/perl5/site_perl/$apiversion/$archname
6190 : sitelib may have an optional trailing /share.
6191 tdflt=`echo $sitelib | $sed 's,/share$,,'`
6192 tdflt="$tdflt/$archname"
6193 set sitearch sitearch none
6194 eval $prefixit
6195 case "$sitearch" in
6196 '')     dflt="$tdflt" ;;
6197 *)      dflt="$sitearch" ;;
6198 esac
6199 $cat <<EOM
6200
6201 The installation process will also create a directory for
6202 architecture-dependent site-specific extensions and modules.
6203
6204 EOM
6205 fn=nd~+
6206 rp='Pathname for the site-specific architecture-dependent library files?'
6207 . ./getfile
6208 if $test "X$sitearchexp" != "X$ansexp"; then
6209         installsitearch=''
6210 fi
6211 sitearch="$ans"
6212 sitearchexp="$ansexp"
6213 if $afs; then
6214         $cat <<EOM
6215
6216 Since you are running AFS, I need to distinguish the directory in
6217 which site-specific architecture-dependent library files reside from
6218 the directory in which they are installed (and from which they are
6219 presumably copied to the former directory by occult means).
6220
6221 EOM
6222         case "$installsitearch" in
6223         '') dflt=`echo $sitearchexp | sed 's#^/afs/#/afs/.#'`;;
6224         *) dflt="$installsitearch";;
6225         esac
6226         fn=de~
6227         rp='Where will site-specific architecture-dependent files be installed?'
6228         . ./getfile
6229         installsitearch="$ans"
6230 else
6231         installsitearch="$sitearchexp"
6232 fi
6233
6234 cat <<EOM
6235
6236 Previous version of $package used the standard IO mechanisms as defined
6237 in <stdio.h>.  Versions 5.003_02 and later of perl allow alternate IO
6238 mechanisms via a "PerlIO" abstraction, but the stdio mechanism is still
6239 the default.  This abstraction layer can use AT&T's sfio (if you already
6240 have sfio installed) or regular stdio.  Using PerlIO with sfio may cause
6241 problems with some extension modules.  Using PerlIO with stdio is safe,
6242 but it is slower than plain stdio and therefore is not the default.
6243
6244 If this doesn't make any sense to you, just accept the default 'n'.
6245 EOM
6246 case "$useperlio" in
6247 $define|true|[yY]*)     dflt='y';;
6248 *) dflt='n';;
6249 esac
6250 rp='Use the experimental PerlIO abstraction layer?'
6251 . ./myread
6252 case "$ans" in
6253 y|Y) 
6254         val="$define"
6255         ;;     
6256 *)      
6257         echo "Ok, doing things the stdio way"
6258         val="$undef"
6259         ;;
6260 esac
6261 set useperlio
6262 eval $setvar 
6263
6264 : Check how to convert floats to strings.
6265 if test "X$d_Gconvert" = X; then
6266         echo " "
6267         echo "Checking for an efficient way to convert floats to strings."
6268         $cat >try.c <<'EOP'
6269 #ifdef TRY_gconvert
6270 #define Gconvert(x,n,t,b) gconvert((x),(n),(t),(b))
6271 char *myname = "gconvert";
6272 #endif
6273 #ifdef TRY_gcvt
6274 #define Gconvert(x,n,t,b) gcvt((x),(n),(b))
6275 char *myname = "gcvt";
6276 #endif
6277 #ifdef TRY_sprintf
6278 #define Gconvert(x,n,t,b) sprintf((b),"%.*g",(n),(x))
6279 char *myname = "sprintf";
6280 #endif
6281
6282 #include <stdio.h>
6283
6284 int
6285 checkit(expect, got)
6286 char *expect;
6287 char *got;
6288 {
6289     if (strcmp(expect, got)) {
6290                 printf("%s oddity:  Expected %s, got %s\n",
6291                         myname, expect, got);
6292                 exit(1);
6293         }
6294 }
6295
6296 int main()
6297
6298         char buf[64]; 
6299         buf[63] = '\0';
6300
6301         /* This must be 1st test on (which?) platform */
6302         /* Alan Burlison <AlanBurlsin@unn.unisys.com> */
6303         Gconvert(0.1, 8, 0, buf);
6304         checkit("0.1", buf);
6305
6306         Gconvert(1.0, 8, 0, buf); 
6307         checkit("1", buf);
6308
6309         Gconvert(0.0, 8, 0, buf); 
6310         checkit("0", buf);
6311
6312         Gconvert(-1.0, 8, 0, buf); 
6313         checkit("-1", buf);
6314
6315         /* Some Linux gcvt's give 1.e+5 here. */
6316         Gconvert(100000.0, 8, 0, buf); 
6317         checkit("100000", buf);
6318         
6319         /* Some Linux gcvt's give -1.e+5 here. */
6320         Gconvert(-100000.0, 8, 0, buf); 
6321         checkit("-100000", buf);
6322
6323         exit(0);
6324 }
6325 EOP
6326         case "$d_Gconvert" in
6327         gconvert*) xxx_list='gconvert gcvt sprintf' ;;
6328         gcvt*) xxx_list='gcvt gconvert sprintf' ;;
6329         sprintf*) xxx_list='sprintf gconvert gcvt' ;;
6330         *) xxx_list='gconvert gcvt sprintf' ;;
6331         esac
6332
6333         for xxx_convert in $xxx_list; do
6334                 echo "Trying $xxx_convert"
6335                 $rm -f try try$_o
6336                 set try -DTRY_$xxx_convert
6337                 if eval $compile; then
6338                         echo "$xxx_convert" found. >&4
6339                         if ./try; then
6340                                 echo "I'll use $xxx_convert to convert floats into a string." >&4
6341                                 break;
6342                         else
6343                                 echo "...But $xxx_convert didn't work as I expected."
6344                         fi
6345                 else
6346                         echo "$xxx_convert NOT found." >&4
6347                 fi
6348         done
6349                 
6350         case "$xxx_convert" in
6351         gconvert) d_Gconvert='gconvert((x),(n),(t),(b))' ;;
6352         gcvt) d_Gconvert='gcvt((x),(n),(b))' ;;
6353         *) d_Gconvert='sprintf((b),"%.*g",(n),(x))' ;;
6354         esac
6355 fi
6356
6357 : Initialize h_fcntl
6358 h_fcntl=false
6359
6360 : Initialize h_sysfile
6361 h_sysfile=false
6362
6363 : access call always available on UNIX
6364 set access d_access
6365 eval $inlibc
6366
6367 : locate the flags for 'access()'
6368 case "$d_access" in
6369 "$define")
6370         echo " "
6371         $cat >access.c <<'EOCP'
6372 #include <sys/types.h>
6373 #ifdef I_FCNTL
6374 #include <fcntl.h>
6375 #endif
6376 #ifdef I_SYS_FILE
6377 #include <sys/file.h>
6378 #endif
6379 #ifdef I_UNISTD
6380 #include <unistd.h>
6381 #endif
6382 int main() {
6383         exit(R_OK);
6384 }
6385 EOCP
6386         : check sys/file.h first, no particular reason here
6387         if $test `./findhdr sys/file.h` && \
6388                 $cc $cppflags -DI_SYS_FILE -o access access.c >/dev/null 2>&1 ; then
6389                 h_sysfile=true;
6390                 echo "<sys/file.h> defines the *_OK access constants." >&4
6391         elif $test `./findhdr fcntl.h` && \
6392                 $cc $cppflags -DI_FCNTL -o access access.c >/dev/null 2>&1 ; then
6393                 h_fcntl=true;
6394                 echo "<fcntl.h> defines the *_OK access constants." >&4
6395         elif $test `./findhdr unistd.h` && \
6396                 $cc $cppflags -DI_UNISTD -o access access.c >/dev/null 2>&1 ; then
6397                 echo "<unistd.h> defines the *_OK access constants." >&4
6398         else
6399                 echo "I can't find the four *_OK access constants--I'll use mine." >&4
6400         fi
6401         ;;
6402 esac
6403 $rm -f access*
6404
6405 : see if accessx exists
6406 set accessx d_accessx
6407 eval $inlibc
6408
6409 : see if alarm exists
6410 set alarm d_alarm
6411 eval $inlibc
6412
6413 : Look for GNU-cc style attribute checking
6414 echo " "
6415 echo "Checking whether your compiler can handle __attribute__ ..." >&4
6416 $cat >attrib.c <<'EOCP'
6417 #include <stdio.h>
6418 void croak (char* pat,...) __attribute__((format(printf,1,2),noreturn));
6419 EOCP
6420 if $cc $ccflags -c attrib.c >attrib.out 2>&1 ; then
6421         if $contains 'warning' attrib.out >/dev/null 2>&1; then
6422                 echo "Your C compiler doesn't fully support __attribute__."
6423                 val="$undef"
6424         else
6425                 echo "Your C compiler supports __attribute__."
6426                 val="$define"
6427         fi
6428 else
6429         echo "Your C compiler doesn't seem to understand __attribute__ at all."
6430         val="$undef"
6431 fi
6432 set d_attribut
6433 eval $setvar
6434 $rm -f attrib*
6435
6436 : see if bcmp exists
6437 set bcmp d_bcmp
6438 eval $inlibc
6439
6440 : see if bcopy exists
6441 set bcopy d_bcopy
6442 eval $inlibc
6443
6444 : see if this is a unistd.h system
6445 set unistd.h i_unistd
6446 eval $inhdr
6447
6448 : see if getpgrp exists
6449 set getpgrp d_getpgrp
6450 eval $inlibc
6451
6452 case "$d_getpgrp" in
6453 "$define")
6454         echo " "
6455         echo "Checking to see which flavor of getpgrp is in use..."
6456         $cat >set.c <<EOP
6457 #$i_unistd I_UNISTD
6458 #include <sys/types.h>
6459 #ifdef I_UNISTD
6460 #  include <unistd.h>
6461 #endif
6462 int main()
6463 {
6464         if (getuid() == 0) {
6465                 printf("(I see you are running Configure as super-user...)\n");
6466                 setuid(1);
6467         }
6468 #ifdef TRY_BSD_PGRP
6469         if (getpgrp(1) == 0)
6470                 exit(0);
6471 #else
6472         if (getpgrp() > 0)
6473                 exit(0);
6474 #endif
6475         exit(1);
6476 }
6477 EOP
6478         if $cc -DTRY_BSD_PGRP $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1 && ./set; then
6479                 echo "You have to use getpgrp(pid) instead of getpgrp()." >&4
6480                 val="$define"
6481         elif $cc $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1 && ./set; then
6482                 echo "You have to use getpgrp() instead of getpgrp(pid)." >&4
6483                 val="$undef"
6484         else
6485                 echo "I can't seem to compile and run the test program."
6486                 if ./usg; then
6487                         xxx="a USG one, i.e. you use getpgrp()."
6488                 else
6489                         # SVR4 systems can appear rather BSD-ish.
6490                         case "$i_unistd" in
6491                         $undef)
6492                                 xxx="a BSD one, i.e. you use getpgrp(pid)."
6493                                 val="$define"
6494                                 ;;
6495                         $define)
6496                                 xxx="probably a USG one, i.e. you use getpgrp()."
6497                                 val="$undef"
6498                                 ;;
6499                         esac
6500                 fi
6501                 echo "Assuming your getpgrp is $xxx" >&4
6502         fi
6503         ;;
6504 *) val="$undef";;
6505 esac
6506 set d_bsdgetpgrp
6507 eval $setvar
6508 $rm -f set set.c
6509
6510 : see if setpgrp exists
6511 set setpgrp d_setpgrp
6512 eval $inlibc
6513
6514 case "$d_setpgrp" in
6515 "$define")
6516         echo " "
6517         echo "Checking to see which flavor of setpgrp is in use..."
6518         $cat >set.c <<EOP
6519 #$i_unistd I_UNISTD
6520 #include <sys/types.h>
6521 #ifdef I_UNISTD
6522 #  include <unistd.h>
6523 #endif
6524 int main()
6525 {
6526         if (getuid() == 0) {
6527                 printf("(I see you are running Configure as super-user...)\n");
6528                 setuid(1);
6529         }
6530 #ifdef TRY_BSD_PGRP
6531         if (-1 == setpgrp(1, 1))
6532                 exit(0);
6533 #else
6534         if (setpgrp() != -1)
6535                 exit(0);
6536 #endif
6537         exit(1);
6538 }
6539 EOP
6540         if $cc -DTRY_BSD_PGRP $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1 && ./set; then
6541                 echo 'You have to use setpgrp(pid,pgrp) instead of setpgrp().' >&4
6542                 val="$define"
6543         elif $cc $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1 && ./set; then
6544                 echo 'You have to use setpgrp() instead of setpgrp(pid,pgrp).' >&4
6545                 val="$undef"
6546         else
6547                 echo "(I can't seem to compile and run the test program.)"
6548                 if ./usg; then
6549                         xxx="a USG one, i.e. you use setpgrp()."
6550                 else
6551                         # SVR4 systems can appear rather BSD-ish.
6552                         case "$i_unistd" in
6553                         $undef)
6554                                 xxx="a BSD one, i.e. you use setpgrp(pid,pgrp)."
6555                                 val="$define"
6556                                 ;;
6557                         $define)
6558                                 xxx="probably a USG one, i.e. you use setpgrp()."
6559                                 val="$undef"
6560                                 ;;
6561                         esac
6562                 fi
6563                 echo "Assuming your setpgrp is $xxx" >&4
6564         fi
6565         ;;
6566 *) val="$undef";;
6567 esac
6568 set d_bsdsetpgrp
6569 eval $setvar
6570 $rm -f set set.c
6571 : see if bzero exists
6572 set bzero d_bzero
6573 eval $inlibc
6574
6575 : check for lengths of integral types
6576 echo " "
6577 case "$intsize" in
6578 '')
6579         echo "Checking to see how big your integers are..." >&4
6580         $cat >intsize.c <<'EOCP'
6581 #include <stdio.h>
6582 int main()
6583 {
6584         printf("intsize=%d;\n", sizeof(int));
6585         printf("longsize=%d;\n", sizeof(long));
6586         printf("shortsize=%d;\n", sizeof(short));
6587         exit(0);
6588 }
6589 EOCP
6590         set intsize
6591         if eval $compile_ok && ./intsize > /dev/null; then
6592                 eval `./intsize`
6593                 echo "Your integers are $intsize bytes long."
6594                 echo "Your long integers are $longsize bytes long."
6595                 echo "Your short integers are $shortsize bytes long."
6596         else
6597                 $cat >&4 <<EOM
6598 !
6599 Help! I can't compile and run the intsize test program: please enlighten me!
6600 (This is probably a misconfiguration in your system or libraries, and
6601 you really ought to fix it.  Still, I'll try anyway.)
6602 !
6603 EOM
6604                 dflt=4
6605                 rp="What is the size of an integer (in bytes)?"
6606                 . ./myread
6607                 intsize="$ans"
6608                 dflt=$intsize
6609                 rp="What is the size of a long integer (in bytes)?"
6610                 . ./myread
6611                 longsize="$ans"
6612                 dflt=2
6613                 rp="What is the size of a short integer (in bytes)?"
6614                 . ./myread
6615                 shortsize="$ans"
6616         fi
6617         ;;
6618 esac
6619 $rm -f intsize intsize.*
6620
6621 : see if signal is declared as pointer to function returning int or void
6622 echo " "
6623 xxx=`./findhdr signal.h`
6624 $test "$xxx" && $cppstdin $cppminus $cppflags < $xxx >$$.tmp 2>/dev/null
6625 if $contains 'int.*\*[  ]*signal' $$.tmp >/dev/null 2>&1 ; then
6626         echo "You have int (*signal())() instead of void." >&4
6627         val="$undef"
6628 elif $contains 'void.*\*[       ]*signal' $$.tmp >/dev/null 2>&1 ; then
6629         echo "You have void (*signal())()." >&4
6630         val="$define"
6631 elif $contains 'extern[         ]*[(\*]*signal' $$.tmp >/dev/null 2>&1 ; then
6632         echo "You have int (*signal())() instead of void." >&4
6633         val="$undef"
6634 elif $contains 'void.*\*.*sig' $$.tmp >/dev/null 2>&1 ; then
6635         echo "You have void (*signal())()." >&4
6636         val="$define"
6637 else
6638         case "$d_voidsig" in
6639         '')
6640         echo "I can't determine whether signal handler returns void or int..." >&4
6641                 dflt=void
6642                 rp="What type does your signal handler return?"
6643                 . ./myread
6644                 case "$ans" in
6645                 v*) val="$define";;
6646                 *) val="$undef";;
6647                 esac;;
6648         "$define")
6649                 echo "As you already told me, signal handler returns void." >&4
6650                 val="$define"
6651                 ;;
6652         *)      echo "As you already told me, signal handler returns int." >&4
6653                 val="$undef"
6654                 ;;
6655         esac
6656 fi
6657 set d_voidsig
6658 eval $setvar
6659 case "$d_voidsig" in
6660 "$define") signal_t="void";;
6661 *) signal_t="int";;
6662 esac
6663 $rm -f $$.tmp
6664
6665 : check for ability to cast large floats to 32-bit ints.
6666 echo " "
6667 echo 'Checking whether your C compiler can cast large floats to int32.' >&4
6668 if $test "$intsize" -ge 4; then
6669         xxx=int
6670 else
6671         xxx=long
6672 fi
6673 $cat >try.c <<EOCP
6674 #include <stdio.h>
6675 #include <sys/types.h>
6676 #include <signal.h>
6677 $signal_t blech(s) int s; { exit(3); }
6678 int main()
6679 {
6680         $xxx i32;
6681         double f, g;
6682         int result = 0;
6683         char str[16];
6684         signal(SIGFPE, blech);
6685
6686         /* Don't let compiler optimize the test away.  Store the number 
6687            in a writable string for gcc to pass to sscanf under HP/UX.
6688         */
6689         sprintf(str, "2147483647");
6690         sscanf(str, "%lf", &f); /* f = (double) 0x7fffffff; */
6691         g = 10 * f;
6692         i32  = ($xxx) g;
6693
6694         /* x86 processors will probably give 0x8000 0000, which is a
6695        sign change.  We don't want that.  We want to mimic SPARC
6696            behavior here, which is to preserve the sign and give
6697            back 0x7fff ffff.
6698         */
6699         if (i32 != ($xxx) f)
6700                 result |= 1;
6701         exit(result);
6702 }
6703 EOCP
6704 set try
6705 if eval $compile_ok; then
6706         ./try
6707         yyy=$?
6708 else
6709         echo "(I can't seem to compile the test program--assuming it can't)"
6710         yyy=1
6711 fi
6712 case "$yyy" in
6713 0)      val="$define"
6714         echo "Yup, it can."
6715         ;;
6716 *)      val="$undef"
6717         echo "Nope, it can't."
6718         ;;
6719 esac
6720 set d_casti32
6721 eval $setvar
6722 $rm -f try try.*
6723
6724 : check for ability to cast negative floats to unsigned
6725 echo " "
6726 echo 'Checking whether your C compiler can cast negative float to unsigned.' >&4
6727 $cat >try.c <<EOCP
6728 #include <stdio.h>
6729 #include <sys/types.h>
6730 #include <signal.h>
6731 $signal_t blech(s) int s; { exit(7); }
6732 $signal_t blech_in_list(s) int s; { exit(4); }
6733 unsigned long dummy_long(p) unsigned long p; { return p; }
6734 unsigned int dummy_int(p) unsigned int p; { return p; }
6735 unsigned short dummy_short(p) unsigned short p; { return p; }
6736 int main()
6737 {
6738         double f;
6739         unsigned long along;
6740         unsigned int aint;
6741         unsigned short ashort;
6742         int result = 0;
6743         char str[16];
6744         
6745         /* Frustrate gcc-2.7.2's optimizer which failed this test with
6746            a direct f = -123. assignment.  gcc-2.8.0 reportedly
6747            optimized the whole file away
6748         */
6749         /* Store the number in a writable string for gcc to pass to 
6750            sscanf under HP/UX.
6751         */
6752         sprintf(str, "-123");
6753         sscanf(str, "%lf", &f);  /* f = -123.; */
6754
6755         signal(SIGFPE, blech);
6756         along = (unsigned long)f;
6757         aint = (unsigned int)f;
6758         ashort = (unsigned short)f;
6759         if (along != (unsigned long)-123)
6760                 result |= 1;
6761         if (aint != (unsigned int)-123)
6762                 result |= 1;
6763         if (ashort != (unsigned short)-123)
6764                 result |= 1;
6765         sprintf(str, "1073741824.");
6766         sscanf(str, "%lf", &f); /* f = (double)0x40000000; */
6767         f = f + f;
6768         along = 0;
6769         along = (unsigned long)f;
6770         if (along != 0x80000000)
6771                 result |= 2;
6772         f -= 1.;
6773         along = 0;
6774         along = (unsigned long)f;
6775         if (along != 0x7fffffff)
6776                 result |= 1;
6777         f += 2.;
6778         along = 0;
6779         along = (unsigned long)f;
6780         if (along != 0x80000001)
6781                 result |= 2;
6782         if (result)
6783                 exit(result);
6784         signal(SIGFPE, blech_in_list);
6785         sprintf(str, "123.");
6786         sscanf(str, "%lf", &f);  /* f = 123.; */
6787         along = dummy_long((unsigned long)f);
6788         aint = dummy_int((unsigned int)f);
6789         ashort = dummy_short((unsigned short)f);
6790         if (along != (unsigned long)123)
6791                 result |= 4;
6792         if (aint != (unsigned int)123)
6793                 result |= 4;
6794         if (ashort != (unsigned short)123)
6795                 result |= 4;
6796         exit(result);
6797
6798 }
6799 EOCP
6800 set try
6801 if eval $compile_ok; then
6802         ./try
6803         castflags=$?
6804 else
6805         echo "(I can't seem to compile the test program--assuming it can't)"
6806         castflags=7
6807 fi
6808 case "$castflags" in
6809 0)      val="$define"
6810         echo "Yup, it can."
6811         ;;
6812 *)      val="$undef"
6813         echo "Nope, it can't."
6814         ;;
6815 esac
6816 set d_castneg
6817 eval $setvar
6818 $rm -f try.*
6819
6820 : see if vprintf exists
6821 echo " "
6822 if set vprintf val -f d_vprintf; eval $csym; $val; then
6823         echo 'vprintf() found.' >&4
6824         val="$define"
6825         $cat >vprintf.c <<'EOF'
6826 #include <varargs.h>
6827
6828 int main() { xxx("foo"); }
6829
6830 xxx(va_alist)
6831 va_dcl
6832 {
6833         va_list args;
6834         char buf[10];
6835
6836         va_start(args);
6837         exit((unsigned long)vsprintf(buf,"%s",args) > 10L);
6838 }
6839 EOF
6840         set vprintf
6841         if eval $compile && ./vprintf; then
6842                 echo "Your vsprintf() returns (int)." >&4
6843                 val2="$undef"
6844         else
6845                 echo "Your vsprintf() returns (char*)." >&4
6846                 val2="$define"
6847         fi
6848 else
6849         echo 'vprintf() NOT found.' >&4
6850                 val="$undef"
6851                 val2="$undef"
6852 fi
6853 set d_vprintf
6854 eval $setvar
6855 val=$val2
6856 set d_charvspr
6857 eval $setvar
6858
6859 : see if chown exists
6860 set chown d_chown
6861 eval $inlibc
6862
6863 : see if chroot exists
6864 set chroot d_chroot
6865 eval $inlibc
6866
6867 : see if chsize exists
6868 set chsize d_chsize
6869 eval $inlibc
6870
6871 hasfield='varname=$1; struct=$2; field=$3; shift; shift; shift;
6872 while $test $# -ge 2; do
6873         case "$1" in
6874         $define) echo "#include <$2>";;
6875         esac ;
6876     shift 2;
6877 done > try.c;
6878 echo "int main () { struct $struct foo; foo.$field = 0; }" >> try.c;
6879 if eval $cc $optimize $ccflags -c try.c >/dev/null 2>&1; then
6880         val="$define";
6881 else
6882         val="$undef";
6883 fi;
6884 set $varname;
6885 eval $setvar;
6886 $rm -f try.c try.o'
6887
6888 : see if this is a sys/uio.h system
6889 set sys/uio.h i_sysuio
6890 eval $inhdr
6891
6892 echo "Checking to see if your system supports struct iovec..." >&4
6893 set d_iovec_s iovec iov_base $i_sysuio sys/uio.h
6894 eval $hasfield
6895 case "$d_iovec_s" in
6896 "$define")      echo "Yup, it does." >&4
6897                 ;;
6898 *)              echo "Nope, it doesn't." >&4
6899                 ;;
6900 esac
6901
6902 socketlib=''
6903 sockethdr=''
6904 : see whether socket exists
6905 echo " "
6906 $echo $n "Hmm... $c" >&4
6907 if set socket val -f d_socket; eval $csym; $val; then
6908         echo "Looks like you have Berkeley networking support." >&4
6909         d_socket="$define"
6910         if set setsockopt val -f; eval $csym; $val; then
6911                 d_oldsock="$undef"
6912         else
6913                 echo "...but it uses the old BSD 4.1c interface, rather than 4.2." >&4
6914                 d_oldsock="$define"
6915         fi
6916 else
6917         if $contains socklib libc.list >/dev/null 2>&1; then
6918                 echo "Looks like you have Berkeley networking support." >&4
6919                 d_socket="$define"
6920                 : we will have to assume that it supports the 4.2 BSD interface
6921                 d_oldsock="$undef"
6922         else
6923                 echo "You don't have Berkeley networking in libc$_a..." >&4
6924                 if test "X$d_socket" = "X$define"; then
6925                    echo "...but you seem to believe that you have sockets." >&4
6926                 else
6927                         for net in net socket
6928                         do
6929                                 if test -f /usr/lib/lib$net$_a; then
6930                                         ( ($nm $nm_opt /usr/lib/lib$net$_a | eval $nm_extract) ||  \
6931                                         $ar t /usr/lib/lib$net$_a) 2>/dev/null >> libc.list
6932                                         if $contains socket libc.list >/dev/null 2>&1; then
6933                                                 d_socket="$define"
6934                                                 socketlib="-l$net"
6935                                                 case "$net" in
6936                                                 net)
6937                                                         echo "...but the Wollongong group seems to have hacked it in." >&4
6938                                                         sockethdr="-I/usr/netinclude"
6939                                                         ;;
6940                                                 esac
6941                                                 echo "Found Berkeley sockets interface in lib$net." >& 4 
6942                                                 if $contains setsockopt libc.list >/dev/null 2>&1; then
6943                                                         d_oldsock="$undef"
6944                                                 else
6945                                                         echo "...using the old BSD 4.1c interface, rather than 4.2." >&4
6946                                                         d_oldsock="$define"
6947                                                 fi
6948                                                 break
6949                                         fi
6950                                 fi
6951                         done
6952                         if test "X$d_socket" != "X$define"; then
6953                            echo "or anywhere else I see." >&4
6954                            d_socket="$undef"
6955                            d_oldsock="$undef"
6956                         fi
6957                 fi
6958         fi
6959 fi
6960
6961 : see if socketpair exists
6962 set socketpair d_sockpair
6963 eval $inlibc
6964
6965
6966 echo " "
6967 echo "Checking the availability of certain socket constants..." >& 4
6968 for ENUM in MSG_CTRUNC MSG_DONTROUTE MSG_OOB MSG_PEEK MSG_PROXY SCM_RIGHTS; do
6969         enum=`$echo $ENUM|./tr '[A-Z]' '[a-z]'`
6970         $cat >try.c <<EOF
6971 #include <sys/types.h>
6972 #include <sys/socket.h>
6973 int main() {
6974     int i = $ENUM;
6975 }
6976 EOF
6977         val="$undef"
6978         set try; if eval $compile; then
6979                 val="$define"
6980         fi
6981         set d_${enum}; eval $setvar
6982         $rm -f try.c try
6983 done
6984
6985 set sendmsg d_sendmsg
6986 eval $inlibc
6987
6988 set recvmsg d_recvmsg
6989 eval $inlibc
6990
6991 echo " "
6992 $echo $n "Checking to see if your system supports struct msghdr...$c" >&4
6993 set d_msghdr_s msghdr msg_name define sys/types.h $d_socket sys/socket.h $i_sysuio sys/uio.h
6994 eval $hasfield
6995 case "$d_msghdr_s" in
6996 "$define")      echo "Yup, it does." >&4
6997                 ;;
6998 *)              echo "Nope, it doesn't." >&4
6999                 ;;
7000 esac
7001
7002 $echo $n "Checking to see if your system supports struct cmsghdr...$c" >&4
7003 set d_cmsghdr_s cmsghdr cmsg_len define sys/types.h $d_socket sys/socket.h $i_sysuio sys/uio.h
7004 eval $hasfield
7005 case "$d_cmsghdr_s" in
7006 "$define")      echo "Yup, it does." >&4
7007                 ;;
7008 *)              echo "Nope, it doesn't." >&4
7009                 ;;
7010 esac
7011
7012 : check for const keyword
7013 echo " "
7014 echo 'Checking to see if your C compiler knows about "const"...' >&4
7015 $cat >const.c <<'EOCP'
7016 typedef struct spug { int drokk; } spug;
7017 int main()
7018 {
7019         const char *foo;
7020         const spug y;
7021 }
7022 EOCP
7023 if $cc -c $ccflags const.c >/dev/null 2>&1 ; then
7024         val="$define"
7025         echo "Yup, it does."
7026 else
7027         val="$undef"
7028         echo "Nope, it doesn't."
7029 fi
7030 set d_const
7031 eval $setvar
7032
7033 : see if crypt exists
7034 echo " "
7035 if set crypt val -f d_crypt; eval $csym; $val; then
7036         echo 'crypt() found.' >&4
7037         val="$define"
7038         cryptlib=''
7039 else
7040         cryptlib=`./loc Slibcrypt$_a "" $xlibpth`
7041         if $test -z "$cryptlib"; then
7042                 cryptlib=`./loc Mlibcrypt$_a "" $xlibpth`
7043         else
7044                 cryptlib=-lcrypt
7045         fi
7046         if $test -z "$cryptlib"; then
7047                 cryptlib=`./loc Llibcrypt$_a "" $xlibpth`
7048         else
7049                 cryptlib=-lcrypt
7050         fi
7051         if $test -z "$cryptlib"; then
7052                 cryptlib=`./loc libcrypt$_a "" $libpth`
7053         else
7054                 cryptlib=-lcrypt
7055         fi
7056         if $test -z "$cryptlib"; then
7057                 echo 'crypt() NOT found.' >&4
7058                 val="$undef"
7059         else
7060                 val="$define"
7061         fi
7062 fi
7063 set d_crypt
7064 eval $setvar
7065
7066 : get csh whereabouts
7067 case "$csh" in
7068 'csh') val="$undef" ;;
7069 *) val="$define" ;;
7070 esac
7071 set d_csh
7072 eval $setvar
7073 : Respect a hint or command line value for full_csh.
7074 case "$full_csh" in
7075 '') full_csh=$csh ;;
7076 esac
7077
7078 : see if cuserid exists
7079 set cuserid d_cuserid
7080 eval $inlibc
7081
7082 : see if this is a limits.h system
7083 set limits.h i_limits
7084 eval $inhdr
7085
7086 : see if this is a float.h system
7087 set float.h i_float
7088 eval $inhdr
7089
7090 : See if number of significant digits in a double precision number is known
7091 echo " "
7092 $cat >dbl_dig.c <<EOM
7093 #$i_limits I_LIMITS
7094 #$i_float I_FLOAT
7095 #ifdef I_LIMITS
7096 #include <limits.h>
7097 #endif
7098 #ifdef I_FLOAT
7099 #include <float.h>
7100 #endif
7101 #ifdef DBL_DIG
7102 printf("Contains DBL_DIG");
7103 #endif
7104 EOM
7105 $cppstdin $cppflags $cppminus < dbl_dig.c >dbl_dig.E 2>/dev/null
7106 if $contains 'DBL_DIG' dbl_dig.E >/dev/null 2>&1; then
7107         echo "DBL_DIG found." >&4
7108         val="$define"
7109 else
7110         echo "DBL_DIG NOT found." >&4
7111         val="$undef"
7112 fi
7113 $rm -f dbl_dig.?
7114 set d_dbl_dig
7115 eval $setvar
7116
7117
7118 if $test X"$use64bits" = X"$define"; then
7119         : see if dbminit64 exists
7120         set dbminit64 d_dbminit64
7121         eval $inlibc
7122
7123         : see if dbmclose64 exists
7124         set dbmclose64 d_dbmclose64
7125         eval $inlibc
7126
7127         : see if fetch64 exists
7128         set fetch64 d_fetch64
7129         eval $inlibc
7130
7131         : see if store64 exists
7132         set store64 d_store64
7133         eval $inlibc
7134
7135         : see if delete64 exists
7136         set delete64 d_delete64
7137         eval $inlibc
7138
7139         : see if firstkey64 exists
7140         set firstkey64 d_firstkey64
7141         eval $inlibc
7142
7143         : see if nextkey64 exists
7144         set nextkey64 d_nextkey64
7145         eval $inlibc
7146 else
7147         val="$undef"
7148         for xxx in d_dbminit64 d_dbmclose64 d_fetch64 d_store64 d_delete64 d_firstkey64 d_nextkey64
7149         do
7150                 set $xxx
7151                 eval $setvar
7152         done
7153 fi
7154
7155 : see if difftime exists
7156 set difftime d_difftime
7157 eval $inlibc
7158
7159 : see if sys/stat.h is available
7160 set sys/stat.h i_sysstat
7161 eval $inhdr
7162
7163 : see if this is a dirent system
7164 echo " "
7165 if xinc=`./findhdr dirent.h`; $test "$xinc"; then
7166         val="$define"
7167         echo "<dirent.h> found." >&4
7168 else
7169         val="$undef"
7170         if xinc=`./findhdr sys/dir.h`; $test "$xinc"; then
7171                 echo "<sys/dir.h> found." >&4
7172                 echo " "
7173         else
7174                 xinc=`./findhdr sys/ndir.h`
7175         fi
7176         echo "<dirent.h> NOT found." >&4
7177 fi
7178 set i_dirent
7179 eval $setvar
7180
7181 : Look for type of directory structure.
7182 echo " "
7183 $cppstdin $cppflags $cppminus < "$xinc" > try.c
7184
7185 case "$direntrytype" in
7186 ''|' ')
7187         case "$i_dirent" in
7188         $define) guess1='struct dirent' ;;
7189         *) guess1='struct direct'  ;;
7190         esac
7191         ;;
7192 *)      guess1="$direntrytype"
7193         ;;
7194 esac
7195
7196 case "$guess1" in
7197 'struct dirent') guess2='struct direct' ;;
7198 *) guess2='struct dirent' ;;
7199 esac
7200                 
7201 if $contains "$guess1" try.c >/dev/null 2>&1; then
7202         direntrytype="$guess1"
7203         echo "Your directory entries are $direntrytype." >&4
7204 elif $contains "$guess2" try.c >/dev/null 2>&1; then
7205         direntrytype="$guess2"
7206         echo "Your directory entries seem to be $direntrytype." >&4
7207 else
7208         echo "I don't recognize your system's directory entries." >&4
7209         rp="What type is used for directory entries on this system?"
7210         dflt="$guess1"
7211         . ./myread
7212         direntrytype="$ans"
7213 fi
7214 $rm -f try.c
7215
7216
7217 : see if the directory entry stores field length
7218 echo " "
7219 $cppstdin $cppflags $cppminus < "$xinc" > try.c
7220 if $contains 'd_namlen' try.c >/dev/null 2>&1; then
7221         echo "Good, your directory entry keeps length information in d_namlen." >&4
7222         val="$define"
7223 else
7224         echo "Your directory entry does not know about the d_namlen field." >&4
7225         val="$undef"
7226 fi
7227 set d_dirnamlen
7228 eval $setvar
7229 $rm -f try.c
7230
7231
7232 if $test X"$use64bits" = X"$define"; then
7233         : see if fstat64 exists
7234         set fstat64 d_fstat64
7235         eval $inlibc
7236
7237         : see if ftruncate64 exists
7238         set ftruncate64 d_ftruncate64
7239         eval $inlibc
7240
7241         : see if lockf64 exists
7242         set lockf64 d_lockf64
7243         eval $inlibc
7244
7245         : see if lseek64 exists
7246         set lseek64 d_lseek64
7247         eval $inlibc
7248
7249         : see if lstat64 exists
7250         set lstat64 d_lstat64
7251         eval $inlibc
7252
7253         : see if open64 exists
7254         set open64 d_open64
7255         eval $inlibc
7256
7257         : see if opendir64 exists
7258         set opendir64 d_opendir64
7259         eval $inlibc
7260
7261         : see if readdir64 exists
7262         set readdir64 d_readdir64
7263         eval $inlibc
7264
7265         : see if seekdir64 exists
7266         set seekdir64 d_seekdir64
7267         eval $inlibc
7268
7269         : see if stat64 exists
7270         set stat64 d_stat64
7271         eval $inlibc
7272
7273         : see if telldir64 exists
7274         set telldir64 d_telldir64
7275         eval $inlibc
7276
7277         : see if truncate64 exists
7278         set truncate64 d_truncate64
7279         eval $inlibc
7280
7281         : check for off64_t
7282         echo " "
7283         echo $n "Checking to see if your system supports off64_t...$c" >&4
7284         $cat >try.c <<EOCP
7285 #include <sys/types.h>
7286 off64_t foo() { off64_t x; x = 7; return x; }'
7287 EOCP
7288         if $cc $optimize $ccflags -c try.c >/dev/null 2>&1; then
7289                 val="$define"
7290                 echo " Yup, it does." >&4
7291         else
7292                 val="$undef"
7293                 echo " Nope, it doesn't." >&4
7294         fi
7295         $rm -f try.*
7296         set d_off64t
7297         eval $setvar
7298
7299         : check for ino64_t
7300         echo " "
7301         echo $n "Checking to see if your system supports ino64_t...$c" >&4
7302         val="$undef"
7303         case "$i_sysstat" in
7304         "$define" )
7305                 $cat >try.c <<EOCP
7306 #include <sys/types.h>
7307 #include <sys/stat.h>
7308 ino64_t foo() { ino64_t x; x = 7; return x; }'
7309 EOCP
7310                 if $cc $optimize $ccflags -c try.c >/dev/null 2>&1; then
7311                         val="$define"
7312                 fi
7313                 $rm -f try.*
7314                 ;;
7315         esac
7316         if $test "X$val" = X"$define"; then
7317                 echo " Yup, it does." >&4
7318         else
7319                 echo " Nope, it doesn't." >&4
7320         fi
7321         set d_ino64t
7322         eval $setvar
7323
7324         : check for struct flock64
7325         echo " "
7326         echo "Checking to see if your system supports struct flock64..." >&4
7327         if $h_fcntl; then
7328                 set d_flock64_s flock64 l_len define fcntl.h
7329                 eval $hasfield
7330         else
7331                 val="$undef"
7332                 set d_flock64_s
7333                 eval $setvar
7334         fi
7335         case "$d_flock64_s" in
7336         "$define")      echo "Yup, it does." >&4
7337                         ;;
7338         *)              echo "Nope, it doesn't." >&4
7339                         ;;
7340         esac
7341
7342         : check for struct dirent64
7343         echo " "
7344         echo "Checking to see if your system supports struct dirent64..." >&4
7345         set d_dirent64_s dirent64 d_off $i_dirent dirent.h
7346         eval $hasfield
7347         case "$d_dirent64_s" in
7348         "$define")      echo "Yup, it does." >&4
7349                         ;;
7350         *)              echo "Nope, it doesn't." >&4
7351                         ;;
7352         esac
7353
7354 else
7355         val="$undef"
7356         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
7357         do
7358                 set $xxx
7359                 eval $setvar
7360         done
7361 fi
7362
7363 : see if dlerror exists
7364 xxx_runnm="$runnm"
7365 runnm=false
7366 set dlerror d_dlerror
7367 eval $inlibc
7368 runnm="$xxx_runnm"
7369
7370 : see if dlfcn is available
7371 set dlfcn.h i_dlfcn
7372 eval $inhdr
7373
7374 case "$usedl" in
7375 $define|y|true)
7376         $cat << EOM
7377
7378 On a few systems, the dynamically loaded modules that perl generates and uses
7379 will need a different extension than shared libs. The default will probably
7380 be appropriate.
7381
7382 EOM
7383         case "$dlext" in
7384         '')     dflt="$so" ;;
7385         *)      dflt="$dlext" ;;
7386         esac
7387         rp='What is the extension of dynamically loaded modules'
7388         . ./myread
7389         dlext="$ans"
7390         ;;
7391 *)
7392         dlext="none"
7393         ;;
7394 esac
7395
7396 : Check if dlsym need a leading underscore
7397 echo " "
7398 val="$undef"
7399
7400 case "$dlsrc" in
7401 dl_dlopen.xs)
7402         echo "Checking whether your dlsym() needs a leading underscore ..." >&4
7403         $cat >dyna.c <<'EOM'
7404 fred () { }
7405 EOM
7406
7407 $cat >fred.c<<EOM
7408
7409 #include <stdio.h>
7410 #$i_dlfcn I_DLFCN
7411 #ifdef I_DLFCN
7412 #include <dlfcn.h>      /* the dynamic linker include file for Sunos/Solaris */
7413 #else
7414 #include <sys/types.h>
7415 #include <nlist.h>
7416 #include <link.h>
7417 #endif
7418
7419 extern int fred() ;
7420
7421 int main()
7422 {
7423     void * handle ;
7424     void * symbol ;
7425 #ifndef RTLD_LAZY
7426     int mode = 1 ;
7427 #else
7428     int mode = RTLD_LAZY ;
7429 #endif
7430     handle = dlopen("./dyna.$dlext", mode) ;
7431     if (handle == NULL) {
7432         printf ("1\n") ;
7433         fflush (stdout) ;
7434         exit(0);
7435     }
7436     symbol = dlsym(handle, "fred") ;
7437     if (symbol == NULL) {
7438         /* try putting a leading underscore */
7439         symbol = dlsym(handle, "_fred") ;
7440         if (symbol == NULL) {
7441             printf ("2\n") ;
7442             fflush (stdout) ;
7443             exit(0);
7444         }
7445         printf ("3\n") ;
7446     }
7447     else
7448         printf ("4\n") ;
7449     fflush (stdout) ;
7450     exit(0);
7451 }
7452 EOM
7453         : Call the object file tmp-dyna.o in case dlext=o.
7454         if $cc $ccflags $cccdlflags -c dyna.c > /dev/null 2>&1 && 
7455                 mv dyna${_o} tmp-dyna${_o} > /dev/null 2>&1 && 
7456                 $ld $lddlflags -o dyna.$dlext tmp-dyna${_o} > /dev/null 2>&1 && 
7457                 $cc $ccflags -o fred $ldflags $cccdlflags $ccdlflags fred.c $libs > /dev/null 2>&1; then
7458                 xxx=`./fred`
7459                 case $xxx in
7460                 1)      echo "Test program failed using dlopen." >&4
7461                         echo "Perhaps you should not use dynamic loading." >&4;;
7462                 2)      echo "Test program failed using dlsym." >&4
7463                         echo "Perhaps you should not use dynamic loading." >&4;;
7464                 3)      echo "dlsym needs a leading underscore" >&4
7465                         val="$define" ;;
7466                 4)      echo "dlsym doesn't need a leading underscore." >&4;;
7467                 esac
7468         else
7469                 echo "I can't compile and run the test program." >&4
7470         fi
7471         ;;
7472 esac
7473                 
7474 $rm -f fred fred.? dyna.$dlext dyna.? tmp-dyna.?
7475
7476 set d_dlsymun
7477 eval $setvar
7478
7479 hasproto='varname=$1; func=$2; shift; shift;
7480 while $test $# -ge 2; do
7481         case "$1" in
7482         $define) echo "#include <$2>";;
7483         esac ;
7484     shift 2;
7485 done > try.c;
7486 $cppstdin $cppflags $cppminus < try.c > tryout.c 2>/dev/null;
7487 if $contains "$func.*(" tryout.c >/dev/null 2>&1; then
7488         echo "$func() prototype found.";
7489         val="$define";
7490 else
7491         echo "$func() prototype NOT found.";
7492         val="$undef";
7493 fi;
7494 set $varname;
7495 eval $setvar;
7496 $rm -f try.c tryout.c'
7497
7498 : see if prototype for drand48 is available
7499 echo " "
7500 set d_drand48proto drand48 $i_stdlib stdlib.h $i_unistd unistd.h
7501 eval $hasproto
7502
7503 : see if dup2 exists
7504 set dup2 d_dup2
7505 eval $inlibc
7506
7507 : see if eaccess exists
7508 set eaccess d_eaccess
7509 eval $inlibc
7510
7511 : see if endgrent exists
7512 set endgrent d_endgrent
7513 eval $inlibc
7514
7515 : see if endhostent exists
7516 set endhostent d_endhent
7517 eval $inlibc
7518
7519 : see if endnetent exists
7520 set endnetent d_endnent
7521 eval $inlibc
7522
7523 : see if endprotoent exists
7524 set endprotoent d_endpent
7525 eval $inlibc
7526
7527 : see if endpwent exists
7528 set endpwent d_endpwent
7529 eval $inlibc
7530
7531 : see if endservent exists
7532 set endservent d_endsent
7533 eval $inlibc
7534
7535 : Locate the flags for 'open()'
7536 echo " "
7537 $cat >open3.c <<'EOCP'
7538 #include <sys/types.h>
7539 #ifdef I_FCNTL
7540 #include <fcntl.h>
7541 #endif
7542 #ifdef I_SYS_FILE
7543 #include <sys/file.h>
7544 #endif
7545 int main() {
7546         if(O_RDONLY);
7547 #ifdef O_TRUNC
7548         exit(0);
7549 #else
7550         exit(1);
7551 #endif
7552 }
7553 EOCP
7554 : check sys/file.h first to get FREAD on Sun
7555 if $test `./findhdr sys/file.h` && \
7556                 set open3 -DI_SYS_FILE && eval $compile; then
7557         h_sysfile=true;
7558         echo "<sys/file.h> defines the O_* constants..." >&4
7559         if ./open3; then
7560                 echo "and you have the 3 argument form of open()." >&4
7561                 val="$define"
7562         else
7563                 echo "but not the 3 argument form of open().  Oh, well." >&4
7564                 val="$undef"
7565         fi
7566 elif $test `./findhdr fcntl.h` && \
7567                 set open3 -DI_FCNTL && eval $compile; then
7568         h_fcntl=true;
7569         echo "<fcntl.h> defines the O_* constants..." >&4
7570         if ./open3; then
7571                 echo "and you have the 3 argument form of open()." >&4
7572                 val="$define"
7573         else
7574                 echo "but not the 3 argument form of open().  Oh, well." >&4
7575                 val="$undef"
7576         fi
7577 else
7578         val="$undef"
7579         echo "I can't find the O_* constant definitions!  You got problems." >&4
7580 fi
7581 set d_open3
7582 eval $setvar
7583 $rm -f open3*
7584
7585 : check for non-blocking I/O stuff
7586 case "$h_sysfile" in
7587 true) echo "#include <sys/file.h>" > head.c;;
7588 *)
7589         case "$h_fcntl" in
7590         true) echo "#include <fcntl.h>" > head.c;;
7591         *) echo "#include <sys/fcntl.h>" > head.c;;
7592         esac
7593         ;;
7594 esac
7595 echo " "
7596 echo "Figuring out the flag used by open() for non-blocking I/O..." >&4
7597 case "$o_nonblock" in
7598 '')
7599         $cat head.c > try.c
7600         $cat >>try.c <<'EOCP'
7601 int main() {
7602 #ifdef O_NONBLOCK
7603         printf("O_NONBLOCK\n");
7604         exit(0);
7605 #endif
7606 #ifdef O_NDELAY
7607         printf("O_NDELAY\n");
7608         exit(0);
7609 #endif
7610 #ifdef FNDELAY
7611         printf("FNDELAY\n");
7612         exit(0);
7613 #endif
7614         exit(0);
7615 }
7616 EOCP
7617         set try
7618         if eval $compile_ok; then
7619                 o_nonblock=`./try`
7620                 case "$o_nonblock" in
7621                 '') echo "I can't figure it out, assuming O_NONBLOCK will do.";;
7622                 *) echo "Seems like we can use $o_nonblock.";;
7623                 esac
7624         else
7625                 echo "(I can't compile the test program; pray O_NONBLOCK is right!)"
7626         fi
7627         ;;
7628 *) echo "Using $hint value $o_nonblock.";;
7629 esac
7630 $rm -f try try.* .out core
7631
7632 echo " "
7633 echo "Let's see what value errno gets from read() on a $o_nonblock file..." >&4
7634 case "$eagain" in
7635 '')
7636         $cat head.c > try.c
7637         $cat >>try.c <<EOCP
7638 #include <errno.h>
7639 #include <sys/types.h>
7640 #include <signal.h>
7641 #define MY_O_NONBLOCK $o_nonblock
7642 #ifndef errno  /* XXX need better Configure test */
7643 extern int errno;
7644 #endif
7645 $signal_t blech(x) int x; { exit(3); }
7646 EOCP
7647         $cat >> try.c <<'EOCP'
7648 int main()
7649 {
7650         int pd[2];
7651         int pu[2];
7652         char buf[1];
7653         char string[100];
7654
7655         pipe(pd);       /* Down: child -> parent */
7656         pipe(pu);       /* Up: parent -> child */
7657         if (0 != fork()) {
7658                 int ret;
7659                 close(pd[1]);   /* Parent reads from pd[0] */
7660                 close(pu[0]);   /* Parent writes (blocking) to pu[1] */
7661                 if (-1 == fcntl(pd[0], F_SETFL, MY_O_NONBLOCK))
7662                         exit(1);
7663                 signal(SIGALRM, blech);
7664                 alarm(5);
7665                 if ((ret = read(pd[0], buf, 1)) > 0)    /* Nothing to read! */
7666                         exit(2);
7667                 sprintf(string, "%d\n", ret);
7668                 write(2, string, strlen(string));
7669                 alarm(0);
7670 #ifdef EAGAIN
7671                 if (errno == EAGAIN) {
7672                         printf("EAGAIN\n");
7673                         goto ok;
7674                 }
7675 #endif
7676 #ifdef EWOULDBLOCK
7677                 if (errno == EWOULDBLOCK)
7678                         printf("EWOULDBLOCK\n");
7679 #endif
7680         ok:
7681                 write(pu[1], buf, 1);   /* Unblocks child, tell it to close our pipe */
7682                 sleep(2);                               /* Give it time to close our pipe */
7683                 alarm(5);
7684                 ret = read(pd[0], buf, 1);      /* Should read EOF */
7685                 alarm(0);
7686                 sprintf(string, "%d\n", ret);
7687                 write(3, string, strlen(string));
7688                 exit(0);
7689         }
7690
7691         close(pd[0]);                   /* We write to pd[1] */
7692         close(pu[1]);                   /* We read from pu[0] */
7693         read(pu[0], buf, 1);    /* Wait for parent to signal us we may continue */
7694         close(pd[1]);                   /* Pipe pd is now fully closed! */
7695         exit(0);                                /* Bye bye, thank you for playing! */
7696 }
7697 EOCP
7698         set try
7699         if eval $compile_ok; then
7700                 echo "$startsh" >mtry
7701                 echo "./try >try.out 2>try.ret 3>try.err || exit 4" >>mtry
7702                 chmod +x mtry
7703                 ./mtry >/dev/null 2>&1
7704                 case $? in
7705                 0) eagain=`$cat try.out`;;
7706                 1) echo "Could not perform non-blocking setting!";;
7707                 2) echo "I did a successful read() for something that was not there!";;
7708                 3) echo "Hmm... non-blocking I/O does not seem to be working!";;
7709                 *) echo "Something terribly wrong happened during testing.";;
7710                 esac
7711                 rd_nodata=`$cat try.ret`
7712                 echo "A read() system call with no data present returns $rd_nodata."
7713                 case "$rd_nodata" in
7714                 0|-1) ;;
7715                 *)
7716                         echo "(That's peculiar, fixing that to be -1.)"
7717                         rd_nodata=-1
7718                         ;;
7719                 esac
7720                 case "$eagain" in
7721                 '')
7722                         echo "Forcing errno EAGAIN on read() with no data available."
7723                         eagain=EAGAIN
7724                         ;;
7725                 *)
7726                         echo "Your read() sets errno to $eagain when no data is available."
7727                         ;;
7728                 esac
7729                 status=`$cat try.err`
7730                 case "$status" in
7731                 0) echo "And it correctly returns 0 to signal EOF.";;
7732                 -1) echo "But it also returns -1 to signal EOF, so be careful!";;
7733                 *) echo "However, your read() returns '$status' on EOF??";;
7734                 esac
7735                 val="$define"
7736                 if test "$status" = "$rd_nodata"; then
7737                         echo "WARNING: you can't distinguish between EOF and no data!"
7738                         val="$undef"
7739                 fi
7740         else
7741                 echo "I can't compile the test program--assuming errno EAGAIN will do."
7742                 eagain=EAGAIN
7743         fi
7744         set d_eofnblk
7745         eval $setvar
7746         ;;
7747 *)
7748         echo "Using $hint value $eagain."
7749         echo "Your read() returns $rd_nodata when no data is present."
7750         case "$d_eofnblk" in
7751         "$define") echo "And you can see EOF because read() returns 0.";;
7752         "$undef") echo "But you can't see EOF status from read() returned value.";;
7753         *)
7754                 echo "(Assuming you can't see EOF status from read anyway.)"
7755                 d_eofnblk=$undef
7756                 ;;
7757         esac
7758         ;;
7759 esac
7760 $rm -f try try.* .out core head.c mtry
7761
7762 : see if fchmod exists
7763 set fchmod d_fchmod
7764 eval $inlibc
7765
7766 : see if fchown exists
7767 set fchown d_fchown
7768 eval $inlibc
7769
7770 : see if this is an fcntl system
7771 set fcntl d_fcntl
7772 eval $inlibc
7773
7774 : see if sys/select.h has to be included
7775 set sys/select.h i_sysselct
7776 eval $inhdr
7777
7778 : see if we should include time.h, sys/time.h, or both
7779 echo " "
7780 if test "X$timeincl" = X; then
7781         echo "Testing to see if we should include <time.h>, <sys/time.h> or both." >&4
7782         $echo $n "I'm now running the test program...$c"
7783         $cat >try.c <<'EOCP'
7784 #include <sys/types.h>
7785 #ifdef I_TIME
7786 #include <time.h>
7787 #endif
7788 #ifdef I_SYSTIME
7789 #ifdef SYSTIMEKERNEL
7790 #define KERNEL
7791 #endif
7792 #include <sys/time.h>
7793 #endif
7794 #ifdef I_SYSSELECT
7795 #include <sys/select.h>
7796 #endif
7797 int main()
7798 {
7799         struct tm foo;
7800 #ifdef S_TIMEVAL
7801         struct timeval bar;
7802 #endif
7803 #ifdef S_TIMEZONE
7804         struct timezone tzp;
7805 #endif
7806         if (foo.tm_sec == foo.tm_sec)
7807                 exit(0);
7808 #ifdef S_TIMEVAL
7809         if (bar.tv_sec == bar.tv_sec)
7810                 exit(0);
7811 #endif
7812         exit(1);
7813 }
7814 EOCP
7815         flags=''
7816         for s_timezone in '-DS_TIMEZONE' ''; do
7817         sysselect=''
7818         for s_timeval in '-DS_TIMEVAL' ''; do
7819         for i_systimek in '' '-DSYSTIMEKERNEL'; do
7820         for i_time in '' '-DI_TIME'; do
7821         for i_systime in '-DI_SYSTIME' ''; do
7822                 case "$flags" in
7823                 '') $echo $n ".$c"
7824                         set try $i_time $i_systime $i_systimek $sysselect $s_timeval $s_timezone
7825                         if eval $compile; then
7826                                 set X $i_time $i_systime $i_systimek $sysselect $s_timeval
7827                                 shift
7828                                 flags="$*"
7829                                 echo " "
7830                                 $echo $n "Succeeded with $flags$c"
7831                         fi
7832                         ;;
7833                 esac
7834         done
7835         done
7836         done
7837         done
7838         done
7839         timeincl=''
7840         echo " "
7841         case "$flags" in
7842         *SYSTIMEKERNEL*) i_systimek="$define"
7843                 timeincl=`./findhdr sys/time.h`
7844                 echo "We'll include <sys/time.h> with KERNEL defined." >&4;;
7845         *) i_systimek="$undef";;
7846         esac
7847         case "$flags" in
7848         *I_TIME*) i_time="$define"
7849                 timeincl=`./findhdr time.h`" $timeincl"
7850                 echo "We'll include <time.h>." >&4;;
7851         *) i_time="$undef";;
7852         esac
7853         case "$flags" in
7854         *I_SYSTIME*) i_systime="$define"
7855                 timeincl=`./findhdr sys/time.h`" $timeincl"
7856                 echo "We'll include <sys/time.h>." >&4;;
7857         *) i_systime="$undef";;
7858         esac
7859         $rm -f try.c try
7860 fi
7861
7862 : check for fd_set items
7863 $cat <<EOM
7864
7865 Checking to see how well your C compiler handles fd_set and friends ...
7866 EOM
7867 $cat >fd_set.c <<EOCP
7868 #$i_systime I_SYS_TIME
7869 #$i_sysselct I_SYS_SELECT
7870 #$d_socket HAS_SOCKET
7871 #include <sys/types.h>
7872 #ifdef HAS_SOCKET
7873 #include <sys/socket.h> /* Might include <sys/bsdtypes.h> */
7874 #endif
7875 #ifdef I_SYS_TIME
7876 #include <sys/time.h>
7877 #endif
7878 #ifdef I_SYS_SELECT
7879 #include <sys/select.h>
7880 #endif
7881 int main() {
7882         fd_set fds;
7883
7884 #ifdef TRYBITS
7885         if(fds.fds_bits);
7886 #endif
7887
7888 #if defined(FD_SET) && defined(FD_CLR) && defined(FD_ISSET) && defined(FD_ZERO)
7889         exit(0);
7890 #else
7891         exit(1);
7892 #endif
7893 }
7894 EOCP
7895 set fd_set -DTRYBITS
7896 if eval $compile; then
7897         d_fds_bits="$define"
7898         d_fd_set="$define"
7899         echo "Well, your system knows about the normal fd_set typedef..." >&4
7900         if ./fd_set; then
7901                 echo "and you have the normal fd_set macros (just as I'd expect)." >&4
7902                 d_fd_macros="$define"
7903         else
7904                 $cat >&4 <<'EOM'
7905 but not the normal fd_set macros!  Gaaack!  I'll have to cover for you.
7906 EOM
7907                 d_fd_macros="$undef"
7908         fi
7909 else
7910         $cat <<'EOM'
7911 Hmm, your compiler has some difficulty with fd_set.  Checking further...
7912 EOM
7913         set fd_set
7914         if eval $compile; then
7915                 d_fds_bits="$undef"
7916                 d_fd_set="$define"
7917                 echo "Well, your system has some sort of fd_set available..." >&4
7918                 if ./fd_set; then
7919                         echo "and you have the normal fd_set macros." >&4
7920                         d_fd_macros="$define"
7921                 else
7922                         $cat <<'EOM'
7923 but not the normal fd_set macros!  Gross!  More work for me...
7924 EOM
7925                         d_fd_macros="$undef"
7926                 fi
7927         else
7928         echo "Well, you got zip.  That's OK, I can roll my own fd_set stuff." >&4
7929                 d_fd_set="$undef"
7930                 d_fds_bits="$undef"
7931                 d_fd_macros="$undef"
7932         fi
7933 fi
7934 $rm -f fd_set*
7935
7936 : see if fgetpos exists
7937 set fgetpos d_fgetpos
7938 eval $inlibc
7939
7940
7941 if $test X"$use64bits" = X"$define"; then
7942         : see if fgetpos64 exists
7943         set fgetpos64 d_fgetpos64
7944         eval $inlibc
7945
7946         : see if fopen64 exists
7947         set freopen64 d_fopen64
7948         eval $inlibc
7949
7950         : see if freopen64 exists
7951         set freopen64 d_freopen64
7952         eval $inlibc
7953
7954         : see if fseek64 exists
7955         set fseek64 d_fseek64
7956         eval $inlibc
7957
7958         : see if fseeko64 exists
7959         set fseeko64 d_fseeko64
7960         eval $inlibc
7961
7962         : see if fsetpos64 exists
7963         set fsetpos64 d_fsetpos64
7964         eval $inlibc
7965
7966         : see if ftell64 exists
7967         set ftell64 d_ftell64
7968         eval $inlibc
7969
7970         : see if ftello64 exists
7971         set ftello64 d_ftello64
7972         eval $inlibc
7973
7974         : see if tmpfile64 exists
7975         set tmpfile64 d_tmpfile64
7976         eval $inlibc
7977 else
7978         val="$undef"
7979         for xxx in d_fgetpos64 d_fopen64 d_freopen64 d_fseek64 d_fseeko64 d_fsetpos64 d_ftell64 d_ftello64 d_tmpfile64
7980         do
7981                 set $xxx
7982                 eval $setvar
7983         done
7984 fi
7985
7986 : see if flock exists
7987 set flock d_flock
7988 eval $inlibc
7989
7990 : see if fork exists
7991 set fork d_fork
7992 eval $inlibc
7993
7994 : see if pathconf exists
7995 set pathconf d_pathconf
7996 eval $inlibc
7997
7998 : see if fpathconf exists
7999 set fpathconf d_fpathconf
8000 eval $inlibc
8001
8002 : see if fseeko exists
8003 set fseeko d_fseeko
8004 eval $inlibc
8005
8006 : see if fsetpos exists
8007 set fsetpos d_fsetpos
8008 eval $inlibc
8009
8010 : see if this is a sys/param system
8011 set sys/param.h i_sysparam
8012 eval $inhdr
8013
8014 : see if this is a sys/mount.h system
8015 set sys/mount.h i_sysmount
8016 eval $inhdr
8017
8018
8019 : see if statfs exists
8020 set statfs d_statfs
8021 eval $inlibc
8022
8023 : see if fstatfs exists
8024 set fstatfs d_fstatfs
8025 eval $inlibc
8026
8027 : see if statfs knows about mount flags
8028 set d_statfsflags statfs f_flags $i_sysparam sys/param.h $i_sysmount sys/mount.h
8029 eval $hasfield
8030
8031
8032 : see if statvfs exists
8033 set statvfs d_statvfs
8034 eval $inlibc
8035
8036 : see if fstatvfs exists
8037 set fstatvfs d_fstatvfs
8038 eval $inlibc
8039
8040
8041 : see if ftello exists
8042 set ftello d_ftello
8043 eval $inlibc
8044
8045 : see if getgrent exists
8046 set getgrent d_getgrent
8047 eval $inlibc
8048
8049 : see if gethostbyaddr exists
8050 set gethostbyaddr d_gethbyaddr
8051 eval $inlibc
8052
8053 : see if gethostbyname exists
8054 set gethostbyname d_gethbyname
8055 eval $inlibc
8056
8057 : see if gethostent exists
8058 set gethostent d_gethent
8059 eval $inlibc
8060
8061 : see how we will look up host name
8062 echo " "
8063 call=''
8064 if set gethostname val -f d_gethname; eval $csym; $val; then
8065         echo 'gethostname() found.' >&4
8066         d_gethname="$define"
8067         call=gethostname
8068 fi
8069 if set uname val -f d_uname; eval $csym; $val; then
8070         if ./xenix; then
8071                 $cat <<'EOM'
8072 uname() was found, but you're running xenix, and older versions of xenix
8073 have a broken uname(). If you don't really know whether your xenix is old
8074 enough to have a broken system call, use the default answer.
8075
8076 EOM
8077                 dflt=y
8078                 case "$d_uname" in
8079                 "$define") dflt=n;;
8080                 esac
8081                 rp='Is your uname() broken?'
8082                 . ./myread
8083                 case "$ans" in
8084                 n*) d_uname="$define"; call=uname;;
8085                 esac
8086         else
8087                 echo 'uname() found.' >&4
8088                 d_uname="$define"
8089                 case "$call" in
8090                 '') call=uname ;;
8091                 esac
8092         fi
8093 fi
8094 case "$d_gethname" in
8095 '') d_gethname="$undef";;
8096 esac
8097 case "$d_uname" in
8098 '') d_uname="$undef";;
8099 esac
8100 case "$d_uname$d_gethname" in
8101 *define*)
8102         dflt=n
8103         cat <<EOM
8104  
8105 Every now and then someone has a $call() that lies about the hostname
8106 but can't be fixed for political or economic reasons.  If you wish, I can
8107 pretend $call() isn't there and maybe compute hostname at run-time
8108 thanks to the '$phostname' command.
8109
8110 EOM
8111         rp="Shall I ignore $call() from now on?"
8112         . ./myread
8113         case "$ans" in
8114         y*) d_uname="$undef" d_gethname="$undef"; $echo $n "Okay...$c";;
8115         esac;;
8116 esac
8117 case "$phostname" in
8118 '') aphostname='';;
8119 *) case "$aphostname" in
8120         /*) ;;
8121         *) set X $phostname
8122                 shift
8123                 file=$1
8124                 shift
8125                 file=`./loc $file $file $pth`
8126                 aphostname=`echo $file $*`
8127                 ;;
8128         esac
8129         ;;
8130 esac
8131 case "$d_uname$d_gethname" in
8132 *define*) ;;
8133 *)
8134         case "$phostname" in
8135         '')
8136                 echo "There will be no way for $package to get your hostname." >&4;;
8137         *)
8138         echo "I'll use 'popen("'"'$aphostname'", "r")'"' to get your hostname." >&4
8139                 ;;
8140         esac;;
8141 esac
8142 case "$d_phostname" in
8143 '') d_phostname="$undef";;
8144 esac
8145
8146 : see if this is a netdb.h system
8147 set netdb.h i_netdb
8148 eval $inhdr
8149
8150 : see if prototypes for various gethostxxx netdb.h functions are available
8151 echo " "
8152 set d_gethostprotos gethostent $i_netdb netdb.h
8153 eval $hasproto
8154
8155 : see if getlogin exists
8156 set getlogin d_getlogin
8157 eval $inlibc
8158
8159 : see if getmntent exists
8160 set getmntent d_getmntent
8161 eval $inlibc
8162
8163 : see if getnetbyaddr exists
8164 set getnetbyaddr d_getnbyaddr
8165 eval $inlibc
8166
8167 : see if getnetbyname exists
8168 set getnetbyname d_getnbyname
8169 eval $inlibc
8170
8171 : see if getnetent exists
8172 set getnetent d_getnent
8173 eval $inlibc
8174
8175 : see if prototypes for various getnetxxx netdb.h functions are available
8176 echo " "
8177 set d_getnetprotos getnetent $i_netdb netdb.h
8178 eval $hasproto
8179
8180
8181 : see if getprotobyname exists
8182 set getprotobyname d_getpbyname
8183 eval $inlibc
8184
8185 : see if getprotobynumber exists
8186 set getprotobynumber d_getpbynumber
8187 eval $inlibc
8188
8189 : see if getprotoent exists
8190 set getprotoent d_getpent
8191 eval $inlibc
8192
8193 : see if getpgid exists
8194 set getpgid d_getpgid
8195 eval $inlibc
8196
8197 : see if getpgrp2 exists
8198 set getpgrp2 d_getpgrp2
8199 eval $inlibc
8200
8201 : see if getppid exists
8202 set getppid d_getppid
8203 eval $inlibc
8204
8205 : see if getpriority exists
8206 set getpriority d_getprior
8207 eval $inlibc
8208
8209 : see if prototypes for various getprotoxxx netdb.h functions are available
8210 echo " "
8211 set d_getprotoprotos getprotoent $i_netdb netdb.h
8212 eval $hasproto
8213
8214 : see if getpwent exists
8215 set getpwent d_getpwent
8216 eval $inlibc
8217
8218
8219 : see if getservbyname exists
8220 set getservbyname d_getsbyname
8221 eval $inlibc
8222
8223 : see if getservbyport exists
8224 set getservbyport d_getsbyport
8225 eval $inlibc
8226
8227 : see if getservent exists
8228 set getservent d_getsent
8229 eval $inlibc
8230
8231 : see if prototypes for various getservxxx netdb.h functions are available
8232 echo " "
8233 set d_getservprotos getservent $i_netdb netdb.h
8234 eval $hasproto
8235
8236 : see if gettimeofday or ftime exists
8237 set gettimeofday d_gettimeod
8238 eval $inlibc
8239 case "$d_gettimeod" in
8240 "$undef")
8241         set ftime d_ftime 
8242         eval $inlibc
8243         ;;
8244 *)
8245         val="$undef"; set d_ftime; eval $setvar
8246         ;;
8247 esac
8248 case "$d_gettimeod$d_ftime" in
8249 "$undef$undef")
8250         echo " "
8251         echo 'No ftime() nor gettimeofday() -- timing may be less accurate.' >&4
8252         ;;
8253 esac
8254
8255 : see if this is an grp system
8256 set grp.h i_grp
8257 eval $inhdr
8258
8259 case "$i_grp" in
8260 $define)
8261         xxx=`./findhdr grp.h`
8262         $cppstdin $cppflags $cppminus < $xxx >$$.h
8263
8264         if $contains 'gr_passwd' $$.h >/dev/null 2>&1; then
8265                 val="$define"
8266         else
8267                 val="$undef"
8268         fi
8269         set d_grpasswd
8270         eval $setvar
8271
8272         $rm -f $$.h
8273         ;;
8274 *)
8275         val="$undef";
8276         set d_grpasswd; eval $setvar
8277         ;;
8278 esac
8279
8280 : see if hasmntopt exists
8281 set hasmntopt d_hasmntopt
8282 eval $inlibc
8283
8284 : see if this is a netinet/in.h or sys/in.h system
8285 set netinet/in.h i_niin sys/in.h i_sysin
8286 eval $inhdr
8287
8288 : see if arpa/inet.h has to be included
8289 set arpa/inet.h i_arpainet
8290 eval $inhdr
8291
8292 : see if htonl --and friends-- exists
8293 val=''
8294 set htonl val
8295 eval $inlibc
8296
8297 : Maybe they are macros.
8298 case "$val" in
8299 $undef)
8300         $cat >htonl.c <<EOM
8301 #include <stdio.h>
8302 #include <sys/types.h>
8303 #$i_niin I_NETINET_IN
8304 #$i_sysin I_SYS_IN
8305 #$i_arpainet I_ARPA_INET
8306 #ifdef I_NETINET_IN
8307 #include <netinet/in.h>
8308 #endif
8309 #ifdef I_SYS_IN
8310 #include <sys/in.h>
8311 #endif
8312 #ifdef I_ARPA_INET
8313 #include <arpa/inet.h>
8314 #endif
8315 #ifdef htonl
8316 printf("Defined as a macro.");
8317 #endif
8318 EOM
8319         $cppstdin $cppflags $cppminus < htonl.c >htonl.E 2>/dev/null
8320         if $contains 'Defined as a macro' htonl.E >/dev/null 2>&1; then
8321                 val="$define"
8322                 echo "But it seems to be defined as a macro." >&4
8323         fi
8324         $rm -f htonl.?
8325         ;;
8326 esac
8327 set d_htonl
8328 eval $setvar
8329
8330 : see which of string.h or strings.h is needed
8331 echo " "
8332 strings=`./findhdr string.h`
8333 if $test "$strings" && $test -r "$strings"; then
8334         echo "Using <string.h> instead of <strings.h>." >&4
8335         val="$define"
8336 else
8337         val="$undef"
8338         strings=`./findhdr strings.h`
8339         if $test "$strings" && $test -r "$strings"; then
8340                 echo "Using <strings.h> instead of <string.h>." >&4
8341         else
8342                 echo "No string header found -- You'll surely have problems." >&4
8343         fi
8344 fi
8345 set i_string
8346 eval $setvar
8347 case "$i_string" in
8348 "$undef") strings=`./findhdr strings.h`;;
8349 *)        strings=`./findhdr string.h`;;
8350 esac
8351
8352 : index or strchr
8353 echo " "
8354 if set index val -f; eval $csym; $val; then
8355         if set strchr val -f d_strchr; eval $csym; $val; then
8356                 if $contains strchr "$strings" >/dev/null 2>&1 ; then
8357                         val="$define"
8358                         vali="$undef"
8359                         echo "strchr() found." >&4
8360                 else
8361                         val="$undef"
8362                         vali="$define"
8363                         echo "index() found." >&4
8364                 fi
8365         else
8366                 val="$undef"
8367                 vali="$define"
8368                 echo "index() found." >&4
8369         fi
8370 else
8371         if set strchr val -f d_strchr; eval $csym; $val; then
8372                 val="$define"
8373                 vali="$undef"
8374                 echo "strchr() found." >&4
8375         else
8376                 echo "No index() or strchr() found!" >&4
8377                 val="$undef"
8378                 vali="$undef"
8379         fi
8380 fi
8381 set d_strchr; eval $setvar
8382 val="$vali"
8383 set d_index; eval $setvar
8384
8385 : check whether inet_aton exists
8386 set inet_aton d_inetaton
8387 eval $inlibc
8388
8389 : see if inttypes.h is available
8390 : we want a real compile instead of Inhdr because some systems
8391 : have an inttypes.h which includes non-existent headers
8392 echo " "
8393 $cat >try.c <<EOCP
8394 #include <inttypes.h>
8395 int main() {
8396         static int32_t foo32 = 0x12345678;
8397 }
8398 EOCP
8399 set try
8400 if eval $compile; then
8401         echo "<inttypes.h> found." >&4
8402         val="$define"
8403 else
8404         echo "<inttypes.h> NOT found." >&4
8405         val="$undef"
8406 fi
8407 $rm -f try.c try
8408 set i_inttypes
8409 eval $setvar
8410
8411 : check for int64_t
8412 case "$use64bits" in
8413 "$define" )
8414         echo " "
8415         echo $n "Checking to see if your system supports int64_t...$c" >&4
8416         $cat >try.c <<EOCP
8417 #include <sys/types.h>
8418 #$i_inttypes I_INTTYPES
8419 #ifdef I_INTTYPES
8420 #include <inttypes.h>
8421 #endif
8422 int64_t foo() { int64_t x; x = 7; return x; }
8423 EOCP
8424         if $cc $optimize $ccflags -c try.c >/dev/null 2>&1; then
8425                 val="$define"
8426                 echo " Yup, it does." >&4
8427         else
8428                 val="$undef"
8429                 echo " Nope, it doesn't." >&4
8430         fi
8431         $rm -f try.*
8432         ;;
8433 *)      val="$undef"
8434         ;;
8435 esac
8436 set d_int64t
8437 eval $setvar
8438
8439
8440 : Look for isascii
8441 echo " "
8442 $cat >isascii.c <<'EOCP'
8443 #include <stdio.h>
8444 #include <ctype.h>
8445 int main() {
8446         int c = 'A';
8447         if (isascii(c))
8448                 exit(0);
8449         else
8450                 exit(1);
8451 }
8452 EOCP
8453 set isascii
8454 if eval $compile; then
8455         echo "isascii() found." >&4
8456         val="$define"
8457 else
8458         echo "isascii() NOT found." >&4
8459         val="$undef"
8460 fi
8461 set d_isascii
8462 eval $setvar
8463 $rm -f isascii*
8464
8465 : see if killpg exists
8466 set killpg d_killpg
8467 eval $inlibc
8468
8469 : see if lchown exists
8470 echo " "
8471 $cat > try.c <<'EOCP'
8472 /* System header to define __stub macros and hopefully few prototypes,
8473     which can conflict with char lchown(); below.  */
8474 #include <assert.h>
8475 /* Override any gcc2 internal prototype to avoid an error.  */
8476 /* We use char because int might match the return type of a gcc2
8477    builtin and then its argument prototype would still apply.  */
8478 char lchown();
8479 int main() {
8480     /*  The GNU C library defines this for functions which it implements
8481         to always fail with ENOSYS.  Some functions are actually named
8482         something starting with __ and the normal name is an alias.  */
8483 #if defined (__stub_lchown) || defined (__stub___lchown)
8484 choke me
8485 #else
8486 lchown();
8487 #endif
8488 ; return 0; }
8489 EOCP
8490 set try
8491 if eval $compile; then
8492     $echo "lchown() found." >&4
8493     val="$define"
8494 else
8495     $echo "lchown() NOT found." >&4
8496     val="$undef"
8497 fi
8498 set d_lchown
8499 eval $setvar
8500
8501 : see if link exists
8502 set link d_link
8503 eval $inlibc
8504
8505 : see if localeconv exists
8506 set localeconv d_locconv
8507 eval $inlibc
8508
8509 : see if lockf exists
8510 set lockf d_lockf
8511 eval $inlibc
8512
8513 : check for length of double
8514 echo " "
8515 case "$doublesize" in
8516 '')
8517         $echo $n "Checking to see how big your double precision numbers are...$c" >&4
8518         $cat >try.c <<'EOCP'
8519 #include <stdio.h>
8520 int main()
8521 {
8522         printf("%d\n", sizeof(double));
8523 }
8524 EOCP
8525         set try
8526         if eval $compile_ok; then
8527                 doublesize=`./try`
8528                 $echo " $doublesize bytes." >&4
8529         else
8530                 dflt='8'
8531                 echo "(I can't seem to compile the test program.  Guessing...)"
8532                 rp="What is the size of a double precision number (in bytes)?"
8533                 . ./myread
8534                 doublesize="$ans"
8535         fi
8536         ;;
8537 esac
8538 $rm -f try.c try
8539
8540 : check for long doubles
8541 echo " "
8542 echo $n "Checking to see if your system supports long doubles...$c" >&4
8543 echo 'long double foo() { long double x; x = 7.0; return x; }' > try.c
8544 if $cc $optimize $ccflags -c try.c >/dev/null 2>&1; then
8545         val="$define"
8546         echo " Yup, it does." >&4
8547 else
8548         val="$undef"
8549         echo " Nope, it doesn't." >&4
8550 fi
8551 $rm try.*
8552 set d_longdbl
8553 eval $setvar
8554
8555 : check for length of long double
8556 case "${d_longdbl}${longdblsize}" in
8557 $define)
8558         echo " "
8559         $echo $n "Checking to see how big your long doubles are...$c" >&4
8560         $cat >try.c <<'EOCP'
8561 #include <stdio.h>
8562 int main()
8563 {
8564         printf("%d\n", sizeof(long double));
8565 }
8566 EOCP
8567         set try
8568         if eval $compile; then
8569                 longdblsize=`./try`
8570                 $echo " $longdblsize bytes." >&4
8571         else
8572                 dflt='8'
8573                 echo " "
8574                 echo "(I can't seem to compile the test program.  Guessing...)" >&4
8575                 rp="What is the size of a long double (in bytes)?"
8576                 . ./myread
8577                 longdblsize="$ans"
8578         fi
8579         if $test "X$doublesize" = "X$longdblsize"; then
8580                 echo "(That isn't any different from an ordinary double.)"
8581         fi      
8582         ;;
8583 esac
8584 $rm -f try.c try
8585
8586 : check for long long
8587 echo " "
8588 echo $n "Checking to see if your system supports long long...$c" >&4
8589 echo 'long long foo() { long long x; x = 7; return x; }' > try.c
8590 if $cc $optimize $ccflags -c try.c >/dev/null 2>&1; then
8591         val="$define"
8592         echo " Yup, it does." >&4
8593 else
8594         val="$undef"
8595         echo " Nope, it doesn't." >&4
8596 fi
8597 $rm try.*
8598 set d_longlong
8599 eval $setvar
8600
8601 : check for length of long long
8602 case "${d_longlong}${longlongsize}" in
8603 $define)
8604         echo " "
8605         $echo $n "Checking to see how big your long longs are...$c" >&4
8606         $cat >try.c <<'EOCP'
8607 #include <stdio.h>
8608 int main()
8609 {
8610         printf("%d\n", sizeof(long long));
8611 }
8612 EOCP
8613         set try
8614         if eval $compile_ok; then
8615                 longlongsize=`./try`
8616                 $echo " $longlongsize bytes." >&4
8617         else
8618                 dflt='8'
8619                 echo " "
8620                 echo "(I can't seem to compile the test program.  Guessing...)"
8621                 rp="What is the size of a long long (in bytes)?"
8622                 . ./myread
8623                 longlongsize="$ans"
8624         fi
8625         if $test "X$longsize" = "X$longlongsize"; then
8626                 echo "(That isn't any different from an ordinary long.)"
8627         fi      
8628         ;;
8629 esac
8630 $rm -f try.c try
8631
8632 : see if lstat exists
8633 set lstat d_lstat
8634 eval $inlibc
8635
8636 : see if madvise exists
8637 set madvise d_madvise
8638 eval $inlibc
8639
8640 : see if mblen exists
8641 set mblen d_mblen
8642 eval $inlibc
8643
8644 : see if mbstowcs exists
8645 set mbstowcs d_mbstowcs
8646 eval $inlibc
8647
8648 : see if mbtowc exists
8649 set mbtowc d_mbtowc
8650 eval $inlibc
8651
8652 : see if memcmp exists
8653 set memcmp d_memcmp
8654 eval $inlibc
8655
8656 : see if memcpy exists
8657 set memcpy d_memcpy
8658 eval $inlibc
8659
8660 : see if memmove exists
8661 set memmove d_memmove
8662 eval $inlibc
8663
8664 : see if memset exists
8665 set memset d_memset
8666 eval $inlibc
8667
8668 : see if mkdir exists
8669 set mkdir d_mkdir
8670 eval $inlibc
8671
8672 : see if mkfifo exists
8673 set mkfifo d_mkfifo
8674 eval $inlibc
8675
8676 : see if mktime exists
8677 set mktime d_mktime
8678 eval $inlibc
8679
8680 : see if this is a sys/mman.h system
8681 set sys/mman.h i_sysmman
8682 eval $inhdr
8683
8684 : see if mmap exists
8685 set mmap d_mmap
8686 eval $inlibc
8687 : see what shmat returns
8688 : default to something harmless
8689 mmaptype='void *'
8690 case "$i_sysmman$d_mmap" in
8691 "$define$define")
8692         $cat >mmap.c <<'END'
8693 #include <sys/mman.h>
8694 void *mmap();
8695 END
8696         if $cc $ccflags -c mmap.c >/dev/null 2>&1; then
8697                 mmaptype='void *'
8698         else
8699                 mmaptype='caddr_t'
8700         fi
8701         echo "and it returns ($mmaptype)." >&4
8702         ;;
8703 esac
8704
8705
8706
8707 : see if mprotect exists
8708 set mprotect d_mprotect
8709 eval $inlibc
8710
8711 : see if msgctl exists
8712 set msgctl d_msgctl
8713 eval $inlibc
8714
8715 : see if msgget exists
8716 set msgget d_msgget
8717 eval $inlibc
8718
8719 : see if msgsnd exists
8720 set msgsnd d_msgsnd
8721 eval $inlibc
8722
8723 : see if msgrcv exists
8724 set msgrcv d_msgrcv
8725 eval $inlibc
8726
8727 : see how much of the 'msg*(2)' library is present.
8728 h_msg=true
8729 echo " "
8730 case "$d_msgctl$d_msgget$d_msgsnd$d_msgrcv" in
8731 *"$undef"*) h_msg=false;;
8732 esac
8733 case "$osname" in
8734 freebsd)
8735     case "`ipcs 2>&1`" in
8736     "SVID messages"*"not configured"*)
8737         echo "Your $osname does not have the msg*(2) configured." >&4
8738         h_msg=false
8739         val="$undef"
8740         set msgctl d_msgctl
8741         eval $setvar
8742         set msgget d_msgget
8743         eval $setvar
8744         set msgsnd d_msgsnd
8745         eval $setvar
8746         set msgrcv d_msgrcv
8747         eval $setvar
8748         ;;
8749     esac
8750     ;;
8751 esac
8752 : we could also check for sys/ipc.h ...
8753 if $h_msg && $test `./findhdr sys/msg.h`; then
8754         echo "You have the full msg*(2) library." >&4
8755         val="$define"
8756 else
8757         echo "You don't have the full msg*(2) library." >&4
8758         val="$undef"
8759 fi
8760 set d_msg
8761 eval $setvar
8762
8763 : see if msync exists
8764 set msync d_msync
8765 eval $inlibc
8766
8767 : see if munmap exists
8768 set munmap d_munmap
8769 eval $inlibc
8770
8771 : see if nice exists
8772 set nice d_nice
8773 eval $inlibc
8774
8775 : see if POSIX threads are available
8776 if test "X$usethreads" = "X$define"; then
8777         set pthread.h i_pthread
8778         eval $inhdr
8779 else
8780         i_pthread="$undef"
8781 fi
8782
8783
8784
8785 : how to create joinable pthreads
8786 if test "X$usethreads" = "X$define" -a "X$i_pthread" = "X$define"; then
8787         echo " "
8788         echo "Checking what constant to use for creating joinable pthreads..." >&4 
8789         $cat >try.c <<'EOCP'
8790 #include <pthread.h>
8791 int main() {
8792     int detachstate = JOINABLE;
8793 }
8794 EOCP
8795         set try -DJOINABLE=PTHREAD_CREATE_JOINABLE
8796         if eval $compile; then
8797                 echo "You seem to use PTHREAD_CREATE_JOINABLE." >&4
8798                 val="$undef" # Yes, undef.
8799                 set d_old_pthread_create_joinable
8800                 eval $setvar
8801                 val=""
8802                 set old_pthread_create_joinable
8803                 eval $setvar
8804         else
8805                 set try -DJOINABLE=PTHREAD_CREATE_UNDETACHED
8806                 if eval $compile; then
8807                         echo "You seem to use PTHREAD_CREATE_UNDETACHED." >&4
8808                         val="$define"
8809                         set d_old_pthread_create_joinable
8810                         eval $setvar
8811                         val=PTHREAD_CREATE_UNDETACHED
8812                         set old_pthread_create_joinable
8813                         eval $setvar
8814                 else            
8815                         set try -DJOINABLE=__UNDETACHED
8816                         if eval $compile; then
8817                                 echo "You seem to use __UNDETACHED." >&4
8818                                 val="$define"
8819                                 set d_old_pthread_create_joinable
8820                                 eval $setvar
8821                                 val=__UNDETACHED
8822                                 set old_pthread_create_joinable
8823                                 eval $setvar
8824                         else
8825                                 echo "Egads, nothing obvious found.  Guessing that you use 0." >&4
8826                                 val="$define"
8827                                 set d_old_pthread_create_joinable
8828                                 eval $setvar
8829                                 val=0
8830                                 set old_pthread_create_joinable
8831                                 eval $setvar
8832                         fi
8833                 fi
8834         fi
8835         $rm -f try try.*
8836 else
8837     d_old_pthread_create_joinable="$undef"
8838     old_pthread_create_joinable=""
8839 fi
8840
8841 : see if pause exists
8842 set pause d_pause
8843 eval $inlibc
8844
8845 : see if pipe exists
8846 set pipe d_pipe
8847 eval $inlibc
8848
8849 : see if poll exists
8850 set poll d_poll
8851 eval $inlibc
8852
8853
8854 : see whether the various POSIXish _yields exist
8855 $cat >try.c <<EOP
8856 #include <pthread.h>
8857 #include <stdio.h>
8858 int main() {
8859 #ifdef SCHED_YIELD
8860         sched_yield();
8861 #else
8862 #ifdef PTHREAD_YIELD
8863         pthread_yield();
8864 #else
8865 #ifdef PTHREAD_YIELD_NULL
8866         pthread_yield(NULL);
8867 #endif
8868 #endif
8869 #endif
8870 }
8871 EOP
8872 : see if sched_yield exists
8873 set try -DSCHED_YIELD
8874 if eval $compile; then
8875     val="$define"
8876     sched_yield='sched_yield()'
8877 else
8878     val="$undef"
8879 fi
8880 case "$usethreads" in
8881 $define)
8882         case "$val" in
8883         $define) echo 'sched_yield() found.' >&4        ;;
8884         *)       echo 'sched_yield() NOT found.' >&4    ;;
8885         esac
8886 esac
8887 set d_sched_yield
8888 eval $setvar
8889
8890 : see if pthread_yield exists
8891 set try -DPTHREAD_YIELD
8892 if eval $compile; then
8893     val="$define"
8894     case "$sched_yield" in
8895     '') sched_yield='pthread_yield()' ;;
8896     esac
8897 else
8898     set try -DPTHREAD_YIELD_NULL
8899     if eval $compile; then
8900         val="$define"
8901         case "$sched_yield" in
8902         '') sched_yield='pthread_yield(NULL)' ;;
8903         esac
8904     else
8905         val="$undef"
8906     fi
8907 fi
8908 case "$usethreads" in
8909 $define)
8910         case "$val" in
8911         $define) echo 'pthread_yield() found.' >&4      ;;
8912         *)       echo 'pthread_yield() NOT found.' >&4  ;;
8913         esac
8914         ;;
8915 esac
8916 set d_pthread_yield
8917 eval $setvar
8918
8919 case "$sched_yield" in
8920 '') sched_yield=undef ;;
8921 esac
8922
8923 $rm -f try try.*
8924
8925 : see if this is a pwd.h system
8926 set pwd.h i_pwd
8927 eval $inhdr
8928
8929 case "$i_pwd" in
8930 $define)
8931         xxx=`./findhdr pwd.h`
8932         $cppstdin $cppflags $cppminus < $xxx >$$.h
8933
8934         if $contains 'pw_quota' $$.h >/dev/null 2>&1; then
8935                 val="$define"
8936         else
8937                 val="$undef"
8938         fi
8939         set d_pwquota
8940         eval $setvar
8941
8942         if $contains 'pw_age' $$.h >/dev/null 2>&1; then
8943                 val="$define"
8944         else
8945                 val="$undef"
8946         fi
8947         set d_pwage
8948         eval $setvar
8949
8950         if $contains 'pw_change' $$.h >/dev/null 2>&1; then
8951                 val="$define"
8952         else
8953                 val="$undef"
8954         fi
8955         set d_pwchange
8956         eval $setvar
8957
8958         if $contains 'pw_class' $$.h >/dev/null 2>&1; then
8959                 val="$define"
8960         else
8961                 val="$undef"
8962         fi
8963         set d_pwclass
8964         eval $setvar
8965
8966         if $contains 'pw_expire' $$.h >/dev/null 2>&1; then
8967                 val="$define"
8968         else
8969                 val="$undef"
8970         fi
8971         set d_pwexpire
8972         eval $setvar
8973
8974         if $contains 'pw_comment' $$.h >/dev/null 2>&1; then
8975                 val="$define"
8976         else
8977                 val="$undef"
8978         fi
8979         set d_pwcomment
8980         eval $setvar
8981
8982         if $contains 'pw_gecos' $$.h >/dev/null 2>&1; then
8983                 val="$define"
8984         else
8985                 val="$undef"
8986         fi
8987         set d_pwgecos
8988         eval $setvar
8989
8990         if $contains 'pw_passwd' $$.h >/dev/null 2>&1; then
8991                 val="$define"
8992         else
8993                 val="$undef"
8994         fi
8995         set d_pwpasswd
8996         eval $setvar
8997
8998         $rm -f $$.h
8999         ;;
9000 *)
9001         val="$undef"; 
9002         set d_pwquota; eval $setvar
9003         set d_pwage; eval $setvar
9004         set d_pwchange; eval $setvar
9005         set d_pwclass; eval $setvar
9006         set d_pwexpire; eval $setvar
9007         set d_pwcomment; eval $setvar
9008         set d_pwgecos; eval $setvar
9009         set d_pwpasswd; eval $setvar
9010         ;;
9011 esac
9012
9013 : see if readdir and friends exist
9014 set readdir d_readdir
9015 eval $inlibc
9016 set seekdir d_seekdir
9017 eval $inlibc
9018 set telldir d_telldir
9019 eval $inlibc
9020 set rewinddir d_rewinddir
9021 eval $inlibc
9022
9023 : see if readlink exists
9024 set readlink d_readlink
9025 eval $inlibc
9026
9027 : see if readv exists
9028 set readv d_readv
9029 eval $inlibc
9030
9031 : see if rename exists
9032 set rename d_rename
9033 eval $inlibc
9034
9035 : see if rmdir exists
9036 set rmdir d_rmdir
9037 eval $inlibc
9038
9039 : see if memory.h is available.
9040 val=''
9041 set memory.h val
9042 eval $inhdr
9043
9044 : See if it conflicts with string.h
9045 case "$val" in
9046 $define)
9047         case "$strings" in
9048         '') ;;
9049         *)
9050                 $cppstdin $cppflags $cppminus < $strings > mem.h
9051                 if $contains 'memcpy' mem.h >/dev/null 2>&1; then
9052                         echo " "
9053                         echo "We won't be including <memory.h>."
9054                         val="$undef"
9055                 fi
9056                 $rm -f mem.h
9057                 ;;
9058         esac
9059 esac
9060 set i_memory
9061 eval $setvar
9062
9063 : can bcopy handle overlapping blocks?
9064 val="$undef"
9065 case "$d_bcopy" in
9066 "$define")
9067         echo " "
9068         echo "Checking to see if your bcopy() can do overlapping copies..." >&4
9069         $cat >try.c <<EOCP
9070 #$i_memory I_MEMORY
9071 #$i_stdlib I_STDLIB
9072 #$i_string I_STRING
9073 #$i_unistd I_UNISTD
9074 EOCP
9075         $cat >>try.c <<'EOCP'
9076 #include <stdio.h>
9077 #ifdef I_MEMORY
9078 #  include <memory.h>
9079 #endif
9080 #ifdef I_STDLIB
9081 #  include <stdlib.h>
9082 #endif
9083 #ifdef I_STRING
9084 #  include <string.h>
9085 #else
9086 #  include <strings.h>
9087 #endif
9088 #ifdef I_UNISTD
9089 #  include <unistd.h>  /* Needed for NetBSD */
9090 #endif
9091 int main()
9092 {
9093 char buf[128], abc[128];
9094 char *b;
9095 int len;
9096 int off;
9097 int align;
9098
9099 bcopy("abcdefghijklmnopqrstuvwxyz0123456789", abc, 36);
9100
9101 for (align = 7; align >= 0; align--) {
9102         for (len = 36; len; len--) {
9103                 b = buf+align;
9104                 bcopy(abc, b, len);
9105                 for (off = 1; off <= len; off++) {
9106                         bcopy(b, b+off, len);
9107                         bcopy(b+off, b, len);
9108                         if (bcmp(b, abc, len))
9109                                 exit(1);
9110                 }
9111         }
9112 }
9113 exit(0);
9114 }
9115 EOCP
9116         set try
9117         if eval $compile_ok; then
9118                 if ./try 2>/dev/null; then
9119                         echo "Yes, it can."
9120                         val="$define"
9121                 else
9122                         echo "It can't, sorry."
9123                         case "$d_memmove" in
9124                         "$define") echo "But that's Ok since you have memmove()." ;;
9125                         esac
9126                 fi
9127         else
9128                 echo "(I can't compile the test program, so we'll assume not...)"
9129                 case "$d_memmove" in
9130                 "$define") echo "But that's Ok since you have memmove()." ;;
9131                 esac
9132         fi
9133         ;;
9134 esac
9135 $rm -f try.* try core
9136 set d_safebcpy
9137 eval $setvar
9138
9139 : can memcpy handle overlapping blocks?
9140 val="$undef"
9141 case "$d_memcpy" in
9142 "$define")
9143         echo " "
9144         echo "Checking to see if your memcpy() can do overlapping copies..." >&4
9145         $cat >try.c <<EOCP
9146 #$i_memory I_MEMORY
9147 #$i_stdlib I_STDLIB
9148 #$i_string I_STRING
9149 #$i_unistd I_UNISTD
9150 EOCP
9151         $cat >>try.c <<'EOCP'
9152 #include <stdio.h>
9153 #ifdef I_MEMORY
9154 #  include <memory.h>
9155 #endif
9156 #ifdef I_STDLIB
9157 #  include <stdlib.h>
9158 #endif
9159 #ifdef I_STRING
9160 #  include <string.h>
9161 #else
9162 #  include <strings.h>
9163 #endif
9164 #ifdef I_UNISTD
9165 #  include <unistd.h>  /* Needed for NetBSD */
9166 #endif
9167 int main()
9168 {
9169 char buf[128], abc[128];
9170 char *b;
9171 int len;
9172 int off;
9173 int align;
9174
9175 /* Copy "abcde..." string to char abc[] so that gcc doesn't
9176    try to store the string in read-only memory. */
9177 memcpy(abc, "abcdefghijklmnopqrstuvwxyz0123456789", 36);
9178
9179 for (align = 7; align >= 0; align--) {
9180         for (len = 36; len; len--) {
9181                 b = buf+align;
9182                 memcpy(b, abc, len);
9183                 for (off = 1; off <= len; off++) {
9184                         memcpy(b+off, b, len);
9185                         memcpy(b, b+off, len);
9186                         if (memcmp(b, abc, len))
9187                                 exit(1);
9188                 }
9189         }
9190 }
9191 exit(0);
9192 }
9193 EOCP
9194         set try
9195         if eval $compile_ok; then
9196                 if ./try 2>/dev/null; then
9197                         echo "Yes, it can."
9198                         val="$define"
9199                 else
9200                         echo "It can't, sorry."
9201                         case "$d_memmove" in
9202                         "$define") echo "But that's Ok since you have memmove()." ;;
9203                         esac
9204                 fi
9205         else
9206                 echo "(I can't compile the test program, so we'll assume not...)"
9207                 case "$d_memmove" in
9208                 "$define") echo "But that's Ok since you have memmove()." ;;
9209                 esac
9210         fi
9211         ;;
9212 esac
9213 $rm -f try.* try core
9214 set d_safemcpy
9215 eval $setvar
9216
9217 : can memcmp be trusted to compare relative magnitude?
9218 val="$undef"
9219 case "$d_memcmp" in
9220 "$define")
9221         echo " "
9222         echo "Checking if your memcmp() can compare relative magnitude..." >&4
9223         $cat >try.c <<EOCP
9224 #$i_memory I_MEMORY
9225 #$i_stdlib I_STDLIB
9226 #$i_string I_STRING
9227 #$i_unistd I_UNISTD
9228 EOCP
9229         $cat >>try.c <<'EOCP'
9230 #include <stdio.h>
9231 #ifdef I_MEMORY
9232 #  include <memory.h>
9233 #endif
9234 #ifdef I_STDLIB
9235 #  include <stdlib.h>
9236 #endif
9237 #ifdef I_STRING
9238 #  include <string.h>
9239 #else
9240 #  include <strings.h>
9241 #endif
9242 #ifdef I_UNISTD
9243 #  include <unistd.h>  /* Needed for NetBSD */
9244 #endif
9245 int main()
9246 {
9247 char a = -1;
9248 char b = 0;
9249 if ((a < b) && memcmp(&a, &b, 1) < 0)
9250         exit(1);
9251 exit(0);
9252 }
9253 EOCP
9254         set try
9255         if eval $compile_ok; then
9256                 if ./try 2>/dev/null; then
9257                         echo "Yes, it can."
9258                         val="$define"
9259                 else
9260                         echo "No, it can't (it uses signed chars)."
9261                 fi
9262         else
9263                 echo "(I can't compile the test program, so we'll assume not...)"
9264         fi
9265         ;;
9266 esac
9267 $rm -f try.* try core
9268 set d_sanemcmp
9269 eval $setvar
9270
9271 : see if select exists
9272 set select d_select
9273 eval $inlibc
9274
9275 : see if semctl exists
9276 set semctl d_semctl
9277 eval $inlibc
9278
9279 : see if semget exists
9280 set semget d_semget
9281 eval $inlibc
9282
9283 : see if semop exists
9284 set semop d_semop
9285 eval $inlibc
9286
9287 : see how much of the 'sem*(2)' library is present.
9288 h_sem=true
9289 echo " "
9290 case "$d_semctl$d_semget$d_semop" in
9291 *"$undef"*) h_sem=false;;
9292 esac
9293 case "$osname" in
9294 freebsd)
9295     case "`ipcs 2>&1`" in
9296     "SVID messages"*"not configured"*)
9297         echo "Your $osname does not have the sem*(2) configured." >&4
9298         h_sem=false
9299         val="$undef"
9300         set semctl d_semctl
9301         eval $setvar
9302         set semget d_semget
9303         eval $setvar
9304         set semop d_semop
9305         eval $setvar
9306         ;;
9307     esac
9308     ;;
9309 esac
9310 : we could also check for sys/ipc.h ...
9311 if $h_sem && $test `./findhdr sys/sem.h`; then
9312         echo "You have the full sem*(2) library." >&4
9313         val="$define"
9314 else
9315         echo "You don't have the full sem*(2) library." >&4
9316         val="$undef"
9317 fi
9318 set d_sem
9319 eval $setvar
9320
9321 : see whether sys/sem.h defines union semun
9322 echo " "
9323 $cat > try.c <<'END'
9324 #include <sys/types.h>
9325 #include <sys/ipc.h>
9326 #include <sys/sem.h>
9327 int main () { union semun semun; semun.buf = 0; }
9328 END
9329 set try
9330 if eval $compile; then
9331     echo "You have union semun in <sys/sem.h>." >&4
9332     val="$define"
9333 else
9334     echo "You do not have union semun in <sys/sem.h>." >&4
9335     val="$undef"
9336 fi
9337 $rm -f try try.c try.h
9338 set d_union_semun
9339 eval $setvar
9340
9341 : see how to do semctl IPC_STAT
9342 case "$d_sem" in
9343 $define)
9344     : see whether semctl IPC_STAT can use union semun
9345     echo " "
9346     $cat > try.h <<END
9347 #ifndef S_IRUSR
9348 #   ifdef S_IREAD
9349 #       define S_IRUSR S_IREAD
9350 #       define S_IWUSR S_IWRITE
9351 #       define S_IXUSR S_IEXEC
9352 #   else
9353 #       define S_IRUSR 0400
9354 #       define S_IWUSR 0200
9355 #       define S_IXUSR 0100
9356 #   endif
9357 #   define S_IRGRP (S_IRUSR>>3)
9358 #   define S_IWGRP (S_IWUSR>>3)
9359 #   define S_IXGRP (S_IXUSR>>3)
9360 #   define S_IROTH (S_IRUSR>>6)
9361 #   define S_IWOTH (S_IWUSR>>6)
9362 #   define S_IXOTH (S_IXUSR>>6)
9363 #endif
9364 #ifndef S_IRWXU
9365 #   define S_IRWXU (S_IRUSR|S_IWUSR|S_IXUSR)
9366 #   define S_IRWXG (S_IRGRP|S_IWGRP|S_IXGRP)
9367 #   define S_IRWXO (S_IROTH|S_IWOTH|S_IXOTH)
9368 #endif
9369 END
9370
9371     $cat > try.c <<END
9372 #include <sys/types.h>
9373 #include <sys/ipc.h>
9374 #include <sys/sem.h>
9375 #include <sys/stat.h>
9376 #include <stdio.h>
9377 #include <errno.h>
9378 #include "try.h"
9379 #ifndef errno
9380 extern int errno;
9381 #endif
9382 #$d_union_semun HAS_UNION_SEMUN
9383 int main() {
9384     union semun
9385 #ifndef HAS_UNION_SEMUN
9386     {
9387         int val;
9388         struct semid_ds *buf;
9389         unsigned short *array;
9390     }
9391 #endif
9392     arg;
9393     int sem, st;
9394
9395 #if defined(IPC_PRIVATE) && defined(S_IRWXU) && defined(S_IRWXG) && defined(S_IRWXO) && defined(IPC_CREAT)
9396     sem = semget(IPC_PRIVATE, 1, S_IRWXU|S_IRWXG|S_IRWXO|IPC_CREAT);
9397     if (sem > -1) {
9398         struct semid_ds argbuf;
9399         arg.buf = &argbuf;
9400 #       ifdef IPC_STAT
9401         st = semctl(sem, 0, IPC_STAT, arg);
9402         if (st == 0)
9403             printf("semun\n");
9404         else
9405 #       endif /* IPC_STAT */
9406             printf("semctl IPC_STAT failed: errno = %d\n", errno);
9407 #       ifdef IPC_RMID
9408         if (semctl(sem, 0, IPC_RMID, arg) != 0)
9409 #       endif /* IPC_RMID */
9410             printf("semctl IPC_RMID failed: errno = %d\n", errno);
9411     } else
9412 #endif /* IPC_PRIVATE && ... */
9413         printf("semget failed: errno = %d\n", errno);
9414   return 0;
9415 }
9416 END
9417     val="$undef"
9418     set try
9419     if eval $compile; then
9420         xxx=`./try`
9421         case "$xxx" in
9422         semun) val="$define" ;;
9423         esac
9424     fi
9425     $rm -f try try.c
9426     set d_semctl_semun
9427     eval $setvar
9428     case "$d_semctl_semun" in
9429     $define)
9430         echo "You can use union semun for semctl IPC_STAT." >&4
9431         also='also'
9432         ;;
9433     *)  echo "You cannot use union semun for semctl IPC_STAT." >&4
9434         also=''
9435         ;;
9436     esac
9437
9438     : see whether semctl IPC_STAT can use struct semid_ds pointer
9439     $cat > try.c <<'END'
9440 #include <sys/types.h>
9441 #include <sys/ipc.h>
9442 #include <sys/sem.h>
9443 #include <sys/stat.h>
9444 #include "try.h"
9445 #include <stdio.h>
9446 #include <errno.h>
9447 #ifndef errno
9448 extern int errno;
9449 #endif
9450 int main() {
9451     struct semid_ds arg;
9452     int sem, st;
9453
9454 #if defined(IPC_PRIVATE) && defined(S_IRWXU) && defined(S_IRWXG) &&  defined(S_IRWXO) && defined(IPC_CREAT)
9455     sem = semget(IPC_PRIVATE, 1, S_IRWXU|S_IRWXG|S_IRWXO|IPC_CREAT);
9456     if (sem > -1) {
9457 #       ifdef IPC_STAT
9458         st = semctl(sem, 0, IPC_STAT, &arg);
9459         if (st == 0)
9460             printf("semid_ds\n");
9461         else
9462 #       endif /* IPC_STAT */
9463             printf("semctl IPC_STAT failed: errno = %d\n", errno);
9464 #       ifdef IPC_RMID
9465         if (semctl(sem, 0, IPC_RMID, &arg) != 0)
9466 #       endif /* IPC_RMID */
9467             printf("semctl IPC_RMID failed: errno = %d\n", errno);
9468     } else
9469 #endif /* IPC_PRIVATE && ... */
9470         printf("semget failed: errno = %d\n", errno);
9471
9472     return 0;
9473 }
9474 END
9475     val="$undef"
9476     set try
9477     if eval $compile; then
9478         xxx=`./try`
9479         case "$xxx" in
9480         semid_ds) val="$define" ;;
9481         esac
9482     fi
9483     $rm -f try try.c
9484     set d_semctl_semid_ds
9485     eval $setvar
9486     case "$d_semctl_semid_ds" in
9487     $define)
9488         echo "You can $also use struct semid_ds* for semctl IPC_STAT." >&4
9489         ;;
9490     *)  echo "You cannot use struct semid_ds* for semctl IPC_STAT." >&4
9491         ;;
9492     esac
9493     $rm -f try.h
9494     ;;
9495 *)  val="$undef"
9496
9497     # We do not have the full sem*(2) library, so assume we can not
9498     # use either.
9499
9500     set d_semctl_semun
9501     eval $setvar
9502
9503     set d_semctl_semid_ds
9504     eval $setvar
9505     ;;
9506 esac
9507
9508 : see if setegid exists
9509 set setegid d_setegid
9510 eval $inlibc
9511
9512 : see if seteuid exists
9513 set seteuid d_seteuid
9514 eval $inlibc
9515
9516 : see if setgrent exists
9517 set setgrent d_setgrent
9518 eval $inlibc
9519
9520 : see if sethostent exists
9521 set sethostent d_sethent
9522 eval $inlibc
9523
9524 : see if setlinebuf exists
9525 set setlinebuf d_setlinebuf
9526 eval $inlibc
9527
9528 : see if setlocale exists
9529 set setlocale d_setlocale
9530 eval $inlibc
9531
9532 : see if setnetent exists
9533 set setnetent d_setnent
9534 eval $inlibc
9535
9536 : see if setprotoent exists
9537 set setprotoent d_setpent
9538 eval $inlibc
9539
9540 : see if setpgid exists
9541 set setpgid d_setpgid
9542 eval $inlibc
9543
9544 : see if setpgrp2 exists
9545 set setpgrp2 d_setpgrp2
9546 eval $inlibc
9547
9548 : see if setpriority exists
9549 set setpriority d_setprior
9550 eval $inlibc
9551
9552 : see if setpwent exists
9553 set setpwent d_setpwent
9554 eval $inlibc
9555
9556 : see if setregid exists
9557 set setregid d_setregid
9558 eval $inlibc
9559 set setresgid d_setresgid
9560 eval $inlibc
9561
9562 : see if setreuid exists
9563 set setreuid d_setreuid
9564 eval $inlibc
9565 set setresuid d_setresuid
9566 eval $inlibc
9567
9568 : see if setrgid exists
9569 set setrgid d_setrgid
9570 eval $inlibc
9571
9572 : see if setruid exists
9573 set setruid d_setruid
9574 eval $inlibc
9575
9576 : see if setservent exists
9577 set setservent d_setsent
9578 eval $inlibc
9579
9580 : see if setsid exists
9581 set setsid d_setsid
9582 eval $inlibc
9583
9584 : see if setvbuf exists
9585 set setvbuf d_setvbuf
9586 eval $inlibc
9587
9588 : see if sfio.h is available
9589 set sfio.h i_sfio
9590 eval $inhdr
9591
9592
9593 : see if sfio library is available
9594 case "$i_sfio" in
9595 $define)
9596         val=''
9597         set sfreserve val
9598         eval $inlibc
9599         ;;
9600 *)
9601         val="$undef"
9602         ;;
9603 esac
9604 : Ok, but do we want to use it.
9605 case "$val" in
9606 $define)
9607         case "$usesfio" in
9608         true|$define|[yY]*) dflt='y';;
9609         *) dflt='n';;
9610         esac
9611         echo "$package can use the sfio library, but it is experimental."
9612         rp="You seem to have sfio available, do you want to try using it?"
9613         . ./myread
9614         case "$ans" in
9615         y|Y) ;;
9616         *)      echo "Ok, avoiding sfio this time.  I'll use stdio instead."
9617                 val="$undef"
9618                 : Remove sfio from list of libraries to use
9619                 set `echo X $libs | $sed -e 's/-lsfio / /' -e 's/-lsfio$//'`
9620                 shift
9621                 libs="$*"
9622                 echo "libs = $libs" >&4
9623                 ;;
9624         esac
9625         ;;
9626 *)      case "$usesfio" in
9627         true|$define|[yY]*)
9628                 echo "Sorry, cannot find sfio on this machine" >&4
9629                 echo "Ignoring your setting of usesfio=$usesfio" >&4
9630                 ;;
9631         esac
9632         ;;
9633 esac
9634 set d_sfio
9635 eval $setvar
9636 case "$d_sfio" in
9637 $define) usesfio='true';;
9638 *) usesfio='false';;
9639 esac
9640
9641 : see if shmctl exists
9642 set shmctl d_shmctl
9643 eval $inlibc
9644
9645 : see if shmget exists
9646 set shmget d_shmget
9647 eval $inlibc
9648
9649 : see if shmat exists
9650 set shmat d_shmat
9651 eval $inlibc
9652 : see what shmat returns
9653 case "$d_shmat" in
9654 "$define")
9655         $cat >shmat.c <<'END'
9656 #include <sys/shm.h>
9657 void *shmat();
9658 END
9659         if $cc $ccflags -c shmat.c >/dev/null 2>&1; then
9660                 shmattype='void *'
9661         else
9662                 shmattype='char *'
9663         fi
9664         echo "and it returns ($shmattype)." >&4
9665         : see if a prototype for shmat is available
9666         xxx=`./findhdr sys/shm.h`
9667         $cppstdin $cppflags $cppminus < $xxx > shmat.c 2>/dev/null
9668         if $contains 'shmat.*(' shmat.c >/dev/null 2>&1; then
9669                 val="$define"
9670         else
9671                 val="$undef"
9672         fi
9673         $rm -f shmat.[co]
9674         ;;
9675 *)
9676         val="$undef"
9677         ;;
9678 esac
9679 set d_shmatprototype
9680 eval $setvar
9681
9682 : see if shmdt exists
9683 set shmdt d_shmdt
9684 eval $inlibc
9685
9686 : see how much of the 'shm*(2)' library is present.
9687 h_shm=true
9688 echo " "
9689 case "$d_shmctl$d_shmget$d_shmat$d_shmdt" in
9690 *"$undef"*) h_shm=false;;
9691 esac
9692 case "$osname" in
9693 freebsd)
9694     case "`ipcs 2>&1`" in
9695     "SVID shared memory"*"not configured"*)
9696         echo "Your $osname does not have the shm*(2) configured." >&4
9697         h_shm=false
9698         val="$undef"
9699         set shmctl d_shmctl
9700         evat $setvar
9701         set shmget d_shmget
9702         evat $setvar
9703         set shmat d_shmat
9704         evat $setvar
9705         set shmdt d_shmdt
9706         evat $setvar
9707         ;;
9708     esac
9709     ;;
9710 esac
9711 : we could also check for sys/ipc.h ...
9712 if $h_shm && $test `./findhdr sys/shm.h`; then
9713         echo "You have the full shm*(2) library." >&4
9714         val="$define"
9715 else
9716         echo "You don't have the full shm*(2) library." >&4
9717         val="$undef"
9718 fi
9719 set d_shm
9720 eval $setvar
9721
9722 echo " "
9723 : see if we have sigaction
9724 if set sigaction val -f d_sigaction; eval $csym; $val; then
9725         echo 'sigaction() found.' >&4
9726         $cat > try.c <<'EOP'
9727 #include <stdio.h>
9728 #include <sys/types.h>
9729 #include <signal.h>
9730 int main()
9731 {
9732     struct sigaction act, oact;
9733 }
9734 EOP
9735         set try
9736         if eval $compile_ok; then
9737                 val="$define"
9738         else
9739                 echo "But you don't seem to have a useable struct sigaction." >&4
9740                 val="$undef"
9741         fi
9742 else
9743         echo 'sigaction NOT found.' >&4
9744         val="$undef"
9745 fi
9746 set d_sigaction; eval $setvar
9747 $rm -f try try$_o try.c
9748
9749 : see if sigsetjmp exists
9750 echo " "
9751 case "$d_sigsetjmp" in
9752 '')
9753         $cat >try.c <<'EOP'
9754 #include <setjmp.h>
9755 sigjmp_buf env;
9756 int set = 1;
9757 int main()
9758 {
9759         if (sigsetjmp(env,1))
9760                 exit(set);
9761         set = 0;
9762         siglongjmp(env, 1);
9763         exit(1);
9764 }
9765 EOP
9766         set try
9767         if eval $compile; then
9768                 if ./try >/dev/null 2>&1; then
9769                         echo "POSIX sigsetjmp found." >&4
9770                         val="$define"
9771                 else
9772                         $cat >&4 <<EOM
9773 Uh-Oh! You have POSIX sigsetjmp and siglongjmp, but they do not work properly!!
9774 I'll ignore them.
9775 EOM
9776                         val="$undef"
9777                 fi
9778         else
9779                 echo "sigsetjmp not found." >&4
9780                 val="$undef"
9781         fi
9782         ;;
9783 *) val="$d_sigsetjmp"
9784         case "$d_sigsetjmp" in
9785         $define) echo "POSIX sigsetjmp found." >&4;;
9786         $undef) echo "sigsetjmp not found." >&4;;
9787         esac
9788         ;;
9789 esac
9790 set d_sigsetjmp
9791 eval $setvar
9792 $rm -f try.c try
9793
9794 : see if stat knows about block sizes
9795 echo " "
9796 set d_statblks stat st_blocks $i_sysstat sys/stat.h
9797 eval $hasfield
9798
9799 : see if _ptr and _cnt from stdio act std
9800 echo " "
9801 if $contains '_IO_fpos_t' `./findhdr stdio.h` >/dev/null 2>&1 ; then
9802         echo "(Looks like you have stdio.h from Linux.)"
9803         case "$stdio_ptr" in
9804         '') stdio_ptr='((fp)->_IO_read_ptr)'
9805                 ptr_lval=$define
9806                 ;;
9807         *)      ptr_lval=$d_stdio_ptr_lval;;
9808         esac
9809         case "$stdio_cnt" in
9810         '') stdio_cnt='((fp)->_IO_read_end - (fp)->_IO_read_ptr)'
9811                 cnt_lval=$undef
9812                 ;;
9813         *)      cnt_lval=$d_stdio_cnt_lval;;
9814         esac
9815         case "$stdio_base" in
9816         '') stdio_base='((fp)->_IO_read_base)';;
9817         esac
9818         case "$stdio_bufsiz" in
9819         '') stdio_bufsiz='((fp)->_IO_read_end - (fp)->_IO_read_base)';;
9820         esac
9821 else
9822         case "$stdio_ptr" in
9823         '') stdio_ptr='((fp)->_ptr)'
9824                 ptr_lval=$define
9825                 ;;
9826         *)      ptr_lval=$d_stdio_ptr_lval;;
9827         esac
9828         case "$stdio_cnt" in
9829         '') stdio_cnt='((fp)->_cnt)'
9830                 cnt_lval=$define
9831                 ;;
9832         *)      cnt_lval=$d_stdio_cnt_lval;;
9833         esac
9834         case "$stdio_base" in
9835         '') stdio_base='((fp)->_base)';;
9836         esac
9837         case "$stdio_bufsiz" in
9838         '') stdio_bufsiz='((fp)->_cnt + (fp)->_ptr - (fp)->_base)';;
9839         esac
9840 fi
9841 : test whether _ptr and _cnt really work
9842 echo "Checking how std your stdio is..." >&4
9843 $cat >try.c <<EOP
9844 #include <stdio.h>
9845 #define FILE_ptr(fp)    $stdio_ptr
9846 #define FILE_cnt(fp)    $stdio_cnt
9847 int main() {
9848         FILE *fp = fopen("try.c", "r");
9849         char c = getc(fp);
9850         if (
9851                 18 <= FILE_cnt(fp) &&
9852                 strncmp(FILE_ptr(fp), "include <stdio.h>\n", 18) == 0
9853         )
9854                 exit(0);
9855         exit(1);
9856 }
9857 EOP
9858 val="$undef"
9859 set try
9860 if eval $compile; then
9861         if ./try; then
9862                 echo "Your stdio acts pretty std."
9863                 val="$define"
9864         else
9865                 echo "Your stdio isn't very std."
9866         fi
9867 else
9868         echo "Your stdio doesn't appear very std."
9869 fi
9870 $rm -f try.c try
9871 set d_stdstdio
9872 eval $setvar
9873
9874 : Can _ptr be used as an lvalue?
9875 case "$d_stdstdio$ptr_lval" in
9876 $define$define) val=$define ;;
9877 *) val=$undef ;;
9878 esac
9879 set d_stdio_ptr_lval
9880 eval $setvar
9881
9882 : Can _cnt be used as an lvalue?
9883 case "$d_stdstdio$cnt_lval" in
9884 $define$define) val=$define ;;
9885 *) val=$undef ;;
9886 esac
9887 set d_stdio_cnt_lval
9888 eval $setvar
9889
9890 : see if _base is also standard
9891 val="$undef"
9892 case "$d_stdstdio" in
9893 $define)
9894         $cat >try.c <<EOP
9895 #include <stdio.h>
9896 #define FILE_base(fp)   $stdio_base
9897 #define FILE_bufsiz(fp) $stdio_bufsiz
9898 int main() {
9899         FILE *fp = fopen("try.c", "r");
9900         char c = getc(fp);
9901         if (
9902                 19 <= FILE_bufsiz(fp) &&
9903                 strncmp(FILE_base(fp), "#include <stdio.h>\n", 19) == 0
9904         )
9905                 exit(0);
9906         exit(1);
9907 }
9908 EOP
9909         set try
9910         if eval $compile; then
9911                 if ./try; then
9912                         echo "And its _base field acts std."
9913                         val="$define"
9914                 else
9915                         echo "But its _base field isn't std."
9916                 fi
9917         else
9918                 echo "However, it seems to be lacking the _base field."
9919         fi
9920         $rm -f try.c try
9921         ;;
9922 esac
9923 set d_stdiobase
9924 eval $setvar
9925
9926 : see if strcoll exists
9927 set strcoll d_strcoll
9928 eval $inlibc
9929
9930 : check for structure copying
9931 echo " "
9932 echo "Checking to see if your C compiler can copy structs..." >&4
9933 $cat >try.c <<'EOCP'
9934 int main()
9935 {
9936         struct blurfl {
9937                 int dyick;
9938         } foo, bar;
9939
9940         foo = bar;
9941 }
9942 EOCP
9943 if $cc -c try.c >/dev/null 2>&1 ; then
9944         val="$define"
9945         echo "Yup, it can."
9946 else
9947         val="$undef"
9948         echo "Nope, it can't."
9949 fi
9950 set d_strctcpy
9951 eval $setvar
9952 $rm -f try.*
9953
9954 : see if strerror and/or sys_errlist[] exist
9955 echo " "
9956 if test "X$d_strerror" = X -o "X$d_syserrlst" = X; then
9957     if set strerror val -f d_strerror; eval $csym; $val; then
9958                 echo 'strerror() found.' >&4
9959                 d_strerror="$define"
9960                 d_strerrm='strerror(e)'
9961                 if set sys_errlist val -a d_syserrlst; eval $csym; $val; then   
9962                         echo "(You also have sys_errlist[], so we could roll our own strerror.)" 
9963                         d_syserrlst="$define"
9964                 else
9965                         echo "(Since you don't have sys_errlist[], sterror() is welcome.)"
9966                         d_syserrlst="$undef"
9967                 fi
9968     elif xxx=`./findhdr string.h`; test "$xxx" || xxx=`./findhdr strings.h`; \
9969                         $contains '#[   ]*define.*strerror' "$xxx" >/dev/null 2>&1; then
9970                 echo 'strerror() found in string header.' >&4
9971                 d_strerror="$define"
9972                 d_strerrm='strerror(e)'
9973                 if set sys_errlist val -a d_syserrlst; eval $csym; $val; then   
9974                         echo "(Most probably, strerror() uses sys_errlist[] for descriptions.)"
9975                                 d_syserrlst="$define"
9976                 else
9977                         echo "(You don't appear to have any sys_errlist[], how can this be?)"
9978                         d_syserrlst="$undef"
9979                 fi
9980     elif set sys_errlist val -a d_syserrlst; eval $csym; $val; then
9981                 echo "strerror() not found, but you have sys_errlist[] so we'll use that." >&4
9982                 d_strerror="$undef"
9983                 d_syserrlst="$define"
9984                 d_strerrm='((e)<0||(e)>=sys_nerr?"unknown":sys_errlist[e])'
9985     else
9986                 echo 'strerror() and sys_errlist[] NOT found.' >&4
9987                 d_strerror="$undef"
9988                 d_syserrlst="$undef"
9989                 d_strerrm='"unknown"'
9990     fi
9991 fi
9992
9993 : see if strtod exists
9994 set strtod d_strtod
9995 eval $inlibc
9996
9997 : see if strtol exists
9998 set strtol d_strtol
9999 eval $inlibc
10000
10001 : see if strtoul exists
10002 set strtoul d_strtoul
10003 eval $inlibc
10004
10005 : see if strxfrm exists
10006 set strxfrm d_strxfrm
10007 eval $inlibc
10008
10009 : see if symlink exists
10010 set symlink d_symlink
10011 eval $inlibc
10012
10013 : see if syscall exists
10014 set syscall d_syscall
10015 eval $inlibc
10016
10017 : see if sysconf exists
10018 set sysconf d_sysconf
10019 eval $inlibc
10020
10021 : see if system exists
10022 set system d_system
10023 eval $inlibc
10024
10025 : see if tcgetpgrp exists
10026 set tcgetpgrp d_tcgetpgrp
10027 eval $inlibc
10028
10029 : see if tcsetpgrp exists
10030 set tcsetpgrp d_tcsetpgrp
10031 eval $inlibc
10032
10033 : see if sys/types.h has to be included
10034 set sys/types.h i_systypes
10035 eval $inhdr
10036
10037 : see if prototype for telldir is available
10038 echo " "
10039 set d_telldirproto telldir $i_systypes sys/types.h $i_dirent dirent.h
10040 eval $hasproto
10041
10042 : define an is-a-typedef? function
10043 typedef='type=$1; var=$2; def=$3; shift; shift; shift; inclist=$@;
10044 case "$inclist" in
10045 "") inclist="sys/types.h";;
10046 esac;
10047 eval "varval=\$$var";
10048 case "$varval" in
10049 "")
10050         $rm -f temp.c;
10051         for inc in $inclist; do
10052                 echo "#include <$inc>" >>temp.c;
10053         done;
10054         echo "#ifdef $type" >> temp.c;
10055         echo "printf(\"We have $type\");" >> temp.c;
10056         echo "#endif" >> temp.c;
10057         $cppstdin $cppflags $cppminus < temp.c >temp.E 2>/dev/null;
10058         if $contains $type temp.E >/dev/null 2>&1; then
10059                 eval "$var=\$type";
10060         else
10061                 eval "$var=\$def";
10062         fi;
10063         $rm -f temp.?;;
10064 *) eval "$var=\$varval";;
10065 esac'
10066
10067 : define an is-a-typedef? function that prompts if the type is not available.
10068 typedef_ask='type=$1; var=$2; def=$3; shift; shift; shift; inclist=$@;
10069 case "$inclist" in
10070 "") inclist="sys/types.h";;
10071 esac;
10072 eval "varval=\$$var";
10073 case "$varval" in
10074 "")
10075         $rm -f temp.c;
10076         for inc in $inclist; do
10077                 echo "#include <$inc>" >>temp.c;
10078         done;
10079         echo "#ifdef $type" >> temp.c;
10080         echo "printf(\"We have $type\");" >> temp.c;
10081         echo "#endif" >> temp.c;
10082         $cppstdin $cppflags $cppminus < temp.c >temp.E 2>/dev/null;
10083         echo " " ;
10084         echo "$rp" | $sed -e "s/What is/Looking for/" -e "s/?/./";
10085         if $contains $type temp.E >/dev/null 2>&1; then
10086                 echo "$type found." >&4;
10087                 eval "$var=\$type";
10088         else
10089                 echo "$type NOT found." >&4;
10090                 dflt="$def";
10091                 . ./myread ;
10092                 eval "$var=\$ans";
10093         fi;
10094         $rm -f temp.?;;
10095 *) eval "$var=\$varval";;
10096 esac'
10097
10098 : see if this is a sys/times.h system
10099 set sys/times.h i_systimes
10100 eval $inhdr
10101
10102 : see if times exists
10103 echo " "
10104 if set times val -f d_times; eval $csym; $val; then
10105         echo 'times() found.' >&4
10106         d_times="$define"
10107         inc=''
10108         case "$i_systimes" in
10109         "$define") inc='sys/times.h';;
10110         esac
10111         rp="What is the type returned by times() on this system?"
10112         set clock_t clocktype long stdio.h sys/types.h $inc
10113         eval $typedef_ask
10114 else
10115         echo 'times() NOT found, hope that will do.' >&4
10116         d_times="$undef"
10117         clocktype='int'
10118 fi
10119
10120 : see if truncate exists
10121 set truncate d_truncate
10122 eval $inlibc
10123
10124 : see if tzname[] exists
10125 echo " "
10126 if set tzname val -a d_tzname; eval $csym; $val; then
10127         val="$define"
10128         echo 'tzname[] found.' >&4
10129 else
10130         val="$undef"
10131         echo 'tzname[] NOT found.' >&4
10132 fi
10133 set d_tzname
10134 eval $setvar
10135
10136 : see if umask exists
10137 set umask d_umask
10138 eval $inlibc
10139
10140 : backward compatibility for d_hvfork
10141 if test X$d_hvfork != X; then
10142         d_vfork="$d_hvfork"
10143         d_hvfork=''
10144 fi
10145 : see if there is a vfork
10146 val=''
10147 set vfork val
10148 eval $inlibc
10149
10150 : Ok, but do we want to use it. vfork is reportedly unreliable in 
10151 : perl on Solaris 2.x, and probably elsewhere.
10152 case "$val" in
10153 $define)
10154         echo " "
10155         case "$usevfork" in
10156         false) dflt='n';;
10157         *) dflt='y';;
10158         esac
10159         rp="Some systems have problems with vfork().  Do you want to use it?"
10160         . ./myread
10161         case "$ans" in
10162         y|Y) ;;
10163         *)
10164                 echo "Ok, we won't use vfork()."
10165                 val="$undef"
10166                 ;;
10167         esac
10168         ;;
10169 esac
10170 set d_vfork
10171 eval $setvar
10172 case "$d_vfork" in
10173 $define) usevfork='true';;
10174 *) usevfork='false';;
10175 esac
10176
10177 : see if this is an sysdir system
10178 set sys/dir.h i_sysdir
10179 eval $inhdr
10180
10181 : see if this is an sysndir system
10182 set sys/ndir.h i_sysndir
10183 eval $inhdr
10184
10185 : see if closedir exists
10186 set closedir d_closedir
10187 eval $inlibc
10188
10189 case "$d_closedir" in
10190 "$define")
10191         echo " "
10192         echo "Checking whether closedir() returns a status..." >&4
10193         cat > closedir.c <<EOM
10194 #$i_dirent I_DIRENT             /**/
10195 #$i_sysdir I_SYS_DIR            /**/
10196 #$i_sysndir I_SYS_NDIR          /**/
10197 #$i_systypes I_SYS_TYPES        /**/
10198
10199 #if defined(I_SYS_TYPES)
10200 #include <sys/types.h>
10201 #endif
10202 #if defined(I_DIRENT)
10203 #include <dirent.h>
10204 #if defined(NeXT) && defined(I_SYS_DIR) /* NeXT needs dirent + sys/dir.h */
10205 #include <sys/dir.h>
10206 #endif
10207 #else
10208 #ifdef I_SYS_NDIR
10209 #include <sys/ndir.h>
10210 #else
10211 #ifdef I_SYS_DIR
10212 #ifdef hp9000s500
10213 #include <ndir.h>       /* may be wrong in the future */
10214 #else
10215 #include <sys/dir.h>
10216 #endif
10217 #endif
10218 #endif
10219 #endif 
10220 int main() { return closedir(opendir(".")); }
10221 EOM
10222         set closedir
10223         if eval $compile_ok; then
10224                 if ./closedir > /dev/null 2>&1 ; then
10225                         echo "Yes, it does."
10226                         val="$undef"
10227                 else
10228                         echo "No, it doesn't."
10229                         val="$define"
10230                 fi
10231         else
10232                 echo "(I can't seem to compile the test program--assuming it doesn't)"
10233                 val="$define"
10234         fi
10235         ;;
10236 *)
10237         val="$undef";
10238         ;;
10239 esac
10240 set d_void_closedir
10241 eval $setvar
10242 $rm -f closedir*
10243 : check for volatile keyword
10244 echo " "
10245 echo 'Checking to see if your C compiler knows about "volatile"...' >&4
10246 $cat >try.c <<'EOCP'
10247 int main()
10248 {
10249         typedef struct _goo_struct goo_struct;
10250         goo_struct * volatile goo = ((goo_struct *)0);
10251         struct _goo_struct {
10252                 long long_int;
10253                 int reg_int;
10254                 char char_var;
10255         };
10256         typedef unsigned short foo_t;
10257         char *volatile foo;
10258         volatile int bar;
10259         volatile foo_t blech;
10260         foo = foo;
10261 }
10262 EOCP
10263 if $cc -c $ccflags try.c >/dev/null 2>&1 ; then
10264         val="$define"
10265         echo "Yup, it does."
10266 else
10267         val="$undef"
10268         echo "Nope, it doesn't."
10269 fi
10270 set d_volatile
10271 eval $setvar
10272 $rm -f try.*
10273
10274 : see if there is a wait4
10275 set wait4 d_wait4
10276 eval $inlibc
10277
10278 : see if waitpid exists
10279 set waitpid d_waitpid
10280 eval $inlibc
10281
10282 : see if wcstombs exists
10283 set wcstombs d_wcstombs
10284 eval $inlibc
10285
10286 : see if wctomb exists
10287 set wctomb d_wctomb
10288 eval $inlibc
10289
10290 : see if writev exists
10291 set writev d_writev
10292 eval $inlibc
10293
10294 : preserve RCS keywords in files with variable substitution, grrr
10295 Date='$Date'
10296 Id='$Id'
10297 Log='$Log'
10298 RCSfile='$RCSfile'
10299 Revision='$Revision'
10300
10301 case "$crosscompile" in
10302 ''|[nN]*) crosscompile="$undef" ;;
10303 esac
10304
10305 case "$osname" in
10306 next|rhapsody) multiarch="$define" ;;
10307 esac
10308 case "$multiarch" in
10309 ''|[nN]*) multiarch="$undef" ;;
10310 esac
10311
10312 : check for alignment requirements
10313 echo " "
10314 case "$crosscompile$multiarch" in
10315 *$define*)
10316         $cat <<EOM
10317 You seem to be either cross-compiling or doing a multiarchitecture build,
10318 skipping the memory alignment check.
10319
10320 EOM
10321         case "$alignbytes" in
10322         '') alignbytes=8 ;;
10323         esac
10324         ;;
10325 *)
10326         case "$alignbytes" in
10327         '') echo "Checking alignment constraints..." >&4
10328                 $cat >try.c <<'EOCP'
10329 struct foobar {
10330         char foo;
10331         double bar;
10332 } try_algn;
10333 int main()
10334 {
10335         printf("%d\n", (char *)&try_algn.bar - (char *)&try_algn.foo);
10336 }
10337 EOCP
10338                 set try
10339                 if eval $compile_ok; then
10340                         dflt=`./try`
10341                 else
10342                         dflt='8'
10343                         echo "(I can't seem to compile the test program...)"
10344                 fi
10345                 ;;
10346         *) dflt="$alignbytes"
10347                 ;;
10348         esac
10349         rp="Doubles must be aligned on a how-many-byte boundary?"
10350         . ./myread
10351         alignbytes="$ans"
10352         $rm -f try.c try
10353         ;;
10354 esac
10355
10356
10357 : check for ordering of bytes in a long
10358 echo " "
10359 case "$crosscompile$multiarch" in
10360 *$define*)
10361         $cat <<EOM
10362 You seem to be either cross-compiling or doing a multiarchitecture build,
10363 skipping the byteorder check.
10364
10365 EOM
10366         byteorder=''
10367         ;;
10368 *)
10369         case "$byteorder" in
10370         '')
10371                 $cat <<'EOM'
10372 In the following, larger digits indicate more significance.  A big-endian
10373 machine like a Pyramid or a Motorola 680?0 chip will come out to 4321. A
10374 little-endian machine like a Vax or an Intel 80?86 chip would be 1234. Other
10375 machines may have weird orders like 3412.  A Cray will report 87654321. If
10376 the test program works the default is probably right.
10377 I'm now running the test program...
10378 EOM
10379                 $cat >try.c <<'EOCP'
10380 #include <stdio.h>
10381 int main()
10382 {
10383         int i;
10384         union {
10385                 unsigned long l;
10386                 char c[sizeof(long)];
10387         } u;
10388
10389         if (sizeof(long) > 4)
10390                 u.l = (0x08070605L << 32) | 0x04030201L;
10391         else
10392                 u.l = 0x04030201L;
10393         for (i = 0; i < sizeof(long); i++)
10394                 printf("%c", u.c[i]+'0');
10395         printf("\n");
10396         exit(0);
10397 }
10398 EOCP
10399                 xxx_prompt=y
10400                 set try
10401                 if eval $compile && ./try > /dev/null; then
10402                         dflt=`./try`
10403                         case "$dflt" in
10404                         [1-4][1-4][1-4][1-4]|12345678|87654321)
10405                                 echo "(The test program ran ok.)"
10406                                 echo "byteorder=$dflt"
10407                                 xxx_prompt=n
10408                         ;;
10409                         ????|????????) echo "(The test program ran ok.)" ;;
10410                         *) echo "(The test program didn't run right for some reason.)" ;;
10411                         esac
10412                 else
10413                         dflt='4321'
10414                         cat <<'EOM'
10415 (I can't seem to compile the test program.  Guessing big-endian...)
10416 EOM
10417                 fi
10418                 case "$xxx_prompt" in
10419                 y)
10420                         rp="What is the order of bytes in a long?"
10421                         . ./myread
10422                         byteorder="$ans"
10423                         ;;
10424                 *)      byteorder=$dflt
10425                         ;;
10426                 esac
10427                 ;;
10428         esac
10429         $rm -f try.c try
10430         ;;
10431 esac
10432
10433
10434 : how do we catenate cpp tokens here?
10435 echo " "
10436 echo "Checking to see how your cpp does stuff like catenate tokens..." >&4
10437 $cat >cpp_stuff.c <<'EOCP'
10438 #define RCAT(a,b)a/**/b
10439 #define ACAT(a,b)a ## b
10440 RCAT(Rei,ser)
10441 ACAT(Cir,cus)
10442 EOCP
10443 $cppstdin $cppflags $cppminus <cpp_stuff.c >cpp_stuff.out 2>&1
10444 if $contains 'Circus' cpp_stuff.out >/dev/null 2>&1; then
10445         echo "Oh!  Smells like ANSI's been here." >&4
10446         echo "We can catify or stringify, separately or together!"
10447         cpp_stuff=42
10448 elif $contains 'Reiser' cpp_stuff.out >/dev/null 2>&1; then
10449         echo "Ah, yes!  The good old days!" >&4
10450         echo "However, in the good old days we don't know how to stringify and"
10451         echo "catify at the same time."
10452         cpp_stuff=1
10453 else
10454         $cat >&4 <<EOM
10455 Hmm, I don't seem to be able to catenate tokens with your cpp.  You're going
10456 to have to edit the values of CAT[2-5] in config.h...
10457 EOM
10458         cpp_stuff="/* Help! How do we handle cpp_stuff? */*/"
10459 fi
10460 $rm -f cpp_stuff.*
10461
10462 : see if this is a db.h system
10463 set db.h i_db
10464 eval $inhdr
10465
10466 case "$i_db" in
10467 $define)
10468         : Check db version.
10469         echo " "
10470         echo "Checking Berkeley DB version ..." >&4
10471         $cat >try.c <<EOCP
10472 #$d_const HASCONST
10473 #ifndef HASCONST
10474 #define const
10475 #endif
10476 #include <sys/types.h>
10477 #include <stdio.h>
10478 #include <db.h>
10479 int main()
10480 {
10481 #ifdef DB_VERSION_MAJOR /* DB version >= 2 */
10482     int Major, Minor, Patch ;
10483     unsigned long Version ;
10484     (void)db_version(&Major, &Minor, &Patch) ;
10485     printf("You have Berkeley DB Version 2 or greater\n");
10486
10487     printf("db.h is from Berkeley DB Version %d.%d.%d\n",
10488                 DB_VERSION_MAJOR, DB_VERSION_MINOR, DB_VERSION_PATCH);
10489     printf("libdb is from Berkeley DB Version %d.%d.%d\n",
10490                 Major, Minor, Patch) ;
10491
10492     /* check that db.h & libdb are compatible */
10493     if (DB_VERSION_MAJOR != Major || DB_VERSION_MINOR != Minor || DB_VERSION_PATCH != Patch) {
10494         printf("db.h and libdb are incompatible\n") ;
10495         exit(3);        
10496     }
10497
10498     printf("db.h and libdb are compatible\n") ;
10499
10500     Version = DB_VERSION_MAJOR * 1000000 + DB_VERSION_MINOR * 1000
10501                 + DB_VERSION_PATCH ;
10502
10503     /* needs to be >= 2.3.4 */
10504     if (Version < 2003004) {
10505     /* if (DB_VERSION_MAJOR == 2 && DB_VERSION_MINOR == 0 && DB_VERSION_PATCH < 5) { */
10506         printf("but Perl needs Berkeley DB 2.3.4 or greater\n") ;
10507         exit(2);        
10508     }
10509
10510     exit(0);
10511 #else
10512 #if defined(_DB_H_) && defined(BTREEMAGIC) && defined(HASHMAGIC)
10513     printf("You have Berkeley DB Version 1\n");
10514     exit(0);    /* DB version < 2: the coast is clear. */
10515 #else
10516     exit(1);    /* <db.h> not Berkeley DB? */
10517 #endif
10518 #endif
10519 }
10520 EOCP
10521         set try
10522         if eval $compile && ./try; then
10523                 echo 'Looks OK.' >&4
10524         else
10525                 echo "I can't use Berkeley DB with your <db.h>.  I'll disable Berkeley DB." >&4
10526                 i_db=$undef
10527                 case " $libs " in
10528                 *"-ldb "*)
10529                         : Remove db from list of libraries to use
10530                         echo "Removing unusable -ldb from library list" >&4
10531                         set `echo X $libs | $sed -e 's/-ldb / /' -e 's/-ldb$//'`
10532                         shift
10533                         libs="$*"
10534                         echo "libs = $libs" >&4
10535                         ;;
10536                 esac
10537         fi
10538         $rm -f try.*
10539         ;;
10540 esac
10541
10542 case "$i_db" in
10543 define)
10544         : Check the return type needed for hash 
10545         echo " "
10546         echo "Checking return type needed for hash for Berkeley DB ..." >&4
10547         $cat >try.c <<EOCP
10548 #$d_const HASCONST
10549 #ifndef HASCONST
10550 #define const
10551 #endif
10552 #include <sys/types.h>
10553 #include <db.h>
10554
10555 #ifndef DB_VERSION_MAJOR
10556 u_int32_t hash_cb (ptr, size)
10557 const void *ptr;
10558 size_t size;
10559 {
10560 }
10561 HASHINFO info;
10562 int main()
10563 {
10564         info.hash = hash_cb;
10565 }
10566 #endif
10567 EOCP
10568         if $cc $ccflags -c try.c >try.out 2>&1 ; then
10569                 if $contains warning try.out >>/dev/null 2>&1 ; then
10570                         db_hashtype='int'
10571                 else
10572                         db_hashtype='u_int32_t'
10573                 fi
10574         else
10575                 : XXX Maybe we should just give up here.
10576                 db_hashtype=u_int32_t
10577                 $cat try.out >&4
10578                 echo "Help:  I can't seem to compile the db test program." >&4
10579                 echo "Something's wrong, but I'll assume you use $db_hashtype." >&4
10580         fi
10581         $rm -f try.*
10582         echo "Your version of Berkeley DB uses $db_hashtype for hash."
10583         ;;
10584 *)      db_hashtype=u_int32_t
10585         ;;
10586 esac
10587 case "$i_db" in
10588 define)
10589         : Check the return type needed for prefix 
10590         echo " "
10591         echo "Checking return type needed for prefix for Berkeley DB ..." >&4
10592         cat >try.c <<EOCP
10593 #$d_const HASCONST
10594 #ifndef HASCONST
10595 #define const
10596 #endif
10597 #include <sys/types.h>
10598 #include <db.h>
10599
10600 #ifndef DB_VERSION_MAJOR
10601 size_t prefix_cb (key1, key2)
10602 const DBT *key1;
10603 const DBT *key2;
10604 {
10605 }
10606 BTREEINFO info;
10607 int main()
10608 {
10609         info.prefix = prefix_cb;
10610 }
10611 #endif
10612 EOCP
10613         if $cc $ccflags -c try.c  >try.out 2>&1 ; then
10614                 if $contains warning try.out >>/dev/null 2>&1 ; then
10615                         db_prefixtype='int'
10616                 else
10617                         db_prefixtype='size_t'
10618                 fi
10619         else
10620                 db_prefixtype='size_t'
10621                 : XXX Maybe we should just give up here.
10622                 $cat try.out >&4
10623                 echo "Help:  I can't seem to compile the db test program." >&4
10624                 echo "Something's wrong, but I'll assume you use $db_prefixtype." >&4
10625         fi
10626         $rm -f try.*
10627         echo "Your version of Berkeley DB uses $db_prefixtype for prefix."
10628         ;;
10629 *)      db_prefixtype='size_t'
10630         ;;
10631 esac
10632
10633 : check for void type
10634 echo " "
10635 echo "Checking to see how well your C compiler groks the void type..." >&4
10636 case "$voidflags" in
10637 '')
10638         $cat >try.c <<'EOCP'
10639 #if TRY & 1
10640 void sub() {
10641 #else
10642 sub() {
10643 #endif
10644         extern void moo();      /* function returning void */
10645         void (*goo)();          /* ptr to func returning void */
10646 #if TRY & 8
10647         void *hue;              /* generic ptr */
10648 #endif
10649 #if TRY & 2
10650         void (*foo[10])();
10651 #endif
10652
10653 #if TRY & 4
10654         if(goo == moo) {
10655                 exit(0);
10656         }
10657 #endif
10658         exit(0);
10659 }
10660 int main() { sub(); }
10661 EOCP
10662         if $cc $ccflags -c -DTRY=$defvoidused try.c >.out 2>&1 ; then
10663                 voidflags=$defvoidused
10664         echo "Good.  It appears to support void to the level $package wants.">&4
10665                 if $contains warning .out >/dev/null 2>&1; then
10666                         echo "However, you might get some warnings that look like this:"
10667                         $cat .out
10668                 fi
10669         else
10670 echo "Hmm, your compiler has some difficulty with void. Checking further..." >&4
10671                 if $cc $ccflags -c -DTRY=1 try.c >/dev/null 2>&1; then
10672                         echo "It supports 1..."
10673                         if $cc $ccflags -c -DTRY=3 try.c >/dev/null 2>&1; then
10674                                 echo "It also supports 2..."
10675                                 if $cc $ccflags -c -DTRY=7 try.c >/dev/null 2>&1; then
10676                                         voidflags=7
10677                                         echo "And it supports 4 but not 8 definitely."
10678                                 else
10679                                         echo "It doesn't support 4..."
10680                                         if $cc $ccflags -c -DTRY=11 try.c >/dev/null 2>&1; then
10681                                                 voidflags=11
10682                                                 echo "But it supports 8."
10683                                         else
10684                                                 voidflags=3
10685                                                 echo "Neither does it support 8."
10686                                         fi
10687                                 fi
10688                         else
10689                                 echo "It does not support 2..."
10690                                 if $cc $ccflags -c -DTRY=13 try.c >/dev/null 2>&1; then
10691                                         voidflags=13
10692                                         echo "But it supports 4 and 8."
10693                                 else
10694                                         if $cc $ccflags -c -DTRY=5 try.c >/dev/null 2>&1; then
10695                                                 voidflags=5
10696                                                 echo "And it supports 4 but has not heard about 8."
10697                                         else
10698                                                 echo "However it supports 8 but not 4."
10699                                         fi
10700                                 fi
10701                         fi
10702                 else
10703                         echo "There is no support at all for void."
10704                         voidflags=0
10705                 fi
10706         fi
10707 esac
10708 case "$voidflags" in
10709 "$defvoidused") ;;
10710 *)      $cat >&4 <<'EOM'
10711   Support flag bits are:
10712     1: basic void declarations.
10713     2: arrays of pointers to functions returning void.
10714     4: operations between pointers to and addresses of void functions.
10715     8: generic void pointers.
10716 EOM
10717         dflt="$voidflags";
10718         rp="Your void support flags add up to what?"
10719         . ./myread
10720         voidflags="$ans"
10721         ;;
10722 esac
10723 $rm -f try.* .out
10724
10725
10726 : How can we generate normalized random numbers ?
10727 echo " "
10728 echo "Looking for a random number function..." >&4
10729 case "$randfunc" in
10730 '')
10731         if set drand48 val -f; eval $csym; $val; then
10732                 dflt="drand48"
10733                 echo "Good, found drand48()." >&4
10734         elif set random val -f; eval $csym; $val; then
10735                 dflt="random"
10736                 echo "OK, found random()." >&4
10737         else
10738                 dflt="rand"
10739                 echo "Yick, looks like I have to use rand()." >&4
10740         fi
10741         echo " "
10742         ;;
10743 *)
10744         dflt="$randfunc"
10745         ;;
10746 esac
10747 cont=true
10748
10749 case "$ccflags" in
10750 *-Dmy_rand=*|*-Dmy_srand=*)
10751         echo "Removing obsolete -Dmy_rand, -Dmy_srand, and -Drandbits from ccflags." >&4
10752         ccflags="`echo $ccflags | sed -e 's/-Dmy_rand=random/ /'`"
10753         ccflags="`echo $ccflags | sed -e 's/-Dmy_srand=srandom/ /'`"
10754         ccflags="`echo $ccflags | sed -e 's/-Drandbits=[0-9][0-9]*/ /'`"
10755         ;;
10756 esac
10757
10758 while $test "$cont"; do
10759         rp="Use which function to generate random numbers?"
10760         . ./myread
10761         if $test "$ans" = "$dflt"; then
10762                 : null
10763         else
10764                 randbits=''
10765         fi
10766         randfunc="$ans"
10767         if set $ans val -f; eval $csym; $val; then
10768                 cont=''
10769         else
10770                 dflt=y
10771                 rp="I cannot find function $ans. Use that name anyway?"
10772                 . ./myread
10773                 dflt=rand
10774                 case "$ans" in
10775                         [yY]*) cont='';;
10776                 esac
10777         fi
10778         case "$cont" in
10779         '')
10780                 case "$randfunc" in
10781                 drand48)
10782                         drand01="drand48()"
10783                         seedfunc="srand48"
10784                         randbits=48
10785                         randseedtype=long
10786                         ;;
10787                 rand|random)
10788                         case "$randbits" in
10789                         '')
10790 echo "Checking to see how many bits your $randfunc() function produces..." >&4
10791                                 $cat >try.c <<EOCP
10792 #$i_unistd I_UNISTD
10793 #$i_stdlib I_STDLIB
10794 #include <stdio.h>
10795 #ifdef I_UNISTD
10796 #  include <unistd.h>
10797 #endif
10798 #ifdef I_STDLIB
10799 #  include <stdlib.h>
10800 #endif
10801 int main()
10802 {
10803         register int i;
10804         register unsigned long tmp;
10805         register unsigned long max = 0L;
10806
10807         for (i = 1000; i; i--) {
10808                 tmp = (unsigned long) $randfunc();
10809                 if (tmp > max) max = tmp;
10810         }
10811         for (i = 0; max; i++)
10812                 max /= 2;
10813         printf("%d\n",i);
10814 }
10815 EOCP
10816                                 set try
10817                                 if eval $compile_ok; then
10818                                         dflt=`try`
10819                                 else
10820                                         dflt='?'
10821                                         echo "(I can't seem to compile the test program...)"
10822                                 fi
10823                                 ;;
10824                         *)
10825                                 dflt="$randbits"
10826                                 ;;
10827                         esac
10828                         rp="How many bits does your $randfunc() function produce?"
10829                         . ./myread
10830                         randbits="$ans"
10831                         $rm -f try.c try
10832                         drand01="($randfunc() / (double) ((unsigned long)1 << $randbits))"
10833                         seedfunc="s$randfunc"
10834                         randseedtype=unsigned
10835                         ;;
10836                 *)
10837                         dflt="31"
10838                         rp="How many bits does your $randfunc() function produce?"
10839                         . ./myread
10840                         randbits="$ans"
10841                         seedfunc="s$randfunc"
10842                         drand01="($randfunc() / (double) ((unsigned long)1 << $randbits))"
10843                         if set $seedfunc val -f; eval $csym; $val; then
10844                                 echo "(Using $seedfunc() to seed random generator)"
10845                         else
10846                                 echo "(Warning: no $seedfunc() to seed random generator)"
10847                                 seedfunc=rand
10848                         fi
10849                         randseedtype=unsigned
10850                         ;;
10851                 esac
10852                 ;;
10853         esac
10854 done
10855
10856 echo " "
10857 echo "Determining whether or not we are on an EBCDIC system..." >&4
10858 $cat >tebcdic.c <<'EOM'
10859 int main()
10860 {
10861   if ('M'==0xd4) return 0;
10862   return 1;
10863 }
10864 EOM
10865
10866 val=$undef
10867 set tebcdic
10868 if eval $compile_ok; then
10869         if ./tebcdic; then
10870                 echo "You have EBCDIC." >&4
10871                 val="$define"
10872         else
10873                 echo "Nope, no EBCDIC.  Assuming ASCII or some ISO Latin." >&4
10874         fi
10875 else
10876         echo "I'm unable to compile the test program." >&4
10877         echo "I'll assume ASCII or some ISO Latin." >&4
10878 fi
10879 $rm -f tebcdic.c tebcdic
10880 set ebcdic
10881 eval $setvar
10882
10883 : see what type file positions are declared as in the library
10884 rp="What is the type for file position used by fsetpos()?"
10885 set fpos_t fpostype long stdio.h sys/types.h
10886 eval $typedef_ask
10887
10888 : Store the full pathname to the ar program for use in the C program
10889 : Respect a hint or command line value for full_ar.
10890 case "$full_ar" in
10891 '') full_ar=$ar ;;
10892 esac
10893
10894 : Store the full pathname to the sed program for use in the C program
10895 full_sed=$sed
10896
10897 : see what type gids are declared as in the kernel
10898 echo " "
10899 echo "Looking for the type for group ids returned by getgid()."
10900 set gid_t gidtype xxx stdio.h sys/types.h
10901 eval $typedef
10902 case "$gidtype" in
10903 xxx)
10904         xxx=`./findhdr sys/user.h`
10905         set `grep 'groups\[NGROUPS\];' "$xxx" 2>/dev/null` unsigned short
10906         case $1 in
10907         unsigned) dflt="$1 $2" ;;
10908         *) dflt="$1" ;;
10909         esac
10910         ;;
10911 *) dflt="$gidtype";;
10912 esac
10913 case "$gidtype" in
10914 gid_t) echo "gid_t found." ;;
10915 *)      rp="What is the type for group ids returned by getgid()?"
10916         . ./myread
10917         gidtype="$ans"
10918         ;;
10919 esac
10920
10921 : see if getgroups exists
10922 set getgroups d_getgrps
10923 eval $inlibc
10924
10925 : see if setgroups exists
10926 set setgroups d_setgrps
10927 eval $inlibc
10928
10929
10930 : Find type of 2nd arg to 'getgroups()' and 'setgroups()'
10931 echo " "
10932 case "$d_getgrps$d_setgrps" in
10933 *define*)
10934         case "$groupstype" in
10935         '') dflt="$gidtype" ;;
10936         *)  dflt="$groupstype" ;;
10937         esac
10938         $cat <<EOM
10939 What type of pointer is the second argument to getgroups() and setgroups()?
10940 Usually this is the same as group ids, $gidtype, but not always.
10941
10942 EOM
10943         rp='What type pointer is the second argument to getgroups() and setgroups()?'
10944         . ./myread
10945         groupstype="$ans"
10946         ;;
10947 *)  groupstype="$gidtype";;
10948 esac
10949
10950 : see what type lseek is declared as in the kernel
10951 rp="What is the type used for lseek's offset on this system?"
10952 set off_t lseektype long stdio.h sys/types.h
10953 eval $typedef_ask
10954
10955 echo " "
10956 $echo $n "Checking to see how big your file offsets are...$c" >&4
10957 $cat >try.c <<EOCP
10958 #include <sys/types.h>
10959 #include <stdio.h>
10960 int main()
10961 {
10962         printf("%d\n", sizeof($lseektype));
10963 }
10964 EOCP
10965 set try
10966 if eval $compile_ok; then
10967         lseeksize=`./try`
10968         $echo " $lseeksize bytes." >&4
10969 else
10970         dflt='4'
10971         echo " "
10972         echo "(I can't seem to compile the test program.  Guessing...)"
10973         rp="What is the size of your file offsets (in bytes)?"
10974         . ./myread
10975         lseeksize="$ans"
10976 fi
10977 $rm -f try.c try
10978
10979 echo " "
10980 echo "Checking if your $make program sets \$(MAKE)..." >&4
10981 case "$make_set_make" in
10982 '')
10983         $sed 's/^X //' > testmake.mak << 'EOF'
10984 Xall:
10985 X       @echo 'maketemp="$(MAKE)"'
10986 EOF
10987         case "`$make -f testmake.mak 2>/dev/null`" in
10988         *maketemp=*) make_set_make='#' ;;
10989         *)      make_set_make="MAKE=$make" ;;
10990         esac
10991         $rm -f testmake.mak
10992         ;;
10993 esac
10994 case "$make_set_make" in
10995 '#') echo "Yup, it does.";;
10996 *) echo "Nope, it doesn't.";;
10997 esac
10998
10999 : see what type is used for mode_t
11000 rp="What is the type used for file modes for system calls (e.g. fchmod())?"
11001 set mode_t modetype int stdio.h sys/types.h
11002 eval $typedef_ask
11003
11004 : define a fucntion to check prototypes
11005 $cat > protochk <<EOSH
11006 $startsh
11007 cc="$cc"
11008 optimize="$optimize"
11009 ccflags="$ccflags"
11010 prototype="$prototype"
11011 define="$define"
11012 rm=$rm
11013 EOSH
11014
11015 $cat >> protochk <<'EOSH'
11016
11017 $rm -f try.c
11018 foo="$1"
11019 shift
11020 while test $# -ge 2; do
11021         case "$1" in
11022                 $define) echo "#include <$2>" >> try.c ;;
11023                 literal) echo "$2" >> try.c ;;
11024         esac
11025     shift 2
11026 done
11027 test "$prototype" = "$define"  && echo '#define CAN_PROTOTYPE' >> try.c
11028 cat >> try.c <<'EOCP'
11029 #ifdef CAN_PROTOTYPE
11030 #define _(args) args
11031 #else
11032 #define _(args) ()
11033 #endif
11034 EOCP
11035 echo "$foo" >> try.c
11036 echo 'int no_real_function_has_this_name _((void)) { return 0; }' >> try.c
11037 $cc $optimize $ccflags -c try.c > /dev/null 2>&1
11038 status=$?
11039 $rm -f try.[co]
11040 exit $status
11041 EOSH
11042 chmod +x protochk
11043 $eunicefix protochk
11044
11045 : see what type is used for size_t
11046 rp="What is the type used for the length parameter for string functions?"
11047 set size_t sizetype 'unsigned int' stdio.h sys/types.h
11048 eval $typedef_ask
11049
11050 : check for type of arguments to gethostbyaddr. 
11051 if test "X$netdb_host_type" = X -o "X$netdb_hlen_type" = X; then
11052         case "$d_gethbyaddr" in
11053         $define)
11054                 $cat <<EOM
11055
11056 Checking to see what type of arguments are accepted by gethostbyaddr().
11057 EOM
11058                 hdrs="$define sys/types.h
11059                         $d_socket sys/socket.h 
11060                         $i_niin netinet/in.h 
11061                         $i_netdb netdb.h
11062                         $i_unistd unistd.h"
11063                 : The first arg can 'char *' or 'void *'
11064                 : The second arg is some of integral type
11065                 for xxx in in_addr_t 'const void *' 'const char *' 'void *' 'char *'; do
11066                         for yyy in size_t long int; do
11067                                 case "$netdb_host_type" in
11068                                 '')     try="extern struct hostent *gethostbyaddr($xxx, $yyy, int);"
11069                                         if ./protochk "$try" $hdrs; then
11070                                                 echo "Your system accepts $xxx for the first arg."
11071                                                 echo "...and $yyy for the second arg."
11072                                                 netdb_host_type="$xxx"
11073                                                 netdb_hlen_type="$yyy"
11074                                         fi
11075                                         ;;
11076                                 esac
11077                         done
11078                 done
11079                 : In case none of those worked, prompt the user.
11080                 case "$netdb_host_type" in
11081                 '')     rp='What is the type for the 1st argument to gethostbyaddr?'
11082                         dflt='char *'
11083                         . ./myread
11084                         netdb_host_type=$ans
11085                         rp='What is the type for the 2nd argument to gethostbyaddr?'
11086                         dflt="$sizetype"
11087                         . ./myread
11088                         netdb_hlen_type=$ans
11089                         ;;
11090                 esac
11091                 ;;
11092         *)      : no gethostbyaddr, so pick harmless defaults
11093                 netdb_host_type='char *'
11094                 netdb_hlen_type="$sizetype"
11095                 ;;
11096         esac
11097         # Remove the "const" if needed. -- but then we'll have a 
11098         # prototype clash!
11099         # netdb_host_type=`echo "$netdb_host_type" | sed 's/^const //'`
11100 fi
11101
11102 : check for type of argument to gethostbyname. 
11103 if test "X$netdb_name_type" = X ; then
11104         case "$d_gethbyname" in
11105         $define)
11106                 $cat <<EOM
11107
11108 Checking to see what type of argument is accepted by gethostbyname().
11109 EOM
11110                 hdrs="$define sys/types.h
11111                         $d_socket sys/socket.h 
11112                         $i_niin netinet/in.h 
11113                         $i_netdb netdb.h
11114                         $i_unistd unistd.h"
11115                 for xxx in "const char *" "char *"; do
11116                         case "$netdb_name_type" in
11117                         '')     try="extern struct hostent *gethostbyname($xxx);"
11118                                 if ./protochk "$try" $hdrs; then
11119                                         echo "Your system accepts $xxx."
11120                                         netdb_name_type="$xxx"
11121                                 fi
11122                                 ;;
11123                         esac
11124                 done
11125                 : In case none of those worked, prompt the user.
11126                 case "$netdb_name_type" in
11127                 '')     rp='What is the type for the 1st argument to gethostbyname?'
11128                         dflt='char *'
11129                         . ./myread
11130                         netdb_name_type=$ans
11131                         ;;
11132                 esac
11133                 ;;
11134         *)      : no gethostbyname, so pick harmless default
11135                 netdb_name_type='char *'
11136                 ;;
11137         esac
11138 fi
11139
11140 : check for type of 1st argument to getnetbyaddr. 
11141 if test "X$netdb_net_type" = X ; then
11142         case "$d_getnbyaddr" in
11143         $define)
11144                 $cat <<EOM
11145
11146 Checking to see what type of 1st argument is accepted by getnetbyaddr().
11147 EOM
11148                 hdrs="$define sys/types.h
11149                         $d_socket sys/socket.h 
11150                         $i_niin netinet/in.h 
11151                         $i_netdb netdb.h
11152                         $i_unistd unistd.h"
11153                 for xxx in in_addr_t "unsigned long" long "unsigned int" int; do
11154                         case "$netdb_net_type" in
11155                         '')     try="extern struct netent *getnetbyaddr($xxx, int);"
11156                                 if ./protochk "$try" $hdrs; then
11157                                         echo "Your system accepts $xxx."
11158                                         netdb_net_type="$xxx"
11159                                 fi
11160                                 ;;
11161                         esac
11162                 done
11163                 : In case none of those worked, prompt the user.
11164                 case "$netdb_net_type" in
11165                 '')     rp='What is the type for the 1st argument to getnetbyaddr?'
11166                         dflt='long'
11167                         . ./myread
11168                         netdb_net_type=$ans
11169                         ;;
11170                 esac
11171                 ;;
11172         *)      : no getnetbyaddr, so pick harmless default
11173                 netdb_net_type='long'
11174                 ;;
11175         esac
11176 fi
11177 : locate the preferred pager for this system
11178 case "$pager" in
11179 '')
11180         dflt=''
11181         case "$pg" in
11182         /*) dflt=$pg;;
11183         esac
11184         case "$more" in
11185         /*) dflt=$more;;
11186         esac
11187         case "$less" in
11188         /*) dflt=$less;;
11189         esac
11190         case "$dflt" in
11191         '') dflt=/usr/ucb/more;;
11192         esac
11193         ;;
11194 *) dflt="$pager";;
11195 esac
11196 echo " "
11197 fn=f/
11198 rp='What pager is used on your system?'
11199 . ./getfile
11200 pager="$ans"
11201
11202 : see what type pids are declared as in the kernel
11203 rp="What is the type of process ids on this system?"
11204 set pid_t pidtype int stdio.h sys/types.h
11205 eval $typedef_ask
11206
11207 : check for length of pointer
11208 echo " "
11209 case "$ptrsize" in
11210 '')
11211         $echo $n "Checking to see how big your pointers are...$c" >&4
11212         if test "$voidflags" -gt 7; then
11213                 echo '#define VOID_PTR char *' > try.c
11214         else
11215                 echo '#define VOID_PTR void *' > try.c
11216         fi
11217         $cat >>try.c <<'EOCP'
11218 #include <stdio.h>
11219 int main()
11220 {
11221         printf("%d\n", sizeof(VOID_PTR));
11222         exit(0);
11223 }
11224 EOCP
11225         set try
11226         if eval $compile_ok; then
11227                 ptrsize=`./try`
11228                 $echo " $ptrsize bytes." >&4
11229         else
11230                 dflt='4'
11231                 echo "(I can't seem to compile the test program.  Guessing...)" >&4
11232                 rp="What is the size of a pointer (in bytes)?"
11233                 . ./myread
11234                 ptrsize="$ans"
11235         fi
11236         ;;
11237 esac
11238 $rm -f try.c try
11239
11240 : see if ar generates random libraries by itself
11241 echo " "
11242 echo "Checking how to generate random libraries on your machine..." >&4
11243 echo 'int bar1() { return bar2(); }' > bar1.c
11244 echo 'int bar2() { return 2; }' > bar2.c
11245 $cat > foo.c <<'EOP'
11246 int main() { printf("%d\n", bar1()); exit(0); }
11247 EOP
11248 $cc $ccflags -c bar1.c >/dev/null 2>&1
11249 $cc $ccflags -c bar2.c >/dev/null 2>&1
11250 $cc $ccflags -c foo.c >/dev/null 2>&1
11251 $ar rc bar$_a bar2$_o bar1$_o >/dev/null 2>&1
11252 if $cc $ccflags $ldflags -o foobar foo$_o bar$_a $libs > /dev/null 2>&1 &&
11253         ./foobar >/dev/null 2>&1; then
11254         echo "$ar appears to generate random libraries itself."
11255         orderlib=false
11256         ranlib=":"
11257 elif $ar ts bar$_a >/dev/null 2>&1 &&
11258         $cc $ccflags $ldflags -o foobar foo$_o bar$_a $libs > /dev/null 2>&1 &&
11259         ./foobar >/dev/null 2>&1; then
11260                 echo "a table of contents needs to be added with '$ar ts'."
11261                 orderlib=false
11262                 ranlib="$ar ts"
11263 else
11264         case "$ranlib" in
11265         :) ranlib='';;
11266         '')
11267                 ranlib=`./loc ranlib X /usr/bin /bin /usr/local/bin`
11268                 $test -f $ranlib || ranlib=''
11269                 ;;
11270         esac
11271         if $test -n "$ranlib"; then
11272                 echo "your system has '$ranlib'; we'll use that."
11273                 orderlib=false
11274         else
11275                 echo "your system doesn't seem to support random libraries"
11276                 echo "so we'll use lorder and tsort to order the libraries."
11277                 orderlib=true
11278                 ranlib=":"
11279         fi
11280 fi
11281 $rm -f foo* bar* 
11282
11283 : check for type of arguments to select. 
11284 case "$selecttype" in
11285 '') case "$d_select" in
11286         $define)
11287                 $cat <<EOM
11288 Checking to see what type of arguments are accepted by select().
11289 EOM
11290                 hdrs="$define sys/types.h
11291                         $i_systime sys/time.h 
11292                         $i_sysselct sys/select.h
11293                         $d_socket sys/socket.h"
11294                 : The first arg can be int, unsigned, or size_t
11295                 : The last arg may or may not be 'const'
11296                 val=''
11297                 : void pointer has been seen but using that
11298                 : breaks the selectminbits test
11299                 for xxx in 'fd_set *' 'int *'; do
11300                         for nfd in 'int' 'size_t' 'unsigned long' 'unsigned' ; do
11301                                 for tmo in 'struct timeval *' 'const struct timeval *'; do
11302                                         case "$val" in
11303                                         '')     try="extern select _(($nfd, $xxx, $xxx, $xxx, $tmo));"
11304                                                 if ./protochk "$try" $hdrs; then
11305                                                         echo "Your system accepts $xxx."
11306                                                         val="$xxx"
11307                                                 fi
11308                                                 ;;
11309                                         esac
11310                                 done
11311                         done
11312                 done
11313                 case "$val" in
11314                 '')     rp='What is the type for the 2nd, 3rd, and 4th arguments to select?'
11315                         case "$d_fd_set" in
11316                                 $define) dflt="fd_set *" ;;
11317                                 *)              dflt="int *" ;;
11318                         esac
11319                         . ./myread
11320                         val=$ans
11321                         ;;
11322                 esac
11323                 selecttype="$val"
11324                 ;;
11325         *)      : no select, so pick a harmless default
11326                 selecttype='int *'
11327                 ;;
11328         esac
11329         ;;
11330 esac
11331
11332 : check for the select 'width'
11333 case "$selectminbits" in
11334 '') case "$d_select" in
11335         $define)
11336                 $cat <<EOM
11337
11338 Checking to see on how many bits at a time your select() operates...
11339 EOM
11340                 $cat >try.c <<EOCP
11341 #include <sys/types.h>
11342 #$i_time I_TIME
11343 #$i_systime I_SYS_TIME
11344 #$i_systimek I_SYS_TIME_KERNEL
11345 #ifdef I_TIME
11346 #   include <time.h>
11347 #endif
11348 #ifdef I_SYS_TIME
11349 #   ifdef I_SYS_TIME_KERNEL
11350 #       define KERNEL
11351 #   endif
11352 #   include <sys/time.h>
11353 #   ifdef I_SYS_TIME_KERNEL
11354 #       undef KERNEL
11355 #   endif
11356 #endif
11357 #$i_sysselct I_SYS_SELECT
11358 #ifdef I_SYS_SELECT
11359 #include <sys/select.h>
11360 #endif
11361 #include <stdio.h>
11362 $selecttype b;
11363 #define S sizeof(*(b))
11364 #define MINBITS 64
11365 #define NBYTES (S * 8 > MINBITS ? S : MINBITS/8)
11366 #define NBITS  (NBYTES * 8)
11367 int main() {
11368     char s[NBYTES];
11369     struct timeval t;
11370     int i;
11371     FILE* fp;
11372     int fd;
11373
11374     fclose(stdin);
11375     fp = fopen("try.c", "r");
11376     if (fp == 0)
11377       exit(1);
11378     fd = fileno(fp);
11379     if (fd < 0)
11380       exit(2);
11381     b = ($selecttype)s;
11382     for (i = 0; i < NBITS; i++)
11383         FD_SET(i, b);
11384     t.tv_sec  = 0;
11385     t.tv_usec = 0;
11386     select(fd + 1, b, 0, 0, &t);
11387     for (i = NBITS - 1; i > fd && FD_ISSET(i, b); i--);
11388     printf("%d\n", i + 1);
11389     return 0;
11390 }
11391 EOCP
11392                 set try
11393                 if eval $compile_ok; then
11394                         selectminbits=`./try`
11395                         case "$selectminbits" in
11396                         '')     cat >&4 <<EOM
11397 Cannot figure out on how many bits at a time your select() operates.
11398 I'll play safe and guess it is 32 bits.
11399 EOM
11400                                 selectminbits=32
11401                                 bits="32 bits"
11402                                 ;;
11403                         1)      bits="1 bit" ;;
11404                         *)      bits="$selectminbits bits" ;;
11405                         esac
11406                         echo "Your select() operates on $bits at a time." >&4
11407                 else
11408                         rp='What is the minimum number of bits your select() operates on?'
11409                         case "$byteorder" in
11410                         1234|12345678)  dflt=32 ;;
11411                         *)              dflt=1  ;;
11412                         esac
11413                         . ./myread
11414                         val=$ans
11415                         selectminbits="$val"
11416                 fi
11417                 $rm -f try.* try
11418                 ;;
11419         *)      : no select, so pick a harmless default
11420                 selectminbits='32'
11421                 ;;
11422         esac
11423         ;;
11424 esac
11425
11426 : Trace out the files included by signal.h, then look for SIGxxx names.
11427 : Remove SIGARRAYSIZE used by HPUX.
11428 : Remove SIGTYP void lines used by OS2.
11429 xxx=`echo '#include <signal.h>' |
11430         $cppstdin $cppminus $cppflags 2>/dev/null |
11431         $grep '^[       ]*#.*include' | 
11432         $awk "{print \\$$fieldn}" | $sed 's!"!!g' | $sort | $uniq`
11433 : Check this list of files to be sure we have parsed the cpp output ok.
11434 : This will also avoid potentially non-existent files, such 
11435 : as ../foo/bar.h
11436 xxxfiles=''
11437 for xx in $xxx /dev/null ; do
11438         $test -f "$xx" && xxxfiles="$xxxfiles $xx"
11439 done
11440 : If we have found no files, at least try signal.h
11441 case "$xxxfiles" in
11442 '')     xxxfiles=`./findhdr signal.h` ;;
11443 esac
11444 xxx=`awk '
11445 $1 ~ /^#define$/ && $2 ~ /^SIG[A-Z0-9]*$/ && $2 !~ /SIGARRAYSIZE/ && $3 !~ /void/ {
11446         print substr($2, 4, 20)
11447 }
11448 $1 == "#" && $2 ~ /^define$/ && $3 ~ /^SIG[A-Z0-9]*$/ && $3 !~ /SIGARRAYSIZE/ && $4 !~ /void/ {
11449         print substr($3, 4, 20)
11450 }' $xxxfiles`
11451 : Append some common names just in case the awk scan failed.
11452 xxx="$xxx ABRT ALRM BUS CHLD CLD CONT DIL EMT FPE HUP ILL INT IO IOT KILL"
11453 xxx="$xxx LOST PHONE PIPE POLL PROF PWR QUIT SEGV STKFLT STOP SYS TERM TRAP"
11454 xxx="$xxx TSTP TTIN TTOU URG USR1 USR2 USR3 USR4 VTALRM"
11455 xxx="$xxx WINCH WIND WINDOW XCPU XFSZ"
11456 : generate a few handy files for later
11457 $cat > signal.c <<'EOCP'
11458 #include <sys/types.h>
11459 #include <signal.h>
11460 #include <stdio.h>
11461 int main() {
11462
11463 /* Strange style to avoid deeply-nested #if/#else/#endif */
11464 #ifndef NSIG
11465 #  ifdef _NSIG
11466 #    define NSIG (_NSIG)
11467 #  endif
11468 #endif
11469
11470 #ifndef NSIG
11471 #  ifdef SIGMAX
11472 #    define NSIG (SIGMAX+1)
11473 #  endif
11474 #endif
11475
11476 #ifndef NSIG
11477 #  ifdef SIG_MAX
11478 #    define NSIG (SIG_MAX+1)
11479 #  endif
11480 #endif
11481
11482 #ifndef NSIG
11483 #  ifdef MAXSIG
11484 #    define NSIG (MAXSIG+1)
11485 #  endif
11486 #endif
11487
11488 #ifndef NSIG
11489 #  ifdef MAX_SIG
11490 #    define NSIG (MAX_SIG+1)
11491 #  endif
11492 #endif
11493
11494 #ifndef NSIG
11495 #  ifdef SIGARRAYSIZE
11496 #    define NSIG (SIGARRAYSIZE+1) /* Not sure of the +1 */
11497 #  endif
11498 #endif
11499
11500 #ifndef NSIG
11501 #  ifdef _sys_nsig
11502 #    define NSIG (_sys_nsig) /* Solaris 2.5 */
11503 #  endif
11504 #endif
11505
11506 /* Default to some arbitrary number that's big enough to get most
11507    of the common signals.
11508 */
11509 #ifndef NSIG
11510 #    define NSIG 50
11511 #endif
11512
11513 printf("NSIG %d\n", NSIG);
11514
11515 #ifndef JUST_NSIG
11516
11517 EOCP
11518
11519 echo $xxx | $tr ' ' $trnl | $sort | $uniq | $awk '
11520 {
11521         printf "#ifdef SIG"; printf $1; printf "\n"
11522         printf "printf(\""; printf $1; printf " %%d\\n\",SIG";
11523         printf $1; printf ");\n"
11524         printf "#endif\n"
11525 }
11526 END {
11527         printf "#endif /* JUST_NSIG */\n";
11528         printf "}\n";
11529 }
11530 ' >>signal.c
11531 $cat >signal.awk <<'EOP'
11532 BEGIN { ndups = 0 }
11533 $1 ~ /^NSIG$/ { nsig = $2 }
11534 ($1 !~ /^NSIG$/) && (NF == 2) {
11535     if ($2 > maxsig) { maxsig = $2 }
11536     if (sig_name[$2]) {
11537         dup_name[ndups] = $1
11538         dup_num[ndups] = $2
11539         ndups++ 
11540     }
11541     else {
11542         sig_name[$2] = $1
11543         sig_num[$2] = $2
11544     }
11545
11546 }
11547 END { 
11548     if (nsig == 0) { nsig = maxsig + 1 }
11549         for (n = 1; n < nsig; n++) {
11550                 if (sig_name[n]) {
11551                         printf("%s %d\n", sig_name[n], sig_num[n])
11552                 }
11553                 else {
11554                         printf("NUM%d %d\n", n, n) 
11555                 }
11556         }
11557     for (n = 0; n < ndups; n++) {
11558                 printf("%s %d\n", dup_name[n], dup_num[n])
11559     }
11560 }
11561 EOP
11562 $cat >signal_cmd <<EOS
11563 $startsh
11564 if $test -s signal.lst; then
11565     echo "Using your existing signal.lst file"
11566         exit 0
11567 fi
11568 xxx="$xxx"
11569 EOS
11570 $cat >>signal_cmd <<'EOS'
11571
11572 set signal
11573 if eval $compile_ok; then
11574         ./signal$_exe | $sort -n +1 | $uniq | $awk -f signal.awk >signal.lst
11575 else
11576         echo "(I can't seem be able to compile the whole test program)" >&4
11577         echo "(I'll try it in little pieces.)" >&4
11578         set signal -DJUST_NSIG
11579         if eval $compile_ok; then
11580                 ./signal$_exe > signal.nsg
11581                 $cat signal.nsg
11582         else
11583                 echo "I can't seem to figure out how many signals you have." >&4
11584                 echo "Guessing 50." >&4
11585                 echo 'NSIG 50' > signal.nsg
11586         fi
11587         : Now look at all the signal names, one at a time.
11588         for xx in `echo $xxx | $tr ' ' $trnl | $sort | $uniq`; do
11589                 $cat > signal.c <<EOCP
11590 #include <sys/types.h>
11591 #include <signal.h>
11592 #include <stdio.h>
11593 int main() {
11594 printf("$xx %d\n", SIG${xx});
11595 return 0;
11596 }
11597 EOCP
11598                 set signal
11599                 if eval $compile; then
11600                         echo "SIG${xx} found."
11601                         ./signal$_exe  >> signal.ls1
11602                 else
11603                         echo "SIG${xx} NOT found."
11604                 fi
11605         done
11606         if $test -s signal.ls1; then
11607                 $cat signal.nsg signal.ls1 |
11608                         $sort -n +1 | $uniq | $awk -f signal.awk >signal.lst
11609         fi
11610
11611 fi
11612 if $test -s signal.lst; then
11613         :
11614 else
11615         echo "(AAK! I can't compile the test programs -- Guessing)" >&4
11616         echo 'kill -l' >signal
11617         set X `csh -f <signal`
11618         $rm -f signal
11619         shift
11620         case $# in
11621         0) set HUP INT QUIT ILL TRAP ABRT EMT FPE KILL BUS SEGV SYS PIPE ALRM TERM;;
11622         esac
11623         echo $@ | $tr ' ' $trnl | \
11624                 $awk '{ printf $1; printf " %d\n", ++s; }' >signal.lst
11625 fi
11626 $rm -f signal.c signal$_exe signal$_o signal.nsg signal.ls1
11627 EOS
11628 chmod a+x signal_cmd
11629 $eunicefix signal_cmd
11630
11631 : generate list of signal names
11632 echo " "
11633 case "$sig_name_init" in
11634 '') doinit=yes ;;
11635 *)  case "$sig_num_init" in
11636     ''|*,*) doinit=yes ;;
11637     esac ;;
11638 esac
11639 case "$doinit" in
11640 yes)
11641         echo "Generating a list of signal names and numbers..." >&4
11642         . ./signal_cmd
11643         sig_name=`$awk '{printf "%s ", $1}' signal.lst`
11644         sig_name="ZERO $sig_name"
11645         sig_name_init=`$awk 'BEGIN { printf "\"ZERO\", " }
11646                                                 { printf "\"%s\", ", $1 }
11647                                                 END { printf "0\n" }' signal.lst`
11648         sig_num=`$awk '{printf "%d ", $2}' signal.lst`
11649         sig_num="0 $sig_num"
11650         sig_num_init=`$awk 'BEGIN { printf "0, " }
11651                                         { printf "%d, ", $2}
11652                                         END { printf "0\n"}' signal.lst`
11653         ;;
11654 esac
11655 echo "The following signals are available:"
11656 echo " "
11657 echo $sig_name | $awk \
11658 'BEGIN { linelen = 0 }
11659 {
11660         for (i = 1; i <= NF; i++) {
11661                 name = "SIG" $i " "
11662                 linelen = linelen + length(name)
11663                 if (linelen > 70) {
11664                         printf "\n"
11665                         linelen = length(name)
11666                 }
11667                 printf "%s", name
11668         }
11669         printf "\n"
11670 }'
11671 $rm -f signal signal.c signal.awk signal.lst signal_cmd 
11672
11673 : see what type is used for signed size_t
11674 set ssize_t ssizetype int stdio.h sys/types.h
11675 eval $typedef
11676 dflt="$ssizetype"
11677 $cat > ssize.c <<EOM
11678 #include <stdio.h>
11679 #include <sys/types.h>
11680 #define Size_t $sizetype
11681 #define SSize_t $dflt
11682 int main()
11683 {
11684         if (sizeof(Size_t) == sizeof(SSize_t))
11685                 printf("$dflt\n");
11686         else if (sizeof(Size_t) == sizeof(int))
11687                 printf("int\n");
11688         else 
11689                 printf("long\n");
11690         exit(0);
11691 }
11692 EOM
11693 echo " "
11694 set ssize
11695 if eval $compile_ok && ./ssize > /dev/null; then
11696         ssizetype=`./ssize`
11697         echo "I'll be using $ssizetype for functions returning a byte count." >&4
11698 else
11699         $cat >&4 <<EOM
11700 Help! I can't compile and run the ssize_t test program: please enlighten me!
11701 (This is probably a misconfiguration in your system or libraries, and
11702 you really ought to fix it.  Still, I'll try anyway.)
11703
11704 I need a type that is the same size as $sizetype, but is guaranteed to
11705 be signed.  Common values are ssize_t, int and long.
11706
11707 EOM
11708         rp="What signed type is the same size as $sizetype?"
11709         . ./myread
11710         ssizetype="$ans"
11711 fi
11712 $rm -f ssize ssize.*
11713
11714 : see what type of char stdio uses.
11715 echo " "
11716 if $contains 'unsigned.*char.*_ptr;' `./findhdr stdio.h` >/dev/null 2>&1 ; then
11717         echo "Your stdio uses unsigned chars." >&4
11718         stdchar="unsigned char"
11719 else
11720         echo "Your stdio uses signed chars." >&4
11721         stdchar="char"
11722 fi
11723
11724 : see if time exists
11725 echo " "
11726 if test "X$d_time" = X -o X"$timetype" = X; then
11727     if set time val -f d_time; eval $csym; $val; then
11728                 echo 'time() found.' >&4
11729                 val="$define"
11730                 rp="What is the type returned by time() on this system?"
11731                 set time_t timetype long stdio.h sys/types.h
11732                 eval $typedef_ask
11733     else
11734                 echo 'time() not found, hope that will do.' >&4
11735                 val="$undef"
11736                 timetype='int';
11737     fi
11738     set d_time
11739     eval $setvar
11740 fi
11741
11742 : see what type uids are declared as in the kernel
11743 echo " "
11744 echo "Looking for the type for user ids returned by getuid()."
11745 set uid_t uidtype xxx stdio.h sys/types.h
11746 eval $typedef
11747 case "$uidtype" in
11748 xxx)
11749         xxx=`./findhdr sys/user.h`
11750         set `grep '_ruid;' "$xxx" 2>/dev/null` unsigned short
11751         case $1 in
11752         unsigned) dflt="$1 $2" ;;
11753         *) dflt="$1" ;;
11754         esac
11755         ;;
11756 *) dflt="$uidtype";;
11757 esac
11758 case "$uidtype" in
11759 uid_t)  echo "uid_t found." ;;
11760 *)      rp="What is the type for user ids returned by getuid()?"
11761         . ./myread
11762         uidtype="$ans"
11763         ;;
11764 esac
11765
11766 : see if dbm.h is available
11767 : see if dbmclose exists
11768 set dbmclose d_dbmclose
11769 eval $inlibc
11770
11771 case "$d_dbmclose" in
11772 $define)
11773         set dbm.h i_dbm
11774         eval $inhdr
11775         case "$i_dbm" in
11776         $define)
11777                 val="$undef"
11778                 set i_rpcsvcdbm
11779                 eval $setvar
11780                 ;;
11781         *)      set rpcsvc/dbm.h i_rpcsvcdbm
11782                 eval $inhdr
11783                 ;;
11784         esac
11785         ;;
11786 *)      echo "We won't be including <dbm.h>"
11787         val="$undef"
11788         set i_dbm
11789         eval $setvar
11790         val="$undef"
11791         set i_rpcsvcdbm
11792         eval $setvar
11793         ;;
11794 esac
11795
11796 : see if this is a sys/file.h system
11797 val=''
11798 set sys/file.h val
11799 eval $inhdr
11800
11801 : do we need to include sys/file.h ?
11802 case "$val" in
11803 "$define")
11804         echo " "
11805         if $h_sysfile; then
11806                 val="$define"
11807                 echo "We'll be including <sys/file.h>." >&4
11808         else
11809                 val="$undef"
11810                 echo "We won't be including <sys/file.h>." >&4
11811         fi
11812         ;;
11813 *)
11814         h_sysfile=false
11815         ;;
11816 esac
11817 set i_sysfile
11818 eval $setvar
11819
11820 : see if fcntl.h is there
11821 val=''
11822 set fcntl.h val
11823 eval $inhdr
11824
11825 : see if we can include fcntl.h
11826 case "$val" in
11827 "$define")
11828         echo " "
11829         if $h_fcntl; then
11830                 val="$define"
11831                 echo "We'll be including <fcntl.h>." >&4
11832         else
11833                 val="$undef"
11834                 if $h_sysfile; then
11835         echo "We don't need to include <fcntl.h> if we include <sys/file.h>." >&4
11836                 else
11837                         echo "We won't be including <fcntl.h>." >&4
11838                 fi
11839         fi
11840         ;;
11841 *)
11842         h_fcntl=false
11843         val="$undef"
11844         ;;
11845 esac
11846 set i_fcntl
11847 eval $setvar
11848
11849 : see if locale.h is available
11850 set locale.h i_locale
11851 eval $inhdr
11852
11853 : see if mach cthreads are available
11854 if test "X$usethreads" = "X$define"; then
11855         set mach/cthreads.h i_machcthr
11856         eval $inhdr
11857 else
11858         i_machcthr="$undef"
11859 fi
11860
11861
11862
11863 : see if this is a math.h system
11864 set math.h i_math
11865 eval $inhdr
11866
11867 : see if this is a mntent.h system
11868 set mntent.h i_mntent
11869 eval $inhdr
11870
11871 : see if ndbm.h is available
11872 set ndbm.h t_ndbm
11873 eval $inhdr
11874 case "$t_ndbm" in
11875 $define)
11876         : see if dbm_open exists
11877         set dbm_open d_dbm_open
11878         eval $inlibc
11879         case "$d_dbm_open" in
11880         $undef)
11881                 t_ndbm="$undef"
11882                 echo "We won't be including <ndbm.h>"
11883                 ;;
11884         esac
11885         ;;
11886 esac
11887 val="$t_ndbm"
11888 set i_ndbm
11889 eval $setvar
11890
11891 : see if net/errno.h is available
11892 val=''
11893 set net/errno.h val
11894 eval $inhdr
11895
11896 : Unfortunately, it causes problems on some systems.  Arrgh.
11897 case "$val" in
11898 $define)
11899         cat > try.c <<'EOM'
11900 #include <stdio.h>
11901 #include <errno.h>
11902 #include <net/errno.h>
11903 int func()
11904 {
11905         return ENOTSOCK;
11906 }
11907 EOM
11908         if $cc $ccflags -c try.c >/dev/null 2>&1; then
11909                 echo "We'll be including <net/errno.h>." >&4
11910         else
11911                 echo "We won't be including <net/errno.h>." >&4
11912                 val="$undef"
11913         fi
11914         $rm -f try.* try
11915         ;;
11916 esac
11917 set i_neterrno
11918 eval $setvar
11919
11920 : see if this is a poll.h system
11921 set poll.h i_poll
11922 eval $inhdr
11923
11924 : get C preprocessor symbols handy
11925 echo " "
11926 $echo $n "Hmm... $c"
11927 echo $al | $tr ' ' $trnl >Cppsym.know
11928 $cat <<EOSS >Cppsym
11929 $startsh
11930 case "\$1" in
11931 -l) list=true
11932         shift
11933         ;;
11934 esac
11935 unknown=''
11936 case "\$list\$#" in
11937 1|2)
11938         for sym do
11939                 if $contains "^\$1$" Cppsym.true >/dev/null 2>&1; then
11940                         exit 0
11941                 elif $contains "^\$1$" Cppsym.know >/dev/null 2>&1; then
11942                         :
11943                 else
11944                         unknown="\$unknown \$sym"
11945                 fi
11946         done
11947         set X \$unknown
11948         shift
11949         ;;
11950 esac
11951 case \$# in
11952 0) exit 1;;
11953 esac
11954 echo \$* | $tr ' ' '$trnl' | $sed -e 's/\(.*\)/\\
11955 #ifdef \1\\
11956 exit 0; _ _ _ _\1\\      \1\\
11957 #endif\\
11958 /' >Cppsym\$\$
11959 echo "exit 1; _ _ _" >>Cppsym\$\$
11960 $cppstdin $cppminus <Cppsym\$\$ | $grep '^exit [01]; _ _'  >Cppsym2\$\$
11961 case "\$list" in
11962 true) $awk 'NF > 5 {print substr(\$6,2,100)}' <Cppsym2\$\$ ;;
11963 *)
11964         sh Cppsym2\$\$
11965         status=\$?
11966         ;;
11967 esac
11968 $rm -f Cppsym\$\$ Cppsym2\$\$
11969 exit \$status
11970 EOSS
11971 chmod +x Cppsym
11972 $eunicefix Cppsym
11973 ./Cppsym -l $al | $sort | $grep -v '^$' >Cppsym.true
11974
11975 : now check the C compiler for additional symbols
11976 postprocess_cc_v=''
11977 case "$osname" in
11978 aix) postprocess_cc_v="|$tr , ' '" ;;
11979 esac
11980 $cat >ccsym <<EOS
11981 $startsh
11982 $cat >tmp.c <<EOF
11983 extern int foo;
11984 EOF
11985 for i in \`$cc -v -c tmp.c 2>&1 $postprocess_cc_v\`
11986 do
11987         case "\$i" in
11988         -D*) echo "\$i" | $sed 's/^-D//';;
11989         -A*) $test "$gccversion" && echo "\$i" | $sed 's/^-A\(.*\)(\(.*\))/\1=\2/';;
11990         esac
11991 done
11992 $rm -f try.c
11993 EOS
11994 unset postprocess_cc_v
11995 chmod +x ccsym
11996 $eunicefix ccsym
11997 ./ccsym > ccsym1.raw
11998 if $test -s ccsym1.raw; then
11999        $sort ccsym1.raw | $uniq >ccsym.raw
12000 else
12001        mv ccsym1.raw ccsym.raw
12002 fi
12003
12004 $awk '/\=/ { print $0; next }
12005         { print $0"=1" }' ccsym.raw >ccsym.list
12006 $awk '{ print $0"=1" }' Cppsym.true >ccsym.true
12007 $comm -13 ccsym.true ccsym.list >ccsym.own
12008 $comm -12 ccsym.true ccsym.list >ccsym.com
12009 $comm -23 ccsym.true ccsym.list >ccsym.cpp
12010 also=''
12011 if $test -z ccsym.raw; then
12012         echo "Your C compiler doesn't seem to define any symbols!" >&4
12013         echo " "
12014         echo "However, your C preprocessor defines the following symbols:"
12015         $cat Cppsym.true
12016         ccsymbols=''
12017         cppsymbols=`$cat Cppsym.true`
12018         cppsymbols=`echo $cppsymbols`
12019         cppccsymbols="$cppsymbols"
12020 else
12021         if $test -s ccsym.com; then
12022                 echo "Your C compiler and pre-processor define these symbols:"
12023                 $sed -e 's/\(.*\)=.*/\1/' ccsym.com
12024                 also='also '
12025                 symbols='ones'
12026                 cppccsymbols=`$cat ccsym.com`
12027                 cppccsymbols=`echo $cppccsymbols`
12028                 $test "$silent" || sleep 1
12029         fi
12030         if $test -s ccsym.cpp; then
12031                 $test "$also" && echo " "
12032                 echo "Your C pre-processor ${also}defines the following symbols:"
12033                 $sed -e 's/\(.*\)=.*/\1/' ccsym.cpp
12034                 also='further '
12035                 cppsymbols=`$cat ccsym.cpp`
12036                 cppsymbols=`echo $cppsymbols`
12037                 $test "$silent" || sleep 1
12038         fi
12039         if $test -s ccsym.own; then
12040                 $test "$also" && echo " "
12041                 echo "Your C compiler ${also}defines the following cpp symbols:"
12042                 $sed -e 's/\(.*\)=1/\1/' ccsym.own
12043                 $sed -e 's/\(.*\)=.*/\1/' ccsym.own | $uniq >>Cppsym.true
12044                 ccsymbols=`$cat ccsym.own`
12045                 ccsymbols=`echo $ccsymbols`
12046                 $test "$silent" || sleep 1
12047         fi
12048 fi
12049 $rm -f ccsym*
12050
12051 : see if this is a termio system
12052 val="$undef"
12053 val2="$undef"
12054 val3="$undef"
12055 if $test `./findhdr termios.h`; then
12056         set tcsetattr i_termios
12057         eval $inlibc
12058         val3="$i_termios"
12059 fi
12060 echo " "
12061 case "$val3" in
12062 "$define") echo "You have POSIX termios.h... good!" >&4;;
12063 *) if ./Cppsym pyr; then
12064                 case "`/bin/universe`" in
12065                 ucb) if $test `./findhdr sgtty.h`; then
12066                                 val2="$define"
12067                                 echo "<sgtty.h> found." >&4
12068                         else
12069                                 echo "System is pyramid with BSD universe."
12070                                 echo "<sgtty.h> not found--you could have problems." >&4
12071                         fi;;
12072                 *) if $test `./findhdr termio.h`; then
12073                                 val="$define"
12074                                 echo "<termio.h> found." >&4
12075                         else
12076                                 echo "System is pyramid with USG universe."
12077                                 echo "<termio.h> not found--you could have problems." >&4
12078                         fi;;
12079                 esac
12080         elif ./usg; then
12081                 if $test `./findhdr termio.h`; then
12082                         echo "<termio.h> found." >&4
12083                         val="$define"
12084                 elif $test `./findhdr sgtty.h`; then
12085                         echo "<sgtty.h> found." >&4
12086                         val2="$define"
12087                 else
12088 echo "Neither <termio.h> nor <sgtty.h> found--you could have problems." >&4
12089                 fi
12090         else
12091                 if $test `./findhdr sgtty.h`; then
12092                         echo "<sgtty.h> found." >&4
12093                         val2="$define"
12094                 elif $test `./findhdr termio.h`; then
12095                         echo "<termio.h> found." >&4
12096                         val="$define"
12097                 else
12098 echo "Neither <sgtty.h> nor <termio.h> found--you could have problems." >&4
12099                 fi
12100         fi;;
12101 esac
12102 set i_termio; eval $setvar
12103 val=$val2; set i_sgtty; eval $setvar
12104 val=$val3; set i_termios; eval $setvar
12105
12106 : see if stdarg is available
12107 echo " "
12108 if $test `./findhdr stdarg.h`; then
12109         echo "<stdarg.h> found." >&4
12110         valstd="$define"
12111 else
12112         echo "<stdarg.h> NOT found." >&4
12113         valstd="$undef"
12114 fi
12115
12116 : see if varags is available
12117 echo " "
12118 if $test `./findhdr varargs.h`; then
12119         echo "<varargs.h> found." >&4
12120 else
12121         echo "<varargs.h> NOT found, but that's ok (I hope)." >&4
12122 fi
12123
12124 : set up the varargs testing programs
12125 $cat > varargs.c <<EOP
12126 #ifdef I_STDARG
12127 #include <stdarg.h>
12128 #endif
12129 #ifdef I_VARARGS
12130 #include <varargs.h>
12131 #endif
12132
12133 #ifdef I_STDARG
12134 int f(char *p, ...)
12135 #else
12136 int f(va_alist)
12137 va_dcl
12138 #endif
12139 {
12140         va_list ap;
12141 #ifndef I_STDARG
12142         char *p;
12143 #endif
12144 #ifdef I_STDARG
12145         va_start(ap,p);
12146 #else
12147         va_start(ap);
12148         p = va_arg(ap, char *);
12149 #endif
12150         va_end(ap);
12151 }
12152 EOP
12153 $cat > varargs <<EOP
12154 $startsh
12155 if $cc -c $ccflags -D\$1 varargs.c >/dev/null 2>&1; then
12156         echo "true"
12157 else
12158         echo "false"
12159 fi
12160 $rm -f varargs$_o
12161 EOP
12162 chmod +x varargs
12163
12164 : now check which varargs header should be included
12165 echo " "
12166 i_varhdr=''
12167 case "$valstd" in
12168 "$define")
12169         if `./varargs I_STDARG`; then
12170                 val='stdarg.h'
12171         elif `./varargs I_VARARGS`; then
12172                 val='varargs.h'
12173         fi
12174         ;;
12175 *)
12176         if `./varargs I_VARARGS`; then
12177                 val='varargs.h'
12178         fi
12179         ;;
12180 esac
12181 case "$val" in
12182 '')
12183 echo "I could not find the definition for va_dcl... You have problems..." >&4
12184         val="$undef"; set i_stdarg; eval $setvar
12185         val="$undef"; set i_varargs; eval $setvar
12186         ;;
12187 *) 
12188         set i_varhdr
12189         eval $setvar
12190         case "$i_varhdr" in
12191         stdarg.h)
12192                 val="$define"; set i_stdarg; eval $setvar
12193                 val="$undef"; set i_varargs; eval $setvar
12194                 ;;
12195         varargs.h)
12196                 val="$undef"; set i_stdarg; eval $setvar
12197                 val="$define"; set i_varargs; eval $setvar
12198                 ;;
12199         esac
12200         echo "We'll include <$i_varhdr> to get va_dcl definition." >&4;;
12201 esac
12202 $rm -f varargs*
12203
12204 : see if stddef is available
12205 set stddef.h i_stddef
12206 eval $inhdr
12207
12208 : see if sys/access.h is available
12209 set sys/access.h i_sysaccess
12210 eval $inhdr
12211
12212 : see if ioctl defs are in sgtty, termio, sys/filio or sys/ioctl
12213 set sys/filio.h i_sysfilio
12214 eval $inhdr
12215 echo " "
12216 if $test `./findhdr sys/ioctl.h`; then
12217         val="$define"
12218         echo '<sys/ioctl.h> found.' >&4
12219 else
12220         val="$undef"
12221         if $test $i_sysfilio = "$define"; then
12222             echo '<sys/ioctl.h> NOT found.' >&4
12223         else
12224                 $test $i_sgtty = "$define" && xxx="sgtty.h"
12225                 $test $i_termio = "$define" && xxx="termio.h"
12226                 $test $i_termios = "$define" && xxx="termios.h"
12227 echo "No <sys/ioctl.h> found, assuming ioctl args are defined in <$xxx>." >&4
12228         fi
12229 fi
12230 set i_sysioctl
12231 eval $setvar
12232
12233 : see if sys/resource.h has to be included
12234 set sys/resource.h i_sysresrc
12235 eval $inhdr
12236
12237 : see if sys/security.h is available
12238 set sys/security.h i_syssecrt
12239 eval $inhdr
12240
12241 : see if this is a sys/statvfs.h system
12242 set sys/statvfs.h i_sysstatvfs
12243 eval $inhdr
12244
12245 : see if this is a sys/un.h system
12246 set sys/un.h i_sysun
12247 eval $inhdr
12248
12249 : see if this is a syswait system
12250 set sys/wait.h i_syswait
12251 eval $inhdr
12252
12253 : see if this is an utime system
12254 set utime.h i_utime
12255 eval $inhdr
12256
12257 : see if this is a values.h system
12258 set values.h i_values
12259 eval $inhdr
12260
12261 : see if this is a vfork system
12262 case "$d_vfork" in
12263 "$define")
12264         set vfork.h i_vfork
12265         eval $inhdr
12266         ;;
12267 *)
12268         i_vfork="$undef"
12269         ;;
12270 esac
12271
12272 : see if gdbm.h is available
12273 set gdbm.h t_gdbm
12274 eval $inhdr
12275 case "$t_gdbm" in
12276 $define)
12277         : see if gdbm_open exists
12278         set gdbm_open d_gdbm_open
12279         eval $inlibc
12280         case "$d_gdbm_open" in
12281         $undef)
12282                 t_gdbm="$undef"
12283                 echo "We won't be including <gdbm.h>"
12284                 ;;
12285         esac
12286         ;;
12287 esac
12288 val="$t_gdbm"
12289 set i_gdbm
12290 eval $setvar
12291
12292 echo " "
12293 echo "Looking for extensions..." >&4
12294 tdir=`pwd`
12295 cd $rsrc/ext
12296 : If we are using the old config.sh, known_extensions may contain
12297 : old or inaccurate or duplicate values.
12298 known_extensions=''
12299 nonxs_extensions=''
12300 : We do not use find because it might not be available.
12301 : We do not just use MANIFEST because the user may have dropped
12302 : some additional extensions into the source tree and expect them
12303 : to be built.
12304 for xxx in * ; do
12305         case "$xxx" in
12306         DynaLoader|dynaload) ;;
12307         *)      if $test -f $xxx/$xxx.xs; then
12308                         known_extensions="$known_extensions $xxx"
12309                 elif $test -f $xxx/Makefile.PL; then
12310                         nonxs_extensions="$nonxs_extensions $xxx"
12311                 else
12312                         if $test -d $xxx; then
12313                                 # Look for nested extensions, eg. Devel/Dprof.
12314                                 cd $xxx
12315                                 for yyy in * ; do
12316                                 if $test -f $yyy/$yyy.xs; then
12317                                         known_extensions="$known_extensions $xxx/$yyy"
12318                                 elif $test -f $yyy/Makefile.PL; then
12319                                         nonxs_extensions="$nonxs_extensions $xxx/$yyy"
12320                                 fi
12321                                 done
12322                                 cd ..
12323                         fi
12324                 fi 
12325                 ;;
12326         esac
12327 done
12328 set X $nonxs_extensions
12329 shift
12330 nonxs_extensions="$*"
12331 set X $known_extensions
12332 shift
12333 known_extensions="$*"
12334 cd $tdir
12335
12336 : Now see which are supported on this system.
12337 avail_ext=''
12338 for xxx in $known_extensions ; do
12339         case "$xxx" in
12340         DB_File|db_file)
12341                 case "$i_db" in
12342                 $define) avail_ext="$avail_ext $xxx" ;;
12343                 esac
12344                 ;;
12345         GDBM_File|gdbm_fil)
12346                 case "$i_gdbm" in 
12347                 $define) avail_ext="$avail_ext $xxx" ;;
12348                 esac
12349                 ;;
12350         NDBM_File|ndbm_fil)
12351                 case "$i_ndbm" in
12352                 $define) avail_ext="$avail_ext $xxx" ;;
12353                 esac
12354                 ;;
12355         ODBM_File|odbm_fil) 
12356                 case "${i_dbm}${i_rpcsvcdbm}" in
12357                 *"${define}"*) avail_ext="$avail_ext $xxx" ;;
12358                 esac
12359                 ;;
12360         POSIX|posix)
12361                 case "$useposix" in
12362                 true|define|y) avail_ext="$avail_ext $xxx" ;;
12363                 esac
12364                 ;;
12365         Opcode|opcode)
12366                 case "$useopcode" in
12367                 true|define|y) avail_ext="$avail_ext $xxx" ;;
12368                 esac
12369                 ;;
12370         Socket|socket)
12371                 case "$d_socket" in 
12372                 true|$define|y) avail_ext="$avail_ext $xxx" ;;
12373                 esac
12374                 ;;
12375         Thread|thread)
12376                 case "$usethreads" in 
12377                 true|$define|y) avail_ext="$avail_ext $xxx" ;;
12378                 esac
12379                 ;;
12380         IPC/SysV|ipc/sysv)
12381                 : XXX Do we need a useipcsysv variable here
12382                 case "${d_msg}${d_sem}${d_shm}" in 
12383                 *"${define}"*) avail_ext="$avail_ext $xxx" ;;
12384                 esac
12385                 ;;
12386         *)      avail_ext="$avail_ext $xxx"
12387                 ;;
12388         esac
12389 done
12390
12391 set X $avail_ext
12392 shift
12393 avail_ext="$*"
12394
12395 : Now see which nonxs extensions are supported on this system.
12396 : For now assume all are.
12397 nonxs_ext=''
12398 for xxx in $nonxs_extensions ; do
12399         case "$xxx" in
12400         *)      nonxs_ext="$nonxs_ext $xxx"
12401                 ;;
12402         esac
12403 done
12404
12405 set X $nonxs_ext
12406 shift
12407 nonxs_ext="$*"
12408
12409 case $usedl in
12410 $define)
12411         $cat <<EOM
12412 A number of extensions are supplied with $package.  You may choose to
12413 compile these extensions for dynamic loading (the default), compile
12414 them into the $package executable (static loading), or not include
12415 them at all.  Answer "none" to include no extensions.
12416 Note that DynaLoader is always built and need not be mentioned here.
12417
12418 EOM
12419         case "$dynamic_ext" in
12420         '') dflt="$avail_ext" ;;
12421         *)      dflt="$dynamic_ext"
12422                 # Perhaps we are reusing an old out-of-date config.sh.
12423                 case "$hint" in
12424                 previous)
12425                         if test X"$dynamic_ext" != X"$avail_ext"; then
12426                                 $cat <<EOM
12427 NOTICE:  Your previous config.sh list may be incorrect. 
12428 The extensions now available to you are 
12429         ${avail_ext}
12430 but the default list from your previous config.sh is
12431         ${dynamic_ext} 
12432
12433 EOM
12434                         fi
12435                         ;;
12436                 esac
12437                 ;;
12438         esac
12439         case "$dflt" in
12440         '')     dflt=none;;
12441         esac
12442         rp="What extensions do you wish to load dynamically?"
12443         . ./myread
12444         case "$ans" in
12445         none) dynamic_ext=' ' ;;
12446         *) dynamic_ext="$ans" ;;
12447         esac
12448
12449         case "$static_ext" in
12450         '')
12451                 : Exclude those already listed in dynamic linking
12452                 dflt=''
12453                 for xxx in $avail_ext; do
12454                         case " $dynamic_ext " in
12455                         *" $xxx "*) ;;
12456                         *) dflt="$dflt $xxx" ;;
12457                         esac
12458                 done
12459                 set X $dflt
12460                 shift
12461                 dflt="$*"
12462                 ;;
12463         *)  dflt="$static_ext" 
12464                 ;;
12465         esac
12466
12467         case "$dflt" in
12468         '')     dflt=none;;
12469         esac
12470         rp="What extensions do you wish to load statically?"
12471         . ./myread
12472         case "$ans" in
12473         none) static_ext=' ' ;;
12474         *) static_ext="$ans" ;;
12475         esac
12476         ;;
12477 *)
12478         $cat <<EOM
12479 A number of extensions are supplied with $package.  Answer "none" 
12480 to include no extensions. 
12481 Note that DynaLoader is always built and need not be mentioned here.
12482
12483 EOM
12484         case "$static_ext" in
12485         '') dflt="$avail_ext" ;;
12486         *)      dflt="$static_ext"
12487                 # Perhaps we are reusing an old out-of-date config.sh.
12488                 case "$hint" in
12489                 previous)
12490                         if test X"$static_ext" != X"$avail_ext"; then
12491                                 $cat <<EOM
12492 NOTICE:  Your previous config.sh list may be incorrect. 
12493 The extensions now available to you are 
12494         ${avail_ext}
12495 but the default list from your previous config.sh is
12496         ${static_ext} 
12497
12498 EOM
12499                         fi
12500                         ;;
12501                 esac
12502                 ;;
12503         esac
12504         : Exclude those that are not xs extensions
12505         case "$dflt" in
12506         '')     dflt=none;;
12507         esac
12508         rp="What extensions do you wish to include?"
12509         . ./myread
12510         case "$ans" in
12511         none) static_ext=' ' ;;
12512         *) static_ext="$ans" ;;
12513         esac
12514         ;;
12515 esac
12516
12517 set X $dynamic_ext $static_ext $nonxs_ext
12518 shift
12519 extensions="$*"
12520
12521 : Remove build directory name from cppstdin so it can be used from
12522 : either the present location or the final installed location.
12523 echo " "
12524 : Get out of the UU directory to get correct path name.
12525 cd ..
12526 case "$cppstdin" in
12527 `pwd`/cppstdin)
12528         echo "Stripping down cppstdin path name"
12529         cppstdin=cppstdin
12530         ;;
12531 esac
12532 cd UU
12533
12534 : end of configuration questions
12535 echo " "
12536 echo "End of configuration questions."
12537 echo " "
12538
12539 : back to where it started
12540 if test -d ../UU; then
12541         cd ..
12542 fi
12543
12544 : configuration may be patched via a 'config.over' file
12545 if $test -f config.over; then
12546         echo " "
12547         dflt=y
12548         rp='I see a config.over file.  Do you wish to load it?'
12549         . UU/myread
12550         case "$ans" in
12551         n*) echo "OK, I'll ignore it.";;
12552         *)      . ./config.over
12553                 echo "Configuration override changes have been loaded."
12554                 ;;
12555         esac
12556 fi
12557
12558 : in case they want portability, strip down executable paths
12559 case "$d_portable" in
12560 "$define")
12561         echo " "
12562         echo "Stripping down executable paths..." >&4
12563         for file in $loclist $trylist; do
12564                 if test X$file != Xln -a X$file != Xar -o X$osname != Xos2; then
12565                         eval $file="\$file"
12566                 fi
12567         done
12568         ;;
12569 esac
12570
12571 : create config.sh file
12572 echo " "
12573 echo "Creating config.sh..." >&4
12574 $spitshell <<EOT >config.sh
12575 $startsh
12576 #
12577 # This file was produced by running the Configure script. It holds all the
12578 # definitions figured out by Configure. Should you modify one of these values,
12579 # do not forget to propagate your changes by running "Configure -der". You may
12580 # instead choose to run each of the .SH files by yourself, or "Configure -S".
12581 #
12582
12583 # Package name      : $package
12584 # Source directory  : $src
12585 # Configuration time: $cf_time
12586 # Configured by     : $cf_by
12587 # Target system     : $myuname
12588
12589 Author='$Author'
12590 Date='$Date'
12591 Header='$Header'
12592 Id='$Id'
12593 Locker='$Locker'
12594 Log='$Log'
12595 Mcc='$Mcc'
12596 RCSfile='$RCSfile'
12597 Revision='$Revision'
12598 Source='$Source'
12599 State='$State'
12600 _a='$_a'
12601 _exe='$_exe'
12602 _o='$_o'
12603 afs='$afs'
12604 alignbytes='$alignbytes'
12605 ansi2knr='$ansi2knr'
12606 aphostname='$aphostname'
12607 apiversion='$apiversion'
12608 ar='$ar'
12609 archlib='$archlib'
12610 archlibexp='$archlibexp'
12611 archname64='$archname64'
12612 archname='$archname'
12613 archobjs='$archobjs'
12614 awk='$awk'
12615 baserev='$baserev'
12616 bash='$bash'
12617 bin='$bin'
12618 binexp='$binexp'
12619 bison='$bison'
12620 byacc='$byacc'
12621 byteorder='$byteorder'
12622 c='$c'
12623 castflags='$castflags'
12624 cat='$cat'
12625 cc='$cc'
12626 cccdlflags='$cccdlflags'
12627 ccdlflags='$ccdlflags'
12628 ccflags='$ccflags'
12629 ccsymbols='$ccsymbols'
12630 cf_by='$cf_by'
12631 cf_email='$cf_email'
12632 cf_time='$cf_time'
12633 chgrp='$chgrp'
12634 chmod='$chmod'
12635 chown='$chown'
12636 clocktype='$clocktype'
12637 comm='$comm'
12638 compress='$compress'
12639 contains='$contains'
12640 cp='$cp'
12641 cpio='$cpio'
12642 cpp='$cpp'
12643 cpp_stuff='$cpp_stuff'
12644 cppccsymbols='$cppccsymbols'
12645 cppflags='$cppflags'
12646 cpplast='$cpplast'
12647 cppminus='$cppminus'
12648 cpprun='$cpprun'
12649 cppstdin='$cppstdin'
12650 cppsymbols='$cppsymbols'
12651 crosscompile='$crosscompile'
12652 cryptlib='$cryptlib'
12653 csh='$csh'
12654 d_Gconvert='$d_Gconvert'
12655 d_access='$d_access'
12656 d_accessx='$d_accessx'
12657 d_alarm='$d_alarm'
12658 d_archlib='$d_archlib'
12659 d_attribut='$d_attribut'
12660 d_bcmp='$d_bcmp'
12661 d_bcopy='$d_bcopy'
12662 d_bsd='$d_bsd'
12663 d_bsdgetpgrp='$d_bsdgetpgrp'
12664 d_bsdsetpgrp='$d_bsdsetpgrp'
12665 d_bzero='$d_bzero'
12666 d_casti32='$d_casti32'
12667 d_castneg='$d_castneg'
12668 d_charvspr='$d_charvspr'
12669 d_chown='$d_chown'
12670 d_chroot='$d_chroot'
12671 d_chsize='$d_chsize'
12672 d_closedir='$d_closedir'
12673 d_cmsghdr_s='$d_cmsghdr_s'
12674 d_const='$d_const'
12675 d_crypt='$d_crypt'
12676 d_csh='$d_csh'
12677 d_cuserid='$d_cuserid'
12678 d_dbl_dig='$d_dbl_dig'
12679 d_dbmclose64='$d_dbmclose64'
12680 d_dbminit64='$d_dbminit64'
12681 d_delete64='$d_delete64'
12682 d_difftime='$d_difftime'
12683 d_dirent64_s='$d_dirent64_s'
12684 d_dirnamlen='$d_dirnamlen'
12685 d_dlerror='$d_dlerror'
12686 d_dlopen='$d_dlopen'
12687 d_dlsymun='$d_dlsymun'
12688 d_dosuid='$d_dosuid'
12689 d_drand48proto='$d_drand48proto'
12690 d_dup2='$d_dup2'
12691 d_eaccess='$d_eaccess'
12692 d_endgrent='$d_endgrent'
12693 d_endhent='$d_endhent'
12694 d_endnent='$d_endnent'
12695 d_endpent='$d_endpent'
12696 d_endpwent='$d_endpwent'
12697 d_endsent='$d_endsent'
12698 d_eofnblk='$d_eofnblk'
12699 d_eunice='$d_eunice'
12700 d_fchmod='$d_fchmod'
12701 d_fchown='$d_fchown'
12702 d_fcntl='$d_fcntl'
12703 d_fd_macros='$d_fd_macros'
12704 d_fd_set='$d_fd_set'
12705 d_fds_bits='$d_fds_bits'
12706 d_fetch64='$d_fetch64'
12707 d_fgetpos64='$d_fgetpos64'
12708 d_fgetpos='$d_fgetpos'
12709 d_firstkey64='$d_firstkey64'
12710 d_flexfnam='$d_flexfnam'
12711 d_flock64_s='$d_flock64_s'
12712 d_flock='$d_flock'
12713 d_fopen64='$d_fopen64'
12714 d_fork='$d_fork'
12715 d_fpathconf='$d_fpathconf'
12716 d_freopen64='$d_freopen64'
12717 d_fseek64='$d_fseek64'
12718 d_fseeko64='$d_fseeko64'
12719 d_fseeko='$d_fseeko'
12720 d_fsetpos64='$d_fsetpos64'
12721 d_fsetpos='$d_fsetpos'
12722 d_fstat64='$d_fstat64'
12723 d_fstatfs='$d_fstatfs'
12724 d_fstatvfs='$d_fstatvfs'
12725 d_ftell64='$d_ftell64'
12726 d_ftello64='$d_ftello64'
12727 d_ftello='$d_ftello'
12728 d_ftime='$d_ftime'
12729 d_ftruncate64='$d_ftruncate64'
12730 d_getgrent='$d_getgrent'
12731 d_getgrps='$d_getgrps'
12732 d_gethbyaddr='$d_gethbyaddr'
12733 d_gethbyname='$d_gethbyname'
12734 d_gethent='$d_gethent'
12735 d_gethname='$d_gethname'
12736 d_gethostprotos='$d_gethostprotos'
12737 d_getlogin='$d_getlogin'
12738 d_getmntent='$d_getmntent'
12739 d_getnbyaddr='$d_getnbyaddr'
12740 d_getnbyname='$d_getnbyname'
12741 d_getnent='$d_getnent'
12742 d_getnetprotos='$d_getnetprotos'
12743 d_getpbyname='$d_getpbyname'
12744 d_getpbynumber='$d_getpbynumber'
12745 d_getpent='$d_getpent'
12746 d_getpgid='$d_getpgid'
12747 d_getpgrp2='$d_getpgrp2'
12748 d_getpgrp='$d_getpgrp'
12749 d_getppid='$d_getppid'
12750 d_getprior='$d_getprior'
12751 d_getprotoprotos='$d_getprotoprotos'
12752 d_getpwent='$d_getpwent'
12753 d_getsbyname='$d_getsbyname'
12754 d_getsbyport='$d_getsbyport'
12755 d_getsent='$d_getsent'
12756 d_getservprotos='$d_getservprotos'
12757 d_gettimeod='$d_gettimeod'
12758 d_gnulibc='$d_gnulibc'
12759 d_grpasswd='$d_grpasswd'
12760 d_hasmntopt='$d_hasmntopt'
12761 d_htonl='$d_htonl'
12762 d_index='$d_index'
12763 d_inetaton='$d_inetaton'
12764 d_ino64t='$d_ino64t'
12765 d_int64t='$d_int64t'
12766 d_iovec_s='$d_iovec_s'
12767 d_isascii='$d_isascii'
12768 d_killpg='$d_killpg'
12769 d_lchown='$d_lchown'
12770 d_link='$d_link'
12771 d_locconv='$d_locconv'
12772 d_lockf64='$d_lockf64'
12773 d_lockf='$d_lockf'
12774 d_longdbl='$d_longdbl'
12775 d_longlong='$d_longlong'
12776 d_lseek64='$d_lseek64'
12777 d_lstat64='$d_lstat64'
12778 d_lstat='$d_lstat'
12779 d_madvise='$d_madvise'
12780 d_mblen='$d_mblen'
12781 d_mbstowcs='$d_mbstowcs'
12782 d_mbtowc='$d_mbtowc'
12783 d_memcmp='$d_memcmp'
12784 d_memcpy='$d_memcpy'
12785 d_memmove='$d_memmove'
12786 d_memset='$d_memset'
12787 d_mkdir='$d_mkdir'
12788 d_mkfifo='$d_mkfifo'
12789 d_mktime='$d_mktime'
12790 d_mmap='$d_mmap'
12791 d_mprotect='$d_mprotect'
12792 d_msg='$d_msg'
12793 d_msg_ctrunc='$d_msg_ctrunc'
12794 d_msg_dontroute='$d_msg_dontroute'
12795 d_msg_oob='$d_msg_oob'
12796 d_msg_peek='$d_msg_peek'
12797 d_msg_proxy='$d_msg_proxy'
12798 d_msgctl='$d_msgctl'
12799 d_msgget='$d_msgget'
12800 d_msghdr_s='$d_msghdr_s'
12801 d_msgrcv='$d_msgrcv'
12802 d_msgsnd='$d_msgsnd'
12803 d_msync='$d_msync'
12804 d_munmap='$d_munmap'
12805 d_mymalloc='$d_mymalloc'
12806 d_nextkey64='$d_nextkey64'
12807 d_nice='$d_nice'
12808 d_off64t='$d_off64t'
12809 d_old_pthread_create_joinable='$d_old_pthread_create_joinable'
12810 d_oldpthreads='$d_oldpthreads'
12811 d_oldsock='$d_oldsock'
12812 d_open3='$d_open3'
12813 d_open64='$d_open64'
12814 d_opendir64='$d_opendir64'
12815 d_pathconf='$d_pathconf'
12816 d_pause='$d_pause'
12817 d_phostname='$d_phostname'
12818 d_pipe='$d_pipe'
12819 d_poll='$d_poll'
12820 d_portable='$d_portable'
12821 d_pthread_yield='$d_pthread_yield'
12822 d_pwage='$d_pwage'
12823 d_pwchange='$d_pwchange'
12824 d_pwclass='$d_pwclass'
12825 d_pwcomment='$d_pwcomment'
12826 d_pwexpire='$d_pwexpire'
12827 d_pwgecos='$d_pwgecos'
12828 d_pwpasswd='$d_pwpasswd'
12829 d_pwquota='$d_pwquota'
12830 d_readdir64='$d_readdir64'
12831 d_readdir='$d_readdir'
12832 d_readlink='$d_readlink'
12833 d_readv='$d_readv'
12834 d_recvmsg='$d_recvmsg'
12835 d_rename='$d_rename'
12836 d_rewinddir='$d_rewinddir'
12837 d_rmdir='$d_rmdir'
12838 d_safebcpy='$d_safebcpy'
12839 d_safemcpy='$d_safemcpy'
12840 d_sanemcmp='$d_sanemcmp'
12841 d_sched_yield='$d_sched_yield'
12842 d_scm_rights='$d_scm_rights'
12843 d_seekdir64='$d_seekdir64'
12844 d_seekdir='$d_seekdir'
12845 d_select='$d_select'
12846 d_sem='$d_sem'
12847 d_semctl='$d_semctl'
12848 d_semctl_semid_ds='$d_semctl_semid_ds'
12849 d_semctl_semun='$d_semctl_semun'
12850 d_semget='$d_semget'
12851 d_semop='$d_semop'
12852 d_sendmsg='$d_sendmsg'
12853 d_setegid='$d_setegid'
12854 d_seteuid='$d_seteuid'
12855 d_setgrent='$d_setgrent'
12856 d_setgrps='$d_setgrps'
12857 d_sethent='$d_sethent'
12858 d_setlinebuf='$d_setlinebuf'
12859 d_setlocale='$d_setlocale'
12860 d_setnent='$d_setnent'
12861 d_setpent='$d_setpent'
12862 d_setpgid='$d_setpgid'
12863 d_setpgrp2='$d_setpgrp2'
12864 d_setpgrp='$d_setpgrp'
12865 d_setprior='$d_setprior'
12866 d_setpwent='$d_setpwent'
12867 d_setregid='$d_setregid'
12868 d_setresgid='$d_setresgid'
12869 d_setresuid='$d_setresuid'
12870 d_setreuid='$d_setreuid'
12871 d_setrgid='$d_setrgid'
12872 d_setruid='$d_setruid'
12873 d_setsent='$d_setsent'
12874 d_setsid='$d_setsid'
12875 d_setvbuf='$d_setvbuf'
12876 d_sfio='$d_sfio'
12877 d_shm='$d_shm'
12878 d_shmat='$d_shmat'
12879 d_shmatprototype='$d_shmatprototype'
12880 d_shmctl='$d_shmctl'
12881 d_shmdt='$d_shmdt'
12882 d_shmget='$d_shmget'
12883 d_sigaction='$d_sigaction'
12884 d_sigsetjmp='$d_sigsetjmp'
12885 d_socket='$d_socket'
12886 d_sockpair='$d_sockpair'
12887 d_stat64='$d_stat64'
12888 d_statblks='$d_statblks'
12889 d_statfs='$d_statfs'
12890 d_statfsflags='$d_statfsflags'
12891 d_statvfs='$d_statvfs'
12892 d_stdio_cnt_lval='$d_stdio_cnt_lval'
12893 d_stdio_ptr_lval='$d_stdio_ptr_lval'
12894 d_stdiobase='$d_stdiobase'
12895 d_stdstdio='$d_stdstdio'
12896 d_store64='$d_store64'
12897 d_strchr='$d_strchr'
12898 d_strcoll='$d_strcoll'
12899 d_strctcpy='$d_strctcpy'
12900 d_strerrm='$d_strerrm'
12901 d_strerror='$d_strerror'
12902 d_strtod='$d_strtod'
12903 d_strtol='$d_strtol'
12904 d_strtoul='$d_strtoul'
12905 d_strxfrm='$d_strxfrm'
12906 d_suidsafe='$d_suidsafe'
12907 d_symlink='$d_symlink'
12908 d_syscall='$d_syscall'
12909 d_sysconf='$d_sysconf'
12910 d_sysernlst='$d_sysernlst'
12911 d_syserrlst='$d_syserrlst'
12912 d_system='$d_system'
12913 d_tcgetpgrp='$d_tcgetpgrp'
12914 d_tcsetpgrp='$d_tcsetpgrp'
12915 d_telldir64='$d_telldir64'
12916 d_telldir='$d_telldir'
12917 d_telldirproto='$d_telldirproto'
12918 d_time='$d_time'
12919 d_times='$d_times'
12920 d_tmpfile64='$d_tmpfile64'
12921 d_truncate64='$d_truncate64'
12922 d_truncate='$d_truncate'
12923 d_tzname='$d_tzname'
12924 d_umask='$d_umask'
12925 d_uname='$d_uname'
12926 d_union_semun='$d_union_semun'
12927 d_vfork='$d_vfork'
12928 d_void_closedir='$d_void_closedir'
12929 d_voidsig='$d_voidsig'
12930 d_voidtty='$d_voidtty'
12931 d_volatile='$d_volatile'
12932 d_vprintf='$d_vprintf'
12933 d_wait4='$d_wait4'
12934 d_waitpid='$d_waitpid'
12935 d_wcstombs='$d_wcstombs'
12936 d_wctomb='$d_wctomb'
12937 d_writev='$d_writev'
12938 d_xenix='$d_xenix'
12939 date='$date'
12940 db_hashtype='$db_hashtype'
12941 db_prefixtype='$db_prefixtype'
12942 defvoidused='$defvoidused'
12943 direntrytype='$direntrytype'
12944 dlext='$dlext'
12945 dlsrc='$dlsrc'
12946 doublesize='$doublesize'
12947 drand01='$drand01'
12948 dynamic_ext='$dynamic_ext'
12949 eagain='$eagain'
12950 ebcdic='$ebcdic'
12951 echo='$echo'
12952 egrep='$egrep'
12953 emacs='$emacs'
12954 eunicefix='$eunicefix'
12955 exe_ext='$exe_ext'
12956 expr='$expr'
12957 extensions='$extensions'
12958 find='$find'
12959 firstmakefile='$firstmakefile'
12960 flex='$flex'
12961 fpostype='$fpostype'
12962 freetype='$freetype'
12963 full_ar='$full_ar'
12964 full_csh='$full_csh'
12965 full_sed='$full_sed'
12966 gccversion='$gccversion'
12967 gidtype='$gidtype'
12968 glibpth='$glibpth'
12969 grep='$grep'
12970 groupcat='$groupcat'
12971 groupstype='$groupstype'
12972 gzip='$gzip'
12973 h_fcntl='$h_fcntl'
12974 h_sysfile='$h_sysfile'
12975 hint='$hint'
12976 hostcat='$hostcat'
12977 huge='$huge'
12978 i_arpainet='$i_arpainet'
12979 i_bsdioctl='$i_bsdioctl'
12980 i_db='$i_db'
12981 i_dbm='$i_dbm'
12982 i_dirent='$i_dirent'
12983 i_dld='$i_dld'
12984 i_dlfcn='$i_dlfcn'
12985 i_fcntl='$i_fcntl'
12986 i_float='$i_float'
12987 i_gdbm='$i_gdbm'
12988 i_grp='$i_grp'
12989 i_inttypes='$i_inttypes'
12990 i_limits='$i_limits'
12991 i_locale='$i_locale'
12992 i_machcthr='$i_machcthr'
12993 i_malloc='$i_malloc'
12994 i_math='$i_math'
12995 i_memory='$i_memory'
12996 i_mntent='$i_mntent'
12997 i_ndbm='$i_ndbm'
12998 i_netdb='$i_netdb'
12999 i_neterrno='$i_neterrno'
13000 i_niin='$i_niin'
13001 i_poll='$i_poll'
13002 i_pthread='$i_pthread'
13003 i_pwd='$i_pwd'
13004 i_rpcsvcdbm='$i_rpcsvcdbm'
13005 i_sfio='$i_sfio'
13006 i_sgtty='$i_sgtty'
13007 i_stdarg='$i_stdarg'
13008 i_stddef='$i_stddef'
13009 i_stdlib='$i_stdlib'
13010 i_string='$i_string'
13011 i_sysaccess='$i_sysaccess'
13012 i_sysdir='$i_sysdir'
13013 i_sysfile='$i_sysfile'
13014 i_sysfilio='$i_sysfilio'
13015 i_sysin='$i_sysin'
13016 i_sysioctl='$i_sysioctl'
13017 i_sysmman='$i_sysmman'
13018 i_sysmount='$i_sysmount'
13019 i_sysndir='$i_sysndir'
13020 i_sysparam='$i_sysparam'
13021 i_sysresrc='$i_sysresrc'
13022 i_syssecrt='$i_syssecrt'
13023 i_sysselct='$i_sysselct'
13024 i_syssockio='$i_syssockio'
13025 i_sysstat='$i_sysstat'
13026 i_sysstatvfs='$i_sysstatvfs'
13027 i_systime='$i_systime'
13028 i_systimek='$i_systimek'
13029 i_systimes='$i_systimes'
13030 i_systypes='$i_systypes'
13031 i_sysuio='$i_sysuio'
13032 i_sysun='$i_sysun'
13033 i_syswait='$i_syswait'
13034 i_termio='$i_termio'
13035 i_termios='$i_termios'
13036 i_time='$i_time'
13037 i_unistd='$i_unistd'
13038 i_utime='$i_utime'
13039 i_values='$i_values'
13040 i_varargs='$i_varargs'
13041 i_varhdr='$i_varhdr'
13042 i_vfork='$i_vfork'
13043 ignore_versioned_solibs='$ignore_versioned_solibs'
13044 incpath='$incpath'
13045 inews='$inews'
13046 installarchlib='$installarchlib'
13047 installbin='$installbin'
13048 installman1dir='$installman1dir'
13049 installman3dir='$installman3dir'
13050 installprivlib='$installprivlib'
13051 installscript='$installscript'
13052 installsitearch='$installsitearch'
13053 installsitelib='$installsitelib'
13054 installusrbinperl='$installusrbinperl'
13055 intsize='$intsize'
13056 known_extensions='$known_extensions'
13057 ksh='$ksh'
13058 large='$large'
13059 ld='$ld'
13060 lddlflags='$lddlflags'
13061 ldflags='$ldflags'
13062 less='$less'
13063 lib_ext='$lib_ext'
13064 libc='$libc'
13065 libperl='$libperl'
13066 libpth='$libpth'
13067 libs='$libs'
13068 libswanted='$libswanted'
13069 line='$line'
13070 lint='$lint'
13071 lkflags='$lkflags'
13072 ln='$ln'
13073 lns='$lns'
13074 locincpth='$locincpth'
13075 loclibpth='$loclibpth'
13076 longdblsize='$longdblsize'
13077 longlongsize='$longlongsize'
13078 longsize='$longsize'
13079 lp='$lp'
13080 lpr='$lpr'
13081 ls='$ls'
13082 lseeksize='$lseeksize'
13083 lseektype='$lseektype'
13084 mail='$mail'
13085 mailx='$mailx'
13086 make='$make'
13087 make_set_make='$make_set_make'
13088 mallocobj='$mallocobj'
13089 mallocsrc='$mallocsrc'
13090 malloctype='$malloctype'
13091 man1dir='$man1dir'
13092 man1direxp='$man1direxp'
13093 man1ext='$man1ext'
13094 man3dir='$man3dir'
13095 man3direxp='$man3direxp'
13096 man3ext='$man3ext'
13097 medium='$medium'
13098 mips='$mips'
13099 mips_type='$mips_type'
13100 mkdir='$mkdir'
13101 mmaptype='$mmaptype'
13102 models='$models'
13103 modetype='$modetype'
13104 more='$more'
13105 multiarch='$multiarch'
13106 mv='$mv'
13107 myarchname='$myarchname'
13108 mydomain='$mydomain'
13109 myhostname='$myhostname'
13110 myuname='$myuname'
13111 n='$n'
13112 netdb_hlen_type='$netdb_hlen_type'
13113 netdb_host_type='$netdb_host_type'
13114 netdb_name_type='$netdb_name_type'
13115 netdb_net_type='$netdb_net_type'
13116 nm='$nm'
13117 nm_opt='$nm_opt'
13118 nm_so_opt='$nm_so_opt'
13119 nonxs_ext='$nonxs_ext'
13120 nroff='$nroff'
13121 o_nonblock='$o_nonblock'
13122 obj_ext='$obj_ext'
13123 old_pthread_create_joinable='$old_pthread_create_joinable'
13124 optimize='$optimize'
13125 orderlib='$orderlib'
13126 osname='$osname'
13127 osvers='$osvers'
13128 package='$package'
13129 pager='$pager'
13130 passcat='$passcat'
13131 patchlevel='$patchlevel'
13132 path_sep='$path_sep'
13133 perl='$perl'
13134 perladmin='$perladmin'
13135 perlpath='$perlpath'
13136 pg='$pg'
13137 phostname='$phostname'
13138 pidtype='$pidtype'
13139 plibpth='$plibpth'
13140 pmake='$pmake'
13141 pr='$pr'
13142 prefix='$prefix'
13143 prefixexp='$prefixexp'
13144 privlib='$privlib'
13145 privlibexp='$privlibexp'
13146 prototype='$prototype'
13147 ptrsize='$ptrsize'
13148 randbits='$randbits'
13149 randfunc='$randfunc'
13150 randseedtype='$randseedtype'
13151 ranlib='$ranlib'
13152 rd_nodata='$rd_nodata'
13153 rm='$rm'
13154 rmail='$rmail'
13155 runnm='$runnm'
13156 sched_yield='$sched_yield'
13157 scriptdir='$scriptdir'
13158 scriptdirexp='$scriptdirexp'
13159 sed='$sed'
13160 seedfunc='$seedfunc'
13161 selectminbits='$selectminbits'
13162 selecttype='$selecttype'
13163 sendmail='$sendmail'
13164 sh='$sh'
13165 shar='$shar'
13166 sharpbang='$sharpbang'
13167 shmattype='$shmattype'
13168 shortsize='$shortsize'
13169 shrpenv='$shrpenv'
13170 shsharp='$shsharp'
13171 sig_name='$sig_name'
13172 sig_name_init='$sig_name_init'
13173 sig_num='$sig_num'
13174 sig_num_init='$sig_num_init'
13175 signal_t='$signal_t'
13176 sitearch='$sitearch'
13177 sitearchexp='$sitearchexp'
13178 sitelib='$sitelib'
13179 sitelibexp='$sitelibexp'
13180 sizetype='$sizetype'
13181 sleep='$sleep'
13182 smail='$smail'
13183 small='$small'
13184 so='$so'
13185 sockethdr='$sockethdr'
13186 socketlib='$socketlib'
13187 sort='$sort'
13188 spackage='$spackage'
13189 spitshell='$spitshell'
13190 split='$split'
13191 src='$src'
13192 ssizetype='$ssizetype'
13193 startperl='$startperl'
13194 startsh='$startsh'
13195 static_ext='$static_ext'
13196 stdchar='$stdchar'
13197 stdio_base='$stdio_base'
13198 stdio_bufsiz='$stdio_bufsiz'
13199 stdio_cnt='$stdio_cnt'
13200 stdio_filbuf='$stdio_filbuf'
13201 stdio_ptr='$stdio_ptr'
13202 strings='$strings'
13203 submit='$submit'
13204 subversion='$subversion'
13205 sysman='$sysman'
13206 tail='$tail'
13207 tar='$tar'
13208 tbl='$tbl'
13209 tee='$tee'
13210 test='$test'
13211 timeincl='$timeincl'
13212 timetype='$timetype'
13213 touch='$touch'
13214 tr='$tr'
13215 trnl='$trnl'
13216 troff='$troff'
13217 uidtype='$uidtype'
13218 uname='$uname'
13219 uniq='$uniq'
13220 use64bits='$use64bits'
13221 usedl='$usedl'
13222 usemultiplicity='$usemultiplicity'
13223 usemymalloc='$usemymalloc'
13224 usenm='$usenm'
13225 useopcode='$useopcode'
13226 useperlio='$useperlio'
13227 useposix='$useposix'
13228 usesfio='$usesfio'
13229 useshrplib='$useshrplib'
13230 usethreads='$usethreads'
13231 usevfork='$usevfork'
13232 usrinc='$usrinc'
13233 uuname='$uuname'
13234 version='$version'
13235 vi='$vi'
13236 voidflags='$voidflags'
13237 xlibpth='$xlibpth'
13238 zcat='$zcat'
13239 zip='$zip'
13240 EOT
13241
13242 : Add in command line options if available
13243 $test -f UU/cmdline.opt && $cat UU/cmdline.opt >> config.sh
13244
13245 : add special variables
13246 $test -f $src/patchlevel.h && \
13247 awk '/^#define[         ]+PERL_/ {printf "%s=%s\n",$2,$3}' $src/patchlevel.h >>config.sh
13248 echo "CONFIG=true" >>config.sh
13249
13250 : propagate old symbols
13251 if $test -f UU/config.sh; then
13252         <UU/config.sh sort | uniq >UU/oldconfig.sh
13253         sed -n 's/^\([a-zA-Z_0-9]*\)=.*/\1/p' config.sh config.sh UU/oldconfig.sh |\
13254         sort | uniq -u >UU/oldsyms
13255         set X `cat UU/oldsyms`
13256         shift
13257         case $# in
13258         0) ;;
13259         *)
13260                 cat <<EOM
13261 Hmm...You had some extra variables I don't know about...I'll try to keep 'em...
13262 EOM
13263                 echo "# Variables propagated from previous config.sh file." >>config.sh
13264                 for sym in `cat UU/oldsyms`; do
13265                         echo "    Propagating $hint variable "'$'"$sym..."
13266                         eval 'tmp="$'"${sym}"'"'
13267                         echo "$tmp" | \
13268                                 sed -e "s/'/'\"'\"'/g" -e "s/^/$sym='/" -e "s/$/'/" >>config.sh
13269                 done
13270                 ;;
13271         esac
13272 fi
13273
13274 : Finish up by extracting the .SH files
13275 case "$alldone" in
13276 exit)
13277         $rm -rf UU
13278         echo "Done."
13279         exit 0
13280         ;;
13281 cont)
13282         ;;
13283 '')
13284         dflt=''
13285         nostick=true
13286         $cat <<EOM
13287
13288 If you'd like to make any changes to the config.sh file before I begin
13289 to configure things, do it as a shell escape now (e.g. !vi config.sh).
13290
13291 EOM
13292         rp="Press return or use a shell escape to edit config.sh:"
13293         . UU/myread
13294         nostick=''
13295         case "$ans" in
13296         '') ;;
13297         *) : in case they cannot read
13298                 sh 1>&4 -c "$ans";;
13299         esac
13300         ;;
13301 esac
13302
13303 : if this fails, just run all the .SH files by hand
13304 . ./config.sh
13305
13306 echo " "
13307 exec 1>&4
13308 . ./UU/extract
13309
13310 if $contains '^depend:' [Mm]akefile >/dev/null 2>&1; then
13311         dflt=y
13312         case "$silent" in
13313         true) ;;
13314         *)
13315                 $cat <<EOM
13316
13317 Now you need to generate make dependencies by running "$make depend".
13318 You might prefer to run it in background: "$make depend > makedepend.out &"
13319 It can take a while, so you might not want to run it right now.
13320
13321 EOM
13322                 ;;
13323         esac
13324         rp="Run $make depend now?"
13325         . UU/myread
13326         case "$ans" in
13327         y*)
13328                 $make depend && echo "Now you must run a $make."
13329                 ;;
13330         *)
13331                 echo "You must run '$make depend' then '$make'."
13332                 ;;
13333         esac
13334 elif test -f [Mm]akefile; then
13335         echo " "
13336         echo "Now you must run a $make."
13337 else
13338         echo "Done."
13339 fi
13340
13341 if $test -f Policy.sh; then
13342     $cat <<EOM
13343
13344 If you compile $package on a different machine or from a different object
13345 directory, copy the Policy.sh file from this object directory to the
13346 new one before you run Configure -- this will help you with most of
13347 the policy defaults.
13348
13349 EOM
13350 fi
13351 if $test -f config.msg; then
13352     echo "Hmm.  I also noted the following information while running:"
13353     echo " "
13354     $cat config.msg >&4
13355     $rm -f config.msg
13356 fi
13357 $rm -f kit*isdone ark*isdone
13358 $rm -rf UU
13359
13360 : End of Configure
13361