Add HAS_MEMCHR and make memchr into a cpp macro if it already isn't.
[p5sagit/p5-mst-13.2.git] / Configure
1 #! /bin/sh
2 #
3 # If these # comments don't work, trim them. Don't worry about any other
4 # shell scripts, Configure will trim # comments from them for you.
5 #
6 # (If you are trying to port this package to a machine without sh,
7 # I would suggest you have a look at the prototypical config_h.SH file
8 # and edit it to reflect your system. Some packages may include samples
9 # of config.h for certain machines, so you might look for one of those.)
10 #
11 # Yes, you may rip this off to use in other distribution packages. This
12 # script belongs to the public domain and cannot be copyrighted.
13 #
14 # (Note: this Configure script was generated automatically. Rather than
15 # working with this copy of Configure, you may wish to get metaconfig.
16 # The dist-3.0 package (which contains metaconfig) was posted in
17 # comp.sources.misc and is available on CPAN under authors/id/RAM so
18 # you may fetch it yourself from your nearest archive site.)
19 #
20
21 # $Id: Head.U,v 3.0.1.9 1997/02/28 15:02:09 ram Exp $
22 #
23 # Generated on Thu May 13 16:42:40 EET DST 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 if test -f /osf_boot -a -f /usr/sbin/setld; then
112         if test X`/usr/bin/uname -s` = XOSF1; then
113                 avoidksh="to avoid Digital UNIX' ksh"
114                 newsh=/bin/sh
115                 unset BIN_SH # if this is 'xpg4' sh will start up ksh
116         fi
117 fi
118 case "$inksh/$needksh" in
119 /[a-z]*)
120                 ENV=''
121                 changesh=true
122                 reason="$needksh"
123         ;;
124 esac
125 case "$inksh/$avoidksh" in
126 true/[a-z]*)
127         changesh=true
128         reason="$avoidksh"
129         ;;
130 esac
131 case "$inksh/$needksh-$avoidksh-" in
132 true/--)
133                 cat <<EOM
134 (I see you are using the Korn shell.  Some ksh's blow up on $me,
135 mainly on older exotic systems.  If yours does, try the Bourne shell instead.)
136 EOM
137         ;;
138 esac
139 case "$changesh" in
140 true)
141         echo "(Feeding myself to $newsh $reason.)"
142         case "$0" in
143         Configure|*/Configure) exec $newsh $0 "$@";;
144         *) exec $newsh Configure "$@";;
145         esac
146         ;;
147 esac
148
149 : if needed set CDPATH to a harmless value that is not chatty
150 : avoid bash 2.02 problems with empty CDPATH.
151 case "$CDPATH" in
152 '')     ;;
153 *)      case "$SHELL" in
154         *bash*) CDPATH='.' ;;
155         *)              CDPATH='' ;;
156         esac
157         ;;
158 esac
159 : Configure runs within the UU subdirectory
160 test -d UU || mkdir UU
161 cd UU && rm -f ./*
162
163 ccsymbols=''
164 cppccsymbols=''
165 cppsymbols=''
166 dynamic_ext=''
167 extensions=''
168 known_extensions=''
169 nonxs_ext=''
170 static_ext=''
171 useopcode=''
172 useposix=''
173 d_bsd=''
174 d_eunice=''
175 d_xenix=''
176 eunicefix=''
177 Mcc=''
178 ar=''
179 awk=''
180 bash=''
181 bison=''
182 byacc=''
183 cat=''
184 chgrp=''
185 chmod=''
186 chown=''
187 comm=''
188 compress=''
189 cp=''
190 cpio=''
191 cpp=''
192 csh=''
193 date=''
194 echo=''
195 egrep=''
196 emacs=''
197 expr=''
198 find=''
199 flex=''
200 grep=''
201 gzip=''
202 inews=''
203 ksh=''
204 less=''
205 line=''
206 lint=''
207 ln=''
208 lp=''
209 lpr=''
210 ls=''
211 mail=''
212 mailx=''
213 make=''
214 mkdir=''
215 more=''
216 mv=''
217 nm=''
218 nroff=''
219 perl=''
220 pg=''
221 pmake=''
222 pr=''
223 rm=''
224 rmail=''
225 sed=''
226 sendmail=''
227 shar=''
228 sleep=''
229 smail=''
230 sort=''
231 submit=''
232 tail=''
233 tar=''
234 tbl=''
235 tee=''
236 test=''
237 touch=''
238 tr=''
239 troff=''
240 uname=''
241 uniq=''
242 uuname=''
243 vi=''
244 zcat=''
245 zip=''
246 full_ar=''
247 full_sed=''
248 libswanted=''
249 hint=''
250 myuname=''
251 osname=''
252 osvers=''
253 Author=''
254 Date=''
255 Header=''
256 Id=''
257 Locker=''
258 Log=''
259 RCSfile=''
260 Revision=''
261 Source=''
262 State=''
263 _a=''
264 _exe=''
265 _o=''
266 archobjs=''
267 exe_ext=''
268 firstmakefile=''
269 lib_ext=''
270 obj_ext=''
271 path_sep=''
272 afs=''
273 alignbytes=''
274 ansi2knr=''
275 archlib=''
276 archlibexp=''
277 d_archlib=''
278 installarchlib=''
279 archname=''
280 myarchname=''
281 baserev=''
282 bin=''
283 binexp=''
284 installbin=''
285 byteorder=''
286 cc=''
287 gccversion=''
288 ccflags=''
289 cppflags=''
290 ldflags=''
291 lkflags=''
292 locincpth=''
293 optimize=''
294 cf_email=''
295 cf_by=''
296 cf_time=''
297 contains=''
298 cpp_stuff=''
299 cpplast=''
300 cppminus=''
301 cpprun=''
302 cppstdin=''
303 crosscompile=''
304 d_access=''
305 d_accessx=''
306 d_alarm=''
307 d_attribut=''
308 d_bcmp=''
309 d_bcopy=''
310 d_bzero=''
311 d_casti32=''
312 castflags=''
313 d_castneg=''
314 d_chown=''
315 d_chroot=''
316 d_chsize=''
317 d_closedir=''
318 d_void_closedir=''
319 d_const=''
320 cryptlib=''
321 d_crypt=''
322 d_csh=''
323 full_csh=''
324 d_cuserid=''
325 d_dbl_dig=''
326 d_difftime=''
327 d_dlerror=''
328 d_dlopen=''
329 d_dlsymun=''
330 d_dosuid=''
331 d_suidsafe=''
332 d_drand48proto=''
333 d_dup2=''
334 d_eaccess=''
335 d_endgrent=''
336 d_endhent=''
337 d_endnent=''
338 d_endpent=''
339 d_endpwent=''
340 d_endsent=''
341 d_fchmod=''
342 d_fchown=''
343 d_fcntl=''
344 d_fd_macros=''
345 d_fd_set=''
346 d_fds_bits=''
347 d_fgetpos=''
348 d_flexfnam=''
349 d_flock=''
350 d_fork=''
351 d_fseeko=''
352 d_fsetpos=''
353 d_ftello=''
354 d_ftime=''
355 d_gettimeod=''
356 d_Gconvert=''
357 d_getgrent=''
358 d_getgrps=''
359 d_gethbyaddr=''
360 d_gethbyname=''
361 d_gethent=''
362 aphostname=''
363 d_gethname=''
364 d_phostname=''
365 d_uname=''
366 d_gethostprotos=''
367 d_getlogin=''
368 d_getmntent=''
369 d_getnbyaddr=''
370 d_getnbyname=''
371 d_getnent=''
372 d_getnetprotos=''
373 d_getpent=''
374 d_getpgid=''
375 d_getpgrp2=''
376 d_bsdgetpgrp=''
377 d_getpgrp=''
378 d_getppid=''
379 d_getprior=''
380 d_getpbyname=''
381 d_getpbynumber=''
382 d_getprotoprotos=''
383 d_getpwent=''
384 d_getsent=''
385 d_getservprotos=''
386 d_getsbyname=''
387 d_getsbyport=''
388 d_gnulibc=''
389 d_hasmntopt=''
390 d_htonl=''
391 d_inetaton=''
392 d_isascii=''
393 d_killpg=''
394 d_lchown=''
395 d_link=''
396 d_locconv=''
397 d_lockf=''
398 d_longdbl=''
399 longdblsize=''
400 d_longlong=''
401 longlongsize=''
402 d_lstat=''
403 d_madvise=''
404 d_mblen=''
405 d_mbstowcs=''
406 d_mbtowc=''
407 d_memchr=''
408 d_memcmp=''
409 d_memcpy=''
410 d_memmove=''
411 d_memset=''
412 d_mkdir=''
413 d_mkfifo=''
414 d_mktime=''
415 d_mmap=''
416 mmaptype=''
417 d_mprotect=''
418 d_msg=''
419 d_msgctl=''
420 d_msgget=''
421 d_msgrcv=''
422 d_msgsnd=''
423 d_msync=''
424 d_munmap=''
425 d_nice=''
426 d_open3=''
427 d_fpathconf=''
428 d_pathconf=''
429 d_pause=''
430 d_pipe=''
431 d_poll=''
432 d_portable=''
433 d_old_pthread_create_joinable=''
434 old_pthread_create_joinable=''
435 d_pthread_yield=''
436 d_sched_yield=''
437 sched_yield=''
438 d_readdir=''
439 d_rewinddir=''
440 d_seekdir=''
441 d_telldir=''
442 d_readlink=''
443 d_readv=''
444 d_rename=''
445 d_rmdir=''
446 d_safebcpy=''
447 d_safemcpy=''
448 d_sanemcmp=''
449 d_select=''
450 d_sem=''
451 d_semctl=''
452 d_semget=''
453 d_semop=''
454 d_setegid=''
455 d_seteuid=''
456 d_setgrent=''
457 d_setgrps=''
458 d_sethent=''
459 d_setlinebuf=''
460 d_setlocale=''
461 d_setnent=''
462 d_setpent=''
463 d_setpgid=''
464 d_setpgrp2=''
465 d_bsdsetpgrp=''
466 d_setpgrp=''
467 d_setprior=''
468 d_setpwent=''
469 d_setregid=''
470 d_setresgid=''
471 d_setresuid=''
472 d_setreuid=''
473 d_setrgid=''
474 d_setruid=''
475 d_setsent=''
476 d_setsid=''
477 d_setvbuf=''
478 d_sfio=''
479 usesfio=''
480 d_shm=''
481 d_shmat=''
482 d_shmatprototype=''
483 shmattype=''
484 d_shmctl=''
485 d_shmdt=''
486 d_shmget=''
487 d_sigaction=''
488 d_sigsetjmp=''
489 d_cmsghdr_s=''
490 d_msg_ctrunc=''
491 d_msg_dontroute=''
492 d_msg_oob=''
493 d_msg_peek=''
494 d_msg_proxy=''
495 d_msghdr_s=''
496 d_oldsock=''
497 d_recvmsg=''
498 d_scm_rights=''
499 d_sendmsg=''
500 d_socket=''
501 d_sockpair=''
502 sockethdr=''
503 socketlib=''
504 d_statblks=''
505 d_fstatfs=''
506 d_statfs=''
507 d_statfsflags=''
508 d_fstatvfs=''
509 d_statvfs=''
510 d_stdio_cnt_lval=''
511 d_stdio_ptr_lval=''
512 d_stdiobase=''
513 d_stdstdio=''
514 stdio_base=''
515 stdio_bufsiz=''
516 stdio_cnt=''
517 stdio_filbuf=''
518 stdio_ptr=''
519 d_index=''
520 d_strchr=''
521 d_strcoll=''
522 d_strctcpy=''
523 d_strerrm=''
524 d_strerror=''
525 d_sysernlst=''
526 d_syserrlst=''
527 d_strtod=''
528 d_strtol=''
529 d_strtoul=''
530 d_strxfrm=''
531 d_symlink=''
532 d_syscall=''
533 d_sysconf=''
534 d_system=''
535 d_tcgetpgrp=''
536 d_tcsetpgrp=''
537 d_telldirproto=''
538 d_time=''
539 timetype=''
540 clocktype=''
541 d_times=''
542 d_truncate=''
543 d_tzname=''
544 d_umask=''
545 d_semctl_semid_ds=''
546 d_semctl_semun=''
547 d_union_semun=''
548 d_vfork=''
549 usevfork=''
550 d_voidsig=''
551 signal_t=''
552 d_volatile=''
553 d_charvspr=''
554 d_vprintf=''
555 d_wait4=''
556 d_waitpid=''
557 d_wcstombs=''
558 d_wctomb=''
559 d_writev=''
560 d_dbmclose64=''
561 d_dbminit64=''
562 d_delete64=''
563 d_fetch64=''
564 d_firstkey64=''
565 d_nextkey64=''
566 d_store64=''
567 dlext=''
568 cccdlflags=''
569 ccdlflags=''
570 dlsrc=''
571 ld=''
572 lddlflags=''
573 usedl=''
574 doublesize=''
575 ebcdic=''
576 fflushNULL=''
577 fflushall=''
578 fpostype=''
579 gidtype=''
580 groupstype=''
581 h_fcntl=''
582 h_sysfile=''
583 i_arpainet=''
584 db_hashtype=''
585 db_prefixtype=''
586 i_db=''
587 i_dbm=''
588 i_rpcsvcdbm=''
589 d_dirnamlen=''
590 direntrytype=''
591 i_dirent=''
592 i_dld=''
593 i_dlfcn=''
594 i_fcntl=''
595 i_float=''
596 i_gdbm=''
597 d_grpasswd=''
598 i_grp=''
599 d_int64t=''
600 i_inttypes=''
601 i_limits=''
602 i_locale=''
603 i_machcthr=''
604 i_malloc=''
605 i_math=''
606 i_memory=''
607 i_mntent=''
608 i_ndbm=''
609 i_netdb=''
610 i_neterrno=''
611 i_netinettcp=''
612 i_niin=''
613 i_sysin=''
614 i_poll=''
615 i_pthread=''
616 d_pwage=''
617 d_pwchange=''
618 d_pwclass=''
619 d_pwcomment=''
620 d_pwexpire=''
621 d_pwgecos=''
622 d_pwpasswd=''
623 d_pwquota=''
624 i_pwd=''
625 i_sfio=''
626 i_stddef=''
627 i_stdlib=''
628 i_string=''
629 strings=''
630 i_sysaccess=''
631 i_sysdir=''
632 i_sysfile=''
633 d_voidtty=''
634 i_bsdioctl=''
635 i_sysfilio=''
636 i_sysioctl=''
637 i_syssockio=''
638 i_sysmman=''
639 i_sysmount=''
640 i_sysndir=''
641 i_sysparam=''
642 i_sysresrc=''
643 i_syssecrt=''
644 i_sysselct=''
645 i_sysstat=''
646 i_sysstatvfs=''
647 i_systimes=''
648 i_systypes=''
649 d_iovec_s=''
650 i_sysuio=''
651 i_sysun=''
652 i_syswait=''
653 i_sgtty=''
654 i_termio=''
655 i_termios=''
656 i_systime=''
657 i_systimek=''
658 i_time=''
659 timeincl=''
660 i_unistd=''
661 i_utime=''
662 i_values=''
663 i_stdarg=''
664 i_varargs=''
665 i_varhdr=''
666 i_vfork=''
667 installusrbinperl=''
668 intsize=''
669 longsize=''
670 shortsize=''
671 d_dirent64_s=''
672 d_flock64_s=''
673 d_fstat64=''
674 d_ftruncate64=''
675 d_ino64_t=''
676 d_llseek=''
677 d_lockf64=''
678 d_lseek64=''
679 d_lstat64=''
680 d_off64_t=''
681 d_offset_t=''
682 d_open64=''
683 d_opendir64=''
684 d_readdir64=''
685 d_seekdir64=''
686 d_stat64=''
687 d_telldir64=''
688 d_truncate64=''
689 libc=''
690 libperl=''
691 shrpenv=''
692 useshrplib=''
693 glibpth=''
694 libpth=''
695 loclibpth=''
696 plibpth=''
697 xlibpth=''
698 ignore_versioned_solibs=''
699 libs=''
700 lns=''
701 lseeksize=''
702 lseektype=''
703 make_set_make=''
704 d_mymalloc=''
705 freetype=''
706 mallocobj=''
707 mallocsrc=''
708 malloctype=''
709 usemymalloc=''
710 installman1dir=''
711 man1dir=''
712 man1direxp=''
713 man1ext=''
714 installman3dir=''
715 man3dir=''
716 man3direxp=''
717 man3ext=''
718 huge=''
719 large=''
720 medium=''
721 models=''
722 small=''
723 split=''
724 modetype=''
725 multiarch=''
726 mydomain=''
727 myhostname=''
728 phostname=''
729 c=''
730 n=''
731 d_eofnblk=''
732 eagain=''
733 o_nonblock=''
734 rd_nodata=''
735 netdb_hlen_type=''
736 netdb_host_type=''
737 netdb_name_type=''
738 netdb_net_type=''
739 groupcat=''
740 hostcat=''
741 passcat=''
742 orderlib=''
743 ranlib=''
744 package=''
745 spackage=''
746 pager=''
747 apiversion=''
748 patchlevel=''
749 subversion=''
750 version=''
751 perladmin=''
752 perlpath=''
753 pidtype=''
754 prefix=''
755 prefixexp=''
756 installprivlib=''
757 privlib=''
758 privlibexp=''
759 prototype=''
760 ptrsize=''
761 drand01=''
762 randbits=''
763 randfunc=''
764 randseedtype=''
765 seedfunc=''
766 installscript=''
767 scriptdir=''
768 scriptdirexp=''
769 selectminbits=''
770 selecttype=''
771 sh=''
772 sig_count=''
773 sig_name=''
774 sig_name_init=''
775 sig_num=''
776 sig_num_init=''
777 installsitearch=''
778 sitearch=''
779 sitearchexp=''
780 installsitelib=''
781 sitelib=''
782 sitelibexp=''
783 sizetype=''
784 so=''
785 sharpbang=''
786 shsharp=''
787 spitshell=''
788 src=''
789 ssizetype=''
790 startperl=''
791 startsh=''
792 stdchar=''
793 d_fgetpos64=''
794 d_fopen64=''
795 d_freopen64=''
796 d_fseek64=''
797 d_fseeko64=''
798 d_fsetpos64=''
799 d_ftell64=''
800 d_ftello64=''
801 d_tmpfile64=''
802 stdio_stream_array=''
803 sysman=''
804 trnl=''
805 uidtype=''
806 archname64=''
807 use64bits=''
808 usemultiplicity=''
809 nm_opt=''
810 nm_so_opt=''
811 runnm=''
812 usenm=''
813 useperlio=''
814 d_oldpthreads=''
815 usethreads=''
816 incpath=''
817 mips=''
818 mips_type=''
819 usrinc=''
820 defvoidused=''
821 voidflags=''
822 CONFIG=''
823
824 define='define'
825 undef='undef'
826 smallmach='pdp11 i8086 z8000 i80286 iAPX286'
827 rmlist=''
828
829 : We must find out about Eunice early
830 eunicefix=':'
831 if test -f /etc/unixtovms; then
832         eunicefix=/etc/unixtovms
833 fi
834 if test -f /etc/unixtovms.exe; then
835         eunicefix=/etc/unixtovms.exe
836 fi
837
838 i_whoami=''
839 : Possible local include directories to search.
840 : Set locincpth to "" in a hint file to defeat local include searches.
841 locincpth="/usr/local/include /opt/local/include /usr/gnu/include"
842 locincpth="$locincpth /opt/gnu/include /usr/GNU/include /opt/GNU/include"
843 :
844 : no include file wanted by default
845 inclwanted=''
846
847 : list of known cpp symbols, sorted alphabetically
848 al="AMIX BIT_MSF BSD BSD4_3 BSD_NET2 CMU CRAY DGUX DOLPHIN DPX2"
849 al="$al GO32 GOULD_PN HP700 I386 I80960 I960 Lynx M68000 M68K MACH"
850 al="$al MIPSEB MIPSEL MSDOS MTXINU MULTIMAX MVS"
851 al="$al M_COFF M_I186 M_I286 M_I386 M_I8086 M_I86 M_I86SM"
852 al="$al M_SYS3 M_SYS5 M_SYSIII M_SYSV M_UNIX M_XENIX"
853 al="$al NeXT OCS88 OSF1 PARISC PC532 PORTAR POSIX"
854 al="$al PWB R3000 RES RISC6000 RT Sun386i SVR3 SVR4"
855 al="$al SYSTYPE_BSD SYSTYPE_SVR4 SYSTYPE_SYSV Tek4132 Tek4300"
856 al="$al UMAXV USGr4 USGr4_2 UTEK UTS UTek UnicomPBB UnicomPBD Utek"
857 al="$al VMS Xenix286"
858 al="$al _AIX _AIX32 _AIX370 _AIX41 _AM29000 _COFF _CRAY _CX_UX _EPI"
859 al="$al _IBMESA _IBMR2 _M88K _M88KBCS_TARGET _POWER"
860 al="$al _MIPSEB _MIPSEL _M_COFF _M_I86 _M_I86SM _M_SYS3"
861 al="$al _M_SYS5 _M_SYSIII _M_SYSV _M_UNIX _M_XENIX _NLS _PGC_ _R3000"
862 al="$al _SYSTYPE_BSD _SYSTYPE_BSD43 _SYSTYPE_SVR4"
863 al="$al _SYSTYPE_SYSV _SYSV3 _U370 _UNICOS"
864 al="$al __386BSD__ __BIG_ENDIAN __BIG_ENDIAN__ __BSD_4_4__"
865 al="$al __DGUX__ __DPX2__ __H3050R __H3050RX"
866 al="$al __LITTLE_ENDIAN __LITTLE_ENDIAN__ __MACH__"
867 al="$al __MIPSEB __MIPSEB__ __MIPSEL __MIPSEL__"
868 al="$al __Next__ __OSF1__ __PARAGON__ __PGC__ __PWB __STDC__"
869 al="$al __SVR4_2__ __UMAXV__"
870 al="$al ____386BSD____ __alpha __alpha__ __amiga"
871 al="$al __bsd4_2 __bsd4_2__ __bsdi__ __convex__"
872 al="$al __host_mips__"
873 al="$al __hp9000s200 __hp9000s300 __hp9000s400 __hp9000s500"
874 al="$al __hp9000s500 __hp9000s700 __hp9000s800"
875 al="$al __hppa __hpux __hp_osf __i286 __i286__ __i386 __i386__"
876 al="$al __i486 __i486__ __i860 __i860__ __ibmesa __ksr1__ __linux__"
877 al="$al __m68k __m68k__ __m88100__ __m88k __m88k__"
878 al="$al __mc68000 __mc68000__ __mc68020 __mc68020__"
879 al="$al __mc68030 __mc68030__ __mc68040 __mc68040__"
880 al="$al __mc88100 __mc88100__ __mips __mips__"
881 al="$al __motorola__ __osf__ __pa_risc __sparc__ __stdc__"
882 al="$al __sun __sun__ __svr3__ __svr4__ __ultrix __ultrix__"
883 al="$al __unix __unix__ __uxpm__ __uxps__ __vax __vax__"
884 al="$al _host_mips _mips _unix"
885 al="$al a29k aegis aix aixpc alliant alpha am29000 amiga ansi ardent"
886 al="$al apollo ardent att386 att3b"
887 al="$al bsd bsd43 bsd4_2 bsd4_3 bsd4_4 bsdi bull"
888 al="$al cadmus clipper concurrent convex cray ctix"
889 al="$al dmert encore gcos gcx gimpel gould"
890 al="$al hbullx20 hcx host_mips hp200 hp300 hp700 hp800"
891 al="$al hp9000 hp9000s300 hp9000s400 hp9000s500"
892 al="$al hp9000s700 hp9000s800 hp9k8 hppa hpux"
893 al="$al i186 i286 i386 i486 i8086"
894 al="$al i80960 i860 iAPX286 ibm ibm032 ibmrt interdata is68k"
895 al="$al ksr1 linux luna luna88k m68k m88100 m88k"
896 al="$al mc300 mc500 mc68000 mc68010 mc68020 mc68030"
897 al="$al mc68040 mc68060 mc68k mc68k32 mc700"
898 al="$al mc88000 mc88100 merlin mert mips mvs n16"
899 al="$al ncl_el ncl_mr"
900 al="$al news1500 news1700 news1800 news1900 news3700"
901 al="$al news700 news800 news900 ns16000 ns32000"
902 al="$al ns32016 ns32332 ns32k nsc32000 os osf"
903 al="$al parisc pc532 pdp11 plexus posix pyr"
904 al="$al riscix riscos scs sequent sgi sinix sony sony_news"
905 al="$al sonyrisc sparc sparclite spectrum stardent stratos"
906 al="$al sun sun3 sun386 svr4 sysV68 sysV88"
907 al="$al titan tower tower32 tower32_200 tower32_600 tower32_700"
908 al="$al tower32_800 tower32_850 tss u370 u3b u3b2 u3b20 u3b200"
909 al="$al u3b20d u3b5 ultrix unix unixpc unos vax venix vms"
910 al="$al xenix z8000"
911
912 : Trailing extension.  Override this in a hint file, if needed.
913 _exe=''
914 : Extra object files, if any, needed on this platform.
915 archobjs=''
916 groupstype=''
917 : change the next line if compiling for Xenix/286 on Xenix/386
918 xlibpth='/usr/lib/386 /lib/386'
919
920 : Possible local library directories to search.
921 loclibpth="/usr/local/lib /opt/local/lib /usr/gnu/lib"
922 loclibpth="$loclibpth /opt/gnu/lib /usr/GNU/lib /opt/GNU/lib"
923
924 : general looking path for locating libraries
925 glibpth="/shlib /usr/shlib /lib/pa1.1 /usr/lib/large"
926 glibpth="$glibpth /lib /usr/lib $xlibpth"
927 glibpth="$glibpth /lib/large /usr/lib/small /lib/small"
928 glibpth="$glibpth /usr/ccs/lib /usr/ucblib /usr/local/lib"
929
930 : Private path used by Configure to find libraries.  Its value
931 : is prepended to libpth. This variable takes care of special
932 : machines, like the mips.  Usually, it should be empty.
933 plibpth=''
934
935 : default library list
936 libswanted=''
937 : some systems want to use only the non-versioned libso:s
938 ignore_versioned_solibs=''
939 : full support for void wanted by default
940 defvoidused=15
941
942 : set useposix=false in your hint file to disable the POSIX extension.
943 useposix=true
944 : set useopcode=false in your hint file to disable the Opcode extension.
945 useopcode=true
946 : set usemultiplicity on the Configure command line to enable multiplicity.
947 : set usethreads on the Configure command line to enable threads.
948 : List of libraries we want.
949 : If anyone needs -lnet, put it in a hint file.
950 libswanted='sfio socket inet nsl nm ndbm gdbm dbm db malloc dl'
951 libswanted="$libswanted dld ld sun m rt c cposix posix"
952 libswanted="$libswanted ndir dir crypt"
953 libswanted="$libswanted ucb bsd BSD PW x"
954 : We probably want to search /usr/shlib before most other libraries.
955 : This is only used by the lib/ExtUtils/MakeMaker.pm routine extliblist.
956 glibpth=`echo " $glibpth " | sed -e 's! /usr/shlib ! !'`
957 glibpth="/usr/shlib $glibpth"
958 : Do not use vfork unless overridden by a hint file.
959 usevfork=false
960
961 : Find the basic shell for Bourne shell scripts
962 case "$sh" in
963 '')
964         case "$SYSTYPE" in
965         *bsd*|sys5*) xxx="/$SYSTYPE/bin/sh";;
966         *) xxx='/bin/sh';;
967         esac
968         if test -f "$xxx"; then
969                 sh="$xxx"
970         else
971                 : Build up a list and do a single loop so we can 'break' out.
972                 pth=`echo $PATH | sed -e "s/$p_/ /g"`
973                 for xxx in sh bash ksh pdksh ash; do
974                         for p in $pth; do
975                                 try="$try ${p}/${xxx}"
976                         done
977                 done
978                 for xxx in $try; do
979                         if test -f "$xxx"; then
980                                 sh="$xxx";
981                                 break
982                         elif test -f "$xxx.exe"; then
983                                 sh="$xxx";
984                                 break
985                         fi
986                 done
987         fi
988         ;;
989 esac
990
991 case "$sh" in
992 '')     cat <<EOM >&2
993 $me:  Fatal Error:  I can't find a Bourne Shell anywhere.  
994
995 Usually it's in /bin/sh.  How did you even get this far?
996 Please contact me (Perl Maintainers) at perlbug@perl.com and 
997 we'll try to straighten this all out.
998 EOM
999         exit 1
1000         ;;
1001 esac
1002
1003 : see if sh knows # comments
1004 if `$sh -c '#' >/dev/null 2>&1`; then
1005         shsharp=true
1006         spitshell=cat
1007         xcat=/bin/cat
1008         test -f $xcat || xcat=/usr/bin/cat
1009         echo "#!$xcat" >try
1010         $eunicefix try
1011         chmod +x try
1012         ./try > today
1013         if test -s today; then
1014                 sharpbang='#!'
1015         else
1016                 echo "#! $xcat" > try
1017                 $eunicefix try
1018                 chmod +x try
1019                 ./try > today
1020                 if test -s today; then
1021                         sharpbang='#! '
1022                 else
1023                         sharpbang=': use '
1024                 fi
1025         fi
1026 else
1027         echo " "
1028         echo "Your $sh doesn't grok # comments--I will strip them later on."
1029         shsharp=false
1030         cd ..
1031         echo "exec grep -v '^[  ]*#'" >spitshell
1032         chmod +x spitshell
1033         $eunicefix spitshell
1034         spitshell=`pwd`/spitshell
1035         cd UU
1036         echo "I presume that if # doesn't work, #! won't work either!"
1037         sharpbang=': use '
1038 fi
1039 rm -f try today
1040
1041 : figure out how to guarantee sh startup
1042 case "$startsh" in
1043 '') startsh=${sharpbang}${sh} ;;
1044 *)
1045 esac
1046 cat >try <<EOSS
1047 $startsh
1048 set abc
1049 test "$?abc" != 1
1050 EOSS
1051
1052 chmod +x try
1053 $eunicefix try
1054 if ./try; then
1055         : echo "Yup, it does."
1056 else
1057         echo "Hmm... '$startsh' does not guarantee sh startup..."
1058         echo "You may have to fix up the shell scripts to make sure $sh runs them."
1059 fi
1060 rm -f try
1061
1062
1063 : Save command line options in file UU/cmdline.opt for later use in
1064 : generating config.sh.
1065 cat > cmdline.opt <<EOSH
1066 # Configure command line arguments.
1067 config_arg0='$0'
1068 config_args='$*'
1069 config_argc=$#
1070 EOSH
1071 argn=1
1072 for arg in "$@"; do
1073         cat >>cmdline.opt <<EOSH
1074 config_arg$argn='$arg'
1075 EOSH
1076         argn=`expr $argn + 1`
1077 done
1078
1079 : produce awk script to parse command line options
1080 cat >options.awk <<'EOF'
1081 BEGIN {
1082         optstr = "dD:eEf:hKOrsSU:V";    # getopt-style specification
1083
1084         len = length(optstr);
1085         for (i = 1; i <= len; i++) {
1086                 c = substr(optstr, i, 1);
1087                 if (i < len) a = substr(optstr, i + 1, 1); else a = "";
1088                 if (a == ":") {
1089                         arg[c] = 1;
1090                         i++;
1091                 }
1092                 opt[c] = 1;
1093         }
1094 }
1095 {
1096         expect = 0;
1097         str = $0;
1098         if (substr(str, 1, 1) != "-") {
1099                 printf("'%s'\n", str);
1100                 next;
1101         }
1102         len = length($0);
1103         for (i = 2; i <= len; i++) {
1104                 c = substr(str, i, 1);
1105                 if (!opt[c]) {
1106                         printf("-%s\n", substr(str, i));
1107                         next;
1108                 }
1109                 printf("-%s\n", c);
1110                 if (arg[c]) {
1111                         if (i < len)
1112                                 printf("'%s'\n", substr(str, i + 1));
1113                         else
1114                                 expect = 1;
1115                         next;
1116                 }
1117         }
1118 }
1119 END {
1120         if (expect)
1121                 print "?";
1122 }
1123 EOF
1124
1125 : process the command line options
1126 set X `for arg in "$@"; do echo "X$arg"; done |
1127         sed -e s/X// | awk -f options.awk`
1128 eval "set $*"
1129 shift
1130 rm -f options.awk
1131
1132 : set up default values
1133 fastread=''
1134 reuseval=false
1135 config_sh=''
1136 alldone=''
1137 error=''
1138 silent=''
1139 extractsh=''
1140 override=''
1141 knowitall=''
1142 rm -f optdef.sh
1143 cat >optdef.sh <<EOS
1144 $startsh
1145 EOS
1146
1147
1148 : option parsing
1149 while test $# -gt 0; do
1150         case "$1" in
1151         -d) shift; fastread=yes;;
1152         -e) shift; alldone=cont;;
1153         -f)
1154                 shift
1155                 cd ..
1156                 if test -r "$1"; then
1157                         config_sh="$1"
1158                 else
1159                         echo "$me: cannot read config file $1." >&2
1160                         error=true
1161                 fi
1162                 cd UU
1163                 shift;;
1164         -h) shift; error=true;;
1165         -r) shift; reuseval=true;;
1166         -s) shift; silent=true; realsilent=true;;
1167         -E) shift; alldone=exit;;
1168         -K) shift; knowitall=true;;
1169         -O) shift; override=true;;
1170         -S) shift; silent=true; extractsh=true;;
1171         -D)
1172                 shift
1173                 case "$1" in
1174                 *=)
1175                         echo "$me: use '-U symbol=', not '-D symbol='." >&2
1176                         echo "$me: ignoring -D $1" >&2
1177                         ;;
1178                 *=*) echo "$1" | \
1179                                 sed -e "s/'/'\"'\"'/g" -e "s/=\(.*\)/='\1'/" >> optdef.sh;;
1180                 *) echo "$1='define'" >> optdef.sh;;
1181                 esac
1182                 shift
1183                 ;;
1184         -U)
1185                 shift
1186                 case "$1" in
1187                 *=) echo "$1" >> optdef.sh;;
1188                 *=*)
1189                         echo "$me: use '-D symbol=val', not '-U symbol=val'." >&2
1190                         echo "$me: ignoring -U $1" >&2
1191                         ;;
1192                 *) echo "$1='undef'" >> optdef.sh;;
1193                 esac
1194                 shift
1195                 ;;
1196         -V) echo "$me generated by metaconfig 3.0 PL70." >&2
1197                 exit 0;;
1198         --) break;;
1199         -*) echo "$me: unknown option $1" >&2; shift; error=true;;
1200         *) break;;
1201         esac
1202 done
1203
1204 case "$error" in
1205 true)
1206         cat >&2 <<EOM
1207 Usage: $me [-dehrsEKOSV] [-f config.sh] [-D symbol] [-D symbol=value]
1208                  [-U symbol] [-U symbol=]
1209   -d : use defaults for all answers.
1210   -e : go on without questioning past the production of config.sh.
1211   -f : specify an alternate default configuration file.
1212   -h : print this help message and exit (with an error status).
1213   -r : reuse C symbols value if possible (skips costly nm extraction).
1214   -s : silent mode, only echoes questions and essential information.
1215   -D : define symbol to have some value:
1216          -D symbol         symbol gets the value 'define'
1217          -D symbol=value   symbol gets the value 'value'
1218   -E : stop at the end of questions, after having produced config.sh.
1219   -K : do not use unless you know what you are doing.
1220   -O : let -D and -U override definitions from loaded configuration file.
1221   -S : perform variable substitutions on all .SH files (can mix with -f)
1222   -U : undefine symbol:
1223          -U symbol    symbol gets the value 'undef'
1224          -U symbol=   symbol gets completely empty
1225   -V : print version number and exit (with a zero status).
1226 EOM
1227         exit 1
1228         ;;
1229 esac
1230
1231 : Sanity checks
1232 case "$fastread$alldone" in
1233 yescont|yesexit) ;;
1234 *)
1235         if test ! -t 0; then
1236                 echo "Say 'sh Configure', not 'sh <Configure'"
1237                 exit 1
1238         fi
1239         ;;
1240 esac
1241
1242 exec 4>&1
1243 case "$silent" in
1244 true) exec 1>/dev/null;;
1245 esac
1246
1247 : run the defines and the undefines, if any, but leave the file out there...
1248 touch optdef.sh
1249 . ./optdef.sh
1250
1251 : set package name
1252 package=perl5
1253 first=`echo $package | sed -e 's/^\(.\).*/\1/'`
1254 last=`echo $package | sed -e 's/^.\(.*\)/\1/'`
1255 case "`echo AbyZ | tr '[:lower:]' '[:upper:]' 2>/dev/null`" in
1256 ABYZ) spackage=`echo $first | tr '[:lower:]' '[:upper:]'`$last;;
1257 *) spackage=`echo $first | tr '[a-z]' '[A-Z]'`$last;;
1258 esac
1259
1260 : Some greps do not return status, grrr.
1261 echo "grimblepritz" >grimble
1262 if grep blurfldyick grimble >/dev/null 2>&1 ; then
1263         contains=contains
1264 elif grep grimblepritz grimble >/dev/null 2>&1 ; then
1265         contains=grep
1266 else
1267         contains=contains
1268 fi
1269 rm -f grimble
1270 : the following should work in any shell
1271 case "$contains" in
1272 contains*)
1273         echo " "
1274         echo "AGH!  Grep doesn't return a status.  Attempting remedial action."
1275         cat >contains <<'EOSS'
1276 grep "$1" "$2" >.greptmp && cat .greptmp && test -s .greptmp
1277 EOSS
1278 chmod +x contains
1279 esac
1280
1281 : Find the path to the source tree
1282 case "$src" in
1283 '') case "$0" in
1284     */*) src=`echo $0 | sed -e 's%/[^/][^/]*$%%'`;;
1285     *)   src='.';;
1286     esac;;
1287 esac
1288 case "$src" in
1289 '')     src=/
1290         rsrc=/
1291         ;;
1292 /*) rsrc="$src";;
1293 *) rsrc="../$src";;
1294 esac
1295 if test -f $rsrc/Configure && \
1296         $contains "^package=$package$" $rsrc/Configure >/dev/null 2>&1
1297 then
1298    : found it, so we are ok.
1299 else
1300         rsrc=''
1301         for src in . .. ../.. ../../.. ../../../..; do
1302                 if test -f ../$src/Configure && \
1303                         $contains "^package=$package$" ../$src/Configure >/dev/null 2>&1
1304                 then
1305                         rsrc=../$src
1306                         break
1307                 fi
1308         done
1309 fi
1310 case "$rsrc" in
1311 '')
1312         cat <<EOM >&4
1313
1314 Sorry, I can't seem to locate the source dir for $package.  Please start
1315 Configure with an explicit path -- i.e. /some/path/Configure.
1316
1317 EOM
1318         exit 1
1319         ;;
1320 ../.)   rsrc='..';;
1321 *)
1322         echo " "
1323         echo "Sources for $package found in \"$src\"." >&4
1324         ;;
1325 esac
1326
1327 : script used to extract .SH files with variable substitutions
1328 cat >extract <<'EOS'
1329 CONFIGDOTSH=true
1330 echo "Doing variable substitutions on .SH files..."
1331 if test -f $src/MANIFEST; then
1332         set x `awk '{print $1}' <$src/MANIFEST | grep '\.SH$'`
1333 else
1334         echo "(Looking for .SH files under the source directory.)"
1335         set x `(cd $src; find . -name "*.SH" -print)`
1336 fi
1337 shift
1338 case $# in
1339 0) set x `(cd $src; echo *.SH)`; shift;;
1340 esac
1341 if test ! -f $src/$1; then
1342         shift
1343 fi
1344 mkdir_p='
1345 name=$1;
1346 create="";
1347 while test $name; do
1348         if test ! -d "$name"; then
1349                 create="$name $create";
1350                 name=`echo $name | sed -e "s|^[^/]*$||"`;
1351                 name=`echo $name | sed -e "s|\(.*\)/.*|\1|"`;
1352         else
1353                 name="";
1354         fi;
1355 done;
1356 for file in $create; do
1357         mkdir $file;
1358 done
1359 '
1360 for file in $*; do
1361         case "$src" in
1362         ".")
1363                 case "$file" in
1364                 */*)
1365                         dir=`expr X$file : 'X\(.*\)/'`
1366                         file=`expr X$file : 'X.*/\(.*\)'`
1367                         (cd $dir && . ./$file)
1368                         ;;
1369                 *)
1370                         . ./$file
1371                         ;;
1372                 esac
1373                 ;;
1374         *)
1375                 case "$file" in
1376                 */*)
1377                         dir=`expr X$file : 'X\(.*\)/'`
1378                         file=`expr X$file : 'X.*/\(.*\)'`
1379                         (set x $dir; shift; eval $mkdir_p)
1380                         sh <$src/$dir/$file
1381                         ;;
1382                 *)
1383                         sh <$src/$file
1384                         ;;
1385                 esac
1386                 ;;
1387         esac
1388 done
1389 if test -f $src/config_h.SH; then
1390         if test ! -f config.h; then
1391         : oops, they left it out of MANIFEST, probably, so do it anyway.
1392         . $src/config_h.SH
1393         fi
1394 fi
1395 EOS
1396
1397 : extract files and exit if asked to do so
1398 case "$extractsh" in
1399 true)
1400         case "$realsilent" in
1401         true) ;;
1402         *) exec 1>&4;;
1403         esac
1404         case "$config_sh" in
1405         '') config_sh='config.sh';;
1406         esac
1407         echo " "
1408         echo "Fetching answers from $config_sh..."
1409         cd ..
1410         . $config_sh
1411         test "$override" && . ./optdef.sh
1412         echo " "
1413         . UU/extract
1414         rm -rf UU
1415         echo "Done."
1416         exit 0
1417         ;;
1418 esac
1419
1420 : Eunice requires " " instead of "", can you believe it
1421 echo " "
1422 : Here we go...
1423 echo "Beginning of configuration questions for $package."
1424
1425 trap 'echo " "; test -d ../UU && rm -rf X $rmlist; exit 1' 1 2 3 15
1426
1427 : first determine how to suppress newline on echo command
1428 echo " "
1429 echo "Checking echo to see how to suppress newlines..."
1430 (echo "hi there\c" ; echo " ") >.echotmp
1431 if $contains c .echotmp >/dev/null 2>&1 ; then
1432         echo "...using -n."
1433         n='-n'
1434         c=''
1435 else
1436         cat <<'EOM'
1437 ...using \c
1438 EOM
1439         n=''
1440         c='\c'
1441 fi
1442 echo $n "The star should be here-->$c"
1443 echo '*'
1444 rm -f .echotmp
1445
1446 : Now test for existence of everything in MANIFEST
1447 echo " "
1448 if test -f $rsrc/MANIFEST; then
1449         echo "First let's make sure your kit is complete.  Checking..." >&4
1450         awk '$1 !~ /PACK[A-Z]+/ {print $1}' $rsrc/MANIFEST | split -50
1451         rm -f missing
1452         tmppwd=`pwd`
1453         for filelist in x??; do
1454                 (cd $rsrc; ls `cat $tmppwd/$filelist` >/dev/null 2>>$tmppwd/missing)
1455         done
1456         if test -s missing; then
1457                 cat missing >&4
1458                 cat >&4 <<'EOM'
1459
1460 THIS PACKAGE SEEMS TO BE INCOMPLETE.
1461
1462 You have the option of continuing the configuration process, despite the
1463 distinct possibility that your kit is damaged, by typing 'y'es.  If you
1464 do, don't blame me if something goes wrong.  I advise you to type 'n'o
1465 and contact the author (perlbug@perl.com).
1466
1467 EOM
1468                 echo $n "Continue? [n] $c" >&4
1469                 read ans
1470                 case "$ans" in
1471                 y*)
1472                         echo "Continuing..." >&4
1473                         rm -f missing
1474                         ;;
1475                 *)
1476                         echo "ABORTING..." >&4
1477                         kill $$
1478                         ;;
1479                 esac
1480         else
1481                 echo "Looks good..."
1482         fi
1483 else
1484         echo "There is no MANIFEST file.  I hope your kit is complete !"
1485 fi
1486 rm -f missing x??
1487
1488 echo " "
1489 : Find the appropriate value for a newline for tr
1490 if test -n "$DJGPP"; then
1491        trnl='\012'
1492 fi
1493 if test X"$trnl" = X; then
1494         case "`echo foo|tr '\n' x 2>/dev/null`" in
1495         foox) trnl='\n' ;;
1496         esac
1497 fi
1498 if test X"$trnl" = X; then
1499         case "`echo foo|tr '\012' x 2>/dev/null`" in
1500         foox) trnl='\012' ;;
1501         esac
1502 fi
1503 if test X"$trnl" = X; then
1504         cat <<EOM >&2
1505
1506 $me: Fatal Error: cannot figure out how to translate newlines with 'tr'.
1507
1508 EOM
1509         exit 1
1510 fi
1511
1512 : compute the number of columns on the terminal for proper question formatting
1513 case "$COLUMNS" in
1514 '') COLUMNS='80';;
1515 esac
1516
1517 : set up the echo used in my read
1518 myecho="case \"\$xxxm\" in
1519 '') echo $n \"\$rp $c\" >&4;;
1520 *) case \"\$rp\" in
1521         '') echo $n \"[\$xxxm] $c\";;
1522         *)
1523                 if test \`echo \"\$rp [\$xxxm]  \" | wc -c\` -ge $COLUMNS; then
1524                         echo \"\$rp\" >&4
1525                         echo $n \"[\$xxxm] $c\" >&4
1526                 else
1527                         echo $n \"\$rp [\$xxxm] $c\" >&4
1528                 fi
1529                 ;;
1530         esac;;
1531 esac"
1532
1533 : now set up to do reads with possible shell escape and default assignment
1534 cat <<EOSC >myread
1535 $startsh
1536 xxxm=\$dflt
1537 $myecho
1538 ans='!'
1539 case "\$fastread" in
1540 yes) case "\$dflt" in
1541         '') ;;
1542         *) ans='';
1543                 case "\$silent-\$rp" in
1544                 true-) ;;
1545                 *) echo " " >&4;;
1546                 esac;;
1547         esac;;
1548 *) case "\$silent" in
1549         true) case "\$rp" in
1550                 '') ans='';;
1551                 esac;;
1552         esac;;
1553 esac
1554 while expr "X\$ans" : "X!" >/dev/null; do
1555         read answ
1556         set x \$xxxm
1557         shift
1558         aok=''; eval "ans=\\"\$answ\\"" && aok=y
1559         case  "\$answ" in
1560         "!")
1561                 sh 1>&4
1562                 echo " "
1563                 $myecho
1564                 ;;
1565         !*)
1566                 set x \`expr "X\$ans" : "X!\(.*\)\$"\`
1567                 shift
1568                 sh 1>&4 -c "\$*"
1569                 echo " "
1570                 $myecho
1571                 ;;
1572         "\$ans")
1573                 case "\$ans" in
1574                 \\&*)
1575                         set x \`expr "X\$ans" : "X&\(.*\)\$"\`
1576                         shift
1577                         case "\$1" in
1578                         -d)
1579                                 fastread=yes
1580                                 echo "(OK, I'll run with -d after this question.)" >&4
1581                                 ;;
1582                         -*)
1583                                 echo "*** Sorry, \$1 not supported yet." >&4
1584                                 ;;
1585                         esac
1586                         $myecho
1587                         ans=!
1588                         ;;
1589                 esac;;
1590         *)
1591                 case "\$aok" in
1592                 y)
1593                         echo "*** Substitution done -- please confirm."
1594                         xxxm="\$ans"
1595                         ans=\`echo $n "\$ans$c" | tr '$trnl' ' '\`
1596                         xxxm="\$ans"
1597                         ans=!
1598                         ;;
1599                 *)
1600                         echo "*** Error -- try again."
1601                         ans=!
1602                         ;;
1603                 esac
1604                 $myecho
1605                 ;;
1606         esac
1607         case "\$ans\$xxxm\$nostick" in
1608         '')
1609                 ans=!
1610                 $myecho
1611                 ;;
1612         esac
1613 done
1614 case "\$ans" in
1615 '') ans="\$xxxm";;
1616 esac
1617 EOSC
1618
1619 : create .config dir to save info across Configure sessions
1620 test -d ../.config || mkdir ../.config
1621 cat >../.config/README <<EOF
1622 This directory created by Configure to save information that should
1623 persist across sessions for $package.
1624
1625 You may safely delete it if you wish.
1626 EOF
1627
1628 : general instructions
1629 needman=true
1630 firsttime=true
1631 user=`(logname) 2>/dev/null`
1632 case "$user" in
1633 '') user=`whoami 2>&1`;;
1634 esac
1635 if $contains "^$user\$" ../.config/instruct >/dev/null 2>&1; then
1636         firsttime=false
1637         echo " "
1638         rp='Would you like to see the instructions?'
1639         dflt=n
1640         . ./myread
1641         case "$ans" in
1642         [yY]*) ;;
1643         *) needman=false;;
1644         esac
1645 fi
1646 if $needman; then
1647         cat <<EOH
1648
1649 This installation shell script will examine your system and ask you questions
1650 to determine how the perl5 package should be installed. If you get
1651 stuck on a question, you may use a ! shell escape to start a subshell or
1652 execute a command.  Many of the questions will have default answers in square
1653 brackets; typing carriage return will give you the default.
1654
1655 On some of the questions which ask for file or directory names you are allowed
1656 to use the ~name construct to specify the login directory belonging to "name",
1657 even if you don't have a shell which knows about that.  Questions where this is
1658 allowed will be marked "(~name ok)".
1659
1660 EOH
1661         rp=''
1662         dflt='Type carriage return to continue'
1663         . ./myread
1664         cat <<'EOH'
1665
1666 The prompter used in this script allows you to use shell variables and
1667 backticks in your answers.  You may use $1, $2, etc...  to refer to the words
1668 in the default answer, as if the default line was a set of arguments given to a
1669 script shell.  This means you may also use $* to repeat the whole default line,
1670 so you do not have to re-type everything to add something to the default.
1671
1672 Everytime there is a substitution, you will have to confirm.  If there is an
1673 error (e.g. an unmatched backtick), the default answer will remain unchanged
1674 and you will be prompted again.
1675
1676 If you are in a hurry, you may run 'Configure -d'.  This will bypass nearly all
1677 the questions and use the computed defaults (or the previous answers if there
1678 was already a config.sh file). Type 'Configure -h' for a list of options.
1679 You may also start interactively and then answer '& -d' at any prompt to turn
1680 on the non-interactive behaviour for the remainder of the execution.
1681
1682 EOH
1683         . ./myread
1684         cat <<EOH
1685
1686 Much effort has been expended to ensure that this shell script will run on any
1687 Unix system.  If despite that it blows up on yours, your best bet is to edit
1688 Configure and run it again.  If you can't run Configure for some reason,
1689 you'll have to generate a config.sh file by hand.  Whatever problems you
1690 have, let me (perlbug@perl.com) know how I blew it.
1691
1692 This installation script affects things in two ways:
1693
1694 1) it may do direct variable substitutions on some of the files included
1695    in this kit.
1696 2) it builds a config.h file for inclusion in C programs.  You may edit
1697    any of these files as the need arises after running this script.
1698
1699 If you make a mistake on a question, there is no easy way to back up to it
1700 currently.  The easiest thing to do is to edit config.sh and rerun all the SH
1701 files.  Configure will offer to let you do this before it runs the SH files.
1702
1703 EOH
1704         dflt='Type carriage return to continue'
1705         . ./myread
1706         case "$firsttime" in
1707         true) echo $user >>../.config/instruct;;
1708         esac
1709 fi
1710
1711 : find out where common programs are
1712 echo " "
1713 echo "Locating common programs..." >&4
1714 cat <<EOSC >loc
1715 $startsh
1716 case \$# in
1717 0) exit 1;;
1718 esac
1719 thing=\$1
1720 shift
1721 dflt=\$1
1722 shift
1723 for dir in \$*; do
1724         case "\$thing" in
1725         .)
1726         if test -d \$dir/\$thing; then
1727                 echo \$dir
1728                 exit 0
1729         fi
1730         ;;
1731         *)
1732         for thisthing in \$dir/\$thing; do
1733                 : just loop through to pick last item
1734         done
1735         if test -f \$thisthing; then
1736                 echo \$thisthing
1737                 exit 0
1738         elif test -f \$dir/\$thing.exe; then
1739                 if test -n "$DJGPP"; then
1740                         echo \$dir/\$thing.exe
1741                 else
1742                         : on Eunice apparently
1743                         echo \$dir/\$thing
1744                 fi
1745                 exit 0
1746         fi
1747         ;;
1748         esac
1749 done
1750 echo \$dflt
1751 exit 1
1752 EOSC
1753 chmod +x loc
1754 $eunicefix loc
1755 loclist="
1756 awk
1757 cat
1758 comm
1759 cp
1760 echo
1761 expr
1762 grep
1763 ls
1764 make
1765 mkdir
1766 rm
1767 sed
1768 sort
1769 touch
1770 tr
1771 uniq
1772 "
1773 trylist="
1774 Mcc
1775 ar
1776 byacc
1777 cpp
1778 csh
1779 date
1780 egrep
1781 gzip
1782 less
1783 ln
1784 more
1785 nm
1786 nroff
1787 pg
1788 test
1789 uname
1790 zip
1791 "
1792 pth=`echo $PATH | sed -e "s/$p_/ /g"`
1793 pth="$pth /lib /usr/lib"
1794 for file in $loclist; do
1795         eval xxx=\$$file
1796         case "$xxx" in
1797         /*|?:[\\/]*)
1798                 if test -f "$xxx"; then
1799                         : ok
1800                 else
1801                         echo "WARNING: no $xxx -- ignoring your setting for $file." >&4
1802                         xxx=`./loc $file $file $pth`
1803                 fi
1804                 ;;
1805         '') xxx=`./loc $file $file $pth`;;
1806         *) xxx=`./loc $xxx $xxx $pth`;;
1807         esac
1808         eval $file=$xxx
1809         eval _$file=$xxx
1810         case "$xxx" in
1811         /*)
1812                 echo $file is in $xxx.
1813                 ;;
1814         ?:[\\/]*)
1815                 echo $file is in $xxx.
1816                 ;;
1817         *)
1818                 echo "I don't know where '$file' is, and my life depends on it." >&4
1819                 echo "Go find a public domain implementation or fix your PATH setting!" >&4
1820                 exit 1
1821                 ;;
1822         esac
1823 done
1824 echo " "
1825 echo "Don't worry if any of the following aren't found..."
1826 say=offhand
1827 for file in $trylist; do
1828         eval xxx=\$$file
1829         case "$xxx" in
1830         /*|?:[\\/]*)
1831                 if test -f "$xxx"; then
1832                         : ok
1833                 else
1834                         echo "WARNING: no $xxx -- ignoring your setting for $file." >&4
1835                         xxx=`./loc $file $file $pth`
1836                 fi
1837                 ;;
1838         '') xxx=`./loc $file $file $pth`;;
1839         *) xxx=`./loc $xxx $xxx $pth`;;
1840         esac
1841         eval $file=$xxx
1842         eval _$file=$xxx
1843         case "$xxx" in
1844         /*)
1845                 echo $file is in $xxx.
1846                 ;;
1847         ?:[\\/]*)
1848                 echo $file is in $xxx.
1849                 ;;
1850         *)
1851                 echo "I don't see $file out there, $say."
1852                 say=either
1853                 ;;
1854         esac
1855 done
1856 case "$egrep" in
1857 egrep)
1858         echo "Substituting grep for egrep."
1859         egrep=$grep
1860         ;;
1861 esac
1862 case "$ln" in
1863 ln)
1864         echo "Substituting cp for ln."
1865         ln=$cp
1866         ;;
1867 esac
1868 case "$test" in
1869 test)
1870         echo "Hopefully test is built into your sh."
1871         ;;
1872 *)
1873         if `sh -c "PATH= test true" >/dev/null 2>&1`; then
1874                 echo "Using the test built into your sh."
1875                 test=test
1876                 _test=test
1877         fi
1878         ;;
1879 esac
1880 case "$echo" in
1881 echo)
1882         echo "Hopefully echo is built into your sh."
1883         ;;
1884 '') ;;
1885 *)
1886         echo " "
1887 echo "Checking compatibility between $echo and builtin echo (if any)..." >&4
1888         $echo $n "hi there$c" >foo1
1889         echo $n "hi there$c" >foo2
1890         if cmp foo1 foo2 >/dev/null 2>&1; then
1891                 echo "They are compatible.  In fact, they may be identical."
1892         else
1893                 case "$n" in
1894                 '-n') n='' c='\c';;
1895                 *) n='-n' c='';;
1896                 esac
1897                 cat <<FOO
1898 They are not compatible!  You are probably running ksh on a non-USG system.
1899 I'll have to use $echo instead of the builtin, since Bourne shell doesn't
1900 have echo built in and we may have to run some Bourne shell scripts.  That
1901 means I'll have to use '$n$c' to suppress newlines now.  Life is ridiculous.
1902
1903 FOO
1904                 $echo $n "The star should be here-->$c"
1905                 $echo "*"
1906         fi
1907         $rm -f foo1 foo2
1908         ;;
1909 esac
1910
1911 : determine whether symbolic links are supported
1912 echo " "
1913 $touch blurfl
1914 if $ln -s blurfl sym > /dev/null 2>&1 ; then
1915         echo "Symbolic links are supported." >&4
1916         lns="$ln -s"
1917 else
1918         echo "Symbolic links are NOT supported." >&4
1919         lns="$ln"
1920 fi
1921 $rm -f blurfl sym
1922
1923 : see whether [:lower:] and [:upper:] are supported character classes
1924 echo " "
1925 case "`echo AbyZ | $tr '[:lower:]' '[:upper:]' 2>/dev/null`" in
1926 ABYZ)
1927         echo "Good, your tr supports [:lower:] and [:upper:] to convert case." >&4
1928         up='[:upper:]'
1929         low='[:lower:]'
1930         ;;
1931 *)      # There is a discontinuity in EBCDIC between 'I' and 'J'
1932         # (0xc9 and 0xd1), therefore that is a nice testing point.
1933         if test "X$up" = X -o "X$low" = X; then
1934             case "`echo IJ | $tr '[I-J]' '[i-j]' 2>/dev/null`" in
1935             ij) up='[A-Z]'
1936                 low='[a-z]'
1937                 ;;
1938             esac
1939         fi
1940         if test "X$up" = X -o "X$low" = X; then
1941             case "`echo IJ | $tr I-J i-j 2>/dev/null`" in
1942             ij) up='A-Z'
1943                 low='a-z'
1944                 ;;
1945             esac
1946         fi
1947         if test "X$up" = X -o "X$low" = X; then
1948             case "`echo IJ | od -x 2>/dev/null`" in
1949             *C9D1*|*c9d1*)
1950                 echo "Hey, this might be EBCDIC." >&4
1951                 if test "X$up" = X -o "X$low" = X; then
1952                     case "`echo IJ | $tr '[A-IJ-RS-Z]' '[a-ij-rs-z]' 2>/dev/null`" in
1953                     ij) up='[A-IJ-RS-Z]'
1954                         low='[a-ij-rs-z]'
1955                         ;;
1956                     esac
1957                 fi
1958                 if test "X$up" = X -o "X$low" = X; then
1959                     case "`echo IJ | $tr A-IJ-RS-Z a-ij-rs-z 2>/dev/null`" in
1960                     ij) up='A-IJ-RS-Z'
1961                         low='a-ij-rs-z'
1962                         ;;
1963                     esac
1964                 fi
1965                 ;;
1966             esac
1967         fi
1968 esac
1969 case "`echo IJ | $tr \"$up\" \"$low\" 2>/dev/null`" in
1970 ij)
1971     echo "Using $up and $low to convert case." >&4
1972     ;;
1973 *)
1974     echo "I don't know how to translate letters from upper to lower case." >&4
1975     echo "Your tr is not acting any way I know of." >&4
1976     exit 1
1977     ;;
1978 esac
1979 : set up the translation script tr, must be called with ./tr of course
1980 cat >tr <<EOSC
1981 $startsh
1982 case "\$1\$2" in
1983 '[A-Z][a-z]') exec $tr '$up' '$low';;
1984 '[a-z][A-Z]') exec $tr '$low' '$up';;
1985 esac
1986 exec $tr "\$@"
1987 EOSC
1988 chmod +x tr
1989 $eunicefix tr
1990
1991 : Try to determine whether config.sh was made on this system
1992 case "$config_sh" in
1993 '')
1994 myuname=`( ($uname -a) 2>/dev/null || hostname) 2>&1`
1995 # tr '[A-Z]' '[a-z]' would not work in EBCDIC
1996 # because the A-Z/a-z are not consecutive.
1997 myuname=`echo $myuname | $sed -e 's/^[^=]*=//' -e 's/\///g' | \
1998         ./tr '[A-Z]' '[a-z]' | $tr $trnl ' '`
1999 newmyuname="$myuname"
2000 dflt=n
2001 case "$knowitall" in
2002 '')
2003         if test -f ../config.sh; then
2004                 if $contains myuname= ../config.sh >/dev/null 2>&1; then
2005                         eval "`grep myuname= ../config.sh`"
2006                 fi
2007                 if test "X$myuname" = "X$newmyuname"; then
2008                         dflt=y
2009                 fi
2010         fi
2011         ;;
2012 *) dflt=y;;
2013 esac
2014
2015 : Get old answers from old config file if Configure was run on the
2016 : same system, otherwise use the hints.
2017 hint=default
2018 cd ..
2019 if test -f config.sh; then
2020         echo " "
2021         rp="I see a config.sh file.  Shall I use it to set the defaults?"
2022         . UU/myread
2023         case "$ans" in
2024         n*|N*) echo "OK, I'll ignore it."; mv config.sh config.sh.old;;
2025         *)  echo "Fetching default answers from your old config.sh file..." >&4
2026                 tmp_n="$n"
2027                 tmp_c="$c"
2028                 tmp_sh="$sh"
2029                 . ./config.sh
2030                 cp config.sh UU
2031                 n="$tmp_n"
2032                 c="$tmp_c"
2033                 : Older versions did not always set $sh.  Catch re-use of such
2034                 : an old config.sh.
2035                 case "$sh" in
2036                 '') sh="$tmp_sh" ;;
2037                 esac
2038                 hint=previous
2039                 ;;
2040         esac
2041 fi
2042 if test ! -f config.sh; then
2043         $cat <<EOM
2044
2045 First time through, eh?  I have some defaults handy for some systems
2046 that need some extra help getting the Configure answers right:
2047
2048 EOM
2049         (cd $src/hints; ls -C *.sh) | $sed 's/\.sh/   /g' >&4
2050         dflt=''
2051         : Half the following guesses are probably wrong... If you have better
2052         : tests or hints, please send them to perlbug@perl.com
2053         : The metaconfig authors would also appreciate a copy...
2054         $test -f /irix && osname=irix
2055         $test -f /xenix && osname=sco_xenix
2056         $test -f /dynix && osname=dynix
2057         $test -f /dnix && osname=dnix
2058         $test -f /lynx.os && osname=lynxos
2059         $test -f /unicos && osname=unicos && osvers=`$uname -r`
2060         $test -f /unicosmk.ar && osname=unicosmk && osvers=`$uname -r`
2061         $test -f /bin/mips && /bin/mips && osname=mips
2062         $test -d /NextApps && set X `hostinfo | grep 'NeXT Mach.*:' | \
2063                 $sed -e 's/://' -e 's/\./_/'` && osname=next && osvers=$4
2064         $test -d /usr/apollo/bin && osname=apollo
2065         $test -f /etc/saf/_sactab && osname=svr4
2066         $test -d /usr/include/minix && osname=minix
2067         if $test -d /MachTen -o -d /MachTen_Folder; then
2068                 osname=machten
2069                 if $test -x /sbin/version; then
2070                         osvers=`/sbin/version | $awk '{print $2}' |
2071                         $sed -e 's/[A-Za-z]$//'`
2072                 elif $test -x /usr/etc/version; then
2073                         osvers=`/usr/etc/version | $awk '{print $2}' |
2074                         $sed -e 's/[A-Za-z]$//'`
2075                 else
2076                         osvers="$2.$3"
2077                 fi
2078         fi
2079        $test -f /sys/posix.dll &&
2080                $test -f /usr/bin/what &&
2081                set X `/usr/bin/what /sys/posix.dll` &&
2082                $test "$3" = UWIN &&
2083                osname=uwin &&
2084                osvers="$5"
2085         if $test -f $uname; then
2086                 set X $myuname
2087                 shift
2088
2089                 case "$5" in
2090                 fps*) osname=fps ;;
2091                 mips*)
2092                         case "$4" in
2093                         umips) osname=umips ;;
2094                         *) osname=mips ;;
2095                         esac;;
2096                 [23]100) osname=mips ;;
2097                 next*) osname=next ;;
2098                 i386*)
2099                         tmp=`/bin/uname -X 2>/dev/null|awk '/3\.2v[45]/{ print $(NF) }'`
2100                         if $test "$tmp" != "" -a "$3" = "3.2" -a -f '/etc/systemid'; then
2101                                 osname='sco'
2102                                 osvers=$tmp
2103                         elif $test -f /etc/kconfig; then
2104                                 osname=isc
2105                                 if test "$lns" = "ln -s"; then
2106                                         osvers=4
2107                                 elif $contains _SYSV3 /usr/include/stdio.h > /dev/null 2>&1 ; then
2108                                         osvers=3
2109                                 elif $contains _POSIX_SOURCE /usr/include/stdio.h > /dev/null 2>&1 ; then
2110                                         osvers=2
2111                                 fi
2112                         fi
2113                         tmp=''
2114                         ;;
2115                 pc*)
2116                         if test -n "$DJGPP"; then
2117                                 osname=dos
2118                                 osvers=djgpp
2119                         fi
2120                         ;;
2121                 esac
2122
2123                 case "$1" in
2124                 aix) osname=aix
2125                         tmp=`( (oslevel) 2>/dev/null || echo "not found") 2>&1`
2126                         case "$tmp" in
2127                         'not found') osvers="$4"."$3" ;;
2128                         '<3240'|'<>3240') osvers=3.2.0 ;;
2129                         '=3240'|'>3240'|'<3250'|'<>3250') osvers=3.2.4 ;;
2130                         '=3250'|'>3250') osvers=3.2.5 ;;
2131                         *) osvers=$tmp;;
2132                         esac
2133                         ;;
2134                 *dc.osx) osname=dcosx
2135                         osvers="$3"
2136                         ;;
2137                 dnix) osname=dnix
2138                         osvers="$3"
2139                         ;;
2140                 domainos) osname=apollo
2141                         osvers="$3"
2142                         ;;
2143                 dgux) osname=dgux 
2144                         osvers="$3"
2145                         ;;
2146                 dynixptx*) osname=dynixptx
2147                         osvers=`echo "$4"|sed 's/^v//'`
2148                         ;;
2149                 freebsd) osname=freebsd 
2150                         osvers="$3" ;;
2151                 genix) osname=genix ;;
2152                 hp*) osname=hpux 
2153                         osvers=`echo "$3" | $sed 's,.*\.\([0-9]*\.[0-9]*\),\1,'`
2154                         ;;
2155                 irix*) osname=irix
2156                         case "$3" in
2157                         4*) osvers=4 ;;
2158                         5*) osvers=5 ;;
2159                         *)      osvers="$3" ;;
2160                         esac
2161                         ;;
2162                 linux) osname=linux
2163                         case "$3" in
2164                         *)      osvers="$3" ;;
2165                         esac
2166                         ;;
2167                 MiNT) osname=mint
2168                         ;;
2169                 netbsd*) osname=netbsd
2170                         osvers="$3"
2171                         ;;
2172                 news-os) osvers="$3"
2173                         case "$3" in
2174                         4*) osname=newsos4 ;;
2175                         *) osname=newsos ;;
2176                         esac
2177                         ;;
2178                 bsd386) osname=bsd386
2179                         osvers=`$uname -r`
2180                         ;;
2181                 POSIX-BC | posix-bc ) osname=posix-bc
2182                         osvers="$3"
2183                         ;;
2184                 powerux | power_ux | powermax_os | powermaxos | \
2185                 powerunix | power_unix) osname=powerux
2186                         osvers="$3"
2187                         ;;
2188                 next*) osname=next ;;
2189                 solaris) osname=solaris
2190                         case "$3" in
2191                         5*) osvers=`echo $3 | $sed 's/^5/2/g'` ;;
2192                         *)      osvers="$3" ;;
2193                         esac
2194                         ;;
2195                 sunos) osname=sunos
2196                         case "$3" in
2197                         5*) osname=solaris
2198                                 osvers=`echo $3 | $sed 's/^5/2/g'` ;;
2199                         *)      osvers="$3" ;;
2200                         esac
2201                         ;;
2202                 titanos) osname=titanos
2203                         case "$3" in
2204                         1*) osvers=1 ;;
2205                         2*) osvers=2 ;;
2206                         3*) osvers=3 ;;
2207                         4*) osvers=4 ;;
2208                         *)      osvers="$3" ;;
2209                         esac
2210                         ;;
2211                 ultrix) osname=ultrix
2212                         osvers="$3"
2213                         ;;
2214                 osf1|mls+)      case "$5" in
2215                                 alpha)
2216                                         osname=dec_osf
2217                                         osvers=`echo "$3" | sed 's/^[xvt]//'`
2218                                         ;;
2219                         hp*)    osname=hp_osf1  ;;
2220                         mips)   osname=mips_osf1 ;;
2221                         esac
2222                         ;;
2223                 uts) osname=uts 
2224                         osvers="$3"
2225                         ;;
2226                 qnx) osname=qnx
2227                         osvers="$4"
2228                         ;;
2229                 $2) case "$osname" in
2230                         *isc*) ;;
2231                         *freebsd*) ;;
2232                         svr*)
2233                                 : svr4.x or possibly later
2234                                 case "svr$3" in 
2235                                 ${osname}*)
2236                                         osname=svr$3
2237                                         osvers=$4
2238                                         ;;
2239                                 esac
2240                                 case "$osname" in
2241                                 svr4.0)
2242                                         : Check for ESIX
2243                                         if test -f /stand/boot ; then
2244                                                 eval `grep '^INITPROG=[a-z/0-9]*$' /stand/boot`
2245                                                 if test -n "$INITPROG" -a -f "$INITPROG"; then
2246                         isesix=`strings -a $INITPROG|grep 'ESIX SYSTEM V/386 Release 4.0'`
2247                                                         if test -n "$isesix"; then
2248                                                                 osname=esix4
2249                                                         fi
2250                                                 fi
2251                                         fi
2252                                         ;;
2253                                 esac
2254                                 ;;
2255                         *)      if test -f /etc/systemid; then
2256                                         osname=sco
2257                                         set `echo $3 | $sed 's/\./ /g'` $4
2258                                         if $test -f $src/hints/sco_$1_$2_$3.sh; then
2259                                                 osvers=$1.$2.$3
2260                                         elif $test -f $src/hints/sco_$1_$2.sh; then
2261                                                 osvers=$1.$2
2262                                         elif $test -f $src/hints/sco_$1.sh; then
2263                                                 osvers=$1
2264                                         fi
2265                                 else
2266                                         case "$osname" in
2267                                         '') : Still unknown.  Probably a generic Sys V.
2268                                                 osname="sysv"
2269                                                 osvers="$3"
2270                                                 ;;
2271                                         esac
2272                                 fi
2273                                 ;;
2274                         esac
2275                         ;;
2276                 *)      case "$osname" in
2277                         '') : Still unknown.  Probably a generic BSD.
2278                                 osname="$1"
2279                                 osvers="$3"
2280                                 ;;
2281                         esac
2282                         ;;
2283                 esac
2284         else
2285                 if test -f /vmunix -a -f $src/hints/news_os.sh; then
2286                         (what /vmunix | UU/tr '[A-Z]' '[a-z]') > UU/kernel.what 2>&1
2287                         if $contains news-os UU/kernel.what >/dev/null 2>&1; then
2288                                 osname=news_os
2289                         fi
2290                         $rm -f UU/kernel.what
2291                 elif test -d c:/.; then
2292                         set X $myuname
2293                         osname=os2
2294                         osvers="$5"
2295                 fi
2296         fi
2297         
2298         : Now look for a hint file osname_osvers, unless one has been
2299         : specified already.
2300         case "$hintfile" in
2301         ''|' ')
2302                 file=`echo "${osname}_${osvers}" | $sed -e 's@\.@_@g' -e 's@_$@@'`
2303                 : Also try without trailing minor version numbers.
2304                 xfile=`echo $file | $sed -e 's@_[^_]*$@@'`
2305                 xxfile=`echo $xfile | $sed -e 's@_[^_]*$@@'`
2306                 xxxfile=`echo $xxfile | $sed -e 's@_[^_]*$@@'`
2307                 xxxxfile=`echo $xxxfile | $sed -e 's@_[^_]*$@@'`
2308                 case "$file" in
2309                 '') dflt=none ;;
2310                 *)  case "$osvers" in
2311                         '') dflt=$file
2312                                 ;;
2313                         *)  if $test -f $src/hints/$file.sh ; then
2314                                         dflt=$file
2315                                 elif $test -f $src/hints/$xfile.sh ; then
2316                                         dflt=$xfile
2317                                 elif $test -f $src/hints/$xxfile.sh ; then
2318                                         dflt=$xxfile
2319                                 elif $test -f $src/hints/$xxxfile.sh ; then
2320                                         dflt=$xxxfile
2321                                 elif $test -f $src/hints/$xxxxfile.sh ; then
2322                                         dflt=$xxxxfile
2323                                 elif $test -f "$src/hints/${osname}.sh" ; then
2324                                         dflt="${osname}"
2325                                 else
2326                                         dflt=none
2327                                 fi
2328                                 ;;
2329                         esac
2330                         ;;
2331                 esac
2332                 if $test -f Policy.sh ; then
2333                         case "$dflt" in
2334                         *Policy*) ;;
2335                         none) dflt="Policy" ;;
2336                         *) dflt="Policy $dflt" ;;
2337                         esac
2338                 fi
2339                 ;;
2340         *)
2341                 dflt=`echo $hintfile | $sed 's/\.sh$//'`
2342                 ;;
2343         esac
2344
2345         if $test -f Policy.sh ; then
2346                 $cat <<EOM
2347
2348 There's also a Policy hint file available, which should make the
2349 site-specific (policy) questions easier to answer.
2350 EOM
2351
2352         fi
2353
2354         $cat <<EOM
2355
2356 You may give one or more space-separated answers, or "none" if appropriate.
2357 A well-behaved OS will have no hints, so answering "none" or just "Policy"
2358 is a good thing.  DO NOT give a wrong version.
2359
2360 EOM
2361
2362         rp="Which of these apply, if any?"
2363         . UU/myread
2364         tans=$ans
2365         for file in $tans; do
2366                 if $test X$file = XPolicy -a -f Policy.sh; then
2367                         . Policy.sh
2368                         $cat Policy.sh >> UU/config.sh
2369                 elif $test -f $src/hints/$file.sh; then
2370                         . $src/hints/$file.sh
2371                         $cat $src/hints/$file.sh >> UU/config.sh
2372                 elif $test X$tans = X -o X$tans = Xnone ; then
2373                         : nothing
2374                 else
2375                         : Give one chance to correct a possible typo.
2376                         echo "$file.sh does not exist"
2377                         dflt=$file
2378                         rp="hint to use instead?"
2379                         . UU/myread
2380                         for file in $ans; do
2381                                 if $test -f "$src/hints/$file.sh"; then
2382                                         . $src/hints/$file.sh
2383                                         $cat $src/hints/$file.sh >> UU/config.sh
2384                                 elif $test X$ans = X -o X$ans = Xnone ; then
2385                                         : nothing
2386                                 else
2387                                         echo "$file.sh does not exist -- ignored."
2388                                 fi
2389                         done
2390                 fi
2391         done
2392
2393         hint=recommended
2394         : Remember our hint file for later.
2395         if $test -f "$src/hints/$file.sh" ; then
2396                 hintfile="$file"
2397         else
2398                 hintfile=''
2399         fi
2400 fi
2401 cd UU
2402 ;;
2403 *)
2404         echo " "
2405         echo "Fetching default answers from $config_sh..." >&4
2406         tmp_n="$n"
2407         tmp_c="$c"
2408         cd ..
2409         cp $config_sh config.sh 2>/dev/null
2410         chmod +w config.sh
2411         . ./config.sh
2412         cd UU
2413         cp ../config.sh .
2414         n="$tmp_n"
2415         c="$tmp_c"
2416         hint=previous
2417         ;;
2418 esac
2419 test "$override" && . ./optdef.sh
2420 myuname="$newmyuname"
2421
2422 : Restore computed paths
2423 for file in $loclist $trylist; do
2424         eval $file="\$_$file"
2425 done
2426
2427 cat << EOM
2428
2429 Configure uses the operating system name and version to set some defaults.
2430 The default value is probably right if the name rings a bell. Otherwise,
2431 since spelling matters for me, either accept the default or answer "none"
2432 to leave it blank.
2433
2434 EOM
2435 case "$osname" in
2436         ''|' ')
2437                 case "$hintfile" in
2438                 ''|' '|none) dflt=none ;;
2439                 *)  dflt=`echo $hintfile | $sed -e 's/\.sh$//' -e 's/_.*$//'` ;;
2440                 esac
2441                 ;;
2442         *) dflt="$osname" ;;
2443 esac
2444 rp="Operating system name?"
2445 . ./myread
2446 case "$ans" in
2447 none)  osname='' ;;
2448 *) osname=`echo "$ans" | $sed -e 's/[   ][      ]*/_/g' | ./tr '[A-Z]' '[a-z]'`;;
2449 esac
2450 echo " "
2451 case "$osvers" in
2452         ''|' ')
2453                 case "$hintfile" in
2454                 ''|' '|none) dflt=none ;;
2455                 *)      dflt=`echo $hintfile | $sed -e 's/\.sh$//' -e 's/^[^_]*//'`
2456                         dflt=`echo $dflt | $sed -e 's/^_//' -e 's/_/./g'`
2457                         case "$dflt" in
2458                         ''|' ') dflt=none ;;
2459                         esac
2460                         ;;
2461                 esac
2462                 ;;
2463         *) dflt="$osvers" ;;
2464 esac
2465 rp="Operating system version?"
2466 . ./myread
2467 case "$ans" in
2468 none)  osvers='' ;;
2469 *) osvers="$ans" ;;
2470 esac
2471
2472 : who configured the system
2473 cf_time=`LC_ALL=C; LANGUAGE=C; export LC_ALL; export LANGUAGE; $date 2>&1`
2474 cf_by=`(logname) 2>/dev/null`
2475 case "$cf_by" in
2476 "")
2477         cf_by=`(whoami) 2>/dev/null`
2478         case "$cf_by" in
2479         "") cf_by=unknown ;;
2480         esac ;;
2481 esac
2482
2483 : set up the script used to warn in case of inconsistency
2484 cat <<EOS >whoa
2485 $startsh
2486 EOS
2487 cat <<'EOSC' >>whoa
2488 dflt=y
2489 echo " "
2490 echo "*** WHOA THERE!!! ***" >&4
2491 echo "    The $hint value for \$$var on this machine was \"$was\"!" >&4
2492 rp="    Keep the $hint value?"
2493 . ./myread
2494 case "$ans" in
2495 y) td=$was; tu=$was;;
2496 esac
2497 EOSC
2498
2499 : function used to set $1 to $val
2500 setvar='var=$1; eval "was=\$$1"; td=$define; tu=$undef;
2501 case "$val$was" in
2502 $define$undef) . ./whoa; eval "$var=\$td";;
2503 $undef$define) . ./whoa; eval "$var=\$tu";;
2504 *) eval "$var=$val";;
2505 esac'
2506
2507 cat <<EOM
2508
2509 Perl can be built to take advantage of threads, on some systems.
2510 To do so, Configure must be run with -Dusethreads.
2511
2512 Note that threading is a highly experimental feature, and
2513 some known race conditions still remain.  If you choose to try
2514 it, be very sure to not actually deploy it for production
2515 purposes.  README.threads has more details, and is required
2516 reading if you enable threads.
2517 EOM
2518 case "$usethreads" in
2519 $define|true|[yY]*)     dflt='y';;
2520 *) dflt='n';;
2521 esac
2522 rp='Build a threading Perl?'
2523 . ./myread
2524 case "$ans" in
2525 y|Y)    val="$define" ;;     
2526 *)      val="$undef" ;;
2527 esac
2528 set usethreads
2529 eval $setvar 
2530
2531 case "$d_oldpthreads" in
2532 '')     : Configure tests would be welcome here.  For now, assume undef.
2533         val="$undef" ;;
2534 *)      val="$d_oldpthreads" ;;
2535 esac
2536 set d_oldpthreads
2537 eval $setvar
2538
2539
2540 case "$usethreads" in
2541 "$define"|true|[yY]*)
2542 : Look for a hint-file generated 'call-back-unit'.  If the
2543 : user has specified that a threading perl is to be built,
2544 : we may need to set or change some other defaults.
2545         if $test -f usethreads.cbu; then
2546                 . ./usethreads.cbu
2547         fi
2548         case "$osname" in
2549         aix|dec_osf|dos_djgpp|freebsd|hpux|irix|linux|next|openbsd|os2|solaris|vmesa)
2550                 # Known thread-capable platforms.
2551                 ;;
2552         *)
2553                 cat >&4 <<EOM
2554 $osname is not known to support threads.
2555 Please let perlbug@perl.com know how to do that.
2556
2557 Cannot continue, aborting.
2558 EOM
2559                 exit 1
2560         ;;
2561         esac # $osname
2562     ;;
2563 esac # $usethreads
2564
2565 cat <<EOM
2566
2567 Perl can be built so that multiple Perl interpreters can coexist
2568 within the same Perl executable.  To do so, Configure must be run with
2569 -Dusemultiplicity.
2570
2571 Normally you do not need this and you should answer no.
2572
2573 EOM
2574 case "$usemultiplicity" in
2575 $define|true|[yY]*)     dflt='y';;
2576 *) dflt='n';;
2577 esac
2578 rp='Build Perl for multiplicity?'
2579 . ./myread
2580 case "$ans" in
2581 y|Y)    val="$define" ;;     
2582 *)      val="$undef" ;;
2583 esac
2584 set usemultiplicity
2585 eval $setvar 
2586
2587 cat <<EOM
2588
2589 Perl can be built to take advantage of explicit 64-bit interfaces,
2590 on some systems.  To do so, Configure must be run with -Duse64bits.
2591
2592 If this doesn't make any sense to you, just accept the default 'n'.
2593 EOM
2594 case "$use64bits" in
2595 $define|true|[yY]*)     dflt='y';;
2596 *) dflt='n';;
2597 esac
2598 rp='Try to use explicit 64-bit interfaces, if available?'
2599 . ./myread
2600 case "$ans" in
2601 y|Y) 
2602         val="$define"
2603         ;;     
2604 *)      
2605         val="$undef"
2606         ;;
2607 esac
2608 set use64bits
2609 eval $setvar
2610
2611 case "$archname64" in
2612 '') archname64='' ;;    # not a typo
2613 esac
2614
2615 case "$use64bits" in
2616 "$define"|true|[yY]*)
2617 : Look for a hint-file generated 'call-back-unit'.  If the
2618 : user has specified that a threading perl is to be built,
2619 : we may need to set or change some other defaults.
2620         if $test -f use64bits.cbu; then
2621                 . ./use64bits.cbu
2622         fi
2623         case "$osname" in
2624         dec_osf|hpux|irix|solaris|unicos)
2625                 # Known 64-bit capable platforms.
2626                 ;;
2627         *)
2628                 cat >&4 <<EOM
2629 $osname is not known to support 64-bit interfaces.
2630 Please let perlbug@perl.com know how to do that.
2631
2632 Cannot continue, aborting.
2633 EOM
2634                 exit 1
2635                 ;;
2636         esac
2637         ;;
2638 esac
2639
2640 : determine the architecture name
2641 echo " "
2642 if xxx=`./loc arch blurfl $pth`; $test -f "$xxx"; then
2643         tarch=`arch`"-$osname"
2644 elif xxx=`./loc uname blurfl $pth`; $test -f "$xxx" ; then
2645         if uname -m > tmparch 2>&1 ; then
2646                 tarch=`$sed -e 's/ *$//' -e 's/ /_/g' \
2647                         -e 's/$/'"-$osname/" tmparch`
2648         else
2649                 tarch="$osname"
2650         fi
2651         $rm -f tmparch
2652 else
2653         tarch="$osname"
2654 fi
2655 case "$myarchname" in
2656 ''|"$tarch") ;;
2657 *)
2658         echo "(Your architecture name used to be $myarchname.)"
2659         archname=''
2660         ;;
2661 esac
2662 myarchname="$tarch"
2663 case "$archname" in
2664 '') dflt="$tarch";;
2665 *) dflt="$archname";;
2666 esac
2667 rp='What is your architecture name'
2668 . ./myread
2669 archname="$ans"
2670 case "$usethreads" in
2671 $define)
2672         echo "Threads selected." >&4
2673         case "$archname" in
2674         *-thread*) echo "...and architecture name already has -thread." >&4
2675                 ;;
2676         *)      archname="$archname-thread"
2677                 echo "...setting architecture name to $archname." >&4
2678                 ;;
2679         esac
2680         ;;
2681 esac
2682 case "$usemultiplicity" in
2683 $define)
2684         echo "Multiplicity selected." >&4
2685         case "$archname" in
2686         *-multi*) echo "...and architecture name already has -multi." >&4
2687                 ;;
2688         *)      archname="$archname-multi"
2689                 echo "...setting architecture name to $archname." >&4
2690                 ;;
2691         esac
2692         ;;
2693 esac
2694 case "$use64bits" in
2695 $define)
2696         echo "Explicit 64-bitness selected." >&4
2697         case "$archname64" in
2698         '')
2699                 ;;
2700         *)
2701                 case "$archname" in
2702                 *-$archname64*) echo "...and architecture name already has $archname64." >&4
2703                         ;;
2704                 *)      archname="$archname-$archname64"
2705                         echo "...setting architecture name to $archname." >&4
2706                         ;;
2707                 esac
2708                 ;;
2709         esac
2710 esac
2711
2712 : is AFS running?
2713 echo " "
2714 case "$afs" in
2715 $define|true)   afs=true ;;
2716 $undef|false)   afs=false ;;
2717 *)      if test -d /afs; then
2718                 afs=true
2719         else
2720                 afs=false
2721         fi
2722         ;;
2723 esac
2724 if $afs; then
2725         echo "AFS may be running... I'll be extra cautious then..." >&4
2726 else
2727         echo "AFS does not seem to be running..." >&4
2728 fi
2729
2730 : decide how portable to be.  Allow command line overrides.
2731 case "$d_portable" in
2732 "$undef") ;;
2733 *)      d_portable="$define" ;;
2734 esac
2735
2736 : set up shell script to do ~ expansion
2737 cat >filexp <<EOSS
2738 $startsh
2739 : expand filename
2740 case "\$1" in
2741  ~/*|~)
2742         echo \$1 | $sed "s|~|\${HOME-\$LOGDIR}|"
2743         ;;
2744  ~*)
2745         if $test -f /bin/csh; then
2746                 /bin/csh -f -c "glob \$1"
2747                 failed=\$?
2748                 echo ""
2749                 exit \$failed
2750         else
2751                 name=\`$expr x\$1 : '..\([^/]*\)'\`
2752                 dir=\`$sed -n -e "/^\${name}:/{s/^[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:\([^:]*\).*"'\$'"/\1/" -e p -e q -e '}' </etc/passwd\`
2753                 if $test ! -d "\$dir"; then
2754                         me=\`basename \$0\`
2755                         echo "\$me: can't locate home directory for: \$name" >&2
2756                         exit 1
2757                 fi
2758                 case "\$1" in
2759                 */*)
2760                         echo \$dir/\`$expr x\$1 : '..[^/]*/\(.*\)'\`
2761                         ;;
2762                 *)
2763                         echo \$dir
2764                         ;;
2765                 esac
2766         fi
2767         ;;
2768 *)
2769         echo \$1
2770         ;;
2771 esac
2772 EOSS
2773 chmod +x filexp
2774 $eunicefix filexp
2775
2776 : now set up to get a file name
2777 cat <<EOS >getfile
2778 $startsh
2779 EOS
2780 cat <<'EOSC' >>getfile
2781 tilde=''
2782 fullpath=''
2783 already=''
2784 skip=''
2785 none_ok=''
2786 exp_file=''
2787 nopath_ok=''
2788 orig_rp="$rp"
2789 orig_dflt="$dflt"
2790
2791 case "$fn" in
2792 *\(*)
2793         expr $fn : '.*(\(.*\)).*' | tr ',' $trnl >getfile.ok
2794         fn=`echo $fn | sed 's/(.*)//'`
2795         ;;
2796 esac
2797
2798 case "$fn" in
2799 *:*)
2800         loc_file=`expr $fn : '.*:\(.*\)'`
2801         fn=`expr $fn : '\(.*\):.*'`
2802         ;;
2803 esac
2804
2805 case "$fn" in
2806 *~*) tilde=true;;
2807 esac
2808 case "$fn" in
2809 */*) fullpath=true;;
2810 esac
2811 case "$fn" in
2812 *+*) skip=true;;
2813 esac
2814 case "$fn" in
2815 *n*) none_ok=true;;
2816 esac
2817 case "$fn" in
2818 *e*) exp_file=true;;
2819 esac
2820 case "$fn" in
2821 *p*) nopath_ok=true;;
2822 esac
2823
2824 case "$fn" in
2825 *f*) type='File';;
2826 *d*) type='Directory';;
2827 *l*) type='Locate';;
2828 esac
2829
2830 what="$type"
2831 case "$what" in
2832 Locate) what='File';;
2833 esac
2834
2835 case "$exp_file" in
2836 '')
2837         case "$d_portable" in
2838         "$define") ;;
2839         *) exp_file=true;;
2840         esac
2841         ;;
2842 esac
2843
2844 cd ..
2845 while test "$type"; do
2846         redo=''
2847         rp="$orig_rp"
2848         dflt="$orig_dflt"
2849         case "$tilde" in
2850         true) rp="$rp (~name ok)";;
2851         esac
2852         . UU/myread
2853         if test -f UU/getfile.ok && \
2854                 $contains "^$ans\$" UU/getfile.ok >/dev/null 2>&1
2855         then
2856                 value="$ans"
2857                 ansexp="$ans"
2858                 break
2859         fi
2860         case "$ans" in
2861         none)
2862                 value=''
2863                 ansexp=''
2864                 case "$none_ok" in
2865                 true) type='';;
2866                 esac
2867                 ;;
2868         *)
2869                 case "$tilde" in
2870                 '') value="$ans"
2871                         ansexp="$ans";;
2872                 *)
2873                         value=`UU/filexp $ans`
2874                         case $? in
2875                         0)
2876                                 if test "$ans" != "$value"; then
2877                                         echo "(That expands to $value on this system.)"
2878                                 fi
2879                                 ;;
2880                         *) value="$ans";;
2881                         esac
2882                         ansexp="$value"
2883                         case "$exp_file" in
2884                         '') value="$ans";;
2885                         esac
2886                         ;;
2887                 esac
2888                 case "$fullpath" in
2889                 true)
2890                         case "$ansexp" in
2891                         /*) value="$ansexp" ;;
2892                         *)
2893                                 redo=true
2894                                 case "$already" in
2895                                 true)
2896                                 echo "I shall only accept a full path name, as in /bin/ls." >&4
2897                                 echo "Use a ! shell escape if you wish to check pathnames." >&4
2898                                         ;;
2899                                 *)
2900                                 echo "Please give a full path name, starting with slash." >&4
2901                                         case "$tilde" in
2902                                         true)
2903                                 echo "Note that using ~name is ok provided it expands well." >&4
2904                                                 already=true
2905                                                 ;;
2906                                         esac
2907                                 esac
2908                                 ;;
2909                         esac
2910                         ;;
2911                 esac
2912                 case "$redo" in
2913                 '')
2914                         case "$type" in
2915                         File)
2916                                 if test -f "$ansexp"; then
2917                                         type=''
2918                                 elif test -r "$ansexp" || (test -h "$ansexp") >/dev/null 2>&1
2919                                 then
2920                                         echo "($value is not a plain file, but that's ok.)"
2921                                         type=''
2922                                 fi
2923                                 ;;
2924                         Directory)
2925                                 if test -d "$ansexp"; then
2926                                         type=''
2927                                 fi
2928                                 ;;
2929                         Locate)
2930                                 if test -d "$ansexp"; then
2931                                         echo "(Looking for $loc_file in directory $value.)"
2932                                         value="$value/$loc_file"
2933                                         ansexp="$ansexp/$loc_file"
2934                                 fi
2935                                 if test -f "$ansexp"; then
2936                                         type=''
2937                                 fi
2938                                 case "$nopath_ok" in
2939                                 true)   case "$value" in
2940                                         */*) ;;
2941                                         *)      echo "Assuming $value will be in people's path."
2942                                                 type=''
2943                                                 ;;
2944                                         esac
2945                                         ;;
2946                                 esac
2947                                 ;;
2948                         esac
2949
2950                         case "$skip" in
2951                         true) type='';
2952                         esac
2953
2954                         case "$type" in
2955                         '') ;;
2956                         *)
2957                                 if test "$fastread" = yes; then
2958                                         dflt=y
2959                                 else
2960                                         dflt=n
2961                                 fi
2962                                 rp="$what $value doesn't exist.  Use that name anyway?"
2963                                 . UU/myread
2964                                 dflt=''
2965                                 case "$ans" in
2966                                 y*) type='';;
2967                                 *) echo " ";;
2968                                 esac
2969                                 ;;
2970                         esac
2971                         ;;
2972                 esac
2973                 ;;
2974         esac
2975 done
2976 cd UU
2977 ans="$value"
2978 rp="$orig_rp"
2979 dflt="$orig_dflt"
2980 rm -f getfile.ok
2981 EOSC
2982
2983 : determine root of directory hierarchy where package will be installed.
2984 case "$prefix" in
2985 '')
2986         dflt=`./loc . /usr/local /usr/local /local /opt /usr`
2987         ;;
2988 *)
2989         dflt="$prefix"
2990         ;;
2991 esac
2992 $cat <<EOM
2993
2994 By default, $package will be installed in $dflt/bin, manual
2995 pages under $dflt/man, etc..., i.e. with $dflt as prefix for
2996 all installation directories. Typically set to /usr/local, but you
2997 may choose /usr if you wish to install $package among your system
2998 binaries. If you wish to have binaries under /bin but manual pages
2999 under /usr/local/man, that's ok: you will be prompted separately
3000 for each of the installation directories, the prefix being only used
3001 to set the defaults.
3002
3003 EOM
3004 fn=d~
3005 rp='Installation prefix to use?'
3006 . ./getfile
3007 oldprefix=''
3008 case "$prefix" in
3009 '') ;;
3010 *)
3011         case "$ans" in
3012         "$prefix") ;;
3013         *) oldprefix="$prefix";;
3014         esac
3015         ;;
3016 esac
3017 prefix="$ans"
3018 prefixexp="$ansexp"
3019
3020 : set the prefixit variable, to compute a suitable default value
3021 prefixit='case "$3" in
3022 ""|none)
3023         case "$oldprefix" in
3024         "") eval "$1=\"\$$2\"";;
3025         *)
3026                 case "$3" in
3027                 "") eval "$1=";;
3028                 none)
3029                         eval "tp=\"\$$2\"";
3030                         case "$tp" in
3031                         ""|" ") eval "$1=\"\$$2\"";;
3032                         *) eval "$1=";;
3033                         esac;;
3034                 esac;;
3035         esac;;
3036 *)
3037         eval "tp=\"$oldprefix-\$$2-\""; eval "tp=\"$tp\"";
3038         case "$tp" in
3039         --|/*--|\~*--) eval "$1=\"$prefix/$3\"";;
3040         /*-$oldprefix/*|\~*-$oldprefix/*)
3041                 eval "$1=\`echo \$$2 | sed \"s,^$oldprefix,$prefix,\"\`";;
3042         *) eval "$1=\"\$$2\"";;
3043         esac;;
3044 esac'
3045
3046 : set the base revision
3047 baserev=5.0
3048
3049 : get the patchlevel
3050 echo " "
3051 echo "Getting the current patchlevel..." >&4
3052 if $test -r $rsrc/patchlevel.h;then
3053         patchlevel=`awk '/define[       ]+PERL_VERSION/ {print $3}' $rsrc/patchlevel.h`
3054         subversion=`awk '/define[       ]+PERL_SUBVERSION/ {print $3}' $rsrc/patchlevel.h`
3055 else
3056         patchlevel=0
3057         subversion=0
3058 fi
3059 $echo $n "(You have $package" $c
3060 case "$package" in
3061 "*$baserev")    ;;
3062 *)              $echo $n " $baserev" $c ;;
3063 esac
3064 $echo $n " patchlevel $patchlevel" $c
3065 test 0 -eq "$subversion" || $echo $n " subversion $subversion" $c
3066 echo ".)"
3067
3068 if test 0 -eq "$subversion"; then
3069         version=`LC_ALL=C; export LC_ALL; \
3070                  echo $baserev $patchlevel | \
3071                  $awk '{ printf "%.3f\n", $1 + $2/1000.0 }'`
3072 else
3073         version=`LC_ALL=C; export LC_ALL; \
3074                  echo $baserev $patchlevel $subversion | \
3075                  $awk '{ printf "%.5f\n", $1 + $2/1000.0 + $3/100000.0 }'`
3076 fi
3077 : Figure out perl API version.  Perhaps this should be in patchlevel.h
3078 if test "$subversion" -lt 50; then
3079         apiversion=`LC_ALL=C; export LC_ALL; \
3080                  LANGUAGE=C; export LANGUAGE; \
3081                  echo $baserev $patchlevel | \
3082                  $awk '{ printf "%.3f\n", $1 + $2/1000.0 }'`
3083 else
3084         apiversion="$version"
3085 fi
3086
3087 : determine where private library files go
3088 : Usual default is /usr/local/lib/perl5/$version.
3089 : Also allow things like /opt/perl/lib/$version, since 
3090 : /opt/perl/lib/perl5... would be redundant.
3091 case "$prefix" in
3092 *perl*) set dflt privlib lib/$version ;;
3093 *)       set dflt privlib lib/$package/$version ;;
3094 esac
3095 eval $prefixit
3096 $cat <<EOM
3097
3098 There are some auxiliary files for $package that need to be put into a
3099 private library directory that is accessible by everyone.
3100
3101 EOM
3102 fn=d~+
3103 rp='Pathname where the private library files will reside?'
3104 . ./getfile
3105 if $test "X$privlibexp" != "X$ansexp"; then
3106         installprivlib=''
3107 fi
3108 privlib="$ans"
3109 privlibexp="$ansexp"
3110 if $afs; then
3111         $cat <<EOM
3112
3113 Since you are running AFS, I need to distinguish the directory in which
3114 private files reside from the directory in which they are installed (and from
3115 which they are presumably copied to the former directory by occult means).
3116
3117 EOM
3118         case "$installprivlib" in
3119         '') dflt=`echo $privlibexp | sed 's#^/afs/#/afs/.#'`;;
3120         *) dflt="$installprivlib";;
3121         esac
3122         fn=de~
3123         rp='Where will private files be installed?'
3124         . ./getfile
3125         installprivlib="$ans"
3126 else
3127         installprivlib="$privlibexp"
3128 fi
3129
3130 : set the prefixup variable, to restore leading tilda escape
3131 prefixup='case "$prefixexp" in
3132 "$prefix") ;;
3133 *) eval "$1=\`echo \$$1 | sed \"s,^$prefixexp,$prefix,\"\`";;
3134 esac'
3135
3136 : determine where public architecture dependent libraries go
3137 set archlib archlib
3138 eval $prefixit
3139 : privlib default is /usr/local/lib/$package/$version
3140 : archlib default is /usr/local/lib/$package/$version/$archname
3141 : privlib may have an optional trailing /share.
3142 tdflt=`echo $privlib | $sed 's,/share$,,'`
3143 tdflt=$tdflt/$archname
3144 case "$archlib" in
3145 '')     dflt=$tdflt
3146         ;;
3147 *)      dflt="$archlib"
3148     ;;
3149 esac
3150 cat <<EOM
3151
3152 $spackage contains architecture-dependent library files.  If you are
3153 sharing libraries in a heterogeneous environment, you might store
3154 these files in a separate location.  Otherwise, you can just include
3155 them with the rest of the public library files.
3156
3157 EOM
3158 fn=d+~
3159 rp='Where do you want to put the public architecture-dependent libraries?'
3160 . ./getfile
3161 archlib="$ans"
3162 archlibexp="$ansexp"
3163
3164 if $afs; then
3165         $cat <<EOM
3166
3167 Since you are running AFS, I need to distinguish the directory in
3168 which architecture-dependent library files reside from the directory
3169 in which they are installed (and from which they are presumably copied
3170 to the former directory by occult means).
3171
3172 EOM
3173         case "$installarchlib" in
3174         '') dflt=`echo $archlibexp | sed 's#^/afs/#/afs/.#'`;;
3175         *) dflt="$installarchlib";;
3176         esac
3177         fn=de~
3178         rp='Where will architecture-dependent library files be installed?'
3179         . ./getfile
3180         installarchlib="$ans"
3181 else
3182         installarchlib="$archlibexp"
3183 fi
3184 if $test X"$archlib" = X"$privlib"; then
3185         d_archlib="$undef"
3186 else
3187         d_archlib="$define"
3188 fi
3189
3190 : make some quick guesses about what we are up against
3191 echo " "
3192 $echo $n "Hmm...  $c"
3193 echo exit 1 >bsd
3194 echo exit 1 >usg
3195 echo exit 1 >v7
3196 echo exit 1 >osf1
3197 echo exit 1 >eunice
3198 echo exit 1 >xenix
3199 echo exit 1 >venix
3200 echo exit 1 >os2
3201 d_bsd="$undef"
3202 $cat /usr/include/signal.h /usr/include/sys/signal.h >foo 2>/dev/null
3203 if test -f /osf_boot || $contains 'OSF/1' /usr/include/ctype.h >/dev/null 2>&1
3204 then
3205         echo "Looks kind of like an OSF/1 system, but we'll see..."
3206         echo exit 0 >osf1
3207 elif test `echo abc | tr a-z A-Z` = Abc ; then
3208         xxx=`./loc addbib blurfl $pth`
3209         if $test -f $xxx; then
3210         echo "Looks kind of like a USG system with BSD features, but we'll see..."
3211                 echo exit 0 >bsd
3212                 echo exit 0 >usg
3213         else
3214                 if $contains SIGTSTP foo >/dev/null 2>&1 ; then
3215                         echo "Looks kind of like an extended USG system, but we'll see..."
3216                 else
3217                         echo "Looks kind of like a USG system, but we'll see..."
3218                 fi
3219                 echo exit 0 >usg
3220         fi
3221 elif $contains SIGTSTP foo >/dev/null 2>&1 ; then
3222         echo "Looks kind of like a BSD system, but we'll see..."
3223         d_bsd="$define"
3224         echo exit 0 >bsd
3225 else
3226         echo "Looks kind of like a Version 7 system, but we'll see..."
3227         echo exit 0 >v7
3228 fi
3229 case "$eunicefix" in
3230 *unixtovms*)
3231         $cat <<'EOI'
3232 There is, however, a strange, musty smell in the air that reminds me of
3233 something...hmm...yes...I've got it...there's a VMS nearby, or I'm a Blit.
3234 EOI
3235         echo exit 0 >eunice
3236         d_eunice="$define"
3237 : it so happens the Eunice I know will not run shell scripts in Unix format
3238         ;;
3239 *)
3240         echo " "
3241         echo "Congratulations.  You aren't running Eunice."
3242         d_eunice="$undef"
3243         ;;
3244 esac
3245 : Detect OS2.  The p_ variable is set above in the Head.U unit.
3246 case "$p_" in
3247 :) ;;
3248 *)
3249         $cat <<'EOI'
3250 I have the feeling something is not exactly right, however...don't tell me...
3251 lemme think...does HAL ring a bell?...no, of course, you're only running OS/2!
3252 EOI
3253         echo exit 0 >os2
3254         ;;
3255 esac
3256 if test -f /xenix; then
3257         echo "Actually, this looks more like a XENIX system..."
3258         echo exit 0 >xenix
3259         d_xenix="$define"
3260 else
3261         echo " "
3262         echo "It's not Xenix..."
3263         d_xenix="$undef"
3264 fi
3265 chmod +x xenix
3266 $eunicefix xenix
3267 if test -f /venix; then
3268         echo "Actually, this looks more like a VENIX system..."
3269         echo exit 0 >venix
3270 else
3271         echo " "
3272         if ./xenix; then
3273                 : null
3274         else
3275                 echo "Nor is it Venix..."
3276         fi
3277 fi
3278 chmod +x bsd usg v7 osf1 eunice xenix venix os2
3279 $eunicefix bsd usg v7 osf1 eunice xenix venix os2
3280 $rm -f foo
3281
3282 : see if setuid scripts can be secure
3283 $cat <<EOM
3284
3285 Some kernels have a bug that prevents setuid #! scripts from being
3286 secure.  Some sites have disabled setuid #! scripts because of this.
3287
3288 First let's decide if your kernel supports secure setuid #! scripts.
3289 (If setuid #! scripts would be secure but have been disabled anyway,
3290 don't say that they are secure if asked.)
3291
3292 EOM
3293
3294 val="$undef"
3295 if $test -d /dev/fd; then
3296         echo "#!$ls" >reflect
3297         chmod +x,u+s reflect
3298         ./reflect >flect 2>&1
3299         if $contains "/dev/fd" flect >/dev/null; then
3300                 echo "Congratulations, your kernel has secure setuid scripts!" >&4
3301                 val="$define"
3302         else
3303                 $cat <<EOM
3304 If you are not sure if they are secure, I can check but I'll need a
3305 username and password different from the one you are using right now.
3306 If you don't have such a username or don't want me to test, simply
3307 enter 'none'.
3308
3309 EOM
3310                 rp='Other username to test security of setuid scripts with?'
3311                 dflt='none'
3312                 . ./myread
3313                 case "$ans" in
3314                 n|none)
3315                         case "$d_suidsafe" in
3316                         '')     echo "I'll assume setuid scripts are *not* secure." >&4
3317                                 dflt=n;;
3318                         "$undef")
3319                                 echo "Well, the $hint value is *not* secure." >&4
3320                                 dflt=n;;
3321                         *)      echo "Well, the $hint value *is* secure." >&4
3322                                 dflt=y;;
3323                         esac
3324                         ;;
3325                 *)
3326                         $rm -f reflect flect
3327                         echo "#!$ls" >reflect
3328                         chmod +x,u+s reflect
3329                         echo >flect
3330                         chmod a+w flect
3331                         echo '"su" will (probably) prompt you for '"$ans's password."
3332                         su $ans -c './reflect >flect'
3333                         if $contains "/dev/fd" flect >/dev/null; then
3334                                 echo "Okay, it looks like setuid scripts are secure." >&4
3335                                 dflt=y
3336                         else
3337                                 echo "I don't think setuid scripts are secure." >&4
3338                                 dflt=n
3339                         fi
3340                         ;;
3341                 esac
3342                 rp='Does your kernel have *secure* setuid scripts?'
3343                 . ./myread
3344                 case "$ans" in
3345                 [yY]*)  val="$define";;
3346                 *)      val="$undef";;
3347                 esac
3348         fi
3349 else
3350         echo "I don't think setuid scripts are secure (no /dev/fd directory)." >&4
3351         echo "(That's for file descriptors, not floppy disks.)"
3352         val="$undef"
3353 fi
3354 set d_suidsafe
3355 eval $setvar
3356
3357 $rm -f reflect flect
3358
3359 : now see if they want to do setuid emulation
3360 echo " "
3361 val="$undef"
3362 case "$d_suidsafe" in
3363 "$define")
3364         val="$undef"
3365         echo "No need to emulate SUID scripts since they are secure here." >& 4
3366         ;;
3367 *)
3368         $cat <<EOM
3369 Some systems have disabled setuid scripts, especially systems where
3370 setuid scripts cannot be secure.  On systems where setuid scripts have
3371 been disabled, the setuid/setgid bits on scripts are currently
3372 useless.  It is possible for $package to detect those bits and emulate
3373 setuid/setgid in a secure fashion.  This emulation will only work if
3374 setuid scripts have been disabled in your kernel.
3375
3376 EOM
3377         case "$d_dosuid" in
3378         "$define") dflt=y ;;
3379         *) dflt=n ;;
3380         esac
3381         rp="Do you want to do setuid/setgid emulation?"
3382         . ./myread
3383         case "$ans" in
3384         [yY]*)  val="$define";;
3385         *)      val="$undef";;
3386         esac
3387         ;;
3388 esac
3389 set d_dosuid
3390 eval $setvar
3391
3392 : determine where manual pages are on this system
3393 echo " "
3394 case "$sysman" in
3395 '') 
3396         syspath='/usr/man/man1 /usr/man/mann /usr/man/manl /usr/man/local/man1'
3397         syspath="$syspath /usr/man/u_man/man1 /usr/share/man/man1"
3398         syspath="$syspath /usr/catman/u_man/man1 /usr/man/l_man/man1"
3399         syspath="$syspath /usr/local/man/u_man/man1 /usr/local/man/l_man/man1"
3400         syspath="$syspath /usr/man/man.L /local/man/man1 /usr/local/man/man1"
3401         sysman=`./loc . /usr/man/man1 $syspath`
3402         ;;
3403 esac
3404 if $test -d "$sysman"; then
3405         echo "System manual is in $sysman." >&4
3406 else
3407         echo "Could not find manual pages in source form." >&4
3408 fi
3409
3410 : see what memory models we can support
3411 case "$models" in
3412 '')
3413         $cat >pdp11.c <<'EOP'
3414 int main() {
3415 #ifdef pdp11
3416         exit(0);
3417 #else
3418         exit(1);
3419 #endif
3420 }
3421 EOP
3422         ( cc -o pdp11 pdp11.c ) >/dev/null 2>&1
3423         if $test -f pdp11 && ./pdp11 2>/dev/null; then
3424                 dflt='unsplit split'
3425         else
3426                 tans=`./loc . X /lib/small /lib/large /usr/lib/small /usr/lib/large /lib/medium /usr/lib/medium /lib/huge`
3427                 case "$tans" in
3428                 X) dflt='none';;
3429                 *) if $test -d /lib/small || $test -d /usr/lib/small; then
3430                                 dflt='small'
3431                         else
3432                                 dflt=''
3433                         fi
3434                         if $test -d /lib/medium || $test -d /usr/lib/medium; then
3435                                 dflt="$dflt medium"
3436                         fi
3437                         if $test -d /lib/large || $test -d /usr/lib/large; then
3438                                 dflt="$dflt large"
3439                         fi
3440                         if $test -d /lib/huge || $test -d /usr/lib/huge; then
3441                                 dflt="$dflt huge"
3442                         fi
3443                 esac
3444         fi;;
3445 *) dflt="$models";;
3446 esac
3447 $cat <<EOM
3448  
3449 Some systems have different model sizes.  On most systems they are called
3450 small, medium, large, and huge.  On the PDP11 they are called unsplit and
3451 split.  If your system doesn't support different memory models, say "none".
3452 If you wish to force everything to one memory model, say "none" here and
3453 put the appropriate flags later when it asks you for other cc and ld flags.
3454 Venix systems may wish to put "none" and let the compiler figure things out.
3455 (In the following question multiple model names should be space separated.)
3456
3457 The default for most systems is "none".
3458
3459 EOM
3460 rp="Which memory models are supported?"
3461 . ./myread
3462 models="$ans"
3463
3464 case "$models" in
3465 none)
3466         small=''
3467         medium=''
3468         large=''
3469         huge=''
3470         unsplit=''
3471         split=''
3472         ;;
3473 *split)
3474         case "$split" in
3475         '') if $contains '\-i' $sysman/ld.1 >/dev/null 2>&1 || \
3476                          $contains '\-i' $sysman/cc.1 >/dev/null 2>&1; then
3477                         dflt='-i'
3478                 else
3479                         dflt='none'
3480                 fi;;
3481         *) dflt="$split";;
3482         esac
3483         rp="What flag indicates separate I and D space?"
3484         . ./myread
3485         tans="$ans"
3486         case "$tans" in
3487         none) tans='';;
3488         esac
3489         split="$tans"
3490         unsplit='';;
3491 *large*|*small*|*medium*|*huge*)
3492         case "$models" in
3493         *large*)
3494                 case "$large" in
3495                 '') dflt='-Ml';;
3496                 *) dflt="$large";;
3497                 esac
3498         rp="What flag indicates large model?"
3499         . ./myread
3500         tans="$ans"
3501         case "$tans" in
3502         none) tans='';
3503         esac
3504         large="$tans";;
3505         *) large='';;
3506         esac
3507         case "$models" in
3508         *huge*) case "$huge" in
3509                 '') dflt='-Mh';;
3510                 *) dflt="$huge";;
3511                 esac
3512                 rp="What flag indicates huge model?"
3513                 . ./myread
3514                 tans="$ans"
3515                 case "$tans" in
3516                 none) tans='';
3517                 esac
3518                 huge="$tans";;
3519         *) huge="$large";;
3520         esac
3521         case "$models" in
3522         *medium*) case "$medium" in
3523                 '') dflt='-Mm';;
3524                 *) dflt="$medium";;
3525                 esac
3526                 rp="What flag indicates medium model?"
3527                 . ./myread
3528                 tans="$ans"
3529                 case "$tans" in
3530                 none) tans='';
3531                 esac
3532                 medium="$tans";;
3533         *) medium="$large";;
3534         esac
3535         case "$models" in
3536         *small*) case "$small" in
3537                 '') dflt='none';;
3538                 *) dflt="$small";;
3539                 esac
3540                 rp="What flag indicates small model?"
3541                 . ./myread
3542                 tans="$ans"
3543                 case "$tans" in
3544                 none) tans='';
3545                 esac
3546                 small="$tans";;
3547         *) small='';;
3548         esac
3549         ;;
3550 *)
3551         echo "Unrecognized memory models--you may have to edit Makefile.SH" >&4
3552         ;;
3553 esac
3554 $rm -f pdp11.* pdp11
3555
3556 : see if we need a special compiler
3557 echo " "
3558 if ./usg; then
3559         case "$cc" in
3560         '') case "$Mcc" in
3561                 /*) dflt='Mcc';;
3562                 *) case "$large" in
3563                         -M*) dflt='cc';;
3564                         *)      if $contains '\-M' $sysman/cc.1 >/dev/null 2>&1 ; then
3565                                         if $contains '\-M' $sysman/cpp.1 >/dev/null 2>&1; then
3566                                                 dflt='cc'
3567                                         else
3568                                                 dflt='cc -M'
3569                                         fi
3570                                 else
3571                                         dflt='cc'
3572                                 fi;;
3573                         esac;;
3574                 esac;;
3575         *)  dflt="$cc";;
3576         esac
3577         case "$dflt" in
3578         *M*)    $cat <<'EOM'
3579 On some older systems the default C compiler will not resolve multiple global
3580 references that happen to have the same name.  On some such systems the "Mcc"
3581 command may be used to force these to be resolved.  On other systems a "cc -M"
3582 command is required.  (Note that the -M flag on other systems indicates a
3583 memory model to use!) If you have the Gnu C compiler, you might wish to use
3584 that instead.
3585
3586 EOM
3587         ;;
3588         esac
3589         rp="Use which C compiler?"
3590         . ./myread
3591         cc="$ans"
3592 else
3593         case "$cc" in
3594         '') dflt=cc;;
3595         *) dflt="$cc";;
3596         esac
3597         rp="Use which C compiler?"
3598         . ./myread
3599         cc="$ans"
3600 fi
3601 : Look for a hint-file generated 'call-back-unit'.  Now that the
3602 : user has specified the compiler, we may need to set or change some
3603 : other defaults.
3604 if $test -f cc.cbu; then
3605     . ./cc.cbu
3606 fi
3607 echo " "
3608 echo "Checking for GNU cc in disguise and/or its version number..." >&4
3609 $cat >gccvers.c <<EOM
3610 #include <stdio.h>
3611 int main() {
3612 #ifdef __GNUC__
3613 #ifdef __VERSION__
3614         printf("%s\n", __VERSION__);
3615 #else
3616         printf("%s\n", "1");
3617 #endif
3618 #endif
3619         exit(0);
3620 }
3621 EOM
3622 if $cc -o gccvers gccvers.c >/dev/null 2>&1; then
3623         gccversion=`./gccvers`
3624         case "$gccversion" in
3625         '') echo "You are not using GNU cc." ;;
3626         *)  echo "You are using GNU cc $gccversion." ;;
3627         esac
3628 else
3629         echo " "
3630         echo "*** WHOA THERE!!! ***" >&4
3631         echo "    Your C compiler \"$cc\" doesn't seem to be working!" >&4
3632         case "$knowitall" in
3633         '')
3634         echo "    You'd better start hunting for one and let me know about it." >&4
3635                 exit 1
3636                 ;;
3637         esac
3638 fi
3639 $rm -f gccvers*
3640 case "$gccversion" in
3641 1*) cpp=`./loc gcc-cpp $cpp $pth` ;;
3642 esac
3643
3644 : What should the include directory be ?
3645 echo " "
3646 $echo $n "Hmm...  $c"
3647 dflt='/usr/include'
3648 incpath=''
3649 mips_type=''
3650 if $test -f /bin/mips && /bin/mips; then
3651         echo "Looks like a MIPS system..."
3652         $cat >usr.c <<'EOCP'
3653 #ifdef SYSTYPE_BSD43
3654 /bsd43
3655 #endif
3656 EOCP
3657         if $cc -E usr.c > usr.out && $contains / usr.out >/dev/null 2>&1; then
3658                 dflt='/bsd43/usr/include'
3659                 incpath='/bsd43'
3660                 mips_type='BSD 4.3'
3661         else
3662                 mips_type='System V'
3663         fi
3664         $rm -f usr.c usr.out
3665         echo "and you're compiling with the $mips_type compiler and libraries."
3666         xxx_prompt=y
3667         echo "exit 0" >mips
3668 else
3669         echo "Doesn't look like a MIPS system."
3670         xxx_prompt=n
3671         echo "exit 1" >mips
3672 fi
3673 chmod +x mips
3674 $eunicefix mips
3675 case "$usrinc" in
3676 '') ;;
3677 *) dflt="$usrinc";;
3678 esac
3679 case "$xxx_prompt" in
3680 y)      fn=d/
3681         echo " "
3682         rp='Where are the include files you want to use?'
3683         . ./getfile
3684         usrinc="$ans"
3685         ;;
3686 *)      usrinc="$dflt"
3687         ;;
3688 esac
3689
3690 : see how we invoke the C preprocessor
3691 echo " "
3692 echo "Now, how can we feed standard input to your C preprocessor..." >&4
3693 cat <<'EOT' >testcpp.c
3694 #define ABC abc
3695 #define XYZ xyz
3696 ABC.XYZ
3697 EOT
3698 cd ..
3699 if test ! -f cppstdin; then
3700         echo 'cat >.$$.c; '"$cc"' -E ${1+"$@"} .$$.c; rm .$$.c' >cppstdin
3701 else
3702         echo "Keeping your $hint cppstdin wrapper."
3703 fi
3704 chmod 755 cppstdin
3705 wrapper=`pwd`/cppstdin
3706 ok='false'
3707 cd UU
3708
3709 if $test "X$cppstdin" != "X" && \
3710         $cppstdin $cppminus <testcpp.c >testcpp.out 2>&1 && \
3711         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
3712 then
3713         echo "You used to use $cppstdin $cppminus so we'll use that again."
3714         case "$cpprun" in
3715         '') echo "But let's see if we can live without a wrapper..." ;;
3716         *)
3717                 if $cpprun $cpplast <testcpp.c >testcpp.out 2>&1 && \
3718                         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
3719                 then
3720                         echo "(And we'll use $cpprun $cpplast to preprocess directly.)"
3721                         ok='true'
3722                 else
3723                         echo "(However, $cpprun $cpplast does not work, let's see...)"
3724                 fi
3725                 ;;
3726         esac
3727 else
3728         case "$cppstdin" in
3729         '') ;;
3730         *)
3731                 echo "Good old $cppstdin $cppminus does not seem to be of any help..."
3732                 ;;
3733         esac
3734 fi
3735
3736 if $ok; then
3737         : nothing
3738 elif echo 'Maybe "'"$cc"' -E" will work...'; \
3739         $cc -E <testcpp.c >testcpp.out 2>&1; \
3740         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3741         echo "Yup, it does."
3742         x_cpp="$cc -E"
3743         x_minus='';
3744 elif echo 'Nope...maybe "'"$cc"' -E -" will work...'; \
3745         $cc -E - <testcpp.c >testcpp.out 2>&1; \
3746         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3747         echo "Yup, it does."
3748         x_cpp="$cc -E"
3749         x_minus='-';
3750 elif echo 'Nope...maybe "'"$cc"' -P" will work...'; \
3751         $cc -P <testcpp.c >testcpp.out 2>&1; \
3752         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3753         echo "Yipee, that works!"
3754         x_cpp="$cc -P"
3755         x_minus='';
3756 elif echo 'Nope...maybe "'"$cc"' -P -" will work...'; \
3757         $cc -P - <testcpp.c >testcpp.out 2>&1; \
3758         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3759         echo "At long last!"
3760         x_cpp="$cc -P"
3761         x_minus='-';
3762 elif echo 'No such luck, maybe "'$cpp'" will work...'; \
3763         $cpp <testcpp.c >testcpp.out 2>&1; \
3764         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3765         echo "It works!"
3766         x_cpp="$cpp"
3767         x_minus='';
3768 elif echo 'Nixed again...maybe "'$cpp' -" will work...'; \
3769         $cpp - <testcpp.c >testcpp.out 2>&1; \
3770         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3771         echo "Hooray, it works!  I was beginning to wonder."
3772         x_cpp="$cpp"
3773         x_minus='-';
3774 elif echo 'Uh-uh.  Time to get fancy.  Trying a wrapper...'; \
3775         $wrapper <testcpp.c >testcpp.out 2>&1; \
3776         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3777         x_cpp="$wrapper"
3778         x_minus=''
3779         echo "Eureka!"
3780 else
3781         dflt=''
3782         rp="No dice.  I can't find a C preprocessor.  Name one:"
3783         . ./myread
3784         x_cpp="$ans"
3785         x_minus=''
3786         $x_cpp <testcpp.c >testcpp.out 2>&1
3787         if $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3788                 echo "OK, that will do." >&4
3789         else
3790 echo "Sorry, I can't get that to work.  Go find one and rerun Configure." >&4
3791                 exit 1
3792         fi
3793 fi
3794
3795 case "$ok" in
3796 false)
3797         cppstdin="$x_cpp"
3798         cppminus="$x_minus"
3799         cpprun="$x_cpp"
3800         cpplast="$x_minus"
3801         set X $x_cpp
3802         shift
3803         case "$1" in
3804         "$cpp")
3805                 echo "Perhaps can we force $cc -E using a wrapper..."
3806                 if $wrapper <testcpp.c >testcpp.out 2>&1; \
3807                         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
3808                 then
3809                         echo "Yup, we can."
3810                         cppstdin="$wrapper"
3811                         cppminus='';
3812                 else
3813                         echo "Nope, we'll have to live without it..."
3814                 fi
3815                 ;;
3816         esac
3817         case "$cpprun" in
3818         "$wrapper")
3819                 cpprun=''
3820                 cpplast=''
3821                 ;;
3822         esac
3823         ;;
3824 esac
3825
3826 case "$cppstdin" in
3827 "$wrapper"|'cppstdin') ;;
3828 *) $rm -f $wrapper;;
3829 esac
3830 $rm -f testcpp.c testcpp.out
3831
3832 : Set private lib path
3833 case "$plibpth" in
3834 '') if ./mips; then
3835                 plibpth="$incpath/usr/lib /usr/local/lib /usr/ccs/lib"
3836         fi;;
3837 esac
3838 case "$libpth" in
3839 ' ') dlist='';;
3840 '') dlist="$loclibpth $plibpth $glibpth";;
3841 *) dlist="$libpth";;
3842 esac
3843
3844 : Now check and see which directories actually exist, avoiding duplicates
3845 libpth=''
3846 for xxx in $dlist
3847 do
3848     if $test -d $xxx; then
3849                 case " $libpth " in
3850                 *" $xxx "*) ;;
3851                 *) libpth="$libpth $xxx";;
3852                 esac
3853     fi
3854 done
3855 $cat <<'EOM'
3856
3857 Some systems have incompatible or broken versions of libraries.  Among
3858 the directories listed in the question below, please remove any you
3859 know not to be holding relevant libraries, and add any that are needed.
3860 Say "none" for none.
3861
3862 EOM
3863 case "$libpth" in
3864 '') dflt='none';;
3865 *)
3866         set X $libpth
3867         shift
3868         dflt=${1+"$@"}
3869         ;;
3870 esac
3871 rp="Directories to use for library searches?"
3872 . ./myread
3873 case "$ans" in
3874 none) libpth=' ';;
3875 *) libpth="$ans";;
3876 esac
3877
3878 : compute shared library extension
3879 case "$so" in
3880 '')
3881         if xxx=`./loc libc.sl X $libpth`; $test -f "$xxx"; then
3882                 dflt='sl'
3883         else
3884                 dflt='so'
3885         fi
3886         ;;
3887 *) dflt="$so";;
3888 esac
3889 $cat <<EOM
3890
3891 On some systems, shared libraries may be available.  Answer 'none' if
3892 you want to suppress searching of shared libraries for the remaining
3893 of this configuration.
3894
3895 EOM
3896 rp='What is the file extension used for shared libraries?'
3897 . ./myread
3898 so="$ans"
3899
3900 : Define several unixisms.
3901 : Hints files or command line option can be used to override them.
3902 : The convoluted testing is in case hints files set either the old
3903 : or the new name.
3904 case "$_exe" in
3905 '')     case "$exe_ext" in
3906     '') ;;
3907         *)      _exe="$exe_ext" ;;
3908         esac
3909         ;;
3910 esac
3911 case "$_a" in
3912 '')     case "$lib_ext" in
3913     '') _a='.a';;
3914         *)      _a="$lib_ext" ;;
3915         esac
3916         ;;
3917 esac
3918 case "$_o" in
3919 '') case "$obj_ext" in
3920         '')     _o='.o';;
3921         *)      _o="$obj_ext";;
3922         esac
3923         ;;
3924 esac
3925 case "$p_" in
3926 '') case "$path_sep" in
3927         '')     p_=':';;
3928         *)      p_="$path_sep";;
3929         esac
3930         ;;
3931 esac
3932 exe_ext=$_exe
3933 lib_ext=$_a
3934 obj_ext=$_o
3935 path_sep=$p_
3936
3937 : Which makefile gets called first.  This is used by make depend.
3938 case "$firstmakefile" in
3939 '') firstmakefile='makefile';;
3940 esac
3941
3942 : Looking for optional libraries
3943 echo " "
3944 echo "Checking for optional libraries..." >&4
3945 case "$libs" in
3946 ' '|'') dflt='';;
3947 *) dflt="$libs";;
3948 esac
3949 case "$libswanted" in
3950 '') libswanted='c_s';;
3951 esac
3952 for thislib in $libswanted; do
3953         
3954         if xxx=`./loc lib$thislib.$so.[0-9]'*' X $libpth`;
3955                 $test -f "$xxx" -a "X$ignore_versioned_solibs" = "X"; then
3956                 echo "Found -l$thislib (shared)."
3957                 case " $dflt " in
3958                 *"-l$thislib "*);;
3959                 *) dflt="$dflt -l$thislib";;
3960                 esac
3961         elif xxx=`./loc lib$thislib.$so X $libpth` ; $test -f "$xxx"; then
3962                 echo "Found -l$thislib (shared)."
3963                 case " $dflt " in
3964                 *"-l$thislib "*);;
3965                 *) dflt="$dflt -l$thislib";;
3966                 esac
3967         elif xxx=`./loc lib$thislib$_a X $libpth`; $test -f "$xxx"; then
3968                 echo "Found -l$thislib."
3969                 case " $dflt " in
3970                 *"-l$thislib "*);;
3971                 *) dflt="$dflt -l$thislib";;
3972                 esac
3973         elif xxx=`./loc $thislib$_a X $libpth`; $test -f "$xxx"; then
3974                 echo "Found -l$thislib."
3975                 case " $dflt " in
3976                 *"-l$thislib "*);;
3977                 *) dflt="$dflt -l$thislib";;
3978                 esac
3979         elif xxx=`./loc lib${thislib}_s$_a X $libpth`; $test -f "$xxx"; then
3980                 echo "Found -l${thislib}_s."
3981                 case " $dflt " in
3982                 *"-l$thislib "*);;
3983                 *) dflt="$dflt -l${thislib}_s";;
3984                 esac
3985         elif xxx=`./loc Slib$thislib$_a X $xlibpth`; $test -f "$xxx"; then
3986                 echo "Found -l$thislib."
3987                 case " $dflt " in
3988                 *"-l$thislib "*);;
3989                 *) dflt="$dflt -l$thislib";;
3990                 esac
3991         else
3992                 echo "No -l$thislib."
3993         fi
3994 done
3995 set X $dflt
3996 shift
3997 dflt="$*"
3998 case "$libs" in
3999 '') dflt="$dflt";;
4000 *) dflt="$libs";;
4001 esac
4002 case "$dflt" in
4003 ' '|'') dflt='none';;
4004 esac
4005
4006 $cat <<EOM
4007  
4008 Some versions of Unix support shared libraries, which make executables smaller
4009 but make load time slightly longer.
4010
4011 On some systems, mostly System V Release 3's, the shared library is included
4012 by putting the option "-lc_s" as the last thing on the cc command line when
4013 linking.  Other systems use shared libraries by default.  There may be other
4014 libraries needed to compile $package on your machine as well.  If your system
4015 needs the "-lc_s" option, include it here.  Include any other special libraries
4016 here as well.  Say "none" for none.
4017 EOM
4018
4019 echo " "
4020 rp="Any additional libraries?"
4021 . ./myread
4022 case "$ans" in
4023 none) libs=' ';;
4024 *) libs="$ans";;
4025 esac
4026
4027 : determine optimize, if desired, or use for debug flag also
4028 case "$optimize" in
4029 ' '|$undef) dflt='none';;
4030 '') dflt='-O';;
4031 *) dflt="$optimize";;
4032 esac
4033 $cat <<EOH
4034
4035 Some C compilers have problems with their optimizers.  By default, $package
4036 compiles with the -O flag to use the optimizer.  Alternately, you might want
4037 to use the symbolic debugger, which uses the -g flag (on traditional Unix
4038 systems).  Either flag can be specified here.  To use neither flag, specify
4039 the word "none".
4040
4041 EOH
4042 rp="What optimizer/debugger flag should be used?"
4043 . ./myread
4044 optimize="$ans"
4045 case "$optimize" in
4046 'none') optimize=" ";;
4047 esac
4048
4049 dflt=''
4050 : We will not override a previous value, but we might want to
4051 : augment a hint file
4052 case "$hint" in
4053 none|recommended)
4054         case "$gccversion" in
4055         1*) dflt='-fpcc-struct-return' ;;
4056         esac
4057         case "$optimize" in
4058         *-g*) dflt="$dflt -DDEBUGGING";;
4059         esac
4060         case "$gccversion" in
4061         2*) if test -d /etc/conf/kconfig.d &&
4062                         $contains _POSIX_VERSION $usrinc/sys/unistd.h >/dev/null 2>&1
4063                 then
4064                         dflt="$dflt -posix"
4065                 fi
4066                 ;;
4067         esac
4068         ;;
4069 esac
4070
4071 case "$mips_type" in
4072 *BSD*|'') inclwanted="$locincpth $usrinc";;
4073 *) inclwanted="$locincpth $inclwanted $usrinc/bsd";;
4074 esac
4075 for thisincl in $inclwanted; do
4076         if $test -d $thisincl; then
4077                 if $test x$thisincl != x$usrinc; then
4078                         case "$dflt" in
4079                         *$thisincl*);;
4080                         *) dflt="$dflt -I$thisincl";;
4081                         esac
4082                 fi
4083         fi
4084 done
4085
4086 inctest='if $contains $2 $usrinc/$1 >/dev/null 2>&1; then
4087         xxx=true;
4088 elif $contains $2 $usrinc/sys/$1 >/dev/null 2>&1; then
4089         xxx=true;
4090 else
4091         xxx=false;
4092 fi;
4093 if $xxx; then
4094         case "$dflt" in
4095         *$2*);;
4096         *) dflt="$dflt -D$2";;
4097         esac;
4098 fi'
4099
4100 set signal.h LANGUAGE_C; eval $inctest
4101
4102 case "$hint" in
4103 none|recommended) dflt="$ccflags $dflt" ;;
4104 *) dflt="$ccflags";;
4105 esac
4106
4107 case "$dflt" in
4108 ''|' ') dflt=none;;
4109 esac
4110 $cat <<EOH
4111
4112 Your C compiler may want other flags.  For this question you should include
4113 -I/whatever and -DWHATEVER flags and any other flags used by the C compiler,
4114 but you should NOT include libraries or ld flags like -lwhatever.  If you
4115 want $package to honor its debug switch, you should include -DDEBUGGING here.
4116 Your C compiler might also need additional flags, such as -D_POSIX_SOURCE.
4117
4118 To use no flags, specify the word "none".
4119
4120 EOH
4121 set X $dflt
4122 shift
4123 dflt=${1+"$@"}
4124 rp="Any additional cc flags?"
4125 . ./myread
4126 case "$ans" in
4127 none) ccflags='';;
4128 *) ccflags="$ans";;
4129 esac
4130
4131 : the following weeds options from ccflags that are of no interest to cpp
4132 cppflags="$ccflags"
4133 case "$gccversion" in
4134 1*) cppflags="$cppflags -D__GNUC__"
4135 esac
4136 case "$mips_type" in
4137 '');;
4138 *BSD*) cppflags="$cppflags -DSYSTYPE_BSD43";;
4139 esac
4140 case "$cppflags" in
4141 '');;
4142 *)
4143         echo " "
4144         echo "Let me guess what the preprocessor flags are..." >&4
4145         set X $cppflags
4146         shift
4147         cppflags=''
4148         $cat >cpp.c <<'EOM'
4149 #define BLURFL foo
4150
4151 BLURFL xx LFRULB
4152 EOM
4153         previous=''
4154         for flag in $*
4155         do
4156                 case "$flag" in
4157                 -*) ftry="$flag";;
4158                 *) ftry="$previous $flag";;
4159                 esac
4160                 if $cppstdin -DLFRULB=bar $cppflags $ftry $cppminus <cpp.c \
4161                         >cpp1.out 2>/dev/null && \
4162                         $cpprun -DLFRULB=bar $cppflags $ftry $cpplast <cpp.c \
4163                         >cpp2.out 2>/dev/null && \
4164                         $contains 'foo.*xx.*bar' cpp1.out >/dev/null 2>&1 && \
4165                         $contains 'foo.*xx.*bar' cpp2.out >/dev/null 2>&1
4166                 then
4167                         cppflags="$cppflags $ftry"
4168                         previous=''
4169                 else
4170                         previous="$flag"
4171                 fi
4172         done
4173         set X $cppflags
4174         shift
4175         cppflags=${1+"$@"}
4176         case "$cppflags" in
4177         *-*)  echo "They appear to be: $cppflags";;
4178         esac
4179         $rm -f cpp.c cpp?.out
4180         ;;
4181 esac
4182
4183 : flags used in final linking phase
4184 case "$ldflags" in
4185 '') if ./venix; then
4186                 dflt='-i -z'
4187         else
4188                 dflt=''
4189         fi
4190         case "$ccflags" in
4191         *-posix*) dflt="$dflt -posix" ;;
4192         esac
4193         ;;
4194 *) dflt="$ldflags";;
4195 esac
4196
4197 : Try to guess additional flags to pick up local libraries.
4198 for thislibdir in $libpth; do
4199         case " $loclibpth " in
4200         *" $thislibdir "*)
4201                 case "$dflt " in 
4202                 *"-L$thislibdir "*) ;;
4203                 *)  dflt="$dflt -L$thislibdir" ;;
4204                 esac
4205                 ;;
4206         esac
4207 done
4208
4209 case "$dflt" in
4210 '') dflt='none' ;;
4211 esac
4212
4213 $cat <<EOH
4214
4215 Your C linker may need flags.  For this question you should
4216 include -L/whatever and any other flags used by the C linker, but you
4217 should NOT include libraries like -lwhatever.
4218
4219 Make sure you include the appropriate -L/path flags if your C linker
4220 does not normally search all of the directories you specified above,
4221 namely
4222         $libpth
4223 To use no flags, specify the word "none".
4224
4225 EOH
4226
4227 rp="Any additional ld flags (NOT including libraries)?"
4228 . ./myread
4229 case "$ans" in
4230 none) ldflags='';;
4231 *) ldflags="$ans";;
4232 esac
4233 rmlist="$rmlist pdp11"
4234
4235 : coherency check
4236 echo " "
4237 echo "Checking your choice of C compiler and flags for coherency..." >&4
4238 $cat > try.c <<'EOF'
4239 #include <stdio.h>
4240 int main() { printf("Ok\n"); exit(0); }
4241 EOF
4242 set X $cc $optimize $ccflags -o try $ldflags try.c $libs
4243 shift
4244 $cat >try.msg <<'EOM'
4245 I've tried to compile and run the following simple program:
4246
4247 EOM
4248 $cat try.c >> try.msg
4249
4250 $cat >> try.msg <<EOM
4251
4252 I used the command:
4253
4254         $*
4255         ./try
4256
4257 and I got the following output:
4258
4259 EOM
4260 dflt=y
4261 if sh -c "$cc $optimize $ccflags -o try $ldflags try.c $libs" >>try.msg 2>&1; then
4262         if sh -c './try' >>try.msg 2>&1; then
4263                 xxx=`./try`
4264                 case "$xxx" in
4265                 "Ok") dflt=n ;;
4266                 *)      echo 'The program compiled OK, but produced no output.' >> try.msg
4267                         case " $libs " in
4268                         *" -lsfio "*)
4269                                 cat >> try.msg <<'EOQS'
4270 If $libs contains -lsfio, and sfio is mis-configured, then it
4271 sometimes (apparently) runs and exits with a 0 status, but with no
4272 output!  It may have to do with sfio's use of _exit vs. exit.
4273
4274 EOQS
4275                                 rp="You have a big problem.  Shall I abort Configure"
4276                                 dflt=y
4277                                 ;;
4278                         esac
4279                         ;;
4280                 esac
4281         else
4282                 echo "The program compiled OK, but exited with status $?." >>try.msg
4283                 rp="You have a problem.  Shall I abort Configure"
4284                 dflt=y
4285         fi
4286 else
4287         echo "I can't compile the test program." >>try.msg
4288         rp="You have a BIG problem.  Shall I abort Configure"
4289         dflt=y
4290 fi
4291 case "$dflt" in
4292 y)
4293         $cat try.msg >&4
4294         case "$knowitall" in
4295         '')
4296                 echo "(The supplied flags or libraries might be incorrect.)"
4297                 ;;
4298         *) dflt=n;;
4299         esac
4300         echo " "
4301         . ./myread
4302         case "$ans" in
4303         n*|N*) ;;
4304         *)      echo "Ok.  Stopping Configure." >&4
4305                 exit 1
4306                 ;;
4307         esac
4308         ;;
4309 n) echo "OK, that should do.";;
4310 esac
4311 $rm -f try try.* core
4312
4313 : determine filename position in cpp output
4314 echo " "
4315 echo "Computing filename position in cpp output for #include directives..." >&4
4316 echo '#include <stdio.h>' > foo.c
4317 $cat >fieldn <<EOF
4318 $startsh
4319 $cppstdin $cppflags $cppminus <foo.c 2>/dev/null | \
4320 $grep '^[       ]*#.*stdio\.h' | \
4321 while read cline; do
4322         pos=1
4323         set \$cline
4324         while $test \$# -gt 0; do
4325                 if $test -r \`echo \$1 | $tr -d '"'\`; then
4326                         echo "\$pos"
4327                         exit 0
4328                 fi
4329                 shift
4330                 pos=\`expr \$pos + 1\`
4331         done
4332 done
4333 EOF
4334 chmod +x fieldn
4335 fieldn=`./fieldn`
4336 $rm -f foo.c fieldn
4337 case $fieldn in
4338 '') pos='???';;
4339 1) pos=first;;
4340 2) pos=second;;
4341 3) pos=third;;
4342 *) pos="${fieldn}th";;
4343 esac
4344 echo "Your cpp writes the filename in the $pos field of the line."
4345
4346 : locate header file
4347 $cat >findhdr <<EOF
4348 $startsh
4349 wanted=\$1
4350 name=''
4351 for usrincdir in $usrinc
4352 do
4353         if test -f \$usrincdir/\$wanted; then
4354                 echo "\$usrincdir/\$wanted"
4355                 exit 0
4356         fi
4357 done
4358 awkprg='{ print \$$fieldn }'
4359 echo "#include <\$wanted>" > foo\$\$.c
4360 $cppstdin $cppminus $cppflags < foo\$\$.c 2>/dev/null | \
4361 $grep "^[       ]*#.*\$wanted" | \
4362 while read cline; do
4363         name=\`echo \$cline | $awk "\$awkprg" | $tr -d '"'\`
4364         case "\$name" in
4365         *[/\\\\]\$wanted) echo "\$name"; exit 0;;
4366         *) name='';;
4367         esac;
4368 done;
4369 $rm -f foo\$\$.c;
4370 case "\$name" in
4371 '') exit 1;;
4372 esac
4373 EOF
4374 chmod +x findhdr
4375
4376 : define an alternate in-header-list? function
4377 inhdr='echo " "; td=$define; tu=$undef; yyy=$@;
4378 cont=true; xxf="echo \"<\$1> found.\" >&4";
4379 case $# in 2) xxnf="echo \"<\$1> NOT found.\" >&4";;
4380 *) xxnf="echo \"<\$1> NOT found, ...\" >&4";;
4381 esac;
4382 case $# in 4) instead=instead;; *) instead="at last";; esac;
4383 while $test "$cont"; do
4384         xxx=`./findhdr $1`
4385         var=$2; eval "was=\$$2";
4386         if $test "$xxx" && $test -r "$xxx";
4387         then eval $xxf;
4388         eval "case \"\$$var\" in $undef) . ./whoa; esac"; eval "$var=\$td";
4389                 cont="";
4390         else eval $xxnf;
4391         eval "case \"\$$var\" in $define) . ./whoa; esac"; eval "$var=\$tu"; fi;
4392         set $yyy; shift; shift; yyy=$@;
4393         case $# in 0) cont="";;
4394         2) xxf="echo \"but I found <\$1> $instead.\" >&4";
4395                 xxnf="echo \"and I did not find <\$1> either.\" >&4";;
4396         *) xxf="echo \"but I found <\$1\> instead.\" >&4";
4397                 xxnf="echo \"there is no <\$1>, ...\" >&4";;
4398         esac;
4399 done;
4400 while $test "$yyy";
4401 do set $yyy; var=$2; eval "was=\$$2";
4402         eval "case \"\$$var\" in $define) . ./whoa; esac"; eval "$var=\$tu";
4403         set $yyy; shift; shift; yyy=$@;
4404 done'
4405
4406 : see if this is a malloc.h system
4407 set malloc.h i_malloc
4408 eval $inhdr
4409
4410 : see if stdlib is available
4411 set stdlib.h i_stdlib
4412 eval $inhdr
4413
4414 : determine which malloc to compile in
4415 echo " "
4416 case "$usemymalloc" in
4417 ''|[yY]*|true|$define)  dflt='y' ;;
4418 *)      dflt='n' ;;
4419 esac
4420 rp="Do you wish to attempt to use the malloc that comes with $package?"
4421 . ./myread
4422 usemymalloc="$ans"
4423 case "$ans" in
4424 y*|true)
4425         usemymalloc='y'
4426         mallocsrc='malloc.c'
4427         mallocobj="malloc$_o"
4428         d_mymalloc="$define"
4429         case "$libs" in
4430         *-lmalloc*)
4431                 : Remove malloc from list of libraries to use
4432                 echo "Removing unneeded -lmalloc from library list" >&4
4433                 set `echo X $libs | $sed -e 's/-lmalloc / /' -e 's/-lmalloc$//'`
4434                 shift
4435                 libs="$*"
4436                 echo "libs = $libs" >&4
4437                 ;;
4438         esac
4439         ;;
4440 *)
4441         usemymalloc='n'
4442         mallocsrc=''
4443         mallocobj=''
4444         d_mymalloc="$undef"
4445         ;;
4446 esac
4447
4448 : compute the return types of malloc and free
4449 echo " "
4450 $cat >malloc.c <<END
4451 #$i_malloc I_MALLOC
4452 #$i_stdlib I_STDLIB
4453 #include <stdio.h>
4454 #include <sys/types.h>
4455 #ifdef I_MALLOC
4456 #include <malloc.h>
4457 #endif
4458 #ifdef I_STDLIB
4459 #include <stdlib.h>
4460 #endif
4461 #ifdef TRY_MALLOC
4462 void *malloc();
4463 #endif
4464 #ifdef TRY_FREE
4465 void free();
4466 #endif
4467 END
4468 case "$malloctype" in
4469 '')
4470         if $cc $ccflags -c -DTRY_MALLOC malloc.c >/dev/null 2>&1; then
4471                 malloctype='void *'
4472         else
4473                 malloctype='char *'
4474         fi
4475         ;;
4476 esac
4477 echo "Your system wants malloc to return '$malloctype', it would seem." >&4
4478
4479 case "$freetype" in
4480 '')
4481         if $cc $ccflags -c -DTRY_FREE malloc.c >/dev/null 2>&1; then
4482                 freetype='void'
4483         else
4484                 freetype='int'
4485         fi
4486         ;;
4487 esac
4488 echo "Your system uses $freetype free(), it would seem." >&4
4489 $rm -f malloc.[co]
4490 : Cruising for prototypes
4491 echo " "
4492 echo "Checking out function prototypes..." >&4
4493 $cat >prototype.c <<'EOCP'
4494 int main(int argc, char *argv[]) {
4495         exit(0);}
4496 EOCP
4497 if $cc $ccflags -c prototype.c >prototype.out 2>&1 ; then
4498         echo "Your C compiler appears to support function prototypes."
4499         val="$define"
4500 else
4501         echo "Your C compiler doesn't seem to understand function prototypes."
4502         val="$undef"
4503 fi
4504 set prototype
4505 eval $setvar
4506 $rm -f prototype*
4507
4508 case "$prototype" in
4509 "$define") ;;
4510 *)      ansi2knr='ansi2knr'
4511         echo " "
4512         cat <<EOM >&4
4513
4514 $me:  FATAL ERROR:
4515 This version of $package can only be compiled by a compiler that 
4516 understands function prototypes.  Unfortunately, your C compiler 
4517         $cc $ccflags
4518 doesn't seem to understand them.  Sorry about that.
4519
4520 If GNU cc is available for your system, perhaps you could try that instead.  
4521
4522 Eventually, we hope to support building Perl with pre-ANSI compilers.
4523 If you would like to help in that effort, please contact <perlbug@perl.org>.
4524
4525 Aborting Configure now.
4526 EOM
4527         exit 2
4528         ;;
4529 esac
4530
4531 : determine where public executables go
4532 echo " "
4533 set dflt bin bin
4534 eval $prefixit
4535 fn=d~
4536 rp='Pathname where the public executables will reside?'
4537 . ./getfile
4538 if $test "X$ansexp" != "X$binexp"; then
4539         installbin=''
4540 fi
4541 bin="$ans"
4542 binexp="$ansexp"
4543 if $afs; then
4544         $cat <<EOM
4545
4546 Since you are running AFS, I need to distinguish the directory in which
4547 executables reside from the directory in which they are installed (and from
4548 which they are presumably copied to the former directory by occult means).
4549
4550 EOM
4551         case "$installbin" in
4552         '') dflt=`echo $binexp | sed 's#^/afs/#/afs/.#'`;;
4553         *) dflt="$installbin";;
4554         esac
4555         fn=de~
4556         rp='Where will public executables be installed?'
4557         . ./getfile
4558         installbin="$ans"
4559 else
4560         installbin="$binexp"
4561 fi
4562
4563 : determine whether to install perl also as /usr/bin/perl
4564
4565 echo " "
4566 if test -d /usr/bin -a "X$installbin" != X/usr/bin; then
4567         $cat <<EOM
4568 Many scripts expect to perl to be installed as /usr/bin/perl.
4569 I can install the perl you are about to compile also as /usr/bin/perl
4570 (in addition to $installbin/perl).
4571 EOM
4572         case "$installusrbinperl" in
4573         "$undef"|[nN]*) dflt='n';;
4574         *)              dflt='y';;
4575         esac
4576         rp="Do you want to install perl as /usr/bin/perl?"
4577         . ./myread
4578         case "$ans" in
4579         [yY]*)  val="$define";;
4580         *)      val="$undef" ;;
4581         esac
4582 else
4583         val="$undef"
4584 fi
4585 set installusrbinperl
4586 eval $setvar
4587
4588 : define a shorthand compile call
4589 compile='
4590 mc_file=$1;
4591 shift;
4592 $cc $optimize $ccflags $ldflags -o ${mc_file} $* ${mc_file}.c $libs > /dev/null 2>&1;'
4593 : define a shorthand compile call for compilations that should be ok.
4594 compile_ok='
4595 mc_file=$1;
4596 shift;
4597 $cc $optimize $ccflags $ldflags -o ${mc_file} $* ${mc_file}.c $libs;'
4598
4599 echo " "
4600 echo "Checking for GNU C Library..." >&4
4601 cat >gnulibc.c <<EOM
4602 #include <stdio.h>
4603 int main()
4604 {
4605 #ifdef __GLIBC__
4606     exit(0);
4607 #else
4608     exit(1);
4609 #endif
4610 }
4611 EOM
4612 set gnulibc
4613 if eval $compile_ok && ./gnulibc; then
4614         val="$define"
4615         echo "You are using the GNU C Library"
4616 else
4617         val="$undef"
4618         echo "You are not using the GNU C Library"
4619 fi
4620 $rm -f gnulibc*
4621 set d_gnulibc
4622 eval $setvar
4623
4624 : see if nm is to be used to determine whether a symbol is defined or not
4625 case "$usenm" in
4626 '')
4627         dflt=''
4628         case "$d_gnulibc" in
4629         "$define")
4630                 echo " "
4631                 echo "nm probably won't work on the GNU C Library." >&4
4632                 dflt=n
4633                 ;;
4634         esac
4635         case "$dflt" in
4636         '') 
4637                 if $test "$osname" = aix -a ! -f /lib/syscalls.exp; then
4638                         echo " "
4639                         echo "Whoops!  This is an AIX system without /lib/syscalls.exp!" >&4
4640                         echo "'nm' won't be sufficient on this sytem." >&4
4641                         dflt=n
4642                 fi
4643                 ;;
4644         esac
4645         case "$dflt" in
4646         '') dflt=`$egrep 'inlibc|csym' $rsrc/Configure | wc -l 2>/dev/null`
4647                 if $test $dflt -gt 20; then
4648                         dflt=y
4649                 else
4650                         dflt=n
4651                 fi
4652                 ;;
4653         esac
4654         ;;
4655 *)
4656         case "$usenm" in
4657         true|$define) dflt=y;;
4658         *) dflt=n;;
4659         esac
4660         ;;
4661 esac
4662 $cat <<EOM
4663
4664 I can use $nm to extract the symbols from your C libraries. This
4665 is a time consuming task which may generate huge output on the disk (up
4666 to 3 megabytes) but that should make the symbols extraction faster. The
4667 alternative is to skip the 'nm' extraction part and to compile a small
4668 test program instead to determine whether each symbol is present. If
4669 you have a fast C compiler and/or if your 'nm' output cannot be parsed,
4670 this may be the best solution.
4671
4672 You probably shouldn't let me use 'nm' if you are using the GNU C Library.
4673
4674 EOM
4675 rp="Shall I use $nm to extract C symbols from the libraries?"
4676 . ./myread
4677 case "$ans" in
4678 [Nn]*) usenm=false;;
4679 *) usenm=true;;
4680 esac
4681
4682 runnm=$usenm
4683 case "$reuseval" in
4684 true) runnm=false;;
4685 esac
4686
4687 : nm options which may be necessary
4688 case "$nm_opt" in
4689 '') if $test -f /mach_boot; then
4690                 nm_opt=''       # Mach
4691         elif $test -d /usr/ccs/lib; then
4692                 nm_opt='-p'     # Solaris (and SunOS?)
4693         elif $test -f /dgux; then
4694                 nm_opt='-p'     # DG-UX
4695         elif $test -f /lib64/rld; then
4696                 nm_opt='-p'     # 64-bit Irix
4697         else
4698                 nm_opt=''
4699         fi;;
4700 esac
4701
4702 : nm options which may be necessary for shared libraries but illegal
4703 : for archive libraries.  Thank you, Linux.
4704 case "$nm_so_opt" in
4705 '')     case "$myuname" in
4706         *linux*)
4707                 if $nm --help | $grep 'dynamic' > /dev/null 2>&1; then
4708                         nm_so_opt='--dynamic'
4709                 fi
4710                 ;;
4711         esac
4712         ;;
4713 esac
4714
4715 case "$runnm" in
4716 true)
4717 : get list of predefined functions in a handy place
4718 echo " "
4719 case "$libc" in
4720 '') libc=unknown
4721         case "$libs" in
4722         *-lc_s*) libc=`./loc libc_s$_a $libc $libpth`
4723         esac
4724         ;;
4725 esac
4726 libnames='';
4727 case "$libs" in
4728 '') ;;
4729 *)  for thislib in $libs; do
4730         case "$thislib" in
4731         -lc|-lc_s)
4732                 : Handle C library specially below.
4733                 ;;
4734         -l*)
4735                 thislib=`echo $thislib | $sed -e 's/^-l//'`
4736                 if try=`./loc lib$thislib.$so.'*' X $libpth`; $test -f "$try"; then
4737                         :
4738                 elif try=`./loc lib$thislib.$so X $libpth`; $test -f "$try"; then
4739                         :
4740                 elif try=`./loc lib$thislib$_a X $libpth`; $test -f "$try"; then
4741                         :
4742                 elif try=`./loc $thislib$_a X $libpth`; $test -f "$try"; then
4743                         :
4744                 elif try=`./loc lib$thislib X $libpth`; $test -f "$try"; then
4745                         :
4746                 elif try=`./loc $thislib X $libpth`; $test -f "$try"; then
4747                         :
4748                 elif try=`./loc Slib$thislib$_a X $xlibpth`; $test -f "$try"; then
4749                         :
4750                 else
4751                         try=''
4752                 fi
4753                 libnames="$libnames $try"
4754                 ;;
4755         *) libnames="$libnames $thislib" ;;
4756         esac
4757         done
4758         ;;
4759 esac
4760 xxx=normal
4761 case "$libc" in
4762 unknown)
4763         set /lib/libc.$so
4764         for xxx in $libpth; do
4765                 $test -r $1 || set $xxx/libc.$so
4766                 : The messy sed command sorts on library version numbers.
4767                 $test -r $1 || \
4768                         set `echo blurfl; echo $xxx/libc.$so.[0-9]* | \
4769                         tr ' ' $trnl | egrep -v '\.[A-Za-z]*$' | $sed -e '
4770                                 h
4771                                 s/[0-9][0-9]*/0000&/g
4772                                 s/0*\([0-9][0-9][0-9][0-9][0-9]\)/\1/g
4773                                 G
4774                                 s/\n/ /' | \
4775                          sort | $sed -e 's/^.* //'`
4776                 eval set \$$#
4777         done
4778         $test -r $1 || set /usr/ccs/lib/libc.$so
4779         $test -r $1 || set /lib/libsys_s$_a
4780         ;;
4781 *)
4782         set blurfl
4783         ;;
4784 esac
4785 if $test -r "$1"; then
4786         echo "Your (shared) C library seems to be in $1."
4787         libc="$1"
4788 elif $test -r /lib/libc && $test -r /lib/clib; then
4789         echo "Your C library seems to be in both /lib/clib and /lib/libc."
4790         xxx=apollo
4791         libc='/lib/clib /lib/libc'
4792         if $test -r /lib/syslib; then
4793                 echo "(Your math library is in /lib/syslib.)"
4794                 libc="$libc /lib/syslib"
4795         fi
4796 elif $test -r "$libc" || (test -h "$libc") >/dev/null 2>&1; then
4797         echo "Your C library seems to be in $libc, as you said before."
4798 elif $test -r $incpath/usr/lib/libc$_a; then
4799         libc=$incpath/usr/lib/libc$_a;
4800         echo "Your C library seems to be in $libc.  That's fine."
4801 elif $test -r /lib/libc$_a; then
4802         libc=/lib/libc$_a;
4803         echo "Your C library seems to be in $libc.  You're normal."
4804 else
4805         if tans=`./loc libc$_a blurfl/dyick $libpth`; $test -r "$tans"; then
4806                 :
4807         elif tans=`./loc libc blurfl/dyick $libpth`; $test -r "$tans"; then
4808                 libnames="$libnames "`./loc clib blurfl/dyick $libpth`
4809         elif tans=`./loc clib blurfl/dyick $libpth`; $test -r "$tans"; then
4810                 :
4811         elif tans=`./loc Slibc$_a blurfl/dyick $xlibpth`; $test -r "$tans"; then
4812                 :
4813         elif tans=`./loc Mlibc$_a blurfl/dyick $xlibpth`; $test -r "$tans"; then
4814                 :
4815         else
4816                 tans=`./loc Llibc$_a blurfl/dyick $xlibpth`
4817         fi
4818         if $test -r "$tans"; then
4819                 echo "Your C library seems to be in $tans, of all places."
4820                 libc=$tans
4821         else
4822                 libc='blurfl'
4823         fi
4824 fi
4825 if $test $xxx = apollo -o -r "$libc" || (test -h "$libc") >/dev/null 2>&1; then
4826         dflt="$libc"
4827         cat <<EOM
4828
4829 If the guess above is wrong (which it might be if you're using a strange
4830 compiler, or your machine supports multiple models), you can override it here.
4831
4832 EOM
4833 else
4834         dflt=''
4835         echo $libpth | tr ' ' $trnl | sort | uniq > libpath
4836         cat >&4 <<EOM
4837 I can't seem to find your C library.  I've looked in the following places:
4838
4839 EOM
4840         $sed 's/^/      /' libpath
4841         cat <<EOM
4842
4843 None of these seems to contain your C library. I need to get its name...
4844
4845 EOM
4846 fi
4847 fn=f
4848 rp='Where is your C library?'
4849 . ./getfile
4850 libc="$ans"
4851
4852 echo " "
4853 echo $libc $libnames | tr ' ' $trnl | sort | uniq > libnames
4854 set X `cat libnames`
4855 shift
4856 xxx=files
4857 case $# in 1) xxx=file; esac
4858 echo "Extracting names from the following $xxx for later perusal:" >&4
4859 echo " "
4860 $sed 's/^/      /' libnames >&4
4861 echo " "
4862 $echo $n "This may take a while...$c" >&4
4863
4864 for file in $*; do
4865         case $file in
4866         *$so*) $nm $nm_so_opt $nm_opt $file 2>/dev/null;;
4867         *) $nm $nm_opt $file 2>/dev/null;;
4868         esac
4869 done >libc.tmp
4870
4871 $echo $n ".$c"
4872 $grep fprintf libc.tmp > libc.ptf
4873 xscan='eval "<libc.ptf $com >libc.list"; $echo $n ".$c" >&4'
4874 xrun='eval "<libc.tmp $com >libc.list"; echo "done" >&4'
4875 xxx='[ADTSIW]'
4876 if com="$sed -n -e 's/__IO//' -e 's/^.* $xxx  *_[_.]*//p' -e 's/^.* $xxx  *//p'";\
4877         eval $xscan;\
4878         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4879                 eval $xrun
4880 elif com="$sed -n -e 's/^__*//' -e 's/^\([a-zA-Z_0-9$]*\).*xtern.*/\1/p'";\
4881         eval $xscan;\
4882         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4883                 eval $xrun
4884 elif com="$sed -n -e '/|UNDEF/d' -e '/FUNC..GL/s/^.*|__*//p'";\
4885         eval $xscan;\
4886         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4887                 eval $xrun
4888 elif com="$sed -n -e 's/^.* D __*//p' -e 's/^.* D //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 's/^\([a-zA-Z_0-9]*\).*xtern.*text.*/\1/p'";\
4893         eval $xscan;\
4894         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4895                 eval $xrun
4896 elif com="$sed -n -e 's/^.*|FUNC |GLOB .*|//p'";\
4897         eval $xscan;\
4898         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4899                 eval $xrun
4900 elif com="$grep '|' | $sed -n -e '/|COMMON/d' -e '/|DATA/d' \
4901                                 -e '/ file/d' -e 's/^\([^       ]*\).*/\1/p'";\
4902         eval $xscan;\
4903         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4904                 eval $xrun
4905 elif com="$sed -n -e 's/^.*|FUNC |GLOB .*|//p' -e 's/^.*|FUNC |WEAK .*|//p'";\
4906         eval $xscan;\
4907         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4908                 eval $xrun
4909 elif com="$sed -n -e 's/^__//' -e '/|Undef/d' -e '/|Proc/s/ .*//p'";\
4910         eval $xscan;\
4911         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4912                 eval $xrun
4913 elif com="$sed -n -e 's/^.*|Proc .*|Text *| *//p'";\
4914         eval $xscan;\
4915         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4916                 eval $xrun
4917 elif com="$sed -n -e '/Def. Text/s/.* \([^ ]*\)\$/\1/p'";\
4918         eval $xscan;\
4919         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4920                 eval $xrun
4921 elif com="$sed -n -e 's/^[-0-9a-f ]*_\(.*\)=.*/\1/p'";\
4922         eval $xscan;\
4923         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4924                 eval $xrun
4925 elif com="$sed -n -e 's/.*\.text n\ \ \ \.//p'";\
4926         eval $xscan;\
4927         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4928                 eval $xrun
4929 elif com="sed -n -e 's/^__.*//' -e 's/[       ]*D[    ]*[0-9]*.*//p'";\
4930         eval $xscan;\
4931         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
4932                 eval $xrun
4933 else
4934         $nm -p $* 2>/dev/null >libc.tmp
4935         $grep fprintf libc.tmp > libc.ptf
4936         if com="$sed -n -e 's/^.* [ADTSIW]  *_[_.]*//p' -e 's/^.* [ADTSIW] //p'";\
4937                 eval $xscan; $contains '^fprintf$' libc.list >/dev/null 2>&1
4938         then
4939                 nm_opt='-p'
4940                 eval $xrun
4941         else
4942                 echo " "
4943                 echo "$nm didn't seem to work right. Trying $ar instead..." >&4
4944                 com=''
4945                 if $ar t $libc > libc.tmp && $contains '^fprintf$' libc.tmp >/dev/null 2>&1; then
4946                         for thisname in $libnames $libc; do
4947                                 $ar t $thisname >>libc.tmp
4948                         done
4949                         $sed -e "s/\\$_o\$//" < libc.tmp > libc.list
4950                         echo "Ok." >&4
4951                 elif test "X$osname" = "Xos2" && $ar tv $libc > libc.tmp; then
4952                         # Repeat libc to extract forwarders to DLL entries too
4953                         for thisname in $libnames $libc; do
4954                                 $ar tv $thisname >>libc.tmp
4955                                 # Revision 50 of EMX has bug in $ar.
4956                                 # it will not extract forwarders to DLL entries
4957                                 # Use emximp which will extract exactly them.
4958                                 emximp -o tmp.imp $thisname \
4959                                     2>/dev/null && \
4960                                     $sed -e 's/^\([_a-zA-Z0-9]*\) .*$/\1/p' \
4961                                     < tmp.imp >>libc.tmp
4962                                 $rm tmp.imp
4963                         done
4964                         $sed -e "s/\\$_o\$//" -e 's/^ \+//' < libc.tmp > libc.list
4965                         echo "Ok." >&4
4966                 else
4967                         echo "$ar didn't seem to work right." >&4
4968                         echo "Maybe this is a Cray...trying bld instead..." >&4
4969                         if bld t $libc | $sed -e 's/.*\///' -e "s/\\$_o:.*\$//" > libc.list
4970                         then
4971                                 for thisname in $libnames; do
4972                                         bld t $libnames | \
4973                                         $sed -e 's/.*\///' -e "s/\\$_o:.*\$//" >>libc.list
4974                                         $ar t $thisname >>libc.tmp
4975                                 done
4976                                 echo "Ok." >&4
4977                         else
4978                                 echo "That didn't work either.  Giving up." >&4
4979                                 exit 1
4980                         fi
4981                 fi
4982         fi
4983 fi
4984 nm_extract="$com"
4985 if $test -f /lib/syscalls.exp; then
4986         echo " "
4987         echo "Also extracting names from /lib/syscalls.exp for good ole AIX..." >&4
4988         $sed -n 's/^\([^        ]*\)[   ]*syscall[0-9]*$/\1/p' /lib/syscalls.exp >>libc.list
4989 fi
4990 ;;
4991 esac
4992 $rm -f libnames libpath
4993
4994 : see if dld is available
4995 set dld.h i_dld
4996 eval $inhdr
4997
4998 : is a C symbol defined?
4999 csym='tlook=$1;
5000 case "$3" in
5001 -v) tf=libc.tmp; tc=""; tdc="";;
5002 -a) tf=libc.tmp; tc="[0]"; tdc="[]";;
5003 *) tlook="^$1\$"; tf=libc.list; tc="()"; tdc="()";;
5004 esac;
5005 tx=yes;
5006 case "$reuseval-$4" in
5007 true-) ;;
5008 true-*) tx=no; eval "tval=\$$4"; case "$tval" in "") tx=yes;; esac;;
5009 esac;
5010 case "$tx" in
5011 yes)
5012         case "$runnm" in
5013         true)
5014                 if $contains $tlook $tf >/dev/null 2>&1;
5015                 then tval=true;
5016                 else tval=false;
5017                 fi;;
5018         *)
5019                 echo "int main() { extern short $1$tdc; printf(\"%hd\", $1$tc); }" > t.c;
5020                 if $cc $optimize $ccflags $ldflags -o t t.c $libs >/dev/null 2>&1;
5021                 then tval=true;
5022                 else tval=false;
5023                 fi;
5024                 $rm -f t t.c;;
5025         esac;;
5026 *)
5027         case "$tval" in
5028         $define) tval=true;;
5029         *) tval=false;;
5030         esac;;
5031 esac;
5032 eval "$2=$tval"'
5033
5034 : define an is-in-libc? function
5035 inlibc='echo " "; td=$define; tu=$undef;
5036 sym=$1; var=$2; eval "was=\$$2";
5037 tx=yes;
5038 case "$reuseval$was" in
5039 true) ;;
5040 true*) tx=no;;
5041 esac;
5042 case "$tx" in
5043 yes)
5044         set $sym tres -f;
5045         eval $csym;
5046         case "$tres" in
5047         true)
5048                 echo "$sym() found." >&4;
5049                 case "$was" in $undef) . ./whoa; esac; eval "$var=\$td";;
5050         *)
5051                 echo "$sym() NOT found." >&4;
5052                 case "$was" in $define) . ./whoa; esac; eval "$var=\$tu";;
5053         esac;;
5054 *)
5055         case "$was" in
5056         $define) echo "$sym() found." >&4;;
5057         *) echo "$sym() NOT found." >&4;;
5058         esac;;
5059 esac'
5060
5061 : see if dlopen exists
5062 xxx_runnm="$runnm"
5063 runnm=false
5064 set dlopen d_dlopen
5065 eval $inlibc
5066 runnm="$xxx_runnm"
5067
5068 : determine which dynamic loading, if any, to compile in
5069 echo " "
5070 dldir="ext/DynaLoader"
5071 case "$usedl" in
5072 $define|y|true)
5073         dflt='y'
5074         usedl="$define"
5075         ;;
5076 $undef|n|false)
5077         dflt='n'
5078         usedl="$undef"
5079         ;;
5080 *) 
5081         dflt='n'
5082         case "$d_dlopen" in
5083             $define) dflt='y' ;;
5084         esac
5085         case "$i_dld" in
5086             $define) dflt='y' ;;
5087         esac
5088         : Does a dl_xxx.xs file exist for this operating system
5089         $test -f $rsrc/$dldir/dl_${osname}.xs && dflt='y'
5090         ;;
5091 esac
5092 rp="Do you wish to use dynamic loading?"
5093 . ./myread
5094 usedl="$ans"
5095 case "$ans" in
5096 y*) usedl="$define"
5097         case "$dlsrc" in
5098         '')
5099                 if $test -f $rsrc/$dldir/dl_${osname}.xs ; then
5100                         dflt="$dldir/dl_${osname}.xs"
5101                 elif $test "$d_dlopen" = "$define" ; then
5102                         dflt="$dldir/dl_dlopen.xs"
5103                 elif $test "$i_dld" = "$define" ; then
5104                         dflt="$dldir/dl_dld.xs"
5105                 else
5106                         dflt=''
5107                 fi
5108                 ;;
5109         *)      dflt="$dldir/$dlsrc"
5110                 ;;
5111         esac
5112     echo "The following dynamic loading files are available:"
5113         : Can not go over to $dldir because getfile has path hard-coded in.
5114         tdir=`pwd`; cd $rsrc; $ls -C $dldir/dl*.xs; cd $tdir
5115         rp="Source file to use for dynamic loading"
5116         fn="fne"
5117         # XXX This getfile call will fail the existence check if you try 
5118         # building away from $src (this is not supported yet).
5119         . ./getfile
5120         usedl="$define"
5121         : emulate basename
5122         dlsrc=`echo $ans | $sed -e 's@.*/\([^/]*\)$@\1@'`
5123
5124         $cat << EOM
5125
5126 Some systems may require passing special flags to $cc -c to
5127 compile modules that will be used to create a shared library.
5128 To use no flags, say "none".
5129
5130 EOM
5131     case "$cccdlflags" in
5132     '') case "$gccversion" in
5133                 '') case "$osname" in
5134                         hpux)   dflt='+z' ;;
5135                         next)   dflt='none' ;;
5136                         irix*)  dflt='-KPIC' ;;
5137                         svr4*|esix*|solaris) dflt='-KPIC' ;;
5138                         sunos)  dflt='-pic' ;;
5139                         *)      dflt='none' ;;
5140                     esac
5141                         ;;
5142                 *)  case "$osname" in
5143                         svr4*|esix*|solaris) dflt='-fPIC' ;;
5144                         *)      dflt='-fpic' ;;
5145                     esac ;;
5146             esac ;;
5147         ' ') dflt='none' ;;
5148     *)  dflt="$cccdlflags" ;;
5149     esac
5150     rp="Any special flags to pass to $cc -c to compile shared library modules?"
5151     . ./myread
5152     case "$ans" in
5153     none) cccdlflags=' ' ;;
5154     *) cccdlflags="$ans" ;;
5155     esac
5156
5157     cat << EOM
5158
5159 Some systems use ld to create libraries that can be dynamically loaded,
5160 while other systems (such as those using ELF) use $cc.
5161
5162 EOM
5163         case "$ld" in
5164         '')     $cat >try.c <<'EOM'
5165 /* Test for whether ELF binaries are produced */
5166 #include <fcntl.h>
5167 #include <stdlib.h>
5168 int main() {
5169         char b[4];
5170         int i = open("a.out",O_RDONLY);
5171         if(i == -1) 
5172                 exit(1); /* fail */
5173         if(read(i,b,4)==4 && b[0]==127 && b[1]=='E' && b[2]=='L' && b[3]=='F')
5174                 exit(0); /* succeed (yes, it's ELF) */
5175         else
5176                 exit(1); /* fail */
5177 }
5178 EOM
5179                 if $cc $ccflags try.c >/dev/null 2>&1 && ./a.out; then
5180                         cat <<EOM
5181 You appear to have ELF support.  I'll use $cc to build dynamic libraries.
5182 EOM
5183                         dflt="$cc"
5184                 else
5185                         echo "I'll use ld to build dynamic libraries."
5186                         dflt='ld'
5187                 fi
5188                 rm -f try.c a.out
5189                 ;;
5190         *)      dflt="$ld"
5191                 ;;
5192         esac
5193
5194     rp="What command should be used to create dynamic libraries?"
5195     . ./myread
5196         ld="$ans"
5197
5198     cat << EOM
5199
5200 Some systems may require passing special flags to $ld to create a
5201 library that can be dynamically loaded.  If your ld flags include
5202 -L/other/path options to locate libraries outside your loader's normal
5203 search path, you may need to specify those -L options here as well.  To
5204 use no flags, say "none".
5205
5206 EOM
5207     case "$lddlflags" in
5208     '') case "$osname" in
5209                         beos) dflt='-nostart' ;;
5210                         hpux)  dflt='-b' ;;
5211                         linux|irix*)    dflt='-shared' ;;
5212                         next)  dflt='none' ;;
5213                         solaris) dflt='-G' ;;
5214                         sunos) dflt='-assert nodefinitions' ;;
5215                         svr4*|esix*) dflt="-G $ldflags" ;;
5216                 *)     dflt='none' ;;
5217                         esac
5218                         ;;
5219     *) dflt="$lddlflags" ;;
5220     esac
5221
5222         : Try to guess additional flags to pick up local libraries.
5223         : Be careful not to append to a plain 'none'
5224         case "$dflt" in
5225         none) dflt='' ;;
5226         esac
5227         for thisflag in $ldflags; do
5228                 case "$thisflag" in
5229                 -L*)
5230                         case " $dflt " in
5231                         *" $thisflag "*) ;;
5232                         *) dflt="$dflt $thisflag" ;;
5233                         esac
5234                         ;;
5235                 esac
5236         done
5237
5238         case "$dflt" in
5239         ''|' ') dflt='none' ;;
5240         esac
5241
5242     rp="Any special flags to pass to $ld to create a dynamically loaded library?"
5243     . ./myread
5244     case "$ans" in
5245     none) lddlflags=' ' ;;
5246     *) lddlflags="$ans" ;;
5247     esac
5248
5249         cat <<EOM
5250
5251 Some systems may require passing special flags to $cc to indicate that
5252 the resulting executable will use dynamic linking.  To use no flags,
5253 say "none".
5254
5255 EOM
5256     case "$ccdlflags" in
5257     '') case "$osname" in
5258                 hpux)   dflt='-Wl,-E' ;;
5259                 linux)  dflt='-rdynamic' ;;
5260                 next)   dflt='none' ;;
5261                 sunos)  dflt='none' ;;
5262                 *)      dflt='none' ;;
5263             esac ;;
5264     ' ')  dflt='none' ;;
5265     *)  dflt="$ccdlflags" ;;
5266     esac
5267     rp="Any special flags to pass to $cc to use dynamic loading?"
5268     . ./myread
5269     case "$ans" in
5270     none) ccdlflags=' ' ;;
5271     *) ccdlflags="$ans" ;;
5272     esac
5273     ;;
5274 *)  usedl="$undef"
5275         ld='ld'
5276     dlsrc='dl_none.xs'
5277     lddlflags=''
5278     ccdlflags=''
5279     ;;
5280 esac
5281
5282 also=''
5283 case "$usedl" in
5284 $undef)
5285         # No dynamic loading being used, so don't bother even to prompt.
5286         useshrplib='false'
5287         ;;
5288 *)      case "$useshrplib" in
5289         '')     case "$osname" in
5290                 svr4*|dgux|dynixptx|esix|powerux|beos)
5291                         dflt=y
5292                         also='Building a shared libperl is required for dynamic loading to work on your system.'
5293                         ;;
5294                 next*)
5295                         case "$osvers" in
5296                         4*)     dflt=y
5297                                 also='Building a shared libperl is needed for MAB support.'
5298                                 ;;
5299                         *)      dflt=n
5300                                 ;;
5301                         esac
5302                         ;;
5303                 *)      dflt=n
5304                         ;;
5305                 esac
5306                 ;;
5307         $define|true|[Yy]*)
5308                 dflt=y
5309                 ;;
5310         *)      dflt=n
5311                 ;;
5312         esac
5313         $cat << EOM
5314
5315 The perl executable is normally obtained by linking perlmain.c with
5316 libperl${_a}, any static extensions (usually just DynaLoader), and
5317 any other libraries needed on this system (such as -lm, etc.).  Since
5318 your system supports dynamic loading, it is probably possible to build
5319 a shared libperl.$so.  If you will have more than one executable linked
5320 to libperl.$so, this will significantly reduce the size of each
5321 executable, but it may have a noticeable affect on performance.  The
5322 default is probably sensible for your system.
5323 $also
5324
5325 EOM
5326         rp="Build a shared libperl.$so (y/n)"
5327         . ./myread
5328         case "$ans" in
5329         true|$define|[Yy]*)
5330                 useshrplib='true'
5331                 # Why does next4 have to be so different?
5332                 case "${osname}${osvers}" in
5333                 next4*|rhapsody*)
5334                         xxx='DYLD_LIBRARY_PATH' ;;
5335                 os2*)   xxx='' ;; # Nothing special needed.
5336                 beos*)  xxx='' ;;
5337                 *)              xxx='LD_LIBRARY_PATH' ;;
5338                 esac
5339                 ;;
5340         *)      useshrplib='false' ;;
5341         esac
5342         ;;
5343 esac
5344
5345 case "$useshrplib" in
5346 true)
5347         case "$libperl" in
5348         '')
5349                 # Figure out a good name for libperl.so.  Since it gets stored in
5350                 # a version-specific architecture-dependent library, the version
5351                 # number isn't really that important, except for making cc/ld happy.
5352                 #
5353                 # A name such as libperl.so.3.1
5354                 majmin="libperl.$so.$patchlevel.$subversion"
5355                 # A name such as libperl.so.301
5356                 majonly=`echo $patchlevel $subversion |
5357                         $awk '{printf "%d%02d", $1, $2}'`
5358                 majonly=libperl.$so.$majonly
5359                 # I'd prefer to keep the os-specific stuff here to a minimum, and
5360                 # rely on figuring it out from the naming of libc.
5361                 case "${osname}${osvers}" in
5362                 next4*)
5363                         dflt=libperl.5.$so
5364                         # XXX How handle the --version stuff for MAB?
5365                         ;;
5366                 linux*)  # ld won't link with a bare -lperl otherwise.
5367                         dflt=libperl.$so
5368                         ;;
5369                 *)      # Try to guess based on whether libc has major.minor.
5370                         case "$libc" in
5371                         *libc.$so.[0-9]*.[0-9]*) dflt=$majmin ;;
5372                         *libc.$so.[0-9]*) dflt=$majonly ;;
5373                         *)      dflt=libperl.$so ;;
5374                         esac
5375                         ;;
5376                 esac
5377                 ;;
5378         *)      dflt=$libperl
5379                 ;;
5380         esac
5381         cat << EOM
5382
5383 I need to select a good name for the shared libperl.  If your system uses
5384 library names with major and minor numbers, then you might want something
5385 like $majmin.  Alternatively, if your system uses a single version
5386 number for shared libraries, then you might want to use $majonly.
5387 Or, your system might be quite happy with a simple libperl.$so.
5388
5389 Since the shared libperl will get installed into a version-specific
5390 architecture-dependent directory, the version number of the shared perl
5391 library probably isn't important, so the default should be o.k.
5392
5393 EOM
5394         rp='What name do you want to give to the shared libperl?'
5395         . ./myread
5396         libperl=$ans
5397         echo "Ok, I'll use $libperl"
5398         ;;
5399 *)
5400         libperl="libperl${_a}"
5401         ;;
5402 esac
5403
5404 # Detect old use of shrpdir via undocumented Configure -Dshrpdir
5405 case "$shrpdir" in
5406 '') ;;
5407 *)      $cat >&4 <<EOM
5408 WARNING:  Use of the shrpdir variable for the installation location of
5409 the shared $libperl is not supported.  It was never documented and
5410 will not work in this version.  Let me (perlbug@perl.com)
5411 know of any problems this may cause.
5412
5413 EOM
5414         case "$shrpdir" in
5415         "$archlibexp/CORE")
5416                 $cat >&4 <<EOM
5417 But your current setting of $shrpdir is
5418 the default anyway, so it's harmless.
5419 EOM
5420                 ;;
5421         *)
5422                 $cat >&4 <<EOM
5423 Further, your current attempted setting of $shrpdir
5424 conflicts with the value of $archlibexp/CORE
5425 that installperl will use.
5426 EOM
5427                 ;;
5428         esac
5429         ;;
5430 esac
5431
5432 # How will the perl executable find the installed shared $libperl?
5433 # Add $xxx to ccdlflags.
5434 # If we can't figure out a command-line option, use $shrpenv to
5435 # set env LD_RUN_PATH.  The main perl makefile uses this.
5436 shrpdir=$archlibexp/CORE
5437 xxx=''
5438 tmp_shrpenv=''
5439 if "$useshrplib"; then
5440     case "$osname" in 
5441         aix)
5442                 # We'll set it in Makefile.SH...
5443                 ;;
5444         solaris|netbsd)
5445                 xxx="-R $shrpdir"
5446                 ;;
5447         freebsd)
5448                 xxx="-Wl,-R$shrpdir"
5449                 ;;
5450         linux|irix*|dec_osf)
5451                 xxx="-Wl,-rpath,$shrpdir"
5452                 ;;
5453         next)
5454                 # next doesn't like the default...
5455                 ;;
5456         beos)
5457                 # beos doesn't like the default, either.
5458                 ;;
5459         hpux*)
5460                 # hpux doesn't like the default, either.
5461                 tmp_shrpenv="env LDOPTS=\"+s +b${shrpdir}\""
5462                 ;;
5463         *)
5464                 tmp_shrpenv="env LD_RUN_PATH=$shrpdir"
5465                 ;;
5466         esac
5467         case "$xxx" in
5468         '') ;;
5469         *)      
5470                 # Only add $xxx if it isn't already in ccdlflags.
5471                 case " $ccdlflags " in
5472                 *" $xxx "*)     ;;
5473                 *)      ccdlflags="$ccdlflags $xxx"
5474                         cat <<EOM >&4
5475
5476 Adding $xxx to the flags
5477 passed to $ld so that the perl executable will find the 
5478 installed shared $libperl.
5479
5480 EOM
5481                         ;;
5482                 esac
5483                 ;;
5484         esac
5485 fi
5486 # Respect a hint or command-line value.
5487 case "$shrpenv" in
5488 '') shrpenv="$tmp_shrpenv" ;;
5489 esac
5490
5491 : determine where manual pages go
5492 set man1dir man1dir none
5493 eval $prefixit
5494 $cat <<EOM
5495
5496 $spackage has manual pages available in source form.
5497 EOM
5498 case "$nroff" in
5499 nroff)
5500         echo "However, you don't have nroff, so they're probably useless to you."
5501         case "$man1dir" in
5502         '') man1dir="none";;
5503         esac;;
5504 esac
5505 echo "If you don't want the manual sources installed, answer 'none'."
5506 case "$man1dir" in
5507 ' ') dflt=none
5508         ;;
5509 '')
5510         lookpath="$prefixexp/man/man1 $prefixexp/man/l_man/man1"
5511         lookpath="$lookpath $prefixexp/man/p_man/man1"
5512         lookpath="$lookpath $prefixexp/man/u_man/man1"
5513         lookpath="$lookpath $prefixexp/man/man.1"
5514         case "$sysman" in
5515         */?_man*)       dflt=`./loc . $prefixexp/l_man/man1 $lookpath` ;;
5516         *)      dflt=`./loc . $prefixexp/man/man1 $lookpath` ;;
5517         esac
5518         set dflt
5519         eval $prefixup
5520         ;;
5521 *)  dflt="$man1dir"
5522         ;;
5523 esac
5524 echo " "
5525 fn=dn+~
5526 rp="Where do the main $spackage manual pages (source) go?"
5527 . ./getfile
5528 if $test "X$man1direxp" != "X$ansexp"; then
5529         installman1dir=''
5530 fi
5531 man1dir="$ans"
5532 man1direxp="$ansexp"
5533 case "$man1dir" in
5534 '') man1dir=' '
5535         installman1dir='';;
5536 esac
5537 if $afs; then
5538         $cat <<EOM
5539
5540 Since you are running AFS, I need to distinguish the directory in which
5541 manual pages reside from the directory in which they are installed (and from
5542 which they are presumably copied to the former directory by occult means).
5543
5544 EOM
5545         case "$installman1dir" in
5546         '') dflt=`echo $man1direxp | sed 's#^/afs/#/afs/.#'`;;
5547         *) dflt="$installman1dir";;
5548         esac
5549         fn=de~
5550         rp='Where will man pages be installed?'
5551         . ./getfile
5552         installman1dir="$ans"
5553 else
5554         installman1dir="$man1direxp"
5555 fi
5556
5557 : What suffix to use on installed man pages
5558
5559 case "$man1dir" in
5560 ' ')
5561         man1ext='0'
5562         ;;
5563 *)
5564         rp="What suffix should be used for the main $spackage man pages?"
5565         case "$man1ext" in
5566         '')     case "$man1dir" in
5567                 *1)  dflt=1 ;;
5568                 *1p) dflt=1p ;;
5569                 *1pm) dflt=1pm ;;
5570                 *l) dflt=l;;
5571                 *n) dflt=n;;
5572                 *o) dflt=o;;
5573                 *p) dflt=p;;
5574                 *C) dflt=C;;
5575                 *L) dflt=L;;
5576                 *L1) dflt=L1;;
5577                 *) dflt=1;;
5578                 esac
5579                 ;;
5580         *)      dflt="$man1ext";;
5581         esac
5582         . ./myread
5583         man1ext="$ans"
5584         ;;
5585 esac
5586
5587 : see if we can have long filenames
5588 echo " "
5589 rmlist="$rmlist /tmp/cf$$"
5590 $test -d /tmp/cf$$ || mkdir /tmp/cf$$
5591 first=123456789abcdef
5592 second=/tmp/cf$$/$first
5593 $rm -f $first $second
5594 if (echo hi >$first) 2>/dev/null; then
5595         if $test -f 123456789abcde; then
5596                 echo 'You cannot have filenames longer than 14 characters.  Sigh.' >&4
5597                 val="$undef"
5598         else
5599                 if (echo hi >$second) 2>/dev/null; then
5600                         if $test -f /tmp/cf$$/123456789abcde; then
5601                                 $cat <<'EOM'
5602 That's peculiar... You can have filenames longer than 14 characters, but only
5603 on some of the filesystems.  Maybe you are using NFS.  Anyway, to avoid problems
5604 I shall consider your system cannot support long filenames at all.
5605 EOM
5606                                 val="$undef"
5607                         else
5608                                 echo 'You can have filenames longer than 14 characters.' >&4
5609                                 val="$define"
5610                         fi
5611                 else
5612                         $cat <<'EOM'
5613 How confusing! Some of your filesystems are sane enough to allow filenames
5614 longer than 14 characters but some others like /tmp can't even think about them.
5615 So, for now on, I shall assume your kernel does not allow them at all.
5616 EOM
5617                         val="$undef"
5618                 fi
5619         fi
5620 else
5621         $cat <<'EOM'
5622 You can't have filenames longer than 14 chars.  You can't even think about them!
5623 EOM
5624         val="$undef"
5625 fi 
5626 set d_flexfnam
5627 eval $setvar
5628 $rm -rf /tmp/cf$$ 123456789abcde*
5629
5630 : determine where library module manual pages go
5631 set man3dir man3dir none
5632 eval $prefixit
5633 $cat <<EOM
5634
5635 $spackage has manual pages for many of the library modules.
5636 EOM
5637
5638 case "$nroff" in
5639 nroff)
5640         $cat <<'EOM'
5641 However, you don't have nroff, so they're probably useless to you.
5642 EOM
5643         case "$man3dir" in
5644         '') man3dir="none";;
5645         esac;;
5646 esac
5647
5648 case "$d_flexfnam" in
5649 undef)
5650         $cat <<'EOM'
5651 However, your system can't handle the long file names like File::Basename.3. 
5652 EOM
5653         case "$man3dir" in
5654         '') man3dir="none";;
5655         esac;;
5656 esac
5657
5658 echo "If you don't want the manual sources installed, answer 'none'."
5659 prog=`echo $package | $sed 's/-*[0-9.]*$//'`
5660 case "$man3dir" in
5661 '')     case "$prefix" in 
5662         *$prog*) dflt=`echo $man1dir | 
5663                         $sed -e 's/man1/man3/g' -e 's/man\.1/man\.3/g'` ;;
5664         *)      dflt="$privlib/man/man3" ;;
5665         esac
5666         ;;
5667 ' ') dflt=none;;
5668 *)      dflt="$man3dir" ;;
5669 esac
5670 echo " "
5671
5672 fn=dn+~
5673 rp="Where do the $package library man pages (source) go?"
5674 . ./getfile
5675 if test "X$man3direxp" != "X$ansexp"; then
5676         installman3dir=''
5677 fi
5678
5679 man3dir="$ans"
5680 man3direxp="$ansexp"
5681 case "$man3dir" in
5682 '') man3dir=' '
5683         installman3dir='';;
5684 esac
5685 if $afs; then
5686         $cat <<EOM
5687
5688 Since you are running AFS, I need to distinguish the directory in which
5689 manual pages reside from the directory in which they are installed (and from
5690 which they are presumably copied to the former directory by occult means).
5691
5692 EOM
5693         case "$installman3dir" in
5694         '') dflt=`echo $man3direxp | sed 's#^/afs/#/afs/.#'`;;
5695         *) dflt="$installman3dir";;
5696         esac
5697         fn=de~
5698         rp='Where will man pages be installed?'
5699         . ./getfile
5700         installman3dir="$ans"
5701 else
5702         installman3dir="$man3direxp"
5703 fi
5704
5705 : What suffix to use on installed man pages
5706
5707 case "$man3dir" in
5708 ' ')
5709         man3ext='0'
5710         ;;
5711 *)
5712         rp="What suffix should be used for the $package library man pages?"
5713         case "$man3ext" in
5714         '')     case "$man3dir" in
5715                 *3)  dflt=3 ;;
5716                 *3p) dflt=3p ;;
5717                 *3pm) dflt=3pm ;;
5718                 *l) dflt=l;;
5719                 *n) dflt=n;;
5720                 *o) dflt=o;;
5721                 *p) dflt=p;;
5722                 *C) dflt=C;;
5723                 *L) dflt=L;;
5724                 *L3) dflt=L3;;
5725                 *) dflt=3;;
5726                 esac
5727                 ;;
5728         *)      dflt="$man3ext";;
5729         esac
5730         . ./myread
5731         man3ext="$ans"
5732         ;;
5733 esac
5734
5735 : see if we have to deal with yellow pages, now NIS.
5736 if $test -d /usr/etc/yp || $test -d /etc/yp; then
5737         if $test -f /usr/etc/nibindd; then
5738                 echo " "
5739                 echo "I'm fairly confident you're on a NeXT."
5740                 echo " "
5741                 rp='Do you get the hosts file via NetInfo?'
5742                 dflt=y
5743                 case "$hostcat" in
5744                 nidump*) ;;
5745                 '') ;;
5746                 *) dflt=n;;
5747                 esac
5748                 . ./myread
5749                 case "$ans" in
5750                 y*) hostcat='nidump hosts .';;
5751                 *)      case "$hostcat" in
5752                         nidump*) hostcat='';;
5753                         esac
5754                         ;;
5755                 esac
5756         fi
5757         case "$hostcat" in
5758         nidump*) ;;
5759         *)
5760                 case "$hostcat" in
5761                 *ypcat*) dflt=y;;
5762                 '') if $contains '^\+' /etc/passwd >/dev/null 2>&1; then
5763                                 dflt=y
5764                         else
5765                                 dflt=n
5766                         fi;;
5767                 *) dflt=n;;
5768                 esac
5769                 echo " "
5770                 rp='Are you getting the hosts file via yellow pages?'
5771                 . ./myread
5772                 case "$ans" in
5773                 y*) hostcat='ypcat hosts';;
5774                 *) hostcat='cat /etc/hosts';;
5775                 esac
5776                 ;;
5777         esac
5778 fi
5779 case "$hostcat" in
5780 '') hostcat='cat /etc/hosts';;
5781 esac
5782 case "$groupcat" in
5783 '') groupcat='cat /etc/group';;
5784 esac
5785 case "$passcat" in
5786 '') passcat='cat /etc/passwd';;
5787 esac
5788
5789 : now get the host name
5790 echo " "
5791 echo "Figuring out host name..." >&4
5792 case "$myhostname" in
5793 '') cont=true
5794         echo 'Maybe "hostname" will work...'
5795         if tans=`sh -c hostname 2>&1` ; then
5796                 myhostname=$tans
5797                 phostname=hostname
5798                 cont=''
5799         fi
5800         ;;
5801 *) cont='';;
5802 esac
5803 if $test "$cont"; then
5804         if ./xenix; then
5805                 echo 'Oh, dear.  Maybe "/etc/systemid" is the key...'
5806                 if tans=`cat /etc/systemid 2>&1` ; then
5807                         myhostname=$tans
5808                         phostname='cat /etc/systemid'
5809                         echo "Whadyaknow.  Xenix always was a bit strange..."
5810                         cont=''
5811                 fi
5812         elif $test -r /etc/systemid; then
5813                 echo "(What is a non-Xenix system doing with /etc/systemid?)"
5814         fi
5815 fi
5816 if $test "$cont"; then
5817         echo 'No, maybe "uuname -l" will work...'
5818         if tans=`sh -c 'uuname -l' 2>&1` ; then
5819                 myhostname=$tans
5820                 phostname='uuname -l'
5821         else
5822                 echo 'Strange.  Maybe "uname -n" will work...'
5823                 if tans=`sh -c 'uname -n' 2>&1` ; then
5824                         myhostname=$tans
5825                         phostname='uname -n'
5826                 else
5827                         echo 'Oh well, maybe I can mine it out of whoami.h...'
5828                         if tans=`sh -c $contains' sysname $usrinc/whoami.h' 2>&1` ; then
5829                                 myhostname=`echo "$tans" | $sed 's/^.*"\(.*\)"/\1/'`
5830                                 phostname="sed -n -e '"'/sysname/s/^.*\"\\(.*\\)\"/\1/{'"' -e p -e q -e '}' <$usrinc/whoami.h"
5831                         else
5832                                 case "$myhostname" in
5833                                 '') echo "Does this machine have an identity crisis or something?"
5834                                         phostname='';;
5835                                 *)
5836                                         echo "Well, you said $myhostname before..."
5837                                         phostname='echo $myhostname';;
5838                                 esac
5839                         fi
5840                 fi
5841         fi
5842 fi
5843 : you do not want to know about this
5844 set $myhostname
5845 myhostname=$1
5846
5847 : verify guess
5848 if $test "$myhostname" ; then
5849         dflt=y
5850         rp='Your host name appears to be "'$myhostname'".'" Right?"
5851         . ./myread
5852         case "$ans" in
5853         y*) ;;
5854         *) myhostname='';;
5855         esac
5856 fi
5857
5858 : bad guess or no guess
5859 while $test "X$myhostname" = X ; do
5860         dflt=''
5861         rp="Please type the (one word) name of your host:"
5862         . ./myread
5863         myhostname="$ans"
5864 done
5865
5866 : translate upper to lower if necessary
5867 case "$myhostname" in
5868 *[A-Z]*)
5869         echo "(Normalizing case in your host name)"
5870         myhostname=`echo $myhostname | ./tr '[A-Z]' '[a-z]'`
5871         ;;
5872 esac
5873
5874 case "$myhostname" in
5875 *.*)
5876         dflt=`expr "X$myhostname" : "X[^.]*\(\..*\)"`
5877         myhostname=`expr "X$myhostname" : "X\([^.]*\)\."`
5878         echo "(Trimming domain name from host name--host name is now $myhostname)"
5879         ;;
5880 *) case "$mydomain" in
5881         '')
5882                 {
5883                         test "X$hostcat" = "Xypcat hosts" &&
5884                         ypmatch "$myhostname" hosts 2>/dev/null |\
5885                                 $sed -e 's/[     ]*#.*//; s/$/ /' > hosts && \
5886                         $test -s hosts
5887                 } || {
5888                         $hostcat | $sed -n -e "s/[       ]*#.*//; s/\$/ /
5889                                         /[       ]$myhostname[  . ]/p" > hosts
5890                 }
5891                 tmp_re="[       . ]"
5892                 $test x`$awk "/[0-9].*[  ]$myhostname$tmp_re/ { sum++ }
5893                              END { print sum }" hosts` = x1 || tmp_re="[         ]"
5894                 dflt=.`$awk "/[0-9].*[   ]$myhostname$tmp_re/ {for(i=2; i<=NF;i++) print \\\$i}" \
5895                         hosts | $sort | $uniq | \
5896                         $sed -n -e "s/$myhostname\.\([-a-zA-Z0-9_.]\)/\1/p"`
5897                 case `$echo X$dflt` in
5898                 X*\ *)  echo "(Several hosts in /etc/hosts matched hostname)"
5899                         dflt=.
5900                         ;;
5901                 X.) echo "(You do not have fully-qualified names in /etc/hosts)"
5902                         ;;
5903                 esac
5904                 case "$dflt" in
5905                 .)
5906                         tans=`./loc resolv.conf X /etc /usr/etc`
5907                         if $test -f "$tans"; then
5908                                 echo "(Attempting domain name extraction from $tans)"
5909                                 dflt=.`$sed -n -e 's/   / /g' \
5910                                   -e 's/^search  *\([^ ]*\).*/\1/p' $tans \
5911                                   | ./tr '[A-Z]' '[a-z]' 2>/dev/null`
5912                                 case "$dflt" in
5913                                 .) dflt=.`$sed -n -e 's/        / /g' \
5914                                      -e 's/^domain  *\([^ ]*\).*/\1/p' $tans \
5915                                      | ./tr '[A-Z]' '[a-z]' 2>/dev/null`
5916                                         ;;
5917                                 esac
5918                         fi
5919                         ;;
5920                 esac
5921                 case "$dflt" in
5922                 .) echo "(No help from resolv.conf either -- attempting clever guess)"
5923                         dflt=.`sh -c domainname 2>/dev/null`
5924                         case "$dflt" in
5925                         '') dflt='.';;
5926                         .nis.*|.yp.*|.main.*) dflt=`echo $dflt | $sed -e 's/^\.[^.]*//'`;;
5927                         esac
5928                         ;;
5929                 esac
5930                 case "$dflt" in
5931                 .) echo "(Lost all hope -- silly guess then)"
5932                         dflt='.uucp'
5933                         ;;
5934                 esac
5935                 $rm -f hosts
5936                 ;;
5937         *) dflt="$mydomain";;
5938         esac;;
5939 esac
5940 echo " "
5941 rp="What is your domain name?"
5942 . ./myread
5943 tans="$ans"
5944 case "$ans" in
5945 '') ;;
5946 .*) ;;
5947 *) tans=".$tans";;
5948 esac
5949 mydomain="$tans"
5950
5951 : translate upper to lower if necessary
5952 case "$mydomain" in
5953 *[A-Z]*)
5954         echo "(Normalizing case in your domain name)"
5955         mydomain=`echo $mydomain | ./tr '[A-Z]' '[a-z]'`
5956         ;;
5957 esac
5958
5959 : a little sanity check here
5960 case "$phostname" in
5961 '') ;;
5962 *)
5963         case `$phostname | ./tr '[A-Z]' '[a-z]'` in
5964         $myhostname$mydomain|$myhostname) ;;
5965         *)
5966                 case "$phostname" in
5967                 sed*)
5968                         echo "(That doesn't agree with your whoami.h file, by the way.)"
5969                         ;;
5970                 *)
5971                         echo "(That doesn't agree with your $phostname command, by the way.)"
5972                         ;;
5973                 esac
5974         ;;
5975         esac
5976         ;;
5977 esac
5978
5979 $cat <<EOM
5980
5981 I need to get your e-mail address in Internet format if possible, i.e.
5982 something like user@host.domain. Please answer accurately since I have
5983 no easy means to double check it. The default value provided below
5984 is most probably close to the reality but may not be valid from outside
5985 your organization...
5986
5987 EOM
5988 cont=x
5989 while test "$cont"; do
5990         case "$cf_email" in
5991         '') dflt="$cf_by@$myhostname$mydomain";;
5992         *) dflt="$cf_email";;
5993         esac
5994         rp='What is your e-mail address?'
5995         . ./myread
5996         cf_email="$ans"
5997         case "$cf_email" in
5998         *@*.*) cont='' ;;
5999         *)
6000                 rp='Address does not look like an Internet one.  Use it anyway?'
6001                 case "$fastread" in
6002                 yes) dflt=y ;;
6003                 *) dflt=n ;;
6004                 esac
6005                 . ./myread
6006                 case "$ans" in
6007                 y*) cont='' ;;
6008                 *) echo " " ;;
6009                 esac
6010                 ;;
6011         esac
6012 done
6013
6014 $cat <<EOM
6015
6016 If you or somebody else will be maintaining perl at your site, please
6017 fill in the correct e-mail address here so that they may be contacted
6018 if necessary. Currently, the "perlbug" program included with perl
6019 will send mail to this address in addition to perlbug@perl.com. You may
6020 enter "none" for no administrator.
6021
6022 EOM
6023 case "$perladmin" in
6024 '') dflt="$cf_email";;
6025 *) dflt="$perladmin";;
6026 esac
6027 rp='Perl administrator e-mail address'
6028 . ./myread
6029 perladmin="$ans"
6030
6031 : figure out how to guarantee perl startup
6032 case "$startperl" in
6033 '')
6034         case "$sharpbang" in
6035         *!)
6036                 $cat <<EOH
6037
6038 I can use the #! construct to start perl on your system. This will
6039 make startup of perl scripts faster, but may cause problems if you
6040 want to share those scripts and perl is not in a standard place
6041 ($binexp/perl) on all your platforms. The alternative is to force
6042 a shell by starting the script with a single ':' character.
6043
6044 EOH
6045                 dflt="$binexp/perl"
6046                 rp='What shall I put after the #! to start up perl ("none" to not use #!)?'
6047                 . ./myread
6048                 case "$ans" in
6049                 none)   startperl=": # use perl";;
6050                 *)      startperl="#!$ans"
6051                         if $test 30 -lt `echo "$ans" | wc -c`; then
6052                                 $cat >&4 <<EOM
6053
6054 WARNING:  Some systems limit the #! command to 32 characters.
6055 If you experience difficulty running Perl scripts with #!, try
6056 installing Perl in a directory with a shorter pathname.
6057
6058 EOM
6059                         fi ;;
6060                 esac
6061                 ;;
6062         *) startperl=": # use perl"
6063                 ;;
6064         esac
6065         ;;
6066 esac
6067 echo "I'll use $startperl to start perl scripts."
6068
6069 : figure best path for perl in scripts
6070 case "$perlpath" in
6071 '')
6072         perlpath="$binexp/perl"
6073         case "$startperl" in
6074         *!*) ;;
6075         *)
6076                 $cat <<EOH
6077
6078 I will use the "eval 'exec'" idiom to start Perl on your system.
6079 I can use the full path of your Perl binary for this purpose, but
6080 doing so may cause problems if you want to share those scripts and
6081 Perl is not always in a standard place ($binexp/perl).
6082
6083 EOH
6084                 dflt="$binexp/perl"
6085                 rp="What path shall I use in \"eval 'exec'\"?"
6086                 . ./myread
6087                 perlpath="$ans"
6088                 ;;
6089         esac
6090         ;;
6091 esac
6092 case "$startperl" in
6093 *!*)    ;;
6094 *)      echo "I'll use $perlpath in \"eval 'exec'\"" ;;
6095 esac
6096
6097 : determine where public executable scripts go
6098 set scriptdir scriptdir
6099 eval $prefixit
6100 case "$scriptdir" in
6101 '')
6102         dflt="$bin"
6103         : guess some guesses
6104         $test -d /usr/share/scripts && dflt=/usr/share/scripts
6105         $test -d /usr/share/bin && dflt=/usr/share/bin
6106         $test -d /usr/local/script && dflt=/usr/local/script
6107         $test -d $prefixexp/script && dflt=$prefixexp/script
6108         set dflt
6109         eval $prefixup
6110         ;;
6111 *)  dflt="$scriptdir"
6112         ;;
6113 esac
6114 $cat <<EOM
6115  
6116 Some installations have a separate directory just for executable scripts so
6117 that they can mount it across multiple architectures but keep the scripts in
6118 one spot.  You might, for example, have a subdirectory of /usr/share for this.
6119 Or you might just lump your scripts in with all your other executables.
6120  
6121 EOM
6122 fn=d~
6123 rp='Where do you keep publicly executable scripts?'
6124 . ./getfile
6125 if $test "X$ansexp" != "X$scriptdirexp"; then
6126         installscript=''
6127 fi
6128 scriptdir="$ans"
6129 scriptdirexp="$ansexp"
6130 if $afs; then
6131         $cat <<EOM
6132
6133 Since you are running AFS, I need to distinguish the directory in which
6134 scripts reside from the directory in which they are installed (and from
6135 which they are presumably copied to the former directory by occult means).
6136
6137 EOM
6138         case "$installscript" in
6139         '') dflt=`echo $scriptdirexp | sed 's#^/afs/#/afs/.#'`;;
6140         *) dflt="$installscript";;
6141         esac
6142         fn=de~
6143         rp='Where will public scripts be installed?'
6144         . ./getfile
6145         installscript="$ans"
6146 else
6147         installscript="$scriptdirexp"
6148 fi
6149
6150 : determine where site specific libraries go.
6151 : Usual default is /usr/local/lib/perl5/site_perl/$apiversion
6152 prog=`echo $package | $sed 's/-*[0-9.]*$//'`
6153 case "$prefix" in
6154 *perl*) set dflt sitelib lib/site_$prog/$apiversion ;;
6155 *)       set dflt sitelib lib/$package/site_$prog/$apiversion ;;
6156 esac
6157 eval $prefixit
6158 $cat <<EOM
6159
6160 The installation process will also create a directory for
6161 site-specific extensions and modules.  Some users find it convenient
6162 to place all site-specific files in this directory rather than in the
6163 main distribution directory.
6164
6165 EOM
6166 fn=d~+
6167 rp='Pathname for the site-specific library files?'
6168 . ./getfile
6169 if $test "X$sitelibexp" != "X$ansexp"; then
6170         installsitelib=''
6171 fi
6172 sitelib="$ans"
6173 sitelibexp="$ansexp"
6174 if $afs; then
6175         $cat <<EOM
6176
6177 Since you are running AFS, I need to distinguish the directory in
6178 which site-specific files reside from the directory in which they are
6179 installed (and from which they are presumably copied to the former
6180 directory by occult means).
6181
6182 EOM
6183         case "$installsitelib" in
6184         '') dflt=`echo $sitelibexp | sed 's#^/afs/#/afs/.#'`;;
6185         *) dflt="$installsitelib";;
6186         esac
6187         fn=de~
6188         rp='Where will site-specific files be installed?'
6189         . ./getfile
6190         installsitelib="$ans"
6191 else
6192         installsitelib="$sitelibexp"
6193 fi
6194
6195 : determine where site specific architecture-dependent libraries go.
6196 : sitelib  default is /usr/local/lib/perl5/site_perl/$apiversion
6197 : sitearch default is /usr/local/lib/perl5/site_perl/$apiversion/$archname
6198 : sitelib may have an optional trailing /share.
6199 tdflt=`echo $sitelib | $sed 's,/share$,,'`
6200 tdflt="$tdflt/$archname"
6201 set sitearch sitearch none
6202 eval $prefixit
6203 case "$sitearch" in
6204 '')     dflt="$tdflt" ;;
6205 *)      dflt="$sitearch" ;;
6206 esac
6207 $cat <<EOM
6208
6209 The installation process will also create a directory for
6210 architecture-dependent site-specific extensions and modules.
6211
6212 EOM
6213 fn=nd~+
6214 rp='Pathname for the site-specific architecture-dependent library files?'
6215 . ./getfile
6216 if $test "X$sitearchexp" != "X$ansexp"; then
6217         installsitearch=''
6218 fi
6219 sitearch="$ans"
6220 sitearchexp="$ansexp"
6221 if $afs; then
6222         $cat <<EOM
6223
6224 Since you are running AFS, I need to distinguish the directory in
6225 which site-specific architecture-dependent library files reside from
6226 the directory in which they are installed (and from which they are
6227 presumably copied to the former directory by occult means).
6228
6229 EOM
6230         case "$installsitearch" in
6231         '') dflt=`echo $sitearchexp | sed 's#^/afs/#/afs/.#'`;;
6232         *) dflt="$installsitearch";;
6233         esac
6234         fn=de~
6235         rp='Where will site-specific architecture-dependent files be installed?'
6236         . ./getfile
6237         installsitearch="$ans"
6238 else
6239         installsitearch="$sitearchexp"
6240 fi
6241
6242 cat <<EOM
6243
6244 Previous version of $package used the standard IO mechanisms as defined
6245 in <stdio.h>.  Versions 5.003_02 and later of perl allow alternate IO
6246 mechanisms via a "PerlIO" abstraction, but the stdio mechanism is still
6247 the default.  This abstraction layer can use AT&T's sfio (if you already
6248 have sfio installed) or regular stdio.  Using PerlIO with sfio may cause
6249 problems with some extension modules.  Using PerlIO with stdio is safe,
6250 but it is slower than plain stdio and therefore is not the default.
6251
6252 If this doesn't make any sense to you, just accept the default 'n'.
6253 EOM
6254 case "$useperlio" in
6255 $define|true|[yY]*)     dflt='y';;
6256 *) dflt='n';;
6257 esac
6258 rp='Use the experimental PerlIO abstraction layer?'
6259 . ./myread
6260 case "$ans" in
6261 y|Y) 
6262         val="$define"
6263         ;;     
6264 *)      
6265         echo "Ok, doing things the stdio way"
6266         val="$undef"
6267         ;;
6268 esac
6269 set useperlio
6270 eval $setvar 
6271
6272 : Check how to convert floats to strings.
6273 if test "X$d_Gconvert" = X; then
6274         echo " "
6275         echo "Checking for an efficient way to convert floats to strings."
6276         $cat >try.c <<'EOP'
6277 #ifdef TRY_gconvert
6278 #define Gconvert(x,n,t,b) gconvert((x),(n),(t),(b))
6279 char *myname = "gconvert";
6280 #endif
6281 #ifdef TRY_gcvt
6282 #define Gconvert(x,n,t,b) gcvt((x),(n),(b))
6283 char *myname = "gcvt";
6284 #endif
6285 #ifdef TRY_sprintf
6286 #define Gconvert(x,n,t,b) sprintf((b),"%.*g",(n),(x))
6287 char *myname = "sprintf";
6288 #endif
6289
6290 #include <stdio.h>
6291
6292 int
6293 checkit(expect, got)
6294 char *expect;
6295 char *got;
6296 {
6297     if (strcmp(expect, got)) {
6298                 printf("%s oddity:  Expected %s, got %s\n",
6299                         myname, expect, got);
6300                 exit(1);
6301         }
6302 }
6303
6304 int main()
6305
6306         char buf[64]; 
6307         buf[63] = '\0';
6308
6309         /* This must be 1st test on (which?) platform */
6310         /* Alan Burlison <AlanBurlsin@unn.unisys.com> */
6311         Gconvert(0.1, 8, 0, buf);
6312         checkit("0.1", buf);
6313
6314         Gconvert(1.0, 8, 0, buf); 
6315         checkit("1", buf);
6316
6317         Gconvert(0.0, 8, 0, buf); 
6318         checkit("0", buf);
6319
6320         Gconvert(-1.0, 8, 0, buf); 
6321         checkit("-1", buf);
6322
6323         /* Some Linux gcvt's give 1.e+5 here. */
6324         Gconvert(100000.0, 8, 0, buf); 
6325         checkit("100000", buf);
6326         
6327         /* Some Linux gcvt's give -1.e+5 here. */
6328         Gconvert(-100000.0, 8, 0, buf); 
6329         checkit("-100000", buf);
6330
6331         exit(0);
6332 }
6333 EOP
6334         case "$d_Gconvert" in
6335         gconvert*) xxx_list='gconvert gcvt sprintf' ;;
6336         gcvt*) xxx_list='gcvt gconvert sprintf' ;;
6337         sprintf*) xxx_list='sprintf gconvert gcvt' ;;
6338         *) xxx_list='gconvert gcvt sprintf' ;;
6339         esac
6340
6341         for xxx_convert in $xxx_list; do
6342                 echo "Trying $xxx_convert"
6343                 $rm -f try try$_o
6344                 set try -DTRY_$xxx_convert
6345                 if eval $compile; then
6346                         echo "$xxx_convert" found. >&4
6347                         if ./try; then
6348                                 echo "I'll use $xxx_convert to convert floats into a string." >&4
6349                                 break;
6350                         else
6351                                 echo "...But $xxx_convert didn't work as I expected."
6352                         fi
6353                 else
6354                         echo "$xxx_convert NOT found." >&4
6355                 fi
6356         done
6357                 
6358         case "$xxx_convert" in
6359         gconvert) d_Gconvert='gconvert((x),(n),(t),(b))' ;;
6360         gcvt) d_Gconvert='gcvt((x),(n),(b))' ;;
6361         *) d_Gconvert='sprintf((b),"%.*g",(n),(x))' ;;
6362         esac
6363 fi
6364
6365 : Initialize h_fcntl
6366 h_fcntl=false
6367
6368 : Initialize h_sysfile
6369 h_sysfile=false
6370
6371 : access call always available on UNIX
6372 set access d_access
6373 eval $inlibc
6374
6375 : locate the flags for 'access()'
6376 case "$d_access" in
6377 "$define")
6378         echo " "
6379         $cat >access.c <<'EOCP'
6380 #include <sys/types.h>
6381 #ifdef I_FCNTL
6382 #include <fcntl.h>
6383 #endif
6384 #ifdef I_SYS_FILE
6385 #include <sys/file.h>
6386 #endif
6387 #ifdef I_UNISTD
6388 #include <unistd.h>
6389 #endif
6390 int main() {
6391         exit(R_OK);
6392 }
6393 EOCP
6394         : check sys/file.h first, no particular reason here
6395         if $test `./findhdr sys/file.h` && \
6396                 $cc $cppflags -DI_SYS_FILE -o access access.c >/dev/null 2>&1 ; then
6397                 h_sysfile=true;
6398                 echo "<sys/file.h> defines the *_OK access constants." >&4
6399         elif $test `./findhdr fcntl.h` && \
6400                 $cc $cppflags -DI_FCNTL -o access access.c >/dev/null 2>&1 ; then
6401                 h_fcntl=true;
6402                 echo "<fcntl.h> defines the *_OK access constants." >&4
6403         elif $test `./findhdr unistd.h` && \
6404                 $cc $cppflags -DI_UNISTD -o access access.c >/dev/null 2>&1 ; then
6405                 echo "<unistd.h> defines the *_OK access constants." >&4
6406         else
6407                 echo "I can't find the four *_OK access constants--I'll use mine." >&4
6408         fi
6409         ;;
6410 esac
6411 $rm -f access*
6412
6413 : see if accessx exists
6414 set accessx d_accessx
6415 eval $inlibc
6416
6417 : see if alarm exists
6418 set alarm d_alarm
6419 eval $inlibc
6420
6421 : Look for GNU-cc style attribute checking
6422 echo " "
6423 echo "Checking whether your compiler can handle __attribute__ ..." >&4
6424 $cat >attrib.c <<'EOCP'
6425 #include <stdio.h>
6426 void croak (char* pat,...) __attribute__((format(printf,1,2),noreturn));
6427 EOCP
6428 if $cc $ccflags -c attrib.c >attrib.out 2>&1 ; then
6429         if $contains 'warning' attrib.out >/dev/null 2>&1; then
6430                 echo "Your C compiler doesn't fully support __attribute__."
6431                 val="$undef"
6432         else
6433                 echo "Your C compiler supports __attribute__."
6434                 val="$define"
6435         fi
6436 else
6437         echo "Your C compiler doesn't seem to understand __attribute__ at all."
6438         val="$undef"
6439 fi
6440 set d_attribut
6441 eval $setvar
6442 $rm -f attrib*
6443
6444 : see if bcmp exists
6445 set bcmp d_bcmp
6446 eval $inlibc
6447
6448 : see if bcopy exists
6449 set bcopy d_bcopy
6450 eval $inlibc
6451
6452 : see if this is a unistd.h system
6453 set unistd.h i_unistd
6454 eval $inhdr
6455
6456 : see if getpgrp exists
6457 set getpgrp d_getpgrp
6458 eval $inlibc
6459
6460 case "$d_getpgrp" in
6461 "$define")
6462         echo " "
6463         echo "Checking to see which flavor of getpgrp is in use..."
6464         $cat >set.c <<EOP
6465 #$i_unistd I_UNISTD
6466 #include <sys/types.h>
6467 #ifdef I_UNISTD
6468 #  include <unistd.h>
6469 #endif
6470 int main()
6471 {
6472         if (getuid() == 0) {
6473                 printf("(I see you are running Configure as super-user...)\n");
6474                 setuid(1);
6475         }
6476 #ifdef TRY_BSD_PGRP
6477         if (getpgrp(1) == 0)
6478                 exit(0);
6479 #else
6480         if (getpgrp() > 0)
6481                 exit(0);
6482 #endif
6483         exit(1);
6484 }
6485 EOP
6486         if $cc -DTRY_BSD_PGRP $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1 && ./set; then
6487                 echo "You have to use getpgrp(pid) instead of getpgrp()." >&4
6488                 val="$define"
6489         elif $cc $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1 && ./set; then
6490                 echo "You have to use getpgrp() instead of getpgrp(pid)." >&4
6491                 val="$undef"
6492         else
6493                 echo "I can't seem to compile and run the test program."
6494                 if ./usg; then
6495                         xxx="a USG one, i.e. you use getpgrp()."
6496                 else
6497                         # SVR4 systems can appear rather BSD-ish.
6498                         case "$i_unistd" in
6499                         $undef)
6500                                 xxx="a BSD one, i.e. you use getpgrp(pid)."
6501                                 val="$define"
6502                                 ;;
6503                         $define)
6504                                 xxx="probably a USG one, i.e. you use getpgrp()."
6505                                 val="$undef"
6506                                 ;;
6507                         esac
6508                 fi
6509                 echo "Assuming your getpgrp is $xxx" >&4
6510         fi
6511         ;;
6512 *) val="$undef";;
6513 esac
6514 set d_bsdgetpgrp
6515 eval $setvar
6516 $rm -f set set.c
6517
6518 : see if setpgrp exists
6519 set setpgrp d_setpgrp
6520 eval $inlibc
6521
6522 case "$d_setpgrp" in
6523 "$define")
6524         echo " "
6525         echo "Checking to see which flavor of setpgrp is in use..."
6526         $cat >set.c <<EOP
6527 #$i_unistd I_UNISTD
6528 #include <sys/types.h>
6529 #ifdef I_UNISTD
6530 #  include <unistd.h>
6531 #endif
6532 int main()
6533 {
6534         if (getuid() == 0) {
6535                 printf("(I see you are running Configure as super-user...)\n");
6536                 setuid(1);
6537         }
6538 #ifdef TRY_BSD_PGRP
6539         if (-1 == setpgrp(1, 1))
6540                 exit(0);
6541 #else
6542         if (setpgrp() != -1)
6543                 exit(0);
6544 #endif
6545         exit(1);
6546 }
6547 EOP
6548         if $cc -DTRY_BSD_PGRP $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1 && ./set; then
6549                 echo 'You have to use setpgrp(pid,pgrp) instead of setpgrp().' >&4
6550                 val="$define"
6551         elif $cc $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1 && ./set; then
6552                 echo 'You have to use setpgrp() instead of setpgrp(pid,pgrp).' >&4
6553                 val="$undef"
6554         else
6555                 echo "(I can't seem to compile and run the test program.)"
6556                 if ./usg; then
6557                         xxx="a USG one, i.e. you use setpgrp()."
6558                 else
6559                         # SVR4 systems can appear rather BSD-ish.
6560                         case "$i_unistd" in
6561                         $undef)
6562                                 xxx="a BSD one, i.e. you use setpgrp(pid,pgrp)."
6563                                 val="$define"
6564                                 ;;
6565                         $define)
6566                                 xxx="probably a USG one, i.e. you use setpgrp()."
6567                                 val="$undef"
6568                                 ;;
6569                         esac
6570                 fi
6571                 echo "Assuming your setpgrp is $xxx" >&4
6572         fi
6573         ;;
6574 *) val="$undef";;
6575 esac
6576 set d_bsdsetpgrp
6577 eval $setvar
6578 $rm -f set set.c
6579 : see if bzero exists
6580 set bzero d_bzero
6581 eval $inlibc
6582
6583 : check for lengths of integral types
6584 echo " "
6585 case "$intsize" in
6586 '')
6587         echo "Checking to see how big your integers are..." >&4
6588         $cat >intsize.c <<'EOCP'
6589 #include <stdio.h>
6590 int main()
6591 {
6592         printf("intsize=%d;\n", sizeof(int));
6593         printf("longsize=%d;\n", sizeof(long));
6594         printf("shortsize=%d;\n", sizeof(short));
6595         exit(0);
6596 }
6597 EOCP
6598         set intsize
6599         if eval $compile_ok && ./intsize > /dev/null; then
6600                 eval `./intsize`
6601                 echo "Your integers are $intsize bytes long."
6602                 echo "Your long integers are $longsize bytes long."
6603                 echo "Your short integers are $shortsize bytes long."
6604         else
6605                 $cat >&4 <<EOM
6606 !
6607 Help! I can't compile and run the intsize test program: please enlighten me!
6608 (This is probably a misconfiguration in your system or libraries, and
6609 you really ought to fix it.  Still, I'll try anyway.)
6610 !
6611 EOM
6612                 dflt=4
6613                 rp="What is the size of an integer (in bytes)?"
6614                 . ./myread
6615                 intsize="$ans"
6616                 dflt=$intsize
6617                 rp="What is the size of a long integer (in bytes)?"
6618                 . ./myread
6619                 longsize="$ans"
6620                 dflt=2
6621                 rp="What is the size of a short integer (in bytes)?"
6622                 . ./myread
6623                 shortsize="$ans"
6624         fi
6625         ;;
6626 esac
6627 $rm -f intsize intsize.*
6628
6629 : see if signal is declared as pointer to function returning int or void
6630 echo " "
6631 xxx=`./findhdr signal.h`
6632 $test "$xxx" && $cppstdin $cppminus $cppflags < $xxx >$$.tmp 2>/dev/null
6633 if $contains 'int.*\*[  ]*signal' $$.tmp >/dev/null 2>&1 ; then
6634         echo "You have int (*signal())() instead of void." >&4
6635         val="$undef"
6636 elif $contains 'void.*\*[       ]*signal' $$.tmp >/dev/null 2>&1 ; then
6637         echo "You have void (*signal())()." >&4
6638         val="$define"
6639 elif $contains 'extern[         ]*[(\*]*signal' $$.tmp >/dev/null 2>&1 ; then
6640         echo "You have int (*signal())() instead of void." >&4
6641         val="$undef"
6642 elif $contains 'void.*\*.*sig' $$.tmp >/dev/null 2>&1 ; then
6643         echo "You have void (*signal())()." >&4
6644         val="$define"
6645 else
6646         case "$d_voidsig" in
6647         '')
6648         echo "I can't determine whether signal handler returns void or int..." >&4
6649                 dflt=void
6650                 rp="What type does your signal handler return?"
6651                 . ./myread
6652                 case "$ans" in
6653                 v*) val="$define";;
6654                 *) val="$undef";;
6655                 esac;;
6656         "$define")
6657                 echo "As you already told me, signal handler returns void." >&4
6658                 val="$define"
6659                 ;;
6660         *)      echo "As you already told me, signal handler returns int." >&4
6661                 val="$undef"
6662                 ;;
6663         esac
6664 fi
6665 set d_voidsig
6666 eval $setvar
6667 case "$d_voidsig" in
6668 "$define") signal_t="void";;
6669 *) signal_t="int";;
6670 esac
6671 $rm -f $$.tmp
6672
6673 : check for ability to cast large floats to 32-bit ints.
6674 echo " "
6675 echo 'Checking whether your C compiler can cast large floats to int32.' >&4
6676 if $test "$intsize" -ge 4; then
6677         xxx=int
6678 else
6679         xxx=long
6680 fi
6681 $cat >try.c <<EOCP
6682 #include <stdio.h>
6683 #include <sys/types.h>
6684 #include <signal.h>
6685 $signal_t blech(s) int s; { exit(3); }
6686 int main()
6687 {
6688         $xxx i32;
6689         double f, g;
6690         int result = 0;
6691         char str[16];
6692         signal(SIGFPE, blech);
6693
6694         /* Don't let compiler optimize the test away.  Store the number 
6695            in a writable string for gcc to pass to sscanf under HP/UX.
6696         */
6697         sprintf(str, "2147483647");
6698         sscanf(str, "%lf", &f); /* f = (double) 0x7fffffff; */
6699         g = 10 * f;
6700         i32  = ($xxx) g;
6701
6702         /* x86 processors will probably give 0x8000 0000, which is a
6703        sign change.  We don't want that.  We want to mimic SPARC
6704            behavior here, which is to preserve the sign and give
6705            back 0x7fff ffff.
6706         */
6707         if (i32 != ($xxx) f)
6708                 result |= 1;
6709         exit(result);
6710 }
6711 EOCP
6712 set try
6713 if eval $compile_ok; then
6714         ./try
6715         yyy=$?
6716 else
6717         echo "(I can't seem to compile the test program--assuming it can't)"
6718         yyy=1
6719 fi
6720 case "$yyy" in
6721 0)      val="$define"
6722         echo "Yup, it can."
6723         ;;
6724 *)      val="$undef"
6725         echo "Nope, it can't."
6726         ;;
6727 esac
6728 set d_casti32
6729 eval $setvar
6730 $rm -f try try.*
6731
6732 : check for ability to cast negative floats to unsigned
6733 echo " "
6734 echo 'Checking whether your C compiler can cast negative float to unsigned.' >&4
6735 $cat >try.c <<EOCP
6736 #include <stdio.h>
6737 #include <sys/types.h>
6738 #include <signal.h>
6739 $signal_t blech(s) int s; { exit(7); }
6740 $signal_t blech_in_list(s) int s; { exit(4); }
6741 unsigned long dummy_long(p) unsigned long p; { return p; }
6742 unsigned int dummy_int(p) unsigned int p; { return p; }
6743 unsigned short dummy_short(p) unsigned short p; { return p; }
6744 int main()
6745 {
6746         double f;
6747         unsigned long along;
6748         unsigned int aint;
6749         unsigned short ashort;
6750         int result = 0;
6751         char str[16];
6752         
6753         /* Frustrate gcc-2.7.2's optimizer which failed this test with
6754            a direct f = -123. assignment.  gcc-2.8.0 reportedly
6755            optimized the whole file away
6756         */
6757         /* Store the number in a writable string for gcc to pass to 
6758            sscanf under HP/UX.
6759         */
6760         sprintf(str, "-123");
6761         sscanf(str, "%lf", &f);  /* f = -123.; */
6762
6763         signal(SIGFPE, blech);
6764         along = (unsigned long)f;
6765         aint = (unsigned int)f;
6766         ashort = (unsigned short)f;
6767         if (along != (unsigned long)-123)
6768                 result |= 1;
6769         if (aint != (unsigned int)-123)
6770                 result |= 1;
6771         if (ashort != (unsigned short)-123)
6772                 result |= 1;
6773         sprintf(str, "1073741824.");
6774         sscanf(str, "%lf", &f); /* f = (double)0x40000000; */
6775         f = f + f;
6776         along = 0;
6777         along = (unsigned long)f;
6778         if (along != 0x80000000)
6779                 result |= 2;
6780         f -= 1.;
6781         along = 0;
6782         along = (unsigned long)f;
6783         if (along != 0x7fffffff)
6784                 result |= 1;
6785         f += 2.;
6786         along = 0;
6787         along = (unsigned long)f;
6788         if (along != 0x80000001)
6789                 result |= 2;
6790         if (result)
6791                 exit(result);
6792         signal(SIGFPE, blech_in_list);
6793         sprintf(str, "123.");
6794         sscanf(str, "%lf", &f);  /* f = 123.; */
6795         along = dummy_long((unsigned long)f);
6796         aint = dummy_int((unsigned int)f);
6797         ashort = dummy_short((unsigned short)f);
6798         if (along != (unsigned long)123)
6799                 result |= 4;
6800         if (aint != (unsigned int)123)
6801                 result |= 4;
6802         if (ashort != (unsigned short)123)
6803                 result |= 4;
6804         exit(result);
6805
6806 }
6807 EOCP
6808 set try
6809 if eval $compile_ok; then
6810         ./try
6811         castflags=$?
6812 else
6813         echo "(I can't seem to compile the test program--assuming it can't)"
6814         castflags=7
6815 fi
6816 case "$castflags" in
6817 0)      val="$define"
6818         echo "Yup, it can."
6819         ;;
6820 *)      val="$undef"
6821         echo "Nope, it can't."
6822         ;;
6823 esac
6824 set d_castneg
6825 eval $setvar
6826 $rm -f try.*
6827
6828 : see if vprintf exists
6829 echo " "
6830 if set vprintf val -f d_vprintf; eval $csym; $val; then
6831         echo 'vprintf() found.' >&4
6832         val="$define"
6833         $cat >vprintf.c <<'EOF'
6834 #include <varargs.h>
6835
6836 int main() { xxx("foo"); }
6837
6838 xxx(va_alist)
6839 va_dcl
6840 {
6841         va_list args;
6842         char buf[10];
6843
6844         va_start(args);
6845         exit((unsigned long)vsprintf(buf,"%s",args) > 10L);
6846 }
6847 EOF
6848         set vprintf
6849         if eval $compile && ./vprintf; then
6850                 echo "Your vsprintf() returns (int)." >&4
6851                 val2="$undef"
6852         else
6853                 echo "Your vsprintf() returns (char*)." >&4
6854                 val2="$define"
6855         fi
6856 else
6857         echo 'vprintf() NOT found.' >&4
6858                 val="$undef"
6859                 val2="$undef"
6860 fi
6861 set d_vprintf
6862 eval $setvar
6863 val=$val2
6864 set d_charvspr
6865 eval $setvar
6866
6867 : see if chown exists
6868 set chown d_chown
6869 eval $inlibc
6870
6871 : see if chroot exists
6872 set chroot d_chroot
6873 eval $inlibc
6874
6875 : see if chsize exists
6876 set chsize d_chsize
6877 eval $inlibc
6878
6879 hasfield='varname=$1; struct=$2; field=$3; shift; shift; shift;
6880 while $test $# -ge 2; do
6881         case "$1" in
6882         $define) echo "#include <$2>";;
6883         esac ;
6884     shift 2;
6885 done > try.c;
6886 echo "int main () { struct $struct foo; foo.$field = 0; }" >> try.c;
6887 if $cc $optimize $ccflags -c try.c >/dev/null 2>&1; then
6888         val="$define";
6889 else
6890         val="$undef";
6891 fi;
6892 set $varname;
6893 eval $setvar;
6894 $rm -f try.c try.o'
6895
6896 : see if this is a sys/uio.h system
6897 set sys/uio.h i_sysuio
6898 eval $inhdr
6899
6900 echo "Checking to see if your system supports struct iovec..." >&4
6901 set d_iovec_s iovec iov_base $i_sysuio sys/uio.h
6902 eval $hasfield
6903 case "$d_iovec_s" in
6904 "$define")      echo "Yup, it does." >&4
6905                 ;;
6906 *)              echo "Nope, it doesn't." >&4
6907                 ;;
6908 esac
6909
6910 socketlib=''
6911 sockethdr=''
6912 : see whether socket exists
6913 echo " "
6914 $echo $n "Hmm... $c" >&4
6915 if set socket val -f d_socket; eval $csym; $val; then
6916         echo "Looks like you have Berkeley networking support." >&4
6917         d_socket="$define"
6918         if set setsockopt val -f; eval $csym; $val; then
6919                 d_oldsock="$undef"
6920         else
6921                 echo "...but it uses the old BSD 4.1c interface, rather than 4.2." >&4
6922                 d_oldsock="$define"
6923         fi
6924 else
6925         if $contains socklib libc.list >/dev/null 2>&1; then
6926                 echo "Looks like you have Berkeley networking support." >&4
6927                 d_socket="$define"
6928                 : we will have to assume that it supports the 4.2 BSD interface
6929                 d_oldsock="$undef"
6930         else
6931                 echo "You don't have Berkeley networking in libc$_a..." >&4
6932                 if test "X$d_socket" = "X$define"; then
6933                    echo "...but you seem to believe that you have sockets." >&4
6934                 else
6935                         for net in net socket
6936                         do
6937                                 if test -f /usr/lib/lib$net$_a; then
6938                                         ( ($nm $nm_opt /usr/lib/lib$net$_a | eval $nm_extract) ||  \
6939                                         $ar t /usr/lib/lib$net$_a) 2>/dev/null >> libc.list
6940                                         if $contains socket libc.list >/dev/null 2>&1; then
6941                                                 d_socket="$define"
6942                                                 socketlib="-l$net"
6943                                                 case "$net" in
6944                                                 net)
6945                                                         echo "...but the Wollongong group seems to have hacked it in." >&4
6946                                                         sockethdr="-I/usr/netinclude"
6947                                                         ;;
6948                                                 esac
6949                                                 echo "Found Berkeley sockets interface in lib$net." >& 4 
6950                                                 if $contains setsockopt libc.list >/dev/null 2>&1; then
6951                                                         d_oldsock="$undef"
6952                                                 else
6953                                                         echo "...using the old BSD 4.1c interface, rather than 4.2." >&4
6954                                                         d_oldsock="$define"
6955                                                 fi
6956                                                 break
6957                                         fi
6958                                 fi
6959                         done
6960                         if test "X$d_socket" != "X$define"; then
6961                            echo "or anywhere else I see." >&4
6962                            d_socket="$undef"
6963                            d_oldsock="$undef"
6964                         fi
6965                 fi
6966         fi
6967 fi
6968
6969 : see if socketpair exists
6970 set socketpair d_sockpair
6971 eval $inlibc
6972
6973
6974 echo " "
6975 echo "Checking the availability of certain socket constants..." >& 4
6976 for ENUM in MSG_CTRUNC MSG_DONTROUTE MSG_OOB MSG_PEEK MSG_PROXY SCM_RIGHTS; do
6977         enum=`$echo $ENUM|./tr '[A-Z]' '[a-z]'`
6978         $cat >try.c <<EOF
6979 #include <sys/types.h>
6980 #include <sys/socket.h>
6981 int main() {
6982     int i = $ENUM;
6983 }
6984 EOF
6985         val="$undef"
6986         set try; if eval $compile; then
6987                 val="$define"
6988         fi
6989         set d_${enum}; eval $setvar
6990         $rm -f try.c try
6991 done
6992
6993 set sendmsg d_sendmsg
6994 eval $inlibc
6995
6996 set recvmsg d_recvmsg
6997 eval $inlibc
6998
6999 echo " "
7000 $echo $n "Checking to see if your system supports struct msghdr...$c" >&4
7001 set d_msghdr_s msghdr msg_name define sys/types.h $d_socket sys/socket.h $i_sysuio sys/uio.h
7002 eval $hasfield
7003 case "$d_msghdr_s" in
7004 "$define")      echo "Yup, it does." >&4
7005                 ;;
7006 *)              echo "Nope, it doesn't." >&4
7007                 ;;
7008 esac
7009
7010 $echo $n "Checking to see if your system supports struct cmsghdr...$c" >&4
7011 set d_cmsghdr_s cmsghdr cmsg_len define sys/types.h $d_socket sys/socket.h $i_sysuio sys/uio.h
7012 eval $hasfield
7013 case "$d_cmsghdr_s" in
7014 "$define")      echo "Yup, it does." >&4
7015                 ;;
7016 *)              echo "Nope, it doesn't." >&4
7017                 ;;
7018 esac
7019
7020 : check for const keyword
7021 echo " "
7022 echo 'Checking to see if your C compiler knows about "const"...' >&4
7023 $cat >const.c <<'EOCP'
7024 typedef struct spug { int drokk; } spug;
7025 int main()
7026 {
7027         const char *foo;
7028         const spug y;
7029 }
7030 EOCP
7031 if $cc -c $ccflags const.c >/dev/null 2>&1 ; then
7032         val="$define"
7033         echo "Yup, it does."
7034 else
7035         val="$undef"
7036         echo "Nope, it doesn't."
7037 fi
7038 set d_const
7039 eval $setvar
7040
7041 : see if crypt exists
7042 echo " "
7043 if set crypt val -f d_crypt; eval $csym; $val; then
7044         echo 'crypt() found.' >&4
7045         val="$define"
7046         cryptlib=''
7047 else
7048         cryptlib=`./loc Slibcrypt$_a "" $xlibpth`
7049         if $test -z "$cryptlib"; then
7050                 cryptlib=`./loc Mlibcrypt$_a "" $xlibpth`
7051         else
7052                 cryptlib=-lcrypt
7053         fi
7054         if $test -z "$cryptlib"; then
7055                 cryptlib=`./loc Llibcrypt$_a "" $xlibpth`
7056         else
7057                 cryptlib=-lcrypt
7058         fi
7059         if $test -z "$cryptlib"; then
7060                 cryptlib=`./loc libcrypt$_a "" $libpth`
7061         else
7062                 cryptlib=-lcrypt
7063         fi
7064         if $test -z "$cryptlib"; then
7065                 echo 'crypt() NOT found.' >&4
7066                 val="$undef"
7067         else
7068                 val="$define"
7069         fi
7070 fi
7071 set d_crypt
7072 eval $setvar
7073
7074 : get csh whereabouts
7075 case "$csh" in
7076 'csh') val="$undef" ;;
7077 *) val="$define" ;;
7078 esac
7079 set d_csh
7080 eval $setvar
7081 : Respect a hint or command line value for full_csh.
7082 case "$full_csh" in
7083 '') full_csh=$csh ;;
7084 esac
7085
7086 : see if cuserid exists
7087 set cuserid d_cuserid
7088 eval $inlibc
7089
7090 : see if this is a limits.h system
7091 set limits.h i_limits
7092 eval $inhdr
7093
7094 : see if this is a float.h system
7095 set float.h i_float
7096 eval $inhdr
7097
7098 : See if number of significant digits in a double precision number is known
7099 echo " "
7100 $cat >dbl_dig.c <<EOM
7101 #$i_limits I_LIMITS
7102 #$i_float I_FLOAT
7103 #ifdef I_LIMITS
7104 #include <limits.h>
7105 #endif
7106 #ifdef I_FLOAT
7107 #include <float.h>
7108 #endif
7109 #ifdef DBL_DIG
7110 printf("Contains DBL_DIG");
7111 #endif
7112 EOM
7113 $cppstdin $cppflags $cppminus < dbl_dig.c >dbl_dig.E 2>/dev/null
7114 if $contains 'DBL_DIG' dbl_dig.E >/dev/null 2>&1; then
7115         echo "DBL_DIG found." >&4
7116         val="$define"
7117 else
7118         echo "DBL_DIG NOT found." >&4
7119         val="$undef"
7120 fi
7121 $rm -f dbl_dig.?
7122 set d_dbl_dig
7123 eval $setvar
7124
7125
7126 if $test X"$use64bits" = X"$define"; then
7127         : see if dbminit64 exists
7128         set dbminit64 d_dbminit64
7129         eval $inlibc
7130
7131         : see if dbmclose64 exists
7132         set dbmclose64 d_dbmclose64
7133         eval $inlibc
7134
7135         : see if fetch64 exists
7136         set fetch64 d_fetch64
7137         eval $inlibc
7138
7139         : see if store64 exists
7140         set store64 d_store64
7141         eval $inlibc
7142
7143         : see if delete64 exists
7144         set delete64 d_delete64
7145         eval $inlibc
7146
7147         : see if firstkey64 exists
7148         set firstkey64 d_firstkey64
7149         eval $inlibc
7150
7151         : see if nextkey64 exists
7152         set nextkey64 d_nextkey64
7153         eval $inlibc
7154 else
7155         val="$undef"
7156         for xxx in d_dbminit64 d_dbmclose64 d_fetch64 d_store64 d_delete64 d_firstkey64 d_nextkey64
7157         do
7158                 set $xxx
7159                 eval $setvar
7160         done
7161 fi
7162
7163 : see if difftime exists
7164 set difftime d_difftime
7165 eval $inlibc
7166
7167 : see if sys/stat.h is available
7168 set sys/stat.h i_sysstat
7169 eval $inhdr
7170
7171 : see if this is a dirent system
7172 echo " "
7173 if xinc=`./findhdr dirent.h`; $test "$xinc"; then
7174         val="$define"
7175         echo "<dirent.h> found." >&4
7176 else
7177         val="$undef"
7178         if xinc=`./findhdr sys/dir.h`; $test "$xinc"; then
7179                 echo "<sys/dir.h> found." >&4
7180                 echo " "
7181         else
7182                 xinc=`./findhdr sys/ndir.h`
7183         fi
7184         echo "<dirent.h> NOT found." >&4
7185 fi
7186 set i_dirent
7187 eval $setvar
7188
7189 : Look for type of directory structure.
7190 echo " "
7191 $cppstdin $cppflags $cppminus < "$xinc" > try.c
7192
7193 case "$direntrytype" in
7194 ''|' ')
7195         case "$i_dirent" in
7196         $define) guess1='struct dirent' ;;
7197         *) guess1='struct direct'  ;;
7198         esac
7199         ;;
7200 *)      guess1="$direntrytype"
7201         ;;
7202 esac
7203
7204 case "$guess1" in
7205 'struct dirent') guess2='struct direct' ;;
7206 *) guess2='struct dirent' ;;
7207 esac
7208                 
7209 if $contains "$guess1" try.c >/dev/null 2>&1; then
7210         direntrytype="$guess1"
7211         echo "Your directory entries are $direntrytype." >&4
7212 elif $contains "$guess2" try.c >/dev/null 2>&1; then
7213         direntrytype="$guess2"
7214         echo "Your directory entries seem to be $direntrytype." >&4
7215 else
7216         echo "I don't recognize your system's directory entries." >&4
7217         rp="What type is used for directory entries on this system?"
7218         dflt="$guess1"
7219         . ./myread
7220         direntrytype="$ans"
7221 fi
7222 $rm -f try.c
7223
7224
7225 : see if the directory entry stores field length
7226 echo " "
7227 $cppstdin $cppflags $cppminus < "$xinc" > try.c
7228 if $contains 'd_namlen' try.c >/dev/null 2>&1; then
7229         echo "Good, your directory entry keeps length information in d_namlen." >&4
7230         val="$define"
7231 else
7232         echo "Your directory entry does not know about the d_namlen field." >&4
7233         val="$undef"
7234 fi
7235 set d_dirnamlen
7236 eval $setvar
7237 $rm -f try.c
7238
7239
7240 if $test X"$use64bits" = X"$define"; then
7241         : see if fstat64 exists
7242         set fstat64 d_fstat64
7243         eval $inlibc
7244
7245         : see if ftruncate64 exists
7246         set ftruncate64 d_ftruncate64
7247         eval $inlibc
7248
7249         : see if lockf64 exists
7250         set lockf64 d_lockf64
7251         eval $inlibc
7252
7253         : see if llseek exists
7254         set llseek d_llseek
7255         eval $inlibc
7256
7257         : see if lseek64 exists
7258         set lseek64 d_lseek64
7259         eval $inlibc
7260
7261         : see if lstat64 exists
7262         set lstat64 d_lstat64
7263         eval $inlibc
7264
7265         : see if open64 exists
7266         set open64 d_open64
7267         eval $inlibc
7268
7269         : see if opendir64 exists
7270         set opendir64 d_opendir64
7271         eval $inlibc
7272
7273         : see if readdir64 exists
7274         set readdir64 d_readdir64
7275         eval $inlibc
7276
7277         : see if seekdir64 exists
7278         set seekdir64 d_seekdir64
7279         eval $inlibc
7280
7281         : see if stat64 exists
7282         set stat64 d_stat64
7283         eval $inlibc
7284
7285         : see if telldir64 exists
7286         set telldir64 d_telldir64
7287         eval $inlibc
7288
7289         : see if truncate64 exists
7290         set truncate64 d_truncate64
7291         eval $inlibc
7292
7293         : check for off64_t
7294         echo " "
7295         echo $n "Checking to see if your system supports off64_t...$c" >&4
7296         $cat >try.c <<EOCP
7297 #include <sys/types.h>
7298 #include <unistd.h>
7299 off64_t foo() { off64_t x; x = 7; return x; }'
7300 EOCP
7301         if $cc $optimize $ccflags -c try.c >/dev/null 2>&1; then
7302                 val="$define"
7303                 echo " Yup, it does." >&4
7304         else
7305                 val="$undef"
7306                 echo " Nope, it doesn't." >&4
7307         fi
7308         $rm -f try.*
7309         set d_off64_t
7310         eval $setvar
7311
7312         : check for offset_t
7313         echo " "
7314         echo $n "Checking to see if your system supports offset_t...$c" >&4
7315         $cat >try.c <<EOCP
7316 #include <sys/types.h>
7317 #include <unistd.h>
7318 offset_t foo() { offset_t x; x = 7; return x; }'
7319 EOCP
7320         if $cc $optimize $ccflags -c try.c >/dev/null 2>&1; then
7321                 val="$define"
7322                 echo " Yup, it does." >&4
7323         else
7324                 val="$undef"
7325                 echo " Nope, it doesn't." >&4
7326         fi
7327         $rm -f try.*
7328         set d_offset_t
7329         eval $setvar
7330
7331         : check for ino64_t
7332         echo " "
7333         echo $n "Checking to see if your system supports ino64_t...$c" >&4
7334         val="$undef"
7335         case "$i_sysstat" in
7336         "$define" )
7337                 $cat >try.c <<EOCP
7338 #include <sys/types.h>
7339 #include <sys/stat.h>
7340 ino64_t foo() { ino64_t x; x = 7; return x; }'
7341 EOCP
7342                 if $cc $optimize $ccflags -c try.c >/dev/null 2>&1; then
7343                         val="$define"
7344                 fi
7345                 $rm -f try.*
7346                 ;;
7347         esac
7348         if $test "X$val" = X"$define"; then
7349                 echo " Yup, it does." >&4
7350         else
7351                 echo " Nope, it doesn't." >&4
7352         fi
7353         set d_ino64_t
7354         eval $setvar
7355
7356         : check for struct flock64
7357         echo " "
7358         echo "Checking to see if your system supports struct flock64..." >&4
7359         if $h_fcntl; then
7360                 set d_flock64_s flock64 l_len define fcntl.h
7361                 eval $hasfield
7362         else
7363                 val="$undef"
7364                 set d_flock64_s
7365                 eval $setvar
7366         fi
7367         case "$d_flock64_s" in
7368         "$define")      echo "Yup, it does." >&4
7369                         ;;
7370         *)              echo "Nope, it doesn't." >&4
7371                         ;;
7372         esac
7373
7374         : check for struct dirent64
7375         echo " "
7376         echo "Checking to see if your system supports struct dirent64..." >&4
7377         set d_dirent64_s dirent64 d_off $i_dirent dirent.h
7378         eval $hasfield
7379         case "$d_dirent64_s" in
7380         "$define")      echo "Yup, it does." >&4
7381                         ;;
7382         *)              echo "Nope, it doesn't." >&4
7383                         ;;
7384         esac
7385
7386 else
7387         val="$undef"
7388         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_off64_t d_offset_t d_ino64_t d_flock64_s d_dirent64_s
7389         do
7390                 set $xxx
7391                 eval $setvar
7392         done
7393 fi
7394
7395 : see if dlerror exists
7396 xxx_runnm="$runnm"
7397 runnm=false
7398 set dlerror d_dlerror
7399 eval $inlibc
7400 runnm="$xxx_runnm"
7401
7402 : see if dlfcn is available
7403 set dlfcn.h i_dlfcn
7404 eval $inhdr
7405
7406 case "$usedl" in
7407 $define|y|true)
7408         $cat << EOM
7409
7410 On a few systems, the dynamically loaded modules that perl generates and uses
7411 will need a different extension than shared libs. The default will probably
7412 be appropriate.
7413
7414 EOM
7415         case "$dlext" in
7416         '')     dflt="$so" ;;
7417         *)      dflt="$dlext" ;;
7418         esac
7419         rp='What is the extension of dynamically loaded modules'
7420         . ./myread
7421         dlext="$ans"
7422         ;;
7423 *)
7424         dlext="none"
7425         ;;
7426 esac
7427
7428 : Check if dlsym need a leading underscore
7429 echo " "
7430 val="$undef"
7431
7432 case "$dlsrc" in
7433 dl_dlopen.xs)
7434         echo "Checking whether your dlsym() needs a leading underscore ..." >&4
7435         $cat >dyna.c <<'EOM'
7436 fred () { }
7437 EOM
7438
7439 $cat >fred.c<<EOM
7440
7441 #include <stdio.h>
7442 #$i_dlfcn I_DLFCN
7443 #ifdef I_DLFCN
7444 #include <dlfcn.h>      /* the dynamic linker include file for Sunos/Solaris */
7445 #else
7446 #include <sys/types.h>
7447 #include <nlist.h>
7448 #include <link.h>
7449 #endif
7450
7451 extern int fred() ;
7452
7453 int main()
7454 {
7455     void * handle ;
7456     void * symbol ;
7457 #ifndef RTLD_LAZY
7458     int mode = 1 ;
7459 #else
7460     int mode = RTLD_LAZY ;
7461 #endif
7462     handle = dlopen("./dyna.$dlext", mode) ;
7463     if (handle == NULL) {
7464         printf ("1\n") ;
7465         fflush (stdout) ;
7466         exit(0);
7467     }
7468     symbol = dlsym(handle, "fred") ;
7469     if (symbol == NULL) {
7470         /* try putting a leading underscore */
7471         symbol = dlsym(handle, "_fred") ;
7472         if (symbol == NULL) {
7473             printf ("2\n") ;
7474             fflush (stdout) ;
7475             exit(0);
7476         }
7477         printf ("3\n") ;
7478     }
7479     else
7480         printf ("4\n") ;
7481     fflush (stdout) ;
7482     exit(0);
7483 }
7484 EOM
7485         : Call the object file tmp-dyna.o in case dlext=o.
7486         if $cc $ccflags $cccdlflags -c dyna.c > /dev/null 2>&1 && 
7487                 mv dyna${_o} tmp-dyna${_o} > /dev/null 2>&1 && 
7488                 $ld $lddlflags -o dyna.$dlext tmp-dyna${_o} > /dev/null 2>&1 && 
7489                 $cc $ccflags -o fred $ldflags $cccdlflags $ccdlflags fred.c $libs > /dev/null 2>&1; then
7490                 xxx=`./fred`
7491                 case $xxx in
7492                 1)      echo "Test program failed using dlopen." >&4
7493                         echo "Perhaps you should not use dynamic loading." >&4;;
7494                 2)      echo "Test program failed using dlsym." >&4
7495                         echo "Perhaps you should not use dynamic loading." >&4;;
7496                 3)      echo "dlsym needs a leading underscore" >&4
7497                         val="$define" ;;
7498                 4)      echo "dlsym doesn't need a leading underscore." >&4;;
7499                 esac
7500         else
7501                 echo "I can't compile and run the test program." >&4
7502         fi
7503         ;;
7504 esac
7505                 
7506 $rm -f fred fred.? dyna.$dlext dyna.? tmp-dyna.?
7507
7508 set d_dlsymun
7509 eval $setvar
7510
7511 hasproto='varname=$1; func=$2; shift; shift;
7512 while $test $# -ge 2; do
7513         case "$1" in
7514         $define) echo "#include <$2>";;
7515         esac ;
7516     shift 2;
7517 done > try.c;
7518 $cppstdin $cppflags $cppminus < try.c > tryout.c 2>/dev/null;
7519 if $contains "$func.*(" tryout.c >/dev/null 2>&1; then
7520         echo "$func() prototype found.";
7521         val="$define";
7522 else
7523         echo "$func() prototype NOT found.";
7524         val="$undef";
7525 fi;
7526 set $varname;
7527 eval $setvar;
7528 $rm -f try.c tryout.c'
7529
7530 : see if prototype for drand48 is available
7531 echo " "
7532 set d_drand48proto drand48 $i_stdlib stdlib.h $i_unistd unistd.h
7533 eval $hasproto
7534
7535 : see if dup2 exists
7536 set dup2 d_dup2
7537 eval $inlibc
7538
7539 : see if eaccess exists
7540 set eaccess d_eaccess
7541 eval $inlibc
7542
7543 : see if endgrent exists
7544 set endgrent d_endgrent
7545 eval $inlibc
7546
7547 : see if endhostent exists
7548 set endhostent d_endhent
7549 eval $inlibc
7550
7551 : see if endnetent exists
7552 set endnetent d_endnent
7553 eval $inlibc
7554
7555 : see if endprotoent exists
7556 set endprotoent d_endpent
7557 eval $inlibc
7558
7559 : see if endpwent exists
7560 set endpwent d_endpwent
7561 eval $inlibc
7562
7563 : see if endservent exists
7564 set endservent d_endsent
7565 eval $inlibc
7566
7567 : Locate the flags for 'open()'
7568 echo " "
7569 $cat >open3.c <<'EOCP'
7570 #include <sys/types.h>
7571 #ifdef I_FCNTL
7572 #include <fcntl.h>
7573 #endif
7574 #ifdef I_SYS_FILE
7575 #include <sys/file.h>
7576 #endif
7577 int main() {
7578         if(O_RDONLY);
7579 #ifdef O_TRUNC
7580         exit(0);
7581 #else
7582         exit(1);
7583 #endif
7584 }
7585 EOCP
7586 : check sys/file.h first to get FREAD on Sun
7587 if $test `./findhdr sys/file.h` && \
7588                 set open3 -DI_SYS_FILE && eval $compile; then
7589         h_sysfile=true;
7590         echo "<sys/file.h> defines the O_* constants..." >&4
7591         if ./open3; then
7592                 echo "and you have the 3 argument form of open()." >&4
7593                 val="$define"
7594         else
7595                 echo "but not the 3 argument form of open().  Oh, well." >&4
7596                 val="$undef"
7597         fi
7598 elif $test `./findhdr fcntl.h` && \
7599                 set open3 -DI_FCNTL && eval $compile; then
7600         h_fcntl=true;
7601         echo "<fcntl.h> defines the O_* constants..." >&4
7602         if ./open3; then
7603                 echo "and you have the 3 argument form of open()." >&4
7604                 val="$define"
7605         else
7606                 echo "but not the 3 argument form of open().  Oh, well." >&4
7607                 val="$undef"
7608         fi
7609 else
7610         val="$undef"
7611         echo "I can't find the O_* constant definitions!  You got problems." >&4
7612 fi
7613 set d_open3
7614 eval $setvar
7615 $rm -f open3*
7616
7617 : check for non-blocking I/O stuff
7618 case "$h_sysfile" in
7619 true) echo "#include <sys/file.h>" > head.c;;
7620 *)
7621         case "$h_fcntl" in
7622         true) echo "#include <fcntl.h>" > head.c;;
7623         *) echo "#include <sys/fcntl.h>" > head.c;;
7624         esac
7625         ;;
7626 esac
7627 echo " "
7628 echo "Figuring out the flag used by open() for non-blocking I/O..." >&4
7629 case "$o_nonblock" in
7630 '')
7631         $cat head.c > try.c
7632         $cat >>try.c <<'EOCP'
7633 int main() {
7634 #ifdef O_NONBLOCK
7635         printf("O_NONBLOCK\n");
7636         exit(0);
7637 #endif
7638 #ifdef O_NDELAY
7639         printf("O_NDELAY\n");
7640         exit(0);
7641 #endif
7642 #ifdef FNDELAY
7643         printf("FNDELAY\n");
7644         exit(0);
7645 #endif
7646         exit(0);
7647 }
7648 EOCP
7649         set try
7650         if eval $compile_ok; then
7651                 o_nonblock=`./try`
7652                 case "$o_nonblock" in
7653                 '') echo "I can't figure it out, assuming O_NONBLOCK will do.";;
7654                 *) echo "Seems like we can use $o_nonblock.";;
7655                 esac
7656         else
7657                 echo "(I can't compile the test program; pray O_NONBLOCK is right!)"
7658         fi
7659         ;;
7660 *) echo "Using $hint value $o_nonblock.";;
7661 esac
7662 $rm -f try try.* .out core
7663
7664 echo " "
7665 echo "Let's see what value errno gets from read() on a $o_nonblock file..." >&4
7666 case "$eagain" in
7667 '')
7668         $cat head.c > try.c
7669         $cat >>try.c <<EOCP
7670 #include <errno.h>
7671 #include <sys/types.h>
7672 #include <signal.h>
7673 #define MY_O_NONBLOCK $o_nonblock
7674 #ifndef errno  /* XXX need better Configure test */
7675 extern int errno;
7676 #endif
7677 $signal_t blech(x) int x; { exit(3); }
7678 EOCP
7679         $cat >> try.c <<'EOCP'
7680 int main()
7681 {
7682         int pd[2];
7683         int pu[2];
7684         char buf[1];
7685         char string[100];
7686
7687         pipe(pd);       /* Down: child -> parent */
7688         pipe(pu);       /* Up: parent -> child */
7689         if (0 != fork()) {
7690                 int ret;
7691                 close(pd[1]);   /* Parent reads from pd[0] */
7692                 close(pu[0]);   /* Parent writes (blocking) to pu[1] */
7693                 if (-1 == fcntl(pd[0], F_SETFL, MY_O_NONBLOCK))
7694                         exit(1);
7695                 signal(SIGALRM, blech);
7696                 alarm(5);
7697                 if ((ret = read(pd[0], buf, 1)) > 0)    /* Nothing to read! */
7698                         exit(2);
7699                 sprintf(string, "%d\n", ret);
7700                 write(2, string, strlen(string));
7701                 alarm(0);
7702 #ifdef EAGAIN
7703                 if (errno == EAGAIN) {
7704                         printf("EAGAIN\n");
7705                         goto ok;
7706                 }
7707 #endif
7708 #ifdef EWOULDBLOCK
7709                 if (errno == EWOULDBLOCK)
7710                         printf("EWOULDBLOCK\n");
7711 #endif
7712         ok:
7713                 write(pu[1], buf, 1);   /* Unblocks child, tell it to close our pipe */
7714                 sleep(2);                               /* Give it time to close our pipe */
7715                 alarm(5);
7716                 ret = read(pd[0], buf, 1);      /* Should read EOF */
7717                 alarm(0);
7718                 sprintf(string, "%d\n", ret);
7719                 write(3, string, strlen(string));
7720                 exit(0);
7721         }
7722
7723         close(pd[0]);                   /* We write to pd[1] */
7724         close(pu[1]);                   /* We read from pu[0] */
7725         read(pu[0], buf, 1);    /* Wait for parent to signal us we may continue */
7726         close(pd[1]);                   /* Pipe pd is now fully closed! */
7727         exit(0);                                /* Bye bye, thank you for playing! */
7728 }
7729 EOCP
7730         set try
7731         if eval $compile_ok; then
7732                 echo "$startsh" >mtry
7733                 echo "./try >try.out 2>try.ret 3>try.err || exit 4" >>mtry
7734                 chmod +x mtry
7735                 ./mtry >/dev/null 2>&1
7736                 case $? in
7737                 0) eagain=`$cat try.out`;;
7738                 1) echo "Could not perform non-blocking setting!";;
7739                 2) echo "I did a successful read() for something that was not there!";;
7740                 3) echo "Hmm... non-blocking I/O does not seem to be working!";;
7741                 *) echo "Something terribly wrong happened during testing.";;
7742                 esac
7743                 rd_nodata=`$cat try.ret`
7744                 echo "A read() system call with no data present returns $rd_nodata."
7745                 case "$rd_nodata" in
7746                 0|-1) ;;
7747                 *)
7748                         echo "(That's peculiar, fixing that to be -1.)"
7749                         rd_nodata=-1
7750                         ;;
7751                 esac
7752                 case "$eagain" in
7753                 '')
7754                         echo "Forcing errno EAGAIN on read() with no data available."
7755                         eagain=EAGAIN
7756                         ;;
7757                 *)
7758                         echo "Your read() sets errno to $eagain when no data is available."
7759                         ;;
7760                 esac
7761                 status=`$cat try.err`
7762                 case "$status" in
7763                 0) echo "And it correctly returns 0 to signal EOF.";;
7764                 -1) echo "But it also returns -1 to signal EOF, so be careful!";;
7765                 *) echo "However, your read() returns '$status' on EOF??";;
7766                 esac
7767                 val="$define"
7768                 if test "$status" = "$rd_nodata"; then
7769                         echo "WARNING: you can't distinguish between EOF and no data!"
7770                         val="$undef"
7771                 fi
7772         else
7773                 echo "I can't compile the test program--assuming errno EAGAIN will do."
7774                 eagain=EAGAIN
7775         fi
7776         set d_eofnblk
7777         eval $setvar
7778         ;;
7779 *)
7780         echo "Using $hint value $eagain."
7781         echo "Your read() returns $rd_nodata when no data is present."
7782         case "$d_eofnblk" in
7783         "$define") echo "And you can see EOF because read() returns 0.";;
7784         "$undef") echo "But you can't see EOF status from read() returned value.";;
7785         *)
7786                 echo "(Assuming you can't see EOF status from read anyway.)"
7787                 d_eofnblk=$undef
7788                 ;;
7789         esac
7790         ;;
7791 esac
7792 $rm -f try try.* .out core head.c mtry
7793
7794 : see if fchmod exists
7795 set fchmod d_fchmod
7796 eval $inlibc
7797
7798 : see if fchown exists
7799 set fchown d_fchown
7800 eval $inlibc
7801
7802 : see if this is an fcntl system
7803 set fcntl d_fcntl
7804 eval $inlibc
7805
7806 : see if sys/select.h has to be included
7807 set sys/select.h i_sysselct
7808 eval $inhdr
7809
7810 : see if we should include time.h, sys/time.h, or both
7811 echo " "
7812 if test "X$timeincl" = X; then
7813         echo "Testing to see if we should include <time.h>, <sys/time.h> or both." >&4
7814         $echo $n "I'm now running the test program...$c"
7815         $cat >try.c <<'EOCP'
7816 #include <sys/types.h>
7817 #ifdef I_TIME
7818 #include <time.h>
7819 #endif
7820 #ifdef I_SYSTIME
7821 #ifdef SYSTIMEKERNEL
7822 #define KERNEL
7823 #endif
7824 #include <sys/time.h>
7825 #endif
7826 #ifdef I_SYSSELECT
7827 #include <sys/select.h>
7828 #endif
7829 int main()
7830 {
7831         struct tm foo;
7832 #ifdef S_TIMEVAL
7833         struct timeval bar;
7834 #endif
7835 #ifdef S_TIMEZONE
7836         struct timezone tzp;
7837 #endif
7838         if (foo.tm_sec == foo.tm_sec)
7839                 exit(0);
7840 #ifdef S_TIMEVAL
7841         if (bar.tv_sec == bar.tv_sec)
7842                 exit(0);
7843 #endif
7844         exit(1);
7845 }
7846 EOCP
7847         flags=''
7848         for s_timezone in '-DS_TIMEZONE' ''; do
7849         sysselect=''
7850         for s_timeval in '-DS_TIMEVAL' ''; do
7851         for i_systimek in '' '-DSYSTIMEKERNEL'; do
7852         for i_time in '' '-DI_TIME'; do
7853         for i_systime in '-DI_SYSTIME' ''; do
7854                 case "$flags" in
7855                 '') $echo $n ".$c"
7856                         set try $i_time $i_systime $i_systimek $sysselect $s_timeval $s_timezone
7857                         if eval $compile; then
7858                                 set X $i_time $i_systime $i_systimek $sysselect $s_timeval
7859                                 shift
7860                                 flags="$*"
7861                                 echo " "
7862                                 $echo $n "Succeeded with $flags$c"
7863                         fi
7864                         ;;
7865                 esac
7866         done
7867         done
7868         done
7869         done
7870         done
7871         timeincl=''
7872         echo " "
7873         case "$flags" in
7874         *SYSTIMEKERNEL*) i_systimek="$define"
7875                 timeincl=`./findhdr sys/time.h`
7876                 echo "We'll include <sys/time.h> with KERNEL defined." >&4;;
7877         *) i_systimek="$undef";;
7878         esac
7879         case "$flags" in
7880         *I_TIME*) i_time="$define"
7881                 timeincl=`./findhdr time.h`" $timeincl"
7882                 echo "We'll include <time.h>." >&4;;
7883         *) i_time="$undef";;
7884         esac
7885         case "$flags" in
7886         *I_SYSTIME*) i_systime="$define"
7887                 timeincl=`./findhdr sys/time.h`" $timeincl"
7888                 echo "We'll include <sys/time.h>." >&4;;
7889         *) i_systime="$undef";;
7890         esac
7891         $rm -f try.c try
7892 fi
7893
7894 : check for fd_set items
7895 $cat <<EOM
7896
7897 Checking to see how well your C compiler handles fd_set and friends ...
7898 EOM
7899 $cat >fd_set.c <<EOCP
7900 #$i_systime I_SYS_TIME
7901 #$i_sysselct I_SYS_SELECT
7902 #$d_socket HAS_SOCKET
7903 #include <sys/types.h>
7904 #ifdef HAS_SOCKET
7905 #include <sys/socket.h> /* Might include <sys/bsdtypes.h> */
7906 #endif
7907 #ifdef I_SYS_TIME
7908 #include <sys/time.h>
7909 #endif
7910 #ifdef I_SYS_SELECT
7911 #include <sys/select.h>
7912 #endif
7913 int main() {
7914         fd_set fds;
7915
7916 #ifdef TRYBITS
7917         if(fds.fds_bits);
7918 #endif
7919
7920 #if defined(FD_SET) && defined(FD_CLR) && defined(FD_ISSET) && defined(FD_ZERO)
7921         exit(0);
7922 #else
7923         exit(1);
7924 #endif
7925 }
7926 EOCP
7927 set fd_set -DTRYBITS
7928 if eval $compile; then
7929         d_fds_bits="$define"
7930         d_fd_set="$define"
7931         echo "Well, your system knows about the normal fd_set typedef..." >&4
7932         if ./fd_set; then
7933                 echo "and you have the normal fd_set macros (just as I'd expect)." >&4
7934                 d_fd_macros="$define"
7935         else
7936                 $cat >&4 <<'EOM'
7937 but not the normal fd_set macros!  Gaaack!  I'll have to cover for you.
7938 EOM
7939                 d_fd_macros="$undef"
7940         fi
7941 else
7942         $cat <<'EOM'
7943 Hmm, your compiler has some difficulty with fd_set.  Checking further...
7944 EOM
7945         set fd_set
7946         if eval $compile; then
7947                 d_fds_bits="$undef"
7948                 d_fd_set="$define"
7949                 echo "Well, your system has some sort of fd_set available..." >&4
7950                 if ./fd_set; then
7951                         echo "and you have the normal fd_set macros." >&4
7952                         d_fd_macros="$define"
7953                 else
7954                         $cat <<'EOM'
7955 but not the normal fd_set macros!  Gross!  More work for me...
7956 EOM
7957                         d_fd_macros="$undef"
7958                 fi
7959         else
7960         echo "Well, you got zip.  That's OK, I can roll my own fd_set stuff." >&4
7961                 d_fd_set="$undef"
7962                 d_fds_bits="$undef"
7963                 d_fd_macros="$undef"
7964         fi
7965 fi
7966 $rm -f fd_set*
7967
7968 : see if fgetpos exists
7969 set fgetpos d_fgetpos
7970 eval $inlibc
7971
7972
7973 if $test X"$use64bits" = X"$define"; then
7974         : see if fgetpos64 exists
7975         set fgetpos64 d_fgetpos64
7976         eval $inlibc
7977
7978         : see if fopen64 exists
7979         set freopen64 d_fopen64
7980         eval $inlibc
7981
7982         : see if freopen64 exists
7983         set freopen64 d_freopen64
7984         eval $inlibc
7985
7986         : see if fseek64 exists
7987         set fseek64 d_fseek64
7988         eval $inlibc
7989
7990         : see if fseeko64 exists
7991         set fseeko64 d_fseeko64
7992         eval $inlibc
7993
7994         : see if fsetpos64 exists
7995         set fsetpos64 d_fsetpos64
7996         eval $inlibc
7997
7998         : see if ftell64 exists
7999         set ftell64 d_ftell64
8000         eval $inlibc
8001
8002         : see if ftello64 exists
8003         set ftello64 d_ftello64
8004         eval $inlibc
8005
8006         : see if tmpfile64 exists
8007         set tmpfile64 d_tmpfile64
8008         eval $inlibc
8009 else
8010         val="$undef"
8011         for xxx in d_fgetpos64 d_fopen64 d_freopen64 d_fseek64 d_fseeko64 d_fsetpos64 d_ftell64 d_ftello64 d_tmpfile64
8012         do
8013                 set $xxx
8014                 eval $setvar
8015         done
8016 fi
8017
8018 : see if flock exists
8019 set flock d_flock
8020 eval $inlibc
8021
8022 : see if fork exists
8023 set fork d_fork
8024 eval $inlibc
8025
8026 : see if pathconf exists
8027 set pathconf d_pathconf
8028 eval $inlibc
8029
8030 : see if fpathconf exists
8031 set fpathconf d_fpathconf
8032 eval $inlibc
8033
8034 : see if fseeko exists
8035 set fseeko d_fseeko
8036 eval $inlibc
8037
8038 : see if fsetpos exists
8039 set fsetpos d_fsetpos
8040 eval $inlibc
8041
8042 : see if this is a sys/param system
8043 set sys/param.h i_sysparam
8044 eval $inhdr
8045
8046 : see if this is a sys/mount.h system
8047 set sys/mount.h i_sysmount
8048 eval $inhdr
8049
8050
8051 : see if statfs exists
8052 set statfs d_statfs
8053 eval $inlibc
8054
8055 : see if fstatfs exists
8056 set fstatfs d_fstatfs
8057 eval $inlibc
8058
8059 : see if statfs knows about mount flags
8060 set d_statfsflags statfs f_flags $i_sysparam sys/param.h $i_sysmount sys/mount.h
8061 eval $hasfield
8062
8063
8064 : see if statvfs exists
8065 set statvfs d_statvfs
8066 eval $inlibc
8067
8068 : see if fstatvfs exists
8069 set fstatvfs d_fstatvfs
8070 eval $inlibc
8071
8072
8073 : see if ftello exists
8074 set ftello d_ftello
8075 eval $inlibc
8076
8077 : see if getgrent exists
8078 set getgrent d_getgrent
8079 eval $inlibc
8080
8081 : see if gethostbyaddr exists
8082 set gethostbyaddr d_gethbyaddr
8083 eval $inlibc
8084
8085 : see if gethostbyname exists
8086 set gethostbyname d_gethbyname
8087 eval $inlibc
8088
8089 : see if gethostent exists
8090 set gethostent d_gethent
8091 eval $inlibc
8092
8093 : see how we will look up host name
8094 echo " "
8095 call=''
8096 if set gethostname val -f d_gethname; eval $csym; $val; then
8097         echo 'gethostname() found.' >&4
8098         d_gethname="$define"
8099         call=gethostname
8100 fi
8101 if set uname val -f d_uname; eval $csym; $val; then
8102         if ./xenix; then
8103                 $cat <<'EOM'
8104 uname() was found, but you're running xenix, and older versions of xenix
8105 have a broken uname(). If you don't really know whether your xenix is old
8106 enough to have a broken system call, use the default answer.
8107
8108 EOM
8109                 dflt=y
8110                 case "$d_uname" in
8111                 "$define") dflt=n;;
8112                 esac
8113                 rp='Is your uname() broken?'
8114                 . ./myread
8115                 case "$ans" in
8116                 n*) d_uname="$define"; call=uname;;
8117                 esac
8118         else
8119                 echo 'uname() found.' >&4
8120                 d_uname="$define"
8121                 case "$call" in
8122                 '') call=uname ;;
8123                 esac
8124         fi
8125 fi
8126 case "$d_gethname" in
8127 '') d_gethname="$undef";;
8128 esac
8129 case "$d_uname" in
8130 '') d_uname="$undef";;
8131 esac
8132 case "$d_uname$d_gethname" in
8133 *define*)
8134         dflt=n
8135         cat <<EOM
8136  
8137 Every now and then someone has a $call() that lies about the hostname
8138 but can't be fixed for political or economic reasons.  If you wish, I can
8139 pretend $call() isn't there and maybe compute hostname at run-time
8140 thanks to the '$phostname' command.
8141
8142 EOM
8143         rp="Shall I ignore $call() from now on?"
8144         . ./myread
8145         case "$ans" in
8146         y*) d_uname="$undef" d_gethname="$undef"; $echo $n "Okay...$c";;
8147         esac;;
8148 esac
8149 case "$phostname" in
8150 '') aphostname='';;
8151 *) case "$aphostname" in
8152         /*) ;;
8153         *) set X $phostname
8154                 shift
8155                 file=$1
8156                 shift
8157                 file=`./loc $file $file $pth`
8158                 aphostname=`echo $file $*`
8159                 ;;
8160         esac
8161         ;;
8162 esac
8163 case "$d_uname$d_gethname" in
8164 *define*) ;;
8165 *)
8166         case "$phostname" in
8167         '')
8168                 echo "There will be no way for $package to get your hostname." >&4;;
8169         *)
8170         echo "I'll use 'popen("'"'$aphostname'", "r")'"' to get your hostname." >&4
8171                 ;;
8172         esac;;
8173 esac
8174 case "$d_phostname" in
8175 '') d_phostname="$undef";;
8176 esac
8177
8178 : see if this is a netdb.h system
8179 set netdb.h i_netdb
8180 eval $inhdr
8181
8182 : see if prototypes for various gethostxxx netdb.h functions are available
8183 echo " "
8184 set d_gethostprotos gethostent $i_netdb netdb.h
8185 eval $hasproto
8186
8187 : see if getlogin exists
8188 set getlogin d_getlogin
8189 eval $inlibc
8190
8191 : see if getmntent exists
8192 set getmntent d_getmntent
8193 eval $inlibc
8194
8195 : see if getnetbyaddr exists
8196 set getnetbyaddr d_getnbyaddr
8197 eval $inlibc
8198
8199 : see if getnetbyname exists
8200 set getnetbyname d_getnbyname
8201 eval $inlibc
8202
8203 : see if getnetent exists
8204 set getnetent d_getnent
8205 eval $inlibc
8206
8207 : see if prototypes for various getnetxxx netdb.h functions are available
8208 echo " "
8209 set d_getnetprotos getnetent $i_netdb netdb.h
8210 eval $hasproto
8211
8212
8213 : see if getprotobyname exists
8214 set getprotobyname d_getpbyname
8215 eval $inlibc
8216
8217 : see if getprotobynumber exists
8218 set getprotobynumber d_getpbynumber
8219 eval $inlibc
8220
8221 : see if getprotoent exists
8222 set getprotoent d_getpent
8223 eval $inlibc
8224
8225 : see if getpgid exists
8226 set getpgid d_getpgid
8227 eval $inlibc
8228
8229 : see if getpgrp2 exists
8230 set getpgrp2 d_getpgrp2
8231 eval $inlibc
8232
8233 : see if getppid exists
8234 set getppid d_getppid
8235 eval $inlibc
8236
8237 : see if getpriority exists
8238 set getpriority d_getprior
8239 eval $inlibc
8240
8241 : see if prototypes for various getprotoxxx netdb.h functions are available
8242 echo " "
8243 set d_getprotoprotos getprotoent $i_netdb netdb.h
8244 eval $hasproto
8245
8246 : see if getpwent exists
8247 set getpwent d_getpwent
8248 eval $inlibc
8249
8250
8251 : see if getservbyname exists
8252 set getservbyname d_getsbyname
8253 eval $inlibc
8254
8255 : see if getservbyport exists
8256 set getservbyport d_getsbyport
8257 eval $inlibc
8258
8259 : see if getservent exists
8260 set getservent d_getsent
8261 eval $inlibc
8262
8263 : see if prototypes for various getservxxx netdb.h functions are available
8264 echo " "
8265 set d_getservprotos getservent $i_netdb netdb.h
8266 eval $hasproto
8267
8268 : see if gettimeofday or ftime exists
8269 set gettimeofday d_gettimeod
8270 eval $inlibc
8271 case "$d_gettimeod" in
8272 "$undef")
8273         set ftime d_ftime 
8274         eval $inlibc
8275         ;;
8276 *)
8277         val="$undef"; set d_ftime; eval $setvar
8278         ;;
8279 esac
8280 case "$d_gettimeod$d_ftime" in
8281 "$undef$undef")
8282         echo " "
8283         echo 'No ftime() nor gettimeofday() -- timing may be less accurate.' >&4
8284         ;;
8285 esac
8286
8287 : see if this is an grp system
8288 set grp.h i_grp
8289 eval $inhdr
8290
8291 case "$i_grp" in
8292 $define)
8293         xxx=`./findhdr grp.h`
8294         $cppstdin $cppflags $cppminus < $xxx >$$.h
8295
8296         if $contains 'gr_passwd' $$.h >/dev/null 2>&1; then
8297                 val="$define"
8298         else
8299                 val="$undef"
8300         fi
8301         set d_grpasswd
8302         eval $setvar
8303
8304         $rm -f $$.h
8305         ;;
8306 *)
8307         val="$undef";
8308         set d_grpasswd; eval $setvar
8309         ;;
8310 esac
8311
8312 : see if hasmntopt exists
8313 set hasmntopt d_hasmntopt
8314 eval $inlibc
8315
8316 : see if this is a netinet/in.h or sys/in.h system
8317 set netinet/in.h i_niin sys/in.h i_sysin
8318 eval $inhdr
8319
8320 : see if arpa/inet.h has to be included
8321 set arpa/inet.h i_arpainet
8322 eval $inhdr
8323
8324 : see if htonl --and friends-- exists
8325 val=''
8326 set htonl val
8327 eval $inlibc
8328
8329 : Maybe they are macros.
8330 case "$val" in
8331 $undef)
8332         $cat >htonl.c <<EOM
8333 #include <stdio.h>
8334 #include <sys/types.h>
8335 #$i_niin I_NETINET_IN
8336 #$i_sysin I_SYS_IN
8337 #$i_arpainet I_ARPA_INET
8338 #ifdef I_NETINET_IN
8339 #include <netinet/in.h>
8340 #endif
8341 #ifdef I_SYS_IN
8342 #include <sys/in.h>
8343 #endif
8344 #ifdef I_ARPA_INET
8345 #include <arpa/inet.h>
8346 #endif
8347 #ifdef htonl
8348 printf("Defined as a macro.");
8349 #endif
8350 EOM
8351         $cppstdin $cppflags $cppminus < htonl.c >htonl.E 2>/dev/null
8352         if $contains 'Defined as a macro' htonl.E >/dev/null 2>&1; then
8353                 val="$define"
8354                 echo "But it seems to be defined as a macro." >&4
8355         fi
8356         $rm -f htonl.?
8357         ;;
8358 esac
8359 set d_htonl
8360 eval $setvar
8361
8362 : see which of string.h or strings.h is needed
8363 echo " "
8364 strings=`./findhdr string.h`
8365 if $test "$strings" && $test -r "$strings"; then
8366         echo "Using <string.h> instead of <strings.h>." >&4
8367         val="$define"
8368 else
8369         val="$undef"
8370         strings=`./findhdr strings.h`
8371         if $test "$strings" && $test -r "$strings"; then
8372                 echo "Using <strings.h> instead of <string.h>." >&4
8373         else
8374                 echo "No string header found -- You'll surely have problems." >&4
8375         fi
8376 fi
8377 set i_string
8378 eval $setvar
8379 case "$i_string" in
8380 "$undef") strings=`./findhdr strings.h`;;
8381 *)        strings=`./findhdr string.h`;;
8382 esac
8383
8384 : index or strchr
8385 echo " "
8386 if set index val -f; eval $csym; $val; then
8387         if set strchr val -f d_strchr; eval $csym; $val; then
8388                 if $contains strchr "$strings" >/dev/null 2>&1 ; then
8389                         val="$define"
8390                         vali="$undef"
8391                         echo "strchr() found." >&4
8392                 else
8393                         val="$undef"
8394                         vali="$define"
8395                         echo "index() found." >&4
8396                 fi
8397         else
8398                 val="$undef"
8399                 vali="$define"
8400                 echo "index() found." >&4
8401         fi
8402 else
8403         if set strchr val -f d_strchr; eval $csym; $val; then
8404                 val="$define"
8405                 vali="$undef"
8406                 echo "strchr() found." >&4
8407         else
8408                 echo "No index() or strchr() found!" >&4
8409                 val="$undef"
8410                 vali="$undef"
8411         fi
8412 fi
8413 set d_strchr; eval $setvar
8414 val="$vali"
8415 set d_index; eval $setvar
8416
8417 : check whether inet_aton exists
8418 set inet_aton d_inetaton
8419 eval $inlibc
8420
8421 : see if inttypes.h is available
8422 : we want a real compile instead of Inhdr because some systems
8423 : have an inttypes.h which includes non-existent headers
8424 echo " "
8425 $cat >try.c <<EOCP
8426 #include <inttypes.h>
8427 int main() {
8428         static int32_t foo32 = 0x12345678;
8429 }
8430 EOCP
8431 set try
8432 if eval $compile; then
8433         echo "<inttypes.h> found." >&4
8434         val="$define"
8435 else
8436         echo "<inttypes.h> NOT found." >&4
8437         val="$undef"
8438 fi
8439 $rm -f try.c try
8440 set i_inttypes
8441 eval $setvar
8442
8443 : check for int64_t
8444 case "$use64bits" in
8445 "$define" )
8446         echo " "
8447         echo $n "Checking to see if your system supports int64_t...$c" >&4
8448         $cat >try.c <<EOCP
8449 #include <sys/types.h>
8450 #$i_inttypes I_INTTYPES
8451 #ifdef I_INTTYPES
8452 #include <inttypes.h>
8453 #endif
8454 int64_t foo() { int64_t x; x = 7; return x; }
8455 EOCP
8456         if $cc $optimize $ccflags -c try.c >/dev/null 2>&1; then
8457                 val="$define"
8458                 echo " Yup, it does." >&4
8459         else
8460                 val="$undef"
8461                 echo " Nope, it doesn't." >&4
8462         fi
8463         $rm -f try.*
8464         ;;
8465 *)      val="$undef"
8466         ;;
8467 esac
8468 set d_int64t
8469 eval $setvar
8470
8471
8472 : Look for isascii
8473 echo " "
8474 $cat >isascii.c <<'EOCP'
8475 #include <stdio.h>
8476 #include <ctype.h>
8477 int main() {
8478         int c = 'A';
8479         if (isascii(c))
8480                 exit(0);
8481         else
8482                 exit(1);
8483 }
8484 EOCP
8485 set isascii
8486 if eval $compile; then
8487         echo "isascii() found." >&4
8488         val="$define"
8489 else
8490         echo "isascii() NOT found." >&4
8491         val="$undef"
8492 fi
8493 set d_isascii
8494 eval $setvar
8495 $rm -f isascii*
8496
8497 : see if killpg exists
8498 set killpg d_killpg
8499 eval $inlibc
8500
8501 : see if lchown exists
8502 echo " "
8503 $cat > try.c <<'EOCP'
8504 /* System header to define __stub macros and hopefully few prototypes,
8505     which can conflict with char lchown(); below.  */
8506 #include <assert.h>
8507 /* Override any gcc2 internal prototype to avoid an error.  */
8508 /* We use char because int might match the return type of a gcc2
8509    builtin and then its argument prototype would still apply.  */
8510 char lchown();
8511 int main() {
8512     /*  The GNU C library defines this for functions which it implements
8513         to always fail with ENOSYS.  Some functions are actually named
8514         something starting with __ and the normal name is an alias.  */
8515 #if defined (__stub_lchown) || defined (__stub___lchown)
8516 choke me
8517 #else
8518 lchown();
8519 #endif
8520 ; return 0; }
8521 EOCP
8522 set try
8523 if eval $compile; then
8524     $echo "lchown() found." >&4
8525     val="$define"
8526 else
8527     $echo "lchown() NOT found." >&4
8528     val="$undef"
8529 fi
8530 set d_lchown
8531 eval $setvar
8532
8533 : see if link exists
8534 set link d_link
8535 eval $inlibc
8536
8537 : see if localeconv exists
8538 set localeconv d_locconv
8539 eval $inlibc
8540
8541 : see if lockf exists
8542 set lockf d_lockf
8543 eval $inlibc
8544
8545 : check for length of double
8546 echo " "
8547 case "$doublesize" in
8548 '')
8549         $echo $n "Checking to see how big your double precision numbers are...$c" >&4
8550         $cat >try.c <<'EOCP'
8551 #include <stdio.h>
8552 int main()
8553 {
8554         printf("%d\n", sizeof(double));
8555 }
8556 EOCP
8557         set try
8558         if eval $compile_ok; then
8559                 doublesize=`./try`
8560                 $echo " $doublesize bytes." >&4
8561         else
8562                 dflt='8'
8563                 echo "(I can't seem to compile the test program.  Guessing...)"
8564                 rp="What is the size of a double precision number (in bytes)?"
8565                 . ./myread
8566                 doublesize="$ans"
8567         fi
8568         ;;
8569 esac
8570 $rm -f try.c try
8571
8572 : check for long doubles
8573 echo " "
8574 echo $n "Checking to see if your system supports long doubles...$c" >&4
8575 echo 'long double foo() { long double x; x = 7.0; return x; }' > try.c
8576 if $cc $optimize $ccflags -c try.c >/dev/null 2>&1; then
8577         val="$define"
8578         echo " Yup, it does." >&4
8579 else
8580         val="$undef"
8581         echo " Nope, it doesn't." >&4
8582 fi
8583 $rm try.*
8584 set d_longdbl
8585 eval $setvar
8586
8587 : check for length of long double
8588 case "${d_longdbl}${longdblsize}" in
8589 $define)
8590         echo " "
8591         $echo $n "Checking to see how big your long doubles are...$c" >&4
8592         $cat >try.c <<'EOCP'
8593 #include <stdio.h>
8594 int main()
8595 {
8596         printf("%d\n", sizeof(long double));
8597 }
8598 EOCP
8599         set try
8600         if eval $compile; then
8601                 longdblsize=`./try`
8602                 $echo " $longdblsize bytes." >&4
8603         else
8604                 dflt='8'
8605                 echo " "
8606                 echo "(I can't seem to compile the test program.  Guessing...)" >&4
8607                 rp="What is the size of a long double (in bytes)?"
8608                 . ./myread
8609                 longdblsize="$ans"
8610         fi
8611         if $test "X$doublesize" = "X$longdblsize"; then
8612                 echo "(That isn't any different from an ordinary double.)"
8613         fi      
8614         ;;
8615 esac
8616 $rm -f try.c try
8617
8618 : check for long long
8619 echo " "
8620 echo $n "Checking to see if your system supports long long...$c" >&4
8621 echo 'long long foo() { long long x; x = 7; return x; }' > try.c
8622 if $cc $optimize $ccflags -c try.c >/dev/null 2>&1; then
8623         val="$define"
8624         echo " Yup, it does." >&4
8625 else
8626         val="$undef"
8627         echo " Nope, it doesn't." >&4
8628 fi
8629 $rm try.*
8630 set d_longlong
8631 eval $setvar
8632
8633 : check for length of long long
8634 case "${d_longlong}${longlongsize}" in
8635 $define)
8636         echo " "
8637         $echo $n "Checking to see how big your long longs are...$c" >&4
8638         $cat >try.c <<'EOCP'
8639 #include <stdio.h>
8640 int main()
8641 {
8642         printf("%d\n", sizeof(long long));
8643 }
8644 EOCP
8645         set try
8646         if eval $compile_ok; then
8647                 longlongsize=`./try`
8648                 $echo " $longlongsize bytes." >&4
8649         else
8650                 dflt='8'
8651                 echo " "
8652                 echo "(I can't seem to compile the test program.  Guessing...)"
8653                 rp="What is the size of a long long (in bytes)?"
8654                 . ./myread
8655                 longlongsize="$ans"
8656         fi
8657         if $test "X$longsize" = "X$longlongsize"; then
8658                 echo "(That isn't any different from an ordinary long.)"
8659         fi      
8660         ;;
8661 esac
8662 $rm -f try.c try
8663
8664 : see if lstat exists
8665 set lstat d_lstat
8666 eval $inlibc
8667
8668 : see if madvise exists
8669 set madvise d_madvise
8670 eval $inlibc
8671
8672 : see if mblen exists
8673 set mblen d_mblen
8674 eval $inlibc
8675
8676 : see if mbstowcs exists
8677 set mbstowcs d_mbstowcs
8678 eval $inlibc
8679
8680 : see if mbtowc exists
8681 set mbtowc d_mbtowc
8682 eval $inlibc
8683
8684 : see if memchr exists
8685 set memchr d_memchr
8686 eval $inlibc
8687
8688 : see if memcmp exists
8689 set memcmp d_memcmp
8690 eval $inlibc
8691
8692 : see if memcpy exists
8693 set memcpy d_memcpy
8694 eval $inlibc
8695
8696 : see if memmove exists
8697 set memmove d_memmove
8698 eval $inlibc
8699
8700 : see if memset exists
8701 set memset d_memset
8702 eval $inlibc
8703
8704 : see if mkdir exists
8705 set mkdir d_mkdir
8706 eval $inlibc
8707
8708 : see if mkfifo exists
8709 set mkfifo d_mkfifo
8710 eval $inlibc
8711
8712 : see if mktime exists
8713 set mktime d_mktime
8714 eval $inlibc
8715
8716 : see if this is a sys/mman.h system
8717 set sys/mman.h i_sysmman
8718 eval $inhdr
8719
8720 : see if mmap exists
8721 set mmap d_mmap
8722 eval $inlibc
8723 : see what shmat returns
8724 : default to something harmless
8725 mmaptype='void *'
8726 case "$i_sysmman$d_mmap" in
8727 "$define$define")
8728         $cat >mmap.c <<'END'
8729 #include <sys/mman.h>
8730 void *mmap();
8731 END
8732         if $cc $ccflags -c mmap.c >/dev/null 2>&1; then
8733                 mmaptype='void *'
8734         else
8735                 mmaptype='caddr_t'
8736         fi
8737         echo "and it returns ($mmaptype)." >&4
8738         ;;
8739 esac
8740
8741
8742
8743 : see if mprotect exists
8744 set mprotect d_mprotect
8745 eval $inlibc
8746
8747 : see if msgctl exists
8748 set msgctl d_msgctl
8749 eval $inlibc
8750
8751 : see if msgget exists
8752 set msgget d_msgget
8753 eval $inlibc
8754
8755 : see if msgsnd exists
8756 set msgsnd d_msgsnd
8757 eval $inlibc
8758
8759 : see if msgrcv exists
8760 set msgrcv d_msgrcv
8761 eval $inlibc
8762
8763 : see how much of the 'msg*(2)' library is present.
8764 h_msg=true
8765 echo " "
8766 case "$d_msgctl$d_msgget$d_msgsnd$d_msgrcv" in
8767 *"$undef"*) h_msg=false;;
8768 esac
8769 case "$osname" in
8770 freebsd)
8771     case "`ipcs 2>&1`" in
8772     "SVID messages"*"not configured"*)
8773         echo "Your $osname does not have the msg*(2) configured." >&4
8774         h_msg=false
8775         val="$undef"
8776         set msgctl d_msgctl
8777         eval $setvar
8778         set msgget d_msgget
8779         eval $setvar
8780         set msgsnd d_msgsnd
8781         eval $setvar
8782         set msgrcv d_msgrcv
8783         eval $setvar
8784         ;;
8785     esac
8786     ;;
8787 esac
8788 : we could also check for sys/ipc.h ...
8789 if $h_msg && $test `./findhdr sys/msg.h`; then
8790         echo "You have the full msg*(2) library." >&4
8791         val="$define"
8792 else
8793         echo "You don't have the full msg*(2) library." >&4
8794         val="$undef"
8795 fi
8796 set d_msg
8797 eval $setvar
8798
8799 : see if msync exists
8800 set msync d_msync
8801 eval $inlibc
8802
8803 : see if munmap exists
8804 set munmap d_munmap
8805 eval $inlibc
8806
8807 : see if nice exists
8808 set nice d_nice
8809 eval $inlibc
8810
8811 : see if POSIX threads are available
8812 if test "X$usethreads" = "X$define"; then
8813         set pthread.h i_pthread
8814         eval $inhdr
8815 else
8816         i_pthread="$undef"
8817 fi
8818
8819
8820
8821 : how to create joinable pthreads
8822 if test "X$usethreads" = "X$define" -a "X$i_pthread" = "X$define"; then
8823         echo " "
8824         echo "Checking what constant to use for creating joinable pthreads..." >&4 
8825         $cat >try.c <<'EOCP'
8826 #include <pthread.h>
8827 int main() {
8828     int detachstate = JOINABLE;
8829 }
8830 EOCP
8831         set try -DJOINABLE=PTHREAD_CREATE_JOINABLE
8832         if eval $compile; then
8833                 echo "You seem to use PTHREAD_CREATE_JOINABLE." >&4
8834                 val="$undef" # Yes, undef.
8835                 set d_old_pthread_create_joinable
8836                 eval $setvar
8837                 val=""
8838                 set old_pthread_create_joinable
8839                 eval $setvar
8840         else
8841                 set try -DJOINABLE=PTHREAD_CREATE_UNDETACHED
8842                 if eval $compile; then
8843                         echo "You seem to use PTHREAD_CREATE_UNDETACHED." >&4
8844                         val="$define"
8845                         set d_old_pthread_create_joinable
8846                         eval $setvar
8847                         val=PTHREAD_CREATE_UNDETACHED
8848                         set old_pthread_create_joinable
8849                         eval $setvar
8850                 else            
8851                         set try -DJOINABLE=__UNDETACHED
8852                         if eval $compile; then
8853                                 echo "You seem to use __UNDETACHED." >&4
8854                                 val="$define"
8855                                 set d_old_pthread_create_joinable
8856                                 eval $setvar
8857                                 val=__UNDETACHED
8858                                 set old_pthread_create_joinable
8859                                 eval $setvar
8860                         else
8861                                 echo "Egads, nothing obvious found.  Guessing that you use 0." >&4
8862                                 val="$define"
8863                                 set d_old_pthread_create_joinable
8864                                 eval $setvar
8865                                 val=0
8866                                 set old_pthread_create_joinable
8867                                 eval $setvar
8868                         fi
8869                 fi
8870         fi
8871         $rm -f try try.*
8872 else
8873     d_old_pthread_create_joinable="$undef"
8874     old_pthread_create_joinable=""
8875 fi
8876
8877 : see if pause exists
8878 set pause d_pause
8879 eval $inlibc
8880
8881 : see if pipe exists
8882 set pipe d_pipe
8883 eval $inlibc
8884
8885 : see if poll exists
8886 set poll d_poll
8887 eval $inlibc
8888
8889
8890 : see whether the various POSIXish _yields exist
8891 $cat >try.c <<EOP
8892 #include <pthread.h>
8893 #include <stdio.h>
8894 int main() {
8895 #ifdef SCHED_YIELD
8896         sched_yield();
8897 #else
8898 #ifdef PTHREAD_YIELD
8899         pthread_yield();
8900 #else
8901 #ifdef PTHREAD_YIELD_NULL
8902         pthread_yield(NULL);
8903 #endif
8904 #endif
8905 #endif
8906 }
8907 EOP
8908 : see if sched_yield exists
8909 set try -DSCHED_YIELD
8910 if eval $compile; then
8911     val="$define"
8912     sched_yield='sched_yield()'
8913 else
8914     val="$undef"
8915 fi
8916 case "$usethreads" in
8917 $define)
8918         case "$val" in
8919         $define) echo 'sched_yield() found.' >&4        ;;
8920         *)       echo 'sched_yield() NOT found.' >&4    ;;
8921         esac
8922 esac
8923 set d_sched_yield
8924 eval $setvar
8925
8926 : see if pthread_yield exists
8927 set try -DPTHREAD_YIELD
8928 if eval $compile; then
8929     val="$define"
8930     case "$sched_yield" in
8931     '') sched_yield='pthread_yield()' ;;
8932     esac
8933 else
8934     set try -DPTHREAD_YIELD_NULL
8935     if eval $compile; then
8936         val="$define"
8937         case "$sched_yield" in
8938         '') sched_yield='pthread_yield(NULL)' ;;
8939         esac
8940     else
8941         val="$undef"
8942     fi
8943 fi
8944 case "$usethreads" in
8945 $define)
8946         case "$val" in
8947         $define) echo 'pthread_yield() found.' >&4      ;;
8948         *)       echo 'pthread_yield() NOT found.' >&4  ;;
8949         esac
8950         ;;
8951 esac
8952 set d_pthread_yield
8953 eval $setvar
8954
8955 case "$sched_yield" in
8956 '') sched_yield=undef ;;
8957 esac
8958
8959 $rm -f try try.*
8960
8961 : see if this is a pwd.h system
8962 set pwd.h i_pwd
8963 eval $inhdr
8964
8965 case "$i_pwd" in
8966 $define)
8967         xxx=`./findhdr pwd.h`
8968         $cppstdin $cppflags $cppminus < $xxx >$$.h
8969
8970         if $contains 'pw_quota' $$.h >/dev/null 2>&1; then
8971                 val="$define"
8972         else
8973                 val="$undef"
8974         fi
8975         set d_pwquota
8976         eval $setvar
8977
8978         if $contains 'pw_age' $$.h >/dev/null 2>&1; then
8979                 val="$define"
8980         else
8981                 val="$undef"
8982         fi
8983         set d_pwage
8984         eval $setvar
8985
8986         if $contains 'pw_change' $$.h >/dev/null 2>&1; then
8987                 val="$define"
8988         else
8989                 val="$undef"
8990         fi
8991         set d_pwchange
8992         eval $setvar
8993
8994         if $contains 'pw_class' $$.h >/dev/null 2>&1; then
8995                 val="$define"
8996         else
8997                 val="$undef"
8998         fi
8999         set d_pwclass
9000         eval $setvar
9001
9002         if $contains 'pw_expire' $$.h >/dev/null 2>&1; then
9003                 val="$define"
9004         else
9005                 val="$undef"
9006         fi
9007         set d_pwexpire
9008         eval $setvar
9009
9010         if $contains 'pw_comment' $$.h >/dev/null 2>&1; then
9011                 val="$define"
9012         else
9013                 val="$undef"
9014         fi
9015         set d_pwcomment
9016         eval $setvar
9017
9018         if $contains 'pw_gecos' $$.h >/dev/null 2>&1; then
9019                 val="$define"
9020         else
9021                 val="$undef"
9022         fi
9023         set d_pwgecos
9024         eval $setvar
9025
9026         if $contains 'pw_passwd' $$.h >/dev/null 2>&1; then
9027                 val="$define"
9028         else
9029                 val="$undef"
9030         fi
9031         set d_pwpasswd
9032         eval $setvar
9033
9034         $rm -f $$.h
9035         ;;
9036 *)
9037         val="$undef"; 
9038         set d_pwquota; eval $setvar
9039         set d_pwage; eval $setvar
9040         set d_pwchange; eval $setvar
9041         set d_pwclass; eval $setvar
9042         set d_pwexpire; eval $setvar
9043         set d_pwcomment; eval $setvar
9044         set d_pwgecos; eval $setvar
9045         set d_pwpasswd; eval $setvar
9046         ;;
9047 esac
9048
9049 : see if readdir and friends exist
9050 set readdir d_readdir
9051 eval $inlibc
9052 set seekdir d_seekdir
9053 eval $inlibc
9054 set telldir d_telldir
9055 eval $inlibc
9056 set rewinddir d_rewinddir
9057 eval $inlibc
9058
9059 : see if readlink exists
9060 set readlink d_readlink
9061 eval $inlibc
9062
9063 : see if readv exists
9064 set readv d_readv
9065 eval $inlibc
9066
9067 : see if rename exists
9068 set rename d_rename
9069 eval $inlibc
9070
9071 : see if rmdir exists
9072 set rmdir d_rmdir
9073 eval $inlibc
9074
9075 : see if memory.h is available.
9076 val=''
9077 set memory.h val
9078 eval $inhdr
9079
9080 : See if it conflicts with string.h
9081 case "$val" in
9082 $define)
9083         case "$strings" in
9084         '') ;;
9085         *)
9086                 $cppstdin $cppflags $cppminus < $strings > mem.h
9087                 if $contains 'memcpy' mem.h >/dev/null 2>&1; then
9088                         echo " "
9089                         echo "We won't be including <memory.h>."
9090                         val="$undef"
9091                 fi
9092                 $rm -f mem.h
9093                 ;;
9094         esac
9095 esac
9096 set i_memory
9097 eval $setvar
9098
9099 : can bcopy handle overlapping blocks?
9100 val="$undef"
9101 case "$d_bcopy" in
9102 "$define")
9103         echo " "
9104         echo "Checking to see if your bcopy() can do overlapping copies..." >&4
9105         $cat >try.c <<EOCP
9106 #$i_memory I_MEMORY
9107 #$i_stdlib I_STDLIB
9108 #$i_string I_STRING
9109 #$i_unistd I_UNISTD
9110 EOCP
9111         $cat >>try.c <<'EOCP'
9112 #include <stdio.h>
9113 #ifdef I_MEMORY
9114 #  include <memory.h>
9115 #endif
9116 #ifdef I_STDLIB
9117 #  include <stdlib.h>
9118 #endif
9119 #ifdef I_STRING
9120 #  include <string.h>
9121 #else
9122 #  include <strings.h>
9123 #endif
9124 #ifdef I_UNISTD
9125 #  include <unistd.h>  /* Needed for NetBSD */
9126 #endif
9127 int main()
9128 {
9129 char buf[128], abc[128];
9130 char *b;
9131 int len;
9132 int off;
9133 int align;
9134
9135 bcopy("abcdefghijklmnopqrstuvwxyz0123456789", abc, 36);
9136
9137 for (align = 7; align >= 0; align--) {
9138         for (len = 36; len; len--) {
9139                 b = buf+align;
9140                 bcopy(abc, b, len);
9141                 for (off = 1; off <= len; off++) {
9142                         bcopy(b, b+off, len);
9143                         bcopy(b+off, b, len);
9144                         if (bcmp(b, abc, len))
9145                                 exit(1);
9146                 }
9147         }
9148 }
9149 exit(0);
9150 }
9151 EOCP
9152         set try
9153         if eval $compile_ok; then
9154                 if ./try 2>/dev/null; then
9155                         echo "Yes, it can."
9156                         val="$define"
9157                 else
9158                         echo "It can't, sorry."
9159                         case "$d_memmove" in
9160                         "$define") echo "But that's Ok since you have memmove()." ;;
9161                         esac
9162                 fi
9163         else
9164                 echo "(I can't compile the test program, so we'll assume not...)"
9165                 case "$d_memmove" in
9166                 "$define") echo "But that's Ok since you have memmove()." ;;
9167                 esac
9168         fi
9169         ;;
9170 esac
9171 $rm -f try.* try core
9172 set d_safebcpy
9173 eval $setvar
9174
9175 : can memcpy handle overlapping blocks?
9176 val="$undef"
9177 case "$d_memcpy" in
9178 "$define")
9179         echo " "
9180         echo "Checking to see if your memcpy() can do overlapping copies..." >&4
9181         $cat >try.c <<EOCP
9182 #$i_memory I_MEMORY
9183 #$i_stdlib I_STDLIB
9184 #$i_string I_STRING
9185 #$i_unistd I_UNISTD
9186 EOCP
9187         $cat >>try.c <<'EOCP'
9188 #include <stdio.h>
9189 #ifdef I_MEMORY
9190 #  include <memory.h>
9191 #endif
9192 #ifdef I_STDLIB
9193 #  include <stdlib.h>
9194 #endif
9195 #ifdef I_STRING
9196 #  include <string.h>
9197 #else
9198 #  include <strings.h>
9199 #endif
9200 #ifdef I_UNISTD
9201 #  include <unistd.h>  /* Needed for NetBSD */
9202 #endif
9203 int main()
9204 {
9205 char buf[128], abc[128];
9206 char *b;
9207 int len;
9208 int off;
9209 int align;
9210
9211 /* Copy "abcde..." string to char abc[] so that gcc doesn't
9212    try to store the string in read-only memory. */
9213 memcpy(abc, "abcdefghijklmnopqrstuvwxyz0123456789", 36);
9214
9215 for (align = 7; align >= 0; align--) {
9216         for (len = 36; len; len--) {
9217                 b = buf+align;
9218                 memcpy(b, abc, len);
9219                 for (off = 1; off <= len; off++) {
9220                         memcpy(b+off, b, len);
9221                         memcpy(b, b+off, len);
9222                         if (memcmp(b, abc, len))
9223                                 exit(1);
9224                 }
9225         }
9226 }
9227 exit(0);
9228 }
9229 EOCP
9230         set try
9231         if eval $compile_ok; then
9232                 if ./try 2>/dev/null; then
9233                         echo "Yes, it can."
9234                         val="$define"
9235                 else
9236                         echo "It can't, sorry."
9237                         case "$d_memmove" in
9238                         "$define") echo "But that's Ok since you have memmove()." ;;
9239                         esac
9240                 fi
9241         else
9242                 echo "(I can't compile the test program, so we'll assume not...)"
9243                 case "$d_memmove" in
9244                 "$define") echo "But that's Ok since you have memmove()." ;;
9245                 esac
9246         fi
9247         ;;
9248 esac
9249 $rm -f try.* try core
9250 set d_safemcpy
9251 eval $setvar
9252
9253 : can memcmp be trusted to compare relative magnitude?
9254 val="$undef"
9255 case "$d_memcmp" in
9256 "$define")
9257         echo " "
9258         echo "Checking if your memcmp() can compare relative magnitude..." >&4
9259         $cat >try.c <<EOCP
9260 #$i_memory I_MEMORY
9261 #$i_stdlib I_STDLIB
9262 #$i_string I_STRING
9263 #$i_unistd I_UNISTD
9264 EOCP
9265         $cat >>try.c <<'EOCP'
9266 #include <stdio.h>
9267 #ifdef I_MEMORY
9268 #  include <memory.h>
9269 #endif
9270 #ifdef I_STDLIB
9271 #  include <stdlib.h>
9272 #endif
9273 #ifdef I_STRING
9274 #  include <string.h>
9275 #else
9276 #  include <strings.h>
9277 #endif
9278 #ifdef I_UNISTD
9279 #  include <unistd.h>  /* Needed for NetBSD */
9280 #endif
9281 int main()
9282 {
9283 char a = -1;
9284 char b = 0;
9285 if ((a < b) && memcmp(&a, &b, 1) < 0)
9286         exit(1);
9287 exit(0);
9288 }
9289 EOCP
9290         set try
9291         if eval $compile_ok; then
9292                 if ./try 2>/dev/null; then
9293                         echo "Yes, it can."
9294                         val="$define"
9295                 else
9296                         echo "No, it can't (it uses signed chars)."
9297                 fi
9298         else
9299                 echo "(I can't compile the test program, so we'll assume not...)"
9300         fi
9301         ;;
9302 esac
9303 $rm -f try.* try core
9304 set d_sanemcmp
9305 eval $setvar
9306
9307 : see if select exists
9308 set select d_select
9309 eval $inlibc
9310
9311 : see if semctl exists
9312 set semctl d_semctl
9313 eval $inlibc
9314
9315 : see if semget exists
9316 set semget d_semget
9317 eval $inlibc
9318
9319 : see if semop exists
9320 set semop d_semop
9321 eval $inlibc
9322
9323 : see how much of the 'sem*(2)' library is present.
9324 h_sem=true
9325 echo " "
9326 case "$d_semctl$d_semget$d_semop" in
9327 *"$undef"*) h_sem=false;;
9328 esac
9329 case "$osname" in
9330 freebsd)
9331     case "`ipcs 2>&1`" in
9332     "SVID messages"*"not configured"*)
9333         echo "Your $osname does not have the sem*(2) configured." >&4
9334         h_sem=false
9335         val="$undef"
9336         set semctl d_semctl
9337         eval $setvar
9338         set semget d_semget
9339         eval $setvar
9340         set semop d_semop
9341         eval $setvar
9342         ;;
9343     esac
9344     ;;
9345 esac
9346 : we could also check for sys/ipc.h ...
9347 if $h_sem && $test `./findhdr sys/sem.h`; then
9348         echo "You have the full sem*(2) library." >&4
9349         val="$define"
9350 else
9351         echo "You don't have the full sem*(2) library." >&4
9352         val="$undef"
9353 fi
9354 set d_sem
9355 eval $setvar
9356
9357 : see whether sys/sem.h defines union semun
9358 echo " "
9359 $cat > try.c <<'END'
9360 #include <sys/types.h>
9361 #include <sys/ipc.h>
9362 #include <sys/sem.h>
9363 int main () { union semun semun; semun.buf = 0; }
9364 END
9365 set try
9366 if eval $compile; then
9367     echo "You have union semun in <sys/sem.h>." >&4
9368     val="$define"
9369 else
9370     echo "You do not have union semun in <sys/sem.h>." >&4
9371     val="$undef"
9372 fi
9373 $rm -f try try.c try.h
9374 set d_union_semun
9375 eval $setvar
9376
9377 : see how to do semctl IPC_STAT
9378 case "$d_sem" in
9379 $define)
9380     : see whether semctl IPC_STAT can use union semun
9381     echo " "
9382     $cat > try.h <<END
9383 #ifndef S_IRUSR
9384 #   ifdef S_IREAD
9385 #       define S_IRUSR S_IREAD
9386 #       define S_IWUSR S_IWRITE
9387 #       define S_IXUSR S_IEXEC
9388 #   else
9389 #       define S_IRUSR 0400
9390 #       define S_IWUSR 0200
9391 #       define S_IXUSR 0100
9392 #   endif
9393 #   define S_IRGRP (S_IRUSR>>3)
9394 #   define S_IWGRP (S_IWUSR>>3)
9395 #   define S_IXGRP (S_IXUSR>>3)
9396 #   define S_IROTH (S_IRUSR>>6)
9397 #   define S_IWOTH (S_IWUSR>>6)
9398 #   define S_IXOTH (S_IXUSR>>6)
9399 #endif
9400 #ifndef S_IRWXU
9401 #   define S_IRWXU (S_IRUSR|S_IWUSR|S_IXUSR)
9402 #   define S_IRWXG (S_IRGRP|S_IWGRP|S_IXGRP)
9403 #   define S_IRWXO (S_IROTH|S_IWOTH|S_IXOTH)
9404 #endif
9405 END
9406
9407     $cat > try.c <<END
9408 #include <sys/types.h>
9409 #include <sys/ipc.h>
9410 #include <sys/sem.h>
9411 #include <sys/stat.h>
9412 #include <stdio.h>
9413 #include <errno.h>
9414 #include "try.h"
9415 #ifndef errno
9416 extern int errno;
9417 #endif
9418 #$d_union_semun HAS_UNION_SEMUN
9419 int main() {
9420     union semun
9421 #ifndef HAS_UNION_SEMUN
9422     {
9423         int val;
9424         struct semid_ds *buf;
9425         unsigned short *array;
9426     }
9427 #endif
9428     arg;
9429     int sem, st;
9430
9431 #if defined(IPC_PRIVATE) && defined(S_IRWXU) && defined(S_IRWXG) && defined(S_IRWXO) && defined(IPC_CREAT)
9432     sem = semget(IPC_PRIVATE, 1, S_IRWXU|S_IRWXG|S_IRWXO|IPC_CREAT);
9433     if (sem > -1) {
9434         struct semid_ds argbuf;
9435         arg.buf = &argbuf;
9436 #       ifdef IPC_STAT
9437         st = semctl(sem, 0, IPC_STAT, arg);
9438         if (st == 0)
9439             printf("semun\n");
9440         else
9441 #       endif /* IPC_STAT */
9442             printf("semctl IPC_STAT failed: errno = %d\n", errno);
9443 #       ifdef IPC_RMID
9444         if (semctl(sem, 0, IPC_RMID, arg) != 0)
9445 #       endif /* IPC_RMID */
9446             printf("semctl IPC_RMID failed: errno = %d\n", errno);
9447     } else
9448 #endif /* IPC_PRIVATE && ... */
9449         printf("semget failed: errno = %d\n", errno);
9450   return 0;
9451 }
9452 END
9453     val="$undef"
9454     set try
9455     if eval $compile; then
9456         xxx=`./try`
9457         case "$xxx" in
9458         semun) val="$define" ;;
9459         esac
9460     fi
9461     $rm -f try try.c
9462     set d_semctl_semun
9463     eval $setvar
9464     case "$d_semctl_semun" in
9465     $define)
9466         echo "You can use union semun for semctl IPC_STAT." >&4
9467         also='also'
9468         ;;
9469     *)  echo "You cannot use union semun for semctl IPC_STAT." >&4
9470         also=''
9471         ;;
9472     esac
9473
9474     : see whether semctl IPC_STAT can use struct semid_ds pointer
9475     $cat > try.c <<'END'
9476 #include <sys/types.h>
9477 #include <sys/ipc.h>
9478 #include <sys/sem.h>
9479 #include <sys/stat.h>
9480 #include "try.h"
9481 #include <stdio.h>
9482 #include <errno.h>
9483 #ifndef errno
9484 extern int errno;
9485 #endif
9486 int main() {
9487     struct semid_ds arg;
9488     int sem, st;
9489
9490 #if defined(IPC_PRIVATE) && defined(S_IRWXU) && defined(S_IRWXG) &&  defined(S_IRWXO) && defined(IPC_CREAT)
9491     sem = semget(IPC_PRIVATE, 1, S_IRWXU|S_IRWXG|S_IRWXO|IPC_CREAT);
9492     if (sem > -1) {
9493 #       ifdef IPC_STAT
9494         st = semctl(sem, 0, IPC_STAT, &arg);
9495         if (st == 0)
9496             printf("semid_ds\n");
9497         else
9498 #       endif /* IPC_STAT */
9499             printf("semctl IPC_STAT failed: errno = %d\n", errno);
9500 #       ifdef IPC_RMID
9501         if (semctl(sem, 0, IPC_RMID, &arg) != 0)
9502 #       endif /* IPC_RMID */
9503             printf("semctl IPC_RMID failed: errno = %d\n", errno);
9504     } else
9505 #endif /* IPC_PRIVATE && ... */
9506         printf("semget failed: errno = %d\n", errno);
9507
9508     return 0;
9509 }
9510 END
9511     val="$undef"
9512     set try
9513     if eval $compile; then
9514         xxx=`./try`
9515         case "$xxx" in
9516         semid_ds) val="$define" ;;
9517         esac
9518     fi
9519     $rm -f try try.c
9520     set d_semctl_semid_ds
9521     eval $setvar
9522     case "$d_semctl_semid_ds" in
9523     $define)
9524         echo "You can $also use struct semid_ds* for semctl IPC_STAT." >&4
9525         ;;
9526     *)  echo "You cannot use struct semid_ds* for semctl IPC_STAT." >&4
9527         ;;
9528     esac
9529     $rm -f try.h
9530     ;;
9531 *)  val="$undef"
9532
9533     # We do not have the full sem*(2) library, so assume we can not
9534     # use either.
9535
9536     set d_semctl_semun
9537     eval $setvar
9538
9539     set d_semctl_semid_ds
9540     eval $setvar
9541     ;;
9542 esac
9543
9544 : see if setegid exists
9545 set setegid d_setegid
9546 eval $inlibc
9547
9548 : see if seteuid exists
9549 set seteuid d_seteuid
9550 eval $inlibc
9551
9552 : see if setgrent exists
9553 set setgrent d_setgrent
9554 eval $inlibc
9555
9556 : see if sethostent exists
9557 set sethostent d_sethent
9558 eval $inlibc
9559
9560 : see if setlinebuf exists
9561 set setlinebuf d_setlinebuf
9562 eval $inlibc
9563
9564 : see if setlocale exists
9565 set setlocale d_setlocale
9566 eval $inlibc
9567
9568 : see if setnetent exists
9569 set setnetent d_setnent
9570 eval $inlibc
9571
9572 : see if setprotoent exists
9573 set setprotoent d_setpent
9574 eval $inlibc
9575
9576 : see if setpgid exists
9577 set setpgid d_setpgid
9578 eval $inlibc
9579
9580 : see if setpgrp2 exists
9581 set setpgrp2 d_setpgrp2
9582 eval $inlibc
9583
9584 : see if setpriority exists
9585 set setpriority d_setprior
9586 eval $inlibc
9587
9588 : see if setpwent exists
9589 set setpwent d_setpwent
9590 eval $inlibc
9591
9592 : see if setregid exists
9593 set setregid d_setregid
9594 eval $inlibc
9595 set setresgid d_setresgid
9596 eval $inlibc
9597
9598 : see if setreuid exists
9599 set setreuid d_setreuid
9600 eval $inlibc
9601 set setresuid d_setresuid
9602 eval $inlibc
9603
9604 : see if setrgid exists
9605 set setrgid d_setrgid
9606 eval $inlibc
9607
9608 : see if setruid exists
9609 set setruid d_setruid
9610 eval $inlibc
9611
9612 : see if setservent exists
9613 set setservent d_setsent
9614 eval $inlibc
9615
9616 : see if setsid exists
9617 set setsid d_setsid
9618 eval $inlibc
9619
9620 : see if setvbuf exists
9621 set setvbuf d_setvbuf
9622 eval $inlibc
9623
9624 : see if sfio.h is available
9625 set sfio.h i_sfio
9626 eval $inhdr
9627
9628
9629 : see if sfio library is available
9630 case "$i_sfio" in
9631 $define)
9632         val=''
9633         set sfreserve val
9634         eval $inlibc
9635         ;;
9636 *)
9637         val="$undef"
9638         ;;
9639 esac
9640 : Ok, but do we want to use it.
9641 case "$val" in
9642 $define)
9643         case "$usesfio" in
9644         true|$define|[yY]*) dflt='y';;
9645         *) dflt='n';;
9646         esac
9647         echo "$package can use the sfio library, but it is experimental."
9648         rp="You seem to have sfio available, do you want to try using it?"
9649         . ./myread
9650         case "$ans" in
9651         y|Y) ;;
9652         *)      echo "Ok, avoiding sfio this time.  I'll use stdio instead."
9653                 val="$undef"
9654                 : Remove sfio from list of libraries to use
9655                 set `echo X $libs | $sed -e 's/-lsfio / /' -e 's/-lsfio$//'`
9656                 shift
9657                 libs="$*"
9658                 echo "libs = $libs" >&4
9659                 ;;
9660         esac
9661         ;;
9662 *)      case "$usesfio" in
9663         true|$define|[yY]*)
9664                 echo "Sorry, cannot find sfio on this machine" >&4
9665                 echo "Ignoring your setting of usesfio=$usesfio" >&4
9666                 ;;
9667         esac
9668         ;;
9669 esac
9670 set d_sfio
9671 eval $setvar
9672 case "$d_sfio" in
9673 $define) usesfio='true';;
9674 *) usesfio='false';;
9675 esac
9676
9677 : see if shmctl exists
9678 set shmctl d_shmctl
9679 eval $inlibc
9680
9681 : see if shmget exists
9682 set shmget d_shmget
9683 eval $inlibc
9684
9685 : see if shmat exists
9686 set shmat d_shmat
9687 eval $inlibc
9688 : see what shmat returns
9689 case "$d_shmat" in
9690 "$define")
9691         $cat >shmat.c <<'END'
9692 #include <sys/shm.h>
9693 void *shmat();
9694 END
9695         if $cc $ccflags -c shmat.c >/dev/null 2>&1; then
9696                 shmattype='void *'
9697         else
9698                 shmattype='char *'
9699         fi
9700         echo "and it returns ($shmattype)." >&4
9701         : see if a prototype for shmat is available
9702         xxx=`./findhdr sys/shm.h`
9703         $cppstdin $cppflags $cppminus < $xxx > shmat.c 2>/dev/null
9704         if $contains 'shmat.*(' shmat.c >/dev/null 2>&1; then
9705                 val="$define"
9706         else
9707                 val="$undef"
9708         fi
9709         $rm -f shmat.[co]
9710         ;;
9711 *)
9712         val="$undef"
9713         ;;
9714 esac
9715 set d_shmatprototype
9716 eval $setvar
9717
9718 : see if shmdt exists
9719 set shmdt d_shmdt
9720 eval $inlibc
9721
9722 : see how much of the 'shm*(2)' library is present.
9723 h_shm=true
9724 echo " "
9725 case "$d_shmctl$d_shmget$d_shmat$d_shmdt" in
9726 *"$undef"*) h_shm=false;;
9727 esac
9728 case "$osname" in
9729 freebsd)
9730     case "`ipcs 2>&1`" in
9731     "SVID shared memory"*"not configured"*)
9732         echo "Your $osname does not have the shm*(2) configured." >&4
9733         h_shm=false
9734         val="$undef"
9735         set shmctl d_shmctl
9736         evat $setvar
9737         set shmget d_shmget
9738         evat $setvar
9739         set shmat d_shmat
9740         evat $setvar
9741         set shmdt d_shmdt
9742         evat $setvar
9743         ;;
9744     esac
9745     ;;
9746 esac
9747 : we could also check for sys/ipc.h ...
9748 if $h_shm && $test `./findhdr sys/shm.h`; then
9749         echo "You have the full shm*(2) library." >&4
9750         val="$define"
9751 else
9752         echo "You don't have the full shm*(2) library." >&4
9753         val="$undef"
9754 fi
9755 set d_shm
9756 eval $setvar
9757
9758 echo " "
9759 : see if we have sigaction
9760 if set sigaction val -f d_sigaction; eval $csym; $val; then
9761         echo 'sigaction() found.' >&4
9762         $cat > try.c <<'EOP'
9763 #include <stdio.h>
9764 #include <sys/types.h>
9765 #include <signal.h>
9766 int main()
9767 {
9768     struct sigaction act, oact;
9769 }
9770 EOP
9771         set try
9772         if eval $compile_ok; then
9773                 val="$define"
9774         else
9775                 echo "But you don't seem to have a useable struct sigaction." >&4
9776                 val="$undef"
9777         fi
9778 else
9779         echo 'sigaction NOT found.' >&4
9780         val="$undef"
9781 fi
9782 set d_sigaction; eval $setvar
9783 $rm -f try try$_o try.c
9784
9785 : see if sigsetjmp exists
9786 echo " "
9787 case "$d_sigsetjmp" in
9788 '')
9789         $cat >try.c <<'EOP'
9790 #include <setjmp.h>
9791 sigjmp_buf env;
9792 int set = 1;
9793 int main()
9794 {
9795         if (sigsetjmp(env,1))
9796                 exit(set);
9797         set = 0;
9798         siglongjmp(env, 1);
9799         exit(1);
9800 }
9801 EOP
9802         set try
9803         if eval $compile; then
9804                 if ./try >/dev/null 2>&1; then
9805                         echo "POSIX sigsetjmp found." >&4
9806                         val="$define"
9807                 else
9808                         $cat >&4 <<EOM
9809 Uh-Oh! You have POSIX sigsetjmp and siglongjmp, but they do not work properly!!
9810 I'll ignore them.
9811 EOM
9812                         val="$undef"
9813                 fi
9814         else
9815                 echo "sigsetjmp not found." >&4
9816                 val="$undef"
9817         fi
9818         ;;
9819 *) val="$d_sigsetjmp"
9820         case "$d_sigsetjmp" in
9821         $define) echo "POSIX sigsetjmp found." >&4;;
9822         $undef) echo "sigsetjmp not found." >&4;;
9823         esac
9824         ;;
9825 esac
9826 set d_sigsetjmp
9827 eval $setvar
9828 $rm -f try.c try
9829
9830 : see if stat knows about block sizes
9831 echo " "
9832 set d_statblks stat st_blocks $i_sysstat sys/stat.h
9833 eval $hasfield
9834
9835 : see if _ptr and _cnt from stdio act std
9836 echo " "
9837 if $contains '_IO_fpos_t' `./findhdr stdio.h` >/dev/null 2>&1 ; then
9838         echo "(Looks like you have stdio.h from Linux.)"
9839         case "$stdio_ptr" in
9840         '') stdio_ptr='((fp)->_IO_read_ptr)'
9841                 ptr_lval=$define
9842                 ;;
9843         *)      ptr_lval=$d_stdio_ptr_lval;;
9844         esac
9845         case "$stdio_cnt" in
9846         '') stdio_cnt='((fp)->_IO_read_end - (fp)->_IO_read_ptr)'
9847                 cnt_lval=$undef
9848                 ;;
9849         *)      cnt_lval=$d_stdio_cnt_lval;;
9850         esac
9851         case "$stdio_base" in
9852         '') stdio_base='((fp)->_IO_read_base)';;
9853         esac
9854         case "$stdio_bufsiz" in
9855         '') stdio_bufsiz='((fp)->_IO_read_end - (fp)->_IO_read_base)';;
9856         esac
9857 else
9858         case "$stdio_ptr" in
9859         '') stdio_ptr='((fp)->_ptr)'
9860                 ptr_lval=$define
9861                 ;;
9862         *)      ptr_lval=$d_stdio_ptr_lval;;
9863         esac
9864         case "$stdio_cnt" in
9865         '') stdio_cnt='((fp)->_cnt)'
9866                 cnt_lval=$define
9867                 ;;
9868         *)      cnt_lval=$d_stdio_cnt_lval;;
9869         esac
9870         case "$stdio_base" in
9871         '') stdio_base='((fp)->_base)';;
9872         esac
9873         case "$stdio_bufsiz" in
9874         '') stdio_bufsiz='((fp)->_cnt + (fp)->_ptr - (fp)->_base)';;
9875         esac
9876 fi
9877 : test whether _ptr and _cnt really work
9878 echo "Checking how std your stdio is..." >&4
9879 $cat >try.c <<EOP
9880 #include <stdio.h>
9881 #define FILE_ptr(fp)    $stdio_ptr
9882 #define FILE_cnt(fp)    $stdio_cnt
9883 int main() {
9884         FILE *fp = fopen("try.c", "r");
9885         char c = getc(fp);
9886         if (
9887                 18 <= FILE_cnt(fp) &&
9888                 strncmp(FILE_ptr(fp), "include <stdio.h>\n", 18) == 0
9889         )
9890                 exit(0);
9891         exit(1);
9892 }
9893 EOP
9894 val="$undef"
9895 set try
9896 if eval $compile; then
9897         if ./try; then
9898                 echo "Your stdio acts pretty std."
9899                 val="$define"
9900         else
9901                 echo "Your stdio isn't very std."
9902         fi
9903 else
9904         echo "Your stdio doesn't appear very std."
9905 fi
9906 $rm -f try.c try
9907 set d_stdstdio
9908 eval $setvar
9909
9910 : Can _ptr be used as an lvalue?
9911 case "$d_stdstdio$ptr_lval" in
9912 $define$define) val=$define ;;
9913 *) val=$undef ;;
9914 esac
9915 set d_stdio_ptr_lval
9916 eval $setvar
9917
9918 : Can _cnt be used as an lvalue?
9919 case "$d_stdstdio$cnt_lval" in
9920 $define$define) val=$define ;;
9921 *) val=$undef ;;
9922 esac
9923 set d_stdio_cnt_lval
9924 eval $setvar
9925
9926 : see if _base is also standard
9927 val="$undef"
9928 case "$d_stdstdio" in
9929 $define)
9930         $cat >try.c <<EOP
9931 #include <stdio.h>
9932 #define FILE_base(fp)   $stdio_base
9933 #define FILE_bufsiz(fp) $stdio_bufsiz
9934 int main() {
9935         FILE *fp = fopen("try.c", "r");
9936         char c = getc(fp);
9937         if (
9938                 19 <= FILE_bufsiz(fp) &&
9939                 strncmp(FILE_base(fp), "#include <stdio.h>\n", 19) == 0
9940         )
9941                 exit(0);
9942         exit(1);
9943 }
9944 EOP
9945         set try
9946         if eval $compile; then
9947                 if ./try; then
9948                         echo "And its _base field acts std."
9949                         val="$define"
9950                 else
9951                         echo "But its _base field isn't std."
9952                 fi
9953         else
9954                 echo "However, it seems to be lacking the _base field."
9955         fi
9956         $rm -f try.c try
9957         ;;
9958 esac
9959 set d_stdiobase
9960 eval $setvar
9961
9962 : see if strcoll exists
9963 set strcoll d_strcoll
9964 eval $inlibc
9965
9966 : check for structure copying
9967 echo " "
9968 echo "Checking to see if your C compiler can copy structs..." >&4
9969 $cat >try.c <<'EOCP'
9970 int main()
9971 {
9972         struct blurfl {
9973                 int dyick;
9974         } foo, bar;
9975
9976         foo = bar;
9977 }
9978 EOCP
9979 if $cc -c try.c >/dev/null 2>&1 ; then
9980         val="$define"
9981         echo "Yup, it can."
9982 else
9983         val="$undef"
9984         echo "Nope, it can't."
9985 fi
9986 set d_strctcpy
9987 eval $setvar
9988 $rm -f try.*
9989
9990 : see if strerror and/or sys_errlist[] exist
9991 echo " "
9992 if test "X$d_strerror" = X -o "X$d_syserrlst" = X; then
9993     if set strerror val -f d_strerror; eval $csym; $val; then
9994                 echo 'strerror() found.' >&4
9995                 d_strerror="$define"
9996                 d_strerrm='strerror(e)'
9997                 if set sys_errlist val -a d_syserrlst; eval $csym; $val; then   
9998                         echo "(You also have sys_errlist[], so we could roll our own strerror.)" 
9999                         d_syserrlst="$define"
10000                 else
10001                         echo "(Since you don't have sys_errlist[], sterror() is welcome.)"
10002                         d_syserrlst="$undef"
10003                 fi
10004     elif xxx=`./findhdr string.h`; test "$xxx" || xxx=`./findhdr strings.h`; \
10005                         $contains '#[   ]*define.*strerror' "$xxx" >/dev/null 2>&1; then
10006                 echo 'strerror() found in string header.' >&4
10007                 d_strerror="$define"
10008                 d_strerrm='strerror(e)'
10009                 if set sys_errlist val -a d_syserrlst; eval $csym; $val; then   
10010                         echo "(Most probably, strerror() uses sys_errlist[] for descriptions.)"
10011                                 d_syserrlst="$define"
10012                 else
10013                         echo "(You don't appear to have any sys_errlist[], how can this be?)"
10014                         d_syserrlst="$undef"
10015                 fi
10016     elif set sys_errlist val -a d_syserrlst; eval $csym; $val; then
10017                 echo "strerror() not found, but you have sys_errlist[] so we'll use that." >&4
10018                 d_strerror="$undef"
10019                 d_syserrlst="$define"
10020                 d_strerrm='((e)<0||(e)>=sys_nerr?"unknown":sys_errlist[e])'
10021     else
10022                 echo 'strerror() and sys_errlist[] NOT found.' >&4
10023                 d_strerror="$undef"
10024                 d_syserrlst="$undef"
10025                 d_strerrm='"unknown"'
10026     fi
10027 fi
10028
10029 : see if strtod exists
10030 set strtod d_strtod
10031 eval $inlibc
10032
10033 : see if strtol exists
10034 set strtol d_strtol
10035 eval $inlibc
10036
10037 : see if strtoul exists
10038 set strtoul d_strtoul
10039 eval $inlibc
10040
10041 : see if strxfrm exists
10042 set strxfrm d_strxfrm
10043 eval $inlibc
10044
10045 : see if symlink exists
10046 set symlink d_symlink
10047 eval $inlibc
10048
10049 : see if syscall exists
10050 set syscall d_syscall
10051 eval $inlibc
10052
10053 : see if sysconf exists
10054 set sysconf d_sysconf
10055 eval $inlibc
10056
10057 : see if system exists
10058 set system d_system
10059 eval $inlibc
10060
10061 : see if tcgetpgrp exists
10062 set tcgetpgrp d_tcgetpgrp
10063 eval $inlibc
10064
10065 : see if tcsetpgrp exists
10066 set tcsetpgrp d_tcsetpgrp
10067 eval $inlibc
10068
10069 : see if sys/types.h has to be included
10070 set sys/types.h i_systypes
10071 eval $inhdr
10072
10073 : see if prototype for telldir is available
10074 echo " "
10075 set d_telldirproto telldir $i_systypes sys/types.h $i_dirent dirent.h
10076 eval $hasproto
10077
10078 : define an is-a-typedef? function
10079 typedef='type=$1; var=$2; def=$3; shift; shift; shift; inclist=$@;
10080 case "$inclist" in
10081 "") inclist="sys/types.h";;
10082 esac;
10083 eval "varval=\$$var";
10084 case "$varval" in
10085 "")
10086         $rm -f temp.c;
10087         for inc in $inclist; do
10088                 echo "#include <$inc>" >>temp.c;
10089         done;
10090         echo "#ifdef $type" >> temp.c;
10091         echo "printf(\"We have $type\");" >> temp.c;
10092         echo "#endif" >> temp.c;
10093         $cppstdin $cppflags $cppminus < temp.c >temp.E 2>/dev/null;
10094         if $contains $type temp.E >/dev/null 2>&1; then
10095                 eval "$var=\$type";
10096         else
10097                 eval "$var=\$def";
10098         fi;
10099         $rm -f temp.?;;
10100 *) eval "$var=\$varval";;
10101 esac'
10102
10103 : define an is-a-typedef? function that prompts if the type is not available.
10104 typedef_ask='type=$1; var=$2; def=$3; shift; shift; shift; inclist=$@;
10105 case "$inclist" in
10106 "") inclist="sys/types.h";;
10107 esac;
10108 eval "varval=\$$var";
10109 case "$varval" in
10110 "")
10111         $rm -f temp.c;
10112         for inc in $inclist; do
10113                 echo "#include <$inc>" >>temp.c;
10114         done;
10115         echo "#ifdef $type" >> temp.c;
10116         echo "printf(\"We have $type\");" >> temp.c;
10117         echo "#endif" >> temp.c;
10118         $cppstdin $cppflags $cppminus < temp.c >temp.E 2>/dev/null;
10119         echo " " ;
10120         echo "$rp" | $sed -e "s/What is/Looking for/" -e "s/?/./";
10121         if $contains $type temp.E >/dev/null 2>&1; then
10122                 echo "$type found." >&4;
10123                 eval "$var=\$type";
10124         else
10125                 echo "$type NOT found." >&4;
10126                 dflt="$def";
10127                 . ./myread ;
10128                 eval "$var=\$ans";
10129         fi;
10130         $rm -f temp.?;;
10131 *) eval "$var=\$varval";;
10132 esac'
10133
10134 : see if this is a sys/times.h system
10135 set sys/times.h i_systimes
10136 eval $inhdr
10137
10138 : see if times exists
10139 echo " "
10140 if set times val -f d_times; eval $csym; $val; then
10141         echo 'times() found.' >&4
10142         d_times="$define"
10143         inc=''
10144         case "$i_systimes" in
10145         "$define") inc='sys/times.h';;
10146         esac
10147         rp="What is the type returned by times() on this system?"
10148         set clock_t clocktype long stdio.h sys/types.h $inc
10149         eval $typedef_ask
10150 else
10151         echo 'times() NOT found, hope that will do.' >&4
10152         d_times="$undef"
10153         clocktype='int'
10154 fi
10155
10156 : see if truncate exists
10157 set truncate d_truncate
10158 eval $inlibc
10159
10160 : see if tzname[] exists
10161 echo " "
10162 if set tzname val -a d_tzname; eval $csym; $val; then
10163         val="$define"
10164         echo 'tzname[] found.' >&4
10165 else
10166         val="$undef"
10167         echo 'tzname[] NOT found.' >&4
10168 fi
10169 set d_tzname
10170 eval $setvar
10171
10172 : see if umask exists
10173 set umask d_umask
10174 eval $inlibc
10175
10176 : backward compatibility for d_hvfork
10177 if test X$d_hvfork != X; then
10178         d_vfork="$d_hvfork"
10179         d_hvfork=''
10180 fi
10181 : see if there is a vfork
10182 val=''
10183 set vfork val
10184 eval $inlibc
10185
10186 : Ok, but do we want to use it. vfork is reportedly unreliable in 
10187 : perl on Solaris 2.x, and probably elsewhere.
10188 case "$val" in
10189 $define)
10190         echo " "
10191         case "$usevfork" in
10192         false) dflt='n';;
10193         *) dflt='y';;
10194         esac
10195         cat <<'EOM'
10196  
10197 Perl can only use a vfork() that doesn't suffer from strict
10198 restrictions on calling functions or modifying global data in
10199 the child.  For example, glibc-2.1 contains such a vfork()
10200 that is unsuitable.  If your system provides a proper fork()
10201 call, chances are that you do NOT want perl to use vfork().
10202
10203 EOM
10204         rp="Do you still want to use vfork()?"
10205         . ./myread
10206         case "$ans" in
10207         y|Y) ;;
10208         *)
10209                 echo "Ok, we won't use vfork()."
10210                 val="$undef"
10211                 ;;
10212         esac
10213         ;;
10214 esac
10215 set d_vfork
10216 eval $setvar
10217 case "$d_vfork" in
10218 $define) usevfork='true';;
10219 *) usevfork='false';;
10220 esac
10221
10222 : see if this is an sysdir system
10223 set sys/dir.h i_sysdir
10224 eval $inhdr
10225
10226 : see if this is an sysndir system
10227 set sys/ndir.h i_sysndir
10228 eval $inhdr
10229
10230 : see if closedir exists
10231 set closedir d_closedir
10232 eval $inlibc
10233
10234 case "$d_closedir" in
10235 "$define")
10236         echo " "
10237         echo "Checking whether closedir() returns a status..." >&4
10238         cat > closedir.c <<EOM
10239 #$i_dirent I_DIRENT             /**/
10240 #$i_sysdir I_SYS_DIR            /**/
10241 #$i_sysndir I_SYS_NDIR          /**/
10242 #$i_systypes I_SYS_TYPES        /**/
10243
10244 #if defined(I_SYS_TYPES)
10245 #include <sys/types.h>
10246 #endif
10247 #if defined(I_DIRENT)
10248 #include <dirent.h>
10249 #if defined(NeXT) && defined(I_SYS_DIR) /* NeXT needs dirent + sys/dir.h */
10250 #include <sys/dir.h>
10251 #endif
10252 #else
10253 #ifdef I_SYS_NDIR
10254 #include <sys/ndir.h>
10255 #else
10256 #ifdef I_SYS_DIR
10257 #ifdef hp9000s500
10258 #include <ndir.h>       /* may be wrong in the future */
10259 #else
10260 #include <sys/dir.h>
10261 #endif
10262 #endif
10263 #endif
10264 #endif 
10265 int main() { return closedir(opendir(".")); }
10266 EOM
10267         set closedir
10268         if eval $compile_ok; then
10269                 if ./closedir > /dev/null 2>&1 ; then
10270                         echo "Yes, it does."
10271                         val="$undef"
10272                 else
10273                         echo "No, it doesn't."
10274                         val="$define"
10275                 fi
10276         else
10277                 echo "(I can't seem to compile the test program--assuming it doesn't)"
10278                 val="$define"
10279         fi
10280         ;;
10281 *)
10282         val="$undef";
10283         ;;
10284 esac
10285 set d_void_closedir
10286 eval $setvar
10287 $rm -f closedir*
10288 : check for volatile keyword
10289 echo " "
10290 echo 'Checking to see if your C compiler knows about "volatile"...' >&4
10291 $cat >try.c <<'EOCP'
10292 int main()
10293 {
10294         typedef struct _goo_struct goo_struct;
10295         goo_struct * volatile goo = ((goo_struct *)0);
10296         struct _goo_struct {
10297                 long long_int;
10298                 int reg_int;
10299                 char char_var;
10300         };
10301         typedef unsigned short foo_t;
10302         char *volatile foo;
10303         volatile int bar;
10304         volatile foo_t blech;
10305         foo = foo;
10306 }
10307 EOCP
10308 if $cc -c $ccflags try.c >/dev/null 2>&1 ; then
10309         val="$define"
10310         echo "Yup, it does."
10311 else
10312         val="$undef"
10313         echo "Nope, it doesn't."
10314 fi
10315 set d_volatile
10316 eval $setvar
10317 $rm -f try.*
10318
10319 : see if there is a wait4
10320 set wait4 d_wait4
10321 eval $inlibc
10322
10323 : see if waitpid exists
10324 set waitpid d_waitpid
10325 eval $inlibc
10326
10327 : see if wcstombs exists
10328 set wcstombs d_wcstombs
10329 eval $inlibc
10330
10331 : see if wctomb exists
10332 set wctomb d_wctomb
10333 eval $inlibc
10334
10335 : see if writev exists
10336 set writev d_writev
10337 eval $inlibc
10338
10339 : preserve RCS keywords in files with variable substitution, grrr
10340 Date='$Date'
10341 Id='$Id'
10342 Log='$Log'
10343 RCSfile='$RCSfile'
10344 Revision='$Revision'
10345
10346 case "$crosscompile" in
10347 ''|[nN]*) crosscompile="$undef" ;;
10348 esac
10349
10350 case "$osname" in
10351 next|rhapsody) multiarch="$define" ;;
10352 esac
10353 case "$multiarch" in
10354 ''|[nN]*) multiarch="$undef" ;;
10355 esac
10356
10357 : check for alignment requirements
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 memory alignment check.
10364
10365 EOM
10366         case "$alignbytes" in
10367         '') alignbytes=8 ;;
10368         esac
10369         ;;
10370 *)
10371         case "$alignbytes" in
10372         '') echo "Checking alignment constraints..." >&4
10373                 $cat >try.c <<'EOCP'
10374 struct foobar {
10375         char foo;
10376         double bar;
10377 } try_algn;
10378 int main()
10379 {
10380         printf("%d\n", (char *)&try_algn.bar - (char *)&try_algn.foo);
10381 }
10382 EOCP
10383                 set try
10384                 if eval $compile_ok; then
10385                         dflt=`./try`
10386                 else
10387                         dflt='8'
10388                         echo "(I can't seem to compile the test program...)"
10389                 fi
10390                 ;;
10391         *) dflt="$alignbytes"
10392                 ;;
10393         esac
10394         rp="Doubles must be aligned on a how-many-byte boundary?"
10395         . ./myread
10396         alignbytes="$ans"
10397         $rm -f try.c try
10398         ;;
10399 esac
10400
10401
10402 : check for ordering of bytes in a long
10403 echo " "
10404 case "$crosscompile$multiarch" in
10405 *$define*)
10406         $cat <<EOM
10407 You seem to be either cross-compiling or doing a multiarchitecture build,
10408 skipping the byteorder check.
10409
10410 EOM
10411         byteorder=''
10412         ;;
10413 *)
10414         case "$byteorder" in
10415         '')
10416                 $cat <<'EOM'
10417 In the following, larger digits indicate more significance.  A big-endian
10418 machine like a Pyramid or a Motorola 680?0 chip will come out to 4321. A
10419 little-endian machine like a Vax or an Intel 80?86 chip would be 1234. Other
10420 machines may have weird orders like 3412.  A Cray will report 87654321. If
10421 the test program works the default is probably right.
10422 I'm now running the test program...
10423 EOM
10424                 $cat >try.c <<'EOCP'
10425 #include <stdio.h>
10426 int main()
10427 {
10428         int i;
10429         union {
10430                 unsigned long l;
10431                 char c[sizeof(long)];
10432         } u;
10433
10434         if (sizeof(long) > 4)
10435                 u.l = (0x08070605L << 32) | 0x04030201L;
10436         else
10437                 u.l = 0x04030201L;
10438         for (i = 0; i < sizeof(long); i++)
10439                 printf("%c", u.c[i]+'0');
10440         printf("\n");
10441         exit(0);
10442 }
10443 EOCP
10444                 xxx_prompt=y
10445                 set try
10446                 if eval $compile && ./try > /dev/null; then
10447                         dflt=`./try`
10448                         case "$dflt" in
10449                         [1-4][1-4][1-4][1-4]|12345678|87654321)
10450                                 echo "(The test program ran ok.)"
10451                                 echo "byteorder=$dflt"
10452                                 xxx_prompt=n
10453                         ;;
10454                         ????|????????) echo "(The test program ran ok.)" ;;
10455                         *) echo "(The test program didn't run right for some reason.)" ;;
10456                         esac
10457                 else
10458                         dflt='4321'
10459                         cat <<'EOM'
10460 (I can't seem to compile the test program.  Guessing big-endian...)
10461 EOM
10462                 fi
10463                 case "$xxx_prompt" in
10464                 y)
10465                         rp="What is the order of bytes in a long?"
10466                         . ./myread
10467                         byteorder="$ans"
10468                         ;;
10469                 *)      byteorder=$dflt
10470                         ;;
10471                 esac
10472                 ;;
10473         esac
10474         $rm -f try.c try
10475         ;;
10476 esac
10477
10478
10479 : how do we catenate cpp tokens here?
10480 echo " "
10481 echo "Checking to see how your cpp does stuff like catenate tokens..." >&4
10482 $cat >cpp_stuff.c <<'EOCP'
10483 #define RCAT(a,b)a/**/b
10484 #define ACAT(a,b)a ## b
10485 RCAT(Rei,ser)
10486 ACAT(Cir,cus)
10487 EOCP
10488 $cppstdin $cppflags $cppminus <cpp_stuff.c >cpp_stuff.out 2>&1
10489 if $contains 'Circus' cpp_stuff.out >/dev/null 2>&1; then
10490         echo "Oh!  Smells like ANSI's been here." >&4
10491         echo "We can catify or stringify, separately or together!"
10492         cpp_stuff=42
10493 elif $contains 'Reiser' cpp_stuff.out >/dev/null 2>&1; then
10494         echo "Ah, yes!  The good old days!" >&4
10495         echo "However, in the good old days we don't know how to stringify and"
10496         echo "catify at the same time."
10497         cpp_stuff=1
10498 else
10499         $cat >&4 <<EOM
10500 Hmm, I don't seem to be able to catenate tokens with your cpp.  You're going
10501 to have to edit the values of CAT[2-5] in config.h...
10502 EOM
10503         cpp_stuff="/* Help! How do we handle cpp_stuff? */*/"
10504 fi
10505 $rm -f cpp_stuff.*
10506
10507 : see if this is a db.h system
10508 set db.h i_db
10509 eval $inhdr
10510
10511 case "$i_db" in
10512 $define)
10513         : Check db version.
10514         echo " "
10515         echo "Checking Berkeley DB version ..." >&4
10516         $cat >try.c <<EOCP
10517 #$d_const HASCONST
10518 #ifndef HASCONST
10519 #define const
10520 #endif
10521 #include <sys/types.h>
10522 #include <stdio.h>
10523 #include <db.h>
10524 int main()
10525 {
10526 #ifdef DB_VERSION_MAJOR /* DB version >= 2 */
10527     int Major, Minor, Patch ;
10528     unsigned long Version ;
10529     (void)db_version(&Major, &Minor, &Patch) ;
10530     printf("You have Berkeley DB Version 2 or greater\n");
10531
10532     printf("db.h is from Berkeley DB Version %d.%d.%d\n",
10533                 DB_VERSION_MAJOR, DB_VERSION_MINOR, DB_VERSION_PATCH);
10534     printf("libdb is from Berkeley DB Version %d.%d.%d\n",
10535                 Major, Minor, Patch) ;
10536
10537     /* check that db.h & libdb are compatible */
10538     if (DB_VERSION_MAJOR != Major || DB_VERSION_MINOR != Minor || DB_VERSION_PATCH != Patch) {
10539         printf("db.h and libdb are incompatible\n") ;
10540         exit(3);        
10541     }
10542
10543     printf("db.h and libdb are compatible\n") ;
10544
10545     Version = DB_VERSION_MAJOR * 1000000 + DB_VERSION_MINOR * 1000
10546                 + DB_VERSION_PATCH ;
10547
10548     /* needs to be >= 2.3.4 */
10549     if (Version < 2003004) {
10550     /* if (DB_VERSION_MAJOR == 2 && DB_VERSION_MINOR == 0 && DB_VERSION_PATCH < 5) { */
10551         printf("but Perl needs Berkeley DB 2.3.4 or greater\n") ;
10552         exit(2);        
10553     }
10554
10555     exit(0);
10556 #else
10557 #if defined(_DB_H_) && defined(BTREEMAGIC) && defined(HASHMAGIC)
10558     printf("You have Berkeley DB Version 1\n");
10559     exit(0);    /* DB version < 2: the coast is clear. */
10560 #else
10561     exit(1);    /* <db.h> not Berkeley DB? */
10562 #endif
10563 #endif
10564 }
10565 EOCP
10566         set try
10567         if eval $compile && ./try; then
10568                 echo 'Looks OK.' >&4
10569         else
10570                 echo "I can't use Berkeley DB with your <db.h>.  I'll disable Berkeley DB." >&4
10571                 i_db=$undef
10572                 case " $libs " in
10573                 *"-ldb "*)
10574                         : Remove db from list of libraries to use
10575                         echo "Removing unusable -ldb from library list" >&4
10576                         set `echo X $libs | $sed -e 's/-ldb / /' -e 's/-ldb$//'`
10577                         shift
10578                         libs="$*"
10579                         echo "libs = $libs" >&4
10580                         ;;
10581                 esac
10582         fi
10583         $rm -f try.*
10584         ;;
10585 esac
10586
10587 case "$i_db" in
10588 define)
10589         : Check the return type needed for hash 
10590         echo " "
10591         echo "Checking return type needed for hash 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 u_int32_t hash_cb (ptr, size)
10602 const void *ptr;
10603 size_t size;
10604 {
10605 }
10606 HASHINFO info;
10607 int main()
10608 {
10609         info.hash = hash_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_hashtype='int'
10616                 else
10617                         db_hashtype='u_int32_t'
10618                 fi
10619         else
10620                 : XXX Maybe we should just give up here.
10621                 db_hashtype=u_int32_t
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_hashtype." >&4
10625         fi
10626         $rm -f try.*
10627         echo "Your version of Berkeley DB uses $db_hashtype for hash."
10628         ;;
10629 *)      db_hashtype=u_int32_t
10630         ;;
10631 esac
10632 case "$i_db" in
10633 define)
10634         : Check the return type needed for prefix 
10635         echo " "
10636         echo "Checking return type needed for prefix for Berkeley DB ..." >&4
10637         cat >try.c <<EOCP
10638 #$d_const HASCONST
10639 #ifndef HASCONST
10640 #define const
10641 #endif
10642 #include <sys/types.h>
10643 #include <db.h>
10644
10645 #ifndef DB_VERSION_MAJOR
10646 size_t prefix_cb (key1, key2)
10647 const DBT *key1;
10648 const DBT *key2;
10649 {
10650 }
10651 BTREEINFO info;
10652 int main()
10653 {
10654         info.prefix = prefix_cb;
10655 }
10656 #endif
10657 EOCP
10658         if $cc $ccflags -c try.c  >try.out 2>&1 ; then
10659                 if $contains warning try.out >>/dev/null 2>&1 ; then
10660                         db_prefixtype='int'
10661                 else
10662                         db_prefixtype='size_t'
10663                 fi
10664         else
10665                 db_prefixtype='size_t'
10666                 : XXX Maybe we should just give up here.
10667                 $cat try.out >&4
10668                 echo "Help:  I can't seem to compile the db test program." >&4
10669                 echo "Something's wrong, but I'll assume you use $db_prefixtype." >&4
10670         fi
10671         $rm -f try.*
10672         echo "Your version of Berkeley DB uses $db_prefixtype for prefix."
10673         ;;
10674 *)      db_prefixtype='size_t'
10675         ;;
10676 esac
10677
10678 : check for void type
10679 echo " "
10680 echo "Checking to see how well your C compiler groks the void type..." >&4
10681 case "$voidflags" in
10682 '')
10683         $cat >try.c <<'EOCP'
10684 #if TRY & 1
10685 void sub() {
10686 #else
10687 sub() {
10688 #endif
10689         extern void moo();      /* function returning void */
10690         void (*goo)();          /* ptr to func returning void */
10691 #if TRY & 8
10692         void *hue;              /* generic ptr */
10693 #endif
10694 #if TRY & 2
10695         void (*foo[10])();
10696 #endif
10697
10698 #if TRY & 4
10699         if(goo == moo) {
10700                 exit(0);
10701         }
10702 #endif
10703         exit(0);
10704 }
10705 int main() { sub(); }
10706 EOCP
10707         if $cc $ccflags -c -DTRY=$defvoidused try.c >.out 2>&1 ; then
10708                 voidflags=$defvoidused
10709         echo "Good.  It appears to support void to the level $package wants.">&4
10710                 if $contains warning .out >/dev/null 2>&1; then
10711                         echo "However, you might get some warnings that look like this:"
10712                         $cat .out
10713                 fi
10714         else
10715 echo "Hmm, your compiler has some difficulty with void. Checking further..." >&4
10716                 if $cc $ccflags -c -DTRY=1 try.c >/dev/null 2>&1; then
10717                         echo "It supports 1..."
10718                         if $cc $ccflags -c -DTRY=3 try.c >/dev/null 2>&1; then
10719                                 echo "It also supports 2..."
10720                                 if $cc $ccflags -c -DTRY=7 try.c >/dev/null 2>&1; then
10721                                         voidflags=7
10722                                         echo "And it supports 4 but not 8 definitely."
10723                                 else
10724                                         echo "It doesn't support 4..."
10725                                         if $cc $ccflags -c -DTRY=11 try.c >/dev/null 2>&1; then
10726                                                 voidflags=11
10727                                                 echo "But it supports 8."
10728                                         else
10729                                                 voidflags=3
10730                                                 echo "Neither does it support 8."
10731                                         fi
10732                                 fi
10733                         else
10734                                 echo "It does not support 2..."
10735                                 if $cc $ccflags -c -DTRY=13 try.c >/dev/null 2>&1; then
10736                                         voidflags=13
10737                                         echo "But it supports 4 and 8."
10738                                 else
10739                                         if $cc $ccflags -c -DTRY=5 try.c >/dev/null 2>&1; then
10740                                                 voidflags=5
10741                                                 echo "And it supports 4 but has not heard about 8."
10742                                         else
10743                                                 echo "However it supports 8 but not 4."
10744                                         fi
10745                                 fi
10746                         fi
10747                 else
10748                         echo "There is no support at all for void."
10749                         voidflags=0
10750                 fi
10751         fi
10752 esac
10753 case "$voidflags" in
10754 "$defvoidused") ;;
10755 *)      $cat >&4 <<'EOM'
10756   Support flag bits are:
10757     1: basic void declarations.
10758     2: arrays of pointers to functions returning void.
10759     4: operations between pointers to and addresses of void functions.
10760     8: generic void pointers.
10761 EOM
10762         dflt="$voidflags";
10763         rp="Your void support flags add up to what?"
10764         . ./myread
10765         voidflags="$ans"
10766         ;;
10767 esac
10768 $rm -f try.* .out
10769
10770
10771 : How can we generate normalized random numbers ?
10772 echo " "
10773 echo "Looking for a random number function..." >&4
10774 case "$randfunc" in
10775 '')
10776         if set drand48 val -f; eval $csym; $val; then
10777                 dflt="drand48"
10778                 echo "Good, found drand48()." >&4
10779         elif set random val -f; eval $csym; $val; then
10780                 dflt="random"
10781                 echo "OK, found random()." >&4
10782         else
10783                 dflt="rand"
10784                 echo "Yick, looks like I have to use rand()." >&4
10785         fi
10786         echo " "
10787         ;;
10788 *)
10789         dflt="$randfunc"
10790         ;;
10791 esac
10792 cont=true
10793
10794 case "$ccflags" in
10795 *-Dmy_rand=*|*-Dmy_srand=*)
10796         echo "Removing obsolete -Dmy_rand, -Dmy_srand, and -Drandbits from ccflags." >&4
10797         ccflags="`echo $ccflags | sed -e 's/-Dmy_rand=random/ /'`"
10798         ccflags="`echo $ccflags | sed -e 's/-Dmy_srand=srandom/ /'`"
10799         ccflags="`echo $ccflags | sed -e 's/-Drandbits=[0-9][0-9]*/ /'`"
10800         ;;
10801 esac
10802
10803 while $test "$cont"; do
10804         rp="Use which function to generate random numbers?"
10805         . ./myread
10806         if $test "$ans" = "$dflt"; then
10807                 : null
10808         else
10809                 randbits=''
10810         fi
10811         randfunc="$ans"
10812         if set $ans val -f; eval $csym; $val; then
10813                 cont=''
10814         else
10815                 dflt=y
10816                 rp="I cannot find function $ans. Use that name anyway?"
10817                 . ./myread
10818                 dflt=rand
10819                 case "$ans" in
10820                         [yY]*) cont='';;
10821                 esac
10822         fi
10823         case "$cont" in
10824         '')
10825                 case "$randfunc" in
10826                 drand48)
10827                         drand01="drand48()"
10828                         seedfunc="srand48"
10829                         randbits=48
10830                         randseedtype=long
10831                         ;;
10832                 rand|random)
10833                         case "$randbits" in
10834                         '')
10835 echo "Checking to see how many bits your $randfunc() function produces..." >&4
10836                                 $cat >try.c <<EOCP
10837 #$i_unistd I_UNISTD
10838 #$i_stdlib I_STDLIB
10839 #include <stdio.h>
10840 #ifdef I_UNISTD
10841 #  include <unistd.h>
10842 #endif
10843 #ifdef I_STDLIB
10844 #  include <stdlib.h>
10845 #endif
10846 int main()
10847 {
10848         register int i;
10849         register unsigned long tmp;
10850         register unsigned long max = 0L;
10851
10852         for (i = 1000; i; i--) {
10853                 tmp = (unsigned long) $randfunc();
10854                 if (tmp > max) max = tmp;
10855         }
10856         for (i = 0; max; i++)
10857                 max /= 2;
10858         printf("%d\n",i);
10859 }
10860 EOCP
10861                                 set try
10862                                 if eval $compile_ok; then
10863                                         dflt=`try`
10864                                 else
10865                                         dflt='?'
10866                                         echo "(I can't seem to compile the test program...)"
10867                                 fi
10868                                 ;;
10869                         *)
10870                                 dflt="$randbits"
10871                                 ;;
10872                         esac
10873                         rp="How many bits does your $randfunc() function produce?"
10874                         . ./myread
10875                         randbits="$ans"
10876                         $rm -f try.c try
10877                         drand01="($randfunc() / (double) ((unsigned long)1 << $randbits))"
10878                         seedfunc="s$randfunc"
10879                         randseedtype=unsigned
10880                         ;;
10881                 *)
10882                         dflt="31"
10883                         rp="How many bits does your $randfunc() function produce?"
10884                         . ./myread
10885                         randbits="$ans"
10886                         seedfunc="s$randfunc"
10887                         drand01="($randfunc() / (double) ((unsigned long)1 << $randbits))"
10888                         if set $seedfunc val -f; eval $csym; $val; then
10889                                 echo "(Using $seedfunc() to seed random generator)"
10890                         else
10891                                 echo "(Warning: no $seedfunc() to seed random generator)"
10892                                 seedfunc=rand
10893                         fi
10894                         randseedtype=unsigned
10895                         ;;
10896                 esac
10897                 ;;
10898         esac
10899 done
10900
10901 echo " "
10902 echo "Determining whether or not we are on an EBCDIC system..." >&4
10903 $cat >tebcdic.c <<'EOM'
10904 int main()
10905 {
10906   if ('M'==0xd4) return 0;
10907   return 1;
10908 }
10909 EOM
10910
10911 val=$undef
10912 set tebcdic
10913 if eval $compile_ok; then
10914         if ./tebcdic; then
10915                 echo "You have EBCDIC." >&4
10916                 val="$define"
10917         else
10918                 echo "Nope, no EBCDIC.  Assuming ASCII or some ISO Latin." >&4
10919         fi
10920 else
10921         echo "I'm unable to compile the test program." >&4
10922         echo "I'll assume ASCII or some ISO Latin." >&4
10923 fi
10924 $rm -f tebcdic.c tebcdic
10925 set ebcdic
10926 eval $setvar
10927
10928 $cat >&4 <<EOM
10929 Checking how to access stdio streams by file descriptor number...
10930 EOM
10931 case "$stdio_stream_array" in
10932 '')     $cat >try.c <<EOCP
10933 #include <stdio.h>
10934 int main() {
10935   if (&STDIO_STREAM_ARRAY[fileno(stdin)] == stdin)
10936     printf("yes\n");
10937 }
10938 EOCP
10939         for s in _iob __iob __sF
10940         do
10941                 set try -DSTDIO_STREAM_ARRAY=$s
10942                 if eval $compile_ok; then
10943                         case "`./try$exe_ext`" in
10944                         yes)    stdio_stream_array=$s; break ;;
10945                         esac
10946                 fi
10947         done
10948         $rm -f try.* try$exe_ext
10949 esac
10950 case "$stdio_stream_array" in
10951 '')     $cat >&4 <<EOM
10952 I can't figure out how to access stdio streams by file descriptor number.
10953 EOM
10954         ;;
10955 *)      $cat >&4 <<EOM
10956 You can access stdio streams by file descriptor number by using $stdio_stream_array.
10957 EOM
10958         ;;
10959 esac
10960
10961 $cat >&4 <<EOM
10962 Checking how to flush all pending stdio output...
10963 EOM
10964 $cat >try.c <<EOCP
10965 #include <stdio.h>
10966 #$i_unistd I_UNISTD
10967 #ifdef I_UNISTD
10968 #include <unistd.h>
10969 #endif
10970 #$d_sysconf HAS_SYSCONF
10971 int main() {
10972   FILE* p = fopen("try.out", "w");
10973 #ifdef TRY_FPUTC
10974   fputc('x', p);
10975 #else
10976 # ifdef TRY_FPRINTF
10977   fprintf(p, "x");
10978 # endif
10979 #endif
10980 #ifdef TRY_FFLUSH_NULL
10981   fflush(NULL);
10982 #endif
10983 #ifdef TRY_FFLUSH_ALL
10984   {
10985     long open_max = -1;
10986 # if defined(HAS_SYSCONF) && defined(_SC_OPEN_MAX)
10987     open_max = sysconf(_SC_OPEN_MAX);
10988 # else
10989 #  ifdef FOPEN_MAX
10990 #   open_max = FOPEN_MAX;
10991 #  else
10992 #   ifdef OPEN_MAX
10993 #   open_max = OPEN_MAX;
10994 #   else
10995 #    ifdef _NFILE
10996 #   open_max = _NFILE;
10997 #    endif
10998 #   endif
10999 #  endif
11000 # endif
11001     if (open_max > 0) {
11002       long i;
11003       for (i = 0; i < open_max; i++)
11004          fflush(&$stdio_stream_array[i]);
11005     }   
11006   }
11007 #endif
11008   _exit(42);
11009 }
11010 EOCP
11011 : first we have to find out how _not_ to flush
11012 if $test "X$fflushNULL" = X -o "X$fflushall" = X; then
11013     output=''
11014     set try -DTRY_FPUTC
11015     $rm -f try.out
11016     if eval $compile_ok; then
11017             ./try$exe_ext 2>/dev/null
11018             if $test ! -s try.out -a "X$?" = X42; then
11019                 output=-DTRY_FPUTC
11020             fi
11021     fi
11022     case "$output" in
11023     '')
11024             set try -DTRY_FPRINTF
11025             $rm -f try.out
11026             if eval $compile_ok; then
11027                     ./try$exe_ext 2>/dev/null
11028                     if $test ! -s try.out -a "X$?" = X42; then
11029                         output=-DTRY_FPRINTF
11030                     fi
11031             fi
11032         ;;
11033     esac
11034 fi
11035 : check for fflush NULL behaviour
11036 case "$fflushNULL" in
11037 '')     set try -DTRY_FFLUSH_NULL $output
11038         $rm -f try.out
11039         if eval $compile_ok; then
11040                 ./try$exe_ext 2>/dev/null
11041                 if $test -s try.out -a "X$?" = X42; then
11042                         fflushNULL="`$cat try.out`"
11043                 fi
11044         fi
11045         $rm -f core try.core core.try.*
11046         case "$fflushNULL" in
11047         x)      cat >&4 <<EOM
11048 Your fflush(NULL) works okay.
11049 EOM
11050                 fflushNULL=define
11051                 ;;
11052         '')     cat >&4 <<EOM
11053 Your fflush(NULL) isn't working (contrary to ANSI C).
11054 EOM
11055                 fflushNULL=undef
11056                 ;;
11057         *)      cat >&4 <<EOM
11058 Cannot figure out whether your fflush(NULL) works or not.
11059 I'm assuming it doesn't (contrary to ANSI C).
11060 EOM
11061                 fflushNULL=undef
11062                 ;;
11063         esac
11064         ;;
11065 $define|true|[yY]*)
11066         fflushNULL=define
11067         ;;
11068 *)
11069         fflushNULL=undef
11070         ;;
11071 esac
11072 : check for fflush all behaviour
11073 case "$fflushall" in
11074 '')     set try -DTRY_FFLUSH_ALL $output
11075         $rm -f try.out
11076         if eval $compile_ok; then
11077                 ./try$exe_ext 2>/dev/null
11078                 if $test -s try.out -a "X$?" = X42; then
11079                         fflushall="`$cat try.out`"
11080                 fi
11081         fi
11082         $rm -f core try.core core.try.*
11083         case "$fflushall" in
11084         x)      cat >&4 <<EOM
11085 Flushing explicitly all the stdio streams works.
11086 EOM
11087                 fflushall=define
11088                 ;;
11089         '')     cat >&4 <<EOM
11090 Flushing explicitly all the stdio streams doesn't work.
11091 EOM
11092                 fflushall=undef
11093                 ;;
11094         *)      cat >&4 <<EOM
11095 Cannot figure out whether flushing stdio stream explicitly works or not.
11096 I'm assuming it doesn't.
11097 EOM
11098                 fflushall=undef
11099                 ;;
11100         esac
11101         ;;
11102 $define|true|[yY]*)
11103         fflushall=define
11104         ;;
11105 *)
11106         fflushall=undef
11107         ;;
11108 esac
11109 case "$fflushNULL$fflushall" in
11110 undefundef)
11111         cat <<EOM
11112 I cannot figure out how to flush pending stdio output.
11113 EOM
11114         ;;
11115 esac
11116 $rm -f try.* try$exe_ext
11117
11118 : see what type file positions are declared as in the library
11119 rp="What is the type for file position used by fsetpos()?"
11120 set fpos_t fpostype long stdio.h sys/types.h
11121 eval $typedef_ask
11122
11123 : Store the full pathname to the ar program for use in the C program
11124 : Respect a hint or command line value for full_ar.
11125 case "$full_ar" in
11126 '') full_ar=$ar ;;
11127 esac
11128
11129 : Store the full pathname to the sed program for use in the C program
11130 full_sed=$sed
11131
11132 : see what type gids are declared as in the kernel
11133 echo " "
11134 echo "Looking for the type for group ids returned by getgid()."
11135 set gid_t gidtype xxx stdio.h sys/types.h
11136 eval $typedef
11137 case "$gidtype" in
11138 xxx)
11139         xxx=`./findhdr sys/user.h`
11140         set `grep 'groups\[NGROUPS\];' "$xxx" 2>/dev/null` unsigned short
11141         case $1 in
11142         unsigned) dflt="$1 $2" ;;
11143         *) dflt="$1" ;;
11144         esac
11145         ;;
11146 *) dflt="$gidtype";;
11147 esac
11148 case "$gidtype" in
11149 gid_t) echo "gid_t found." ;;
11150 *)      rp="What is the type for group ids returned by getgid()?"
11151         . ./myread
11152         gidtype="$ans"
11153         ;;
11154 esac
11155
11156 : see if getgroups exists
11157 set getgroups d_getgrps
11158 eval $inlibc
11159
11160 : see if setgroups exists
11161 set setgroups d_setgrps
11162 eval $inlibc
11163
11164
11165 : Find type of 2nd arg to 'getgroups()' and 'setgroups()'
11166 echo " "
11167 case "$d_getgrps$d_setgrps" in
11168 *define*)
11169         case "$groupstype" in
11170         '') dflt="$gidtype" ;;
11171         *)  dflt="$groupstype" ;;
11172         esac
11173         $cat <<EOM
11174 What type of pointer is the second argument to getgroups() and setgroups()?
11175 Usually this is the same as group ids, $gidtype, but not always.
11176
11177 EOM
11178         rp='What type pointer is the second argument to getgroups() and setgroups()?'
11179         . ./myread
11180         groupstype="$ans"
11181         ;;
11182 *)  groupstype="$gidtype";;
11183 esac
11184
11185 : see what type lseek is declared as in the kernel
11186 rp="What is the type used for lseek's offset on this system?"
11187 set off_t lseektype long stdio.h sys/types.h
11188 eval $typedef_ask
11189
11190 echo " "
11191 $echo $n "Checking to see how big your file offsets are...$c" >&4
11192 $cat >try.c <<EOCP
11193 #include <sys/types.h>
11194 #include <stdio.h>
11195 int main()
11196 {
11197         printf("%d\n", sizeof($lseektype));
11198 }
11199 EOCP
11200 set try
11201 if eval $compile_ok; then
11202         lseeksize=`./try`
11203         $echo " $lseeksize bytes." >&4
11204 else
11205         dflt='4'
11206         echo " "
11207         echo "(I can't seem to compile the test program.  Guessing...)"
11208         rp="What is the size of your file offsets (in bytes)?"
11209         . ./myread
11210         lseeksize="$ans"
11211 fi
11212 $rm -f try.c try
11213
11214 echo " "
11215 echo "Checking if your $make program sets \$(MAKE)..." >&4
11216 case "$make_set_make" in
11217 '')
11218         $sed 's/^X //' > testmake.mak << 'EOF'
11219 Xall:
11220 X       @echo 'maketemp="$(MAKE)"'
11221 EOF
11222         case "`$make -f testmake.mak 2>/dev/null`" in
11223         *maketemp=*) make_set_make='#' ;;
11224         *)      make_set_make="MAKE=$make" ;;
11225         esac
11226         $rm -f testmake.mak
11227         ;;
11228 esac
11229 case "$make_set_make" in
11230 '#') echo "Yup, it does.";;
11231 *) echo "Nope, it doesn't.";;
11232 esac
11233
11234 : see what type is used for mode_t
11235 rp="What is the type used for file modes for system calls (e.g. fchmod())?"
11236 set mode_t modetype int stdio.h sys/types.h
11237 eval $typedef_ask
11238
11239 : define a fucntion to check prototypes
11240 $cat > protochk <<EOSH
11241 $startsh
11242 cc="$cc"
11243 optimize="$optimize"
11244 ccflags="$ccflags"
11245 prototype="$prototype"
11246 define="$define"
11247 rm=$rm
11248 EOSH
11249
11250 $cat >> protochk <<'EOSH'
11251
11252 $rm -f try.c
11253 foo="$1"
11254 shift
11255 while test $# -ge 2; do
11256         case "$1" in
11257                 $define) echo "#include <$2>" >> try.c ;;
11258                 literal) echo "$2" >> try.c ;;
11259         esac
11260     shift 2
11261 done
11262 test "$prototype" = "$define"  && echo '#define CAN_PROTOTYPE' >> try.c
11263 cat >> try.c <<'EOCP'
11264 #ifdef CAN_PROTOTYPE
11265 #define _(args) args
11266 #else
11267 #define _(args) ()
11268 #endif
11269 EOCP
11270 echo "$foo" >> try.c
11271 echo 'int no_real_function_has_this_name _((void)) { return 0; }' >> try.c
11272 $cc $optimize $ccflags -c try.c > /dev/null 2>&1
11273 status=$?
11274 $rm -f try.[co]
11275 exit $status
11276 EOSH
11277 chmod +x protochk
11278 $eunicefix protochk
11279
11280 : see what type is used for size_t
11281 rp="What is the type used for the length parameter for string functions?"
11282 set size_t sizetype 'unsigned int' stdio.h sys/types.h
11283 eval $typedef_ask
11284
11285 : check for type of arguments to gethostbyaddr. 
11286 if test "X$netdb_host_type" = X -o "X$netdb_hlen_type" = X; then
11287         case "$d_gethbyaddr" in
11288         $define)
11289                 $cat <<EOM
11290
11291 Checking to see what type of arguments are accepted by gethostbyaddr().
11292 EOM
11293                 hdrs="$define sys/types.h
11294                         $d_socket sys/socket.h 
11295                         $i_niin netinet/in.h 
11296                         $i_netdb netdb.h
11297                         $i_unistd unistd.h"
11298                 : The first arg can 'char *' or 'void *'
11299                 : The second arg is some of integral type
11300                 for xxx in in_addr_t 'const void *' 'const char *' 'void *' 'char *'; do
11301                         for yyy in size_t long int; do
11302                                 case "$netdb_host_type" in
11303                                 '')     try="extern struct hostent *gethostbyaddr($xxx, $yyy, int);"
11304                                         if ./protochk "$try" $hdrs; then
11305                                                 echo "Your system accepts $xxx for the first arg."
11306                                                 echo "...and $yyy for the second arg."
11307                                                 netdb_host_type="$xxx"
11308                                                 netdb_hlen_type="$yyy"
11309                                         fi
11310                                         ;;
11311                                 esac
11312                         done
11313                 done
11314                 : In case none of those worked, prompt the user.
11315                 case "$netdb_host_type" in
11316                 '')     rp='What is the type for the 1st argument to gethostbyaddr?'
11317                         dflt='char *'
11318                         . ./myread
11319                         netdb_host_type=$ans
11320                         rp='What is the type for the 2nd argument to gethostbyaddr?'
11321                         dflt="$sizetype"
11322                         . ./myread
11323                         netdb_hlen_type=$ans
11324                         ;;
11325                 esac
11326                 ;;
11327         *)      : no gethostbyaddr, so pick harmless defaults
11328                 netdb_host_type='char *'
11329                 netdb_hlen_type="$sizetype"
11330                 ;;
11331         esac
11332         # Remove the "const" if needed. -- but then we'll have a 
11333         # prototype clash!
11334         # netdb_host_type=`echo "$netdb_host_type" | sed 's/^const //'`
11335 fi
11336
11337 : check for type of argument to gethostbyname. 
11338 if test "X$netdb_name_type" = X ; then
11339         case "$d_gethbyname" in
11340         $define)
11341                 $cat <<EOM
11342
11343 Checking to see what type of argument is accepted by gethostbyname().
11344 EOM
11345                 hdrs="$define sys/types.h
11346                         $d_socket sys/socket.h 
11347                         $i_niin netinet/in.h 
11348                         $i_netdb netdb.h
11349                         $i_unistd unistd.h"
11350                 for xxx in "const char *" "char *"; do
11351                         case "$netdb_name_type" in
11352                         '')     try="extern struct hostent *gethostbyname($xxx);"
11353                                 if ./protochk "$try" $hdrs; then
11354                                         echo "Your system accepts $xxx."
11355                                         netdb_name_type="$xxx"
11356                                 fi
11357                                 ;;
11358                         esac
11359                 done
11360                 : In case none of those worked, prompt the user.
11361                 case "$netdb_name_type" in
11362                 '')     rp='What is the type for the 1st argument to gethostbyname?'
11363                         dflt='char *'
11364                         . ./myread
11365                         netdb_name_type=$ans
11366                         ;;
11367                 esac
11368                 ;;
11369         *)      : no gethostbyname, so pick harmless default
11370                 netdb_name_type='char *'
11371                 ;;
11372         esac
11373 fi
11374
11375 : check for type of 1st argument to getnetbyaddr. 
11376 if test "X$netdb_net_type" = X ; then
11377         case "$d_getnbyaddr" in
11378         $define)
11379                 $cat <<EOM
11380
11381 Checking to see what type of 1st argument is accepted by getnetbyaddr().
11382 EOM
11383                 hdrs="$define sys/types.h
11384                         $d_socket sys/socket.h 
11385                         $i_niin netinet/in.h 
11386                         $i_netdb netdb.h
11387                         $i_unistd unistd.h"
11388                 for xxx in in_addr_t "unsigned long" long "unsigned int" int; do
11389                         case "$netdb_net_type" in
11390                         '')     try="extern struct netent *getnetbyaddr($xxx, int);"
11391                                 if ./protochk "$try" $hdrs; then
11392                                         echo "Your system accepts $xxx."
11393                                         netdb_net_type="$xxx"
11394                                 fi
11395                                 ;;
11396                         esac
11397                 done
11398                 : In case none of those worked, prompt the user.
11399                 case "$netdb_net_type" in
11400                 '')     rp='What is the type for the 1st argument to getnetbyaddr?'
11401                         dflt='long'
11402                         . ./myread
11403                         netdb_net_type=$ans
11404                         ;;
11405                 esac
11406                 ;;
11407         *)      : no getnetbyaddr, so pick harmless default
11408                 netdb_net_type='long'
11409                 ;;
11410         esac
11411 fi
11412 : locate the preferred pager for this system
11413 case "$pager" in
11414 '')
11415         dflt=''
11416         case "$pg" in
11417         /*) dflt=$pg;;
11418         esac
11419         case "$more" in
11420         /*) dflt=$more;;
11421         esac
11422         case "$less" in
11423         /*) dflt=$less;;
11424         esac
11425         case "$dflt" in
11426         '') dflt=/usr/ucb/more;;
11427         esac
11428         ;;
11429 *) dflt="$pager";;
11430 esac
11431 echo " "
11432 fn=f/
11433 rp='What pager is used on your system?'
11434 . ./getfile
11435 pager="$ans"
11436
11437 : see what type pids are declared as in the kernel
11438 rp="What is the type of process ids on this system?"
11439 set pid_t pidtype int stdio.h sys/types.h
11440 eval $typedef_ask
11441
11442 : check for length of pointer
11443 echo " "
11444 case "$ptrsize" in
11445 '')
11446         $echo $n "Checking to see how big your pointers are...$c" >&4
11447         if test "$voidflags" -gt 7; then
11448                 echo '#define VOID_PTR char *' > try.c
11449         else
11450                 echo '#define VOID_PTR void *' > try.c
11451         fi
11452         $cat >>try.c <<'EOCP'
11453 #include <stdio.h>
11454 int main()
11455 {
11456         printf("%d\n", sizeof(VOID_PTR));
11457         exit(0);
11458 }
11459 EOCP
11460         set try
11461         if eval $compile_ok; then
11462                 ptrsize=`./try`
11463                 $echo " $ptrsize bytes." >&4
11464         else
11465                 dflt='4'
11466                 echo "(I can't seem to compile the test program.  Guessing...)" >&4
11467                 rp="What is the size of a pointer (in bytes)?"
11468                 . ./myread
11469                 ptrsize="$ans"
11470         fi
11471         ;;
11472 esac
11473 $rm -f try.c try
11474
11475 : see if ar generates random libraries by itself
11476 echo " "
11477 echo "Checking how to generate random libraries on your machine..." >&4
11478 echo 'int bar1() { return bar2(); }' > bar1.c
11479 echo 'int bar2() { return 2; }' > bar2.c
11480 $cat > foo.c <<'EOP'
11481 int main() { printf("%d\n", bar1()); exit(0); }
11482 EOP
11483 $cc $ccflags -c bar1.c >/dev/null 2>&1
11484 $cc $ccflags -c bar2.c >/dev/null 2>&1
11485 $cc $ccflags -c foo.c >/dev/null 2>&1
11486 $ar rc bar$_a bar2$_o bar1$_o >/dev/null 2>&1
11487 if $cc $ccflags $ldflags -o foobar foo$_o bar$_a $libs > /dev/null 2>&1 &&
11488         ./foobar >/dev/null 2>&1; then
11489         echo "$ar appears to generate random libraries itself."
11490         orderlib=false
11491         ranlib=":"
11492 elif $ar ts bar$_a >/dev/null 2>&1 &&
11493         $cc $ccflags $ldflags -o foobar foo$_o bar$_a $libs > /dev/null 2>&1 &&
11494         ./foobar >/dev/null 2>&1; then
11495                 echo "a table of contents needs to be added with '$ar ts'."
11496                 orderlib=false
11497                 ranlib="$ar ts"
11498 else
11499         case "$ranlib" in
11500         :) ranlib='';;
11501         '')
11502                 ranlib=`./loc ranlib X /usr/bin /bin /usr/local/bin`
11503                 $test -f $ranlib || ranlib=''
11504                 ;;
11505         esac
11506         if $test -n "$ranlib"; then
11507                 echo "your system has '$ranlib'; we'll use that."
11508                 orderlib=false
11509         else
11510                 echo "your system doesn't seem to support random libraries"
11511                 echo "so we'll use lorder and tsort to order the libraries."
11512                 orderlib=true
11513                 ranlib=":"
11514         fi
11515 fi
11516 $rm -f foo* bar* 
11517
11518 : check for type of arguments to select. 
11519 case "$selecttype" in
11520 '') case "$d_select" in
11521         $define)
11522                 $cat <<EOM
11523 Checking to see what type of arguments are accepted by select().
11524 EOM
11525                 hdrs="$define sys/types.h
11526                         $i_systime sys/time.h 
11527                         $i_sysselct sys/select.h
11528                         $d_socket sys/socket.h"
11529                 : The first arg can be int, unsigned, or size_t
11530                 : The last arg may or may not be 'const'
11531                 val=''
11532                 : void pointer has been seen but using that
11533                 : breaks the selectminbits test
11534                 for xxx in 'fd_set *' 'int *'; do
11535                         for nfd in 'int' 'size_t' 'unsigned long' 'unsigned' ; do
11536                                 for tmo in 'struct timeval *' 'const struct timeval *'; do
11537                                         case "$val" in
11538                                         '')     try="extern select _(($nfd, $xxx, $xxx, $xxx, $tmo));"
11539                                                 if ./protochk "$try" $hdrs; then
11540                                                         echo "Your system accepts $xxx."
11541                                                         val="$xxx"
11542                                                 fi
11543                                                 ;;
11544                                         esac
11545                                 done
11546                         done
11547                 done
11548                 case "$val" in
11549                 '')     rp='What is the type for the 2nd, 3rd, and 4th arguments to select?'
11550                         case "$d_fd_set" in
11551                                 $define) dflt="fd_set *" ;;
11552                                 *)              dflt="int *" ;;
11553                         esac
11554                         . ./myread
11555                         val=$ans
11556                         ;;
11557                 esac
11558                 selecttype="$val"
11559                 ;;
11560         *)      : no select, so pick a harmless default
11561                 selecttype='int *'
11562                 ;;
11563         esac
11564         ;;
11565 esac
11566
11567 : check for the select 'width'
11568 case "$selectminbits" in
11569 '') case "$d_select" in
11570         $define)
11571                 $cat <<EOM
11572
11573 Checking to see on how many bits at a time your select() operates...
11574 EOM
11575                 $cat >try.c <<EOCP
11576 #include <sys/types.h>
11577 #$i_time I_TIME
11578 #$i_systime I_SYS_TIME
11579 #$i_systimek I_SYS_TIME_KERNEL
11580 #ifdef I_TIME
11581 #   include <time.h>
11582 #endif
11583 #ifdef I_SYS_TIME
11584 #   ifdef I_SYS_TIME_KERNEL
11585 #       define KERNEL
11586 #   endif
11587 #   include <sys/time.h>
11588 #   ifdef I_SYS_TIME_KERNEL
11589 #       undef KERNEL
11590 #   endif
11591 #endif
11592 #$i_sysselct I_SYS_SELECT
11593 #ifdef I_SYS_SELECT
11594 #include <sys/select.h>
11595 #endif
11596 #include <stdio.h>
11597 $selecttype b;
11598 #define S sizeof(*(b))
11599 #define MINBITS 64
11600 #define NBYTES (S * 8 > MINBITS ? S : MINBITS/8)
11601 #define NBITS  (NBYTES * 8)
11602 int main() {
11603     char s[NBYTES];
11604     struct timeval t;
11605     int i;
11606     FILE* fp;
11607     int fd;
11608
11609     fclose(stdin);
11610     fp = fopen("try.c", "r");
11611     if (fp == 0)
11612       exit(1);
11613     fd = fileno(fp);
11614     if (fd < 0)
11615       exit(2);
11616     b = ($selecttype)s;
11617     for (i = 0; i < NBITS; i++)
11618         FD_SET(i, b);
11619     t.tv_sec  = 0;
11620     t.tv_usec = 0;
11621     select(fd + 1, b, 0, 0, &t);
11622     for (i = NBITS - 1; i > fd && FD_ISSET(i, b); i--);
11623     printf("%d\n", i + 1);
11624     return 0;
11625 }
11626 EOCP
11627                 set try
11628                 if eval $compile_ok; then
11629                         selectminbits=`./try`
11630                         case "$selectminbits" in
11631                         '')     cat >&4 <<EOM
11632 Cannot figure out on how many bits at a time your select() operates.
11633 I'll play safe and guess it is 32 bits.
11634 EOM
11635                                 selectminbits=32
11636                                 bits="32 bits"
11637                                 ;;
11638                         1)      bits="1 bit" ;;
11639                         *)      bits="$selectminbits bits" ;;
11640                         esac
11641                         echo "Your select() operates on $bits at a time." >&4
11642                 else
11643                         rp='What is the minimum number of bits your select() operates on?'
11644                         case "$byteorder" in
11645                         1234|12345678)  dflt=32 ;;
11646                         *)              dflt=1  ;;
11647                         esac
11648                         . ./myread
11649                         val=$ans
11650                         selectminbits="$val"
11651                 fi
11652                 $rm -f try.* try
11653                 ;;
11654         *)      : no select, so pick a harmless default
11655                 selectminbits='32'
11656                 ;;
11657         esac
11658         ;;
11659 esac
11660
11661 : Trace out the files included by signal.h, then look for SIGxxx names.
11662 : Remove SIGARRAYSIZE used by HPUX.
11663 : Remove SIGSTKSIZE used by Linux.
11664 : Remove SIGSTKSZ used by Posix.
11665 : Remove SIGTYP void lines used by OS2.
11666 xxx=`echo '#include <signal.h>' |
11667         $cppstdin $cppminus $cppflags 2>/dev/null |
11668         $grep '^[       ]*#.*include' | 
11669         $awk "{print \\$$fieldn}" | $sed 's!"!!g' | $sort | $uniq`
11670 : Check this list of files to be sure we have parsed the cpp output ok.
11671 : This will also avoid potentially non-existent files, such 
11672 : as ../foo/bar.h
11673 xxxfiles=''
11674 for xx in $xxx /dev/null ; do
11675         $test -f "$xx" && xxxfiles="$xxxfiles $xx"
11676 done
11677 : If we have found no files, at least try signal.h
11678 case "$xxxfiles" in
11679 '')     xxxfiles=`./findhdr signal.h` ;;
11680 esac
11681 xxx=`awk '
11682 $1 ~ /^#define$/ && $2 ~ /^SIG[A-Z0-9]*$/ && $2 !~ /SIGARRAYSIZE/ && $2 !~ /SIGSTKSIZE/ && $2 !~ /SIGSTKSZ/ && $3 !~ /void/ {
11683         print substr($2, 4, 20)
11684 }
11685 $1 == "#" && $2 ~ /^define$/ && $3 ~ /^SIG[A-Z0-9]*$/ && $3 !~ /SIGARRAYSIZE/ && $4 !~ /void/ {
11686         print substr($3, 4, 20)
11687 }' $xxxfiles`
11688 : Append some common names just in case the awk scan failed.
11689 xxx="$xxx ABRT ALRM BUS CHLD CLD CONT DIL EMT FPE HUP ILL INT IO IOT KILL"
11690 xxx="$xxx LOST PHONE PIPE POLL PROF PWR QUIT SEGV STKFLT STOP SYS TERM TRAP"
11691 xxx="$xxx TSTP TTIN TTOU URG USR1 USR2 USR3 USR4 VTALRM"
11692 xxx="$xxx WINCH WIND WINDOW XCPU XFSZ"
11693 : generate a few handy files for later
11694 $cat > signal.c <<'EOCP'
11695 #include <sys/types.h>
11696 #include <signal.h>
11697 #include <stdio.h>
11698 int main() {
11699
11700 /* Strange style to avoid deeply-nested #if/#else/#endif */
11701 #ifndef NSIG
11702 #  ifdef _NSIG
11703 #    define NSIG (_NSIG)
11704 #  endif
11705 #endif
11706
11707 #ifndef NSIG
11708 #  ifdef SIGMAX
11709 #    define NSIG (SIGMAX+1)
11710 #  endif
11711 #endif
11712
11713 #ifndef NSIG
11714 #  ifdef SIG_MAX
11715 #    define NSIG (SIG_MAX+1)
11716 #  endif
11717 #endif
11718
11719 #ifndef NSIG
11720 #  ifdef MAXSIG
11721 #    define NSIG (MAXSIG+1)
11722 #  endif
11723 #endif
11724
11725 #ifndef NSIG
11726 #  ifdef MAX_SIG
11727 #    define NSIG (MAX_SIG+1)
11728 #  endif
11729 #endif
11730
11731 #ifndef NSIG
11732 #  ifdef SIGARRAYSIZE
11733 #    define NSIG (SIGARRAYSIZE+1) /* Not sure of the +1 */
11734 #  endif
11735 #endif
11736
11737 #ifndef NSIG
11738 #  ifdef _sys_nsig
11739 #    define NSIG (_sys_nsig) /* Solaris 2.5 */
11740 #  endif
11741 #endif
11742
11743 /* Default to some arbitrary number that's big enough to get most
11744    of the common signals.
11745 */
11746 #ifndef NSIG
11747 #    define NSIG 50
11748 #endif
11749
11750 printf("NSIG %d\n", NSIG);
11751
11752 #ifndef JUST_NSIG
11753
11754 EOCP
11755
11756 echo $xxx | $tr ' ' $trnl | $sort | $uniq | $awk '
11757 {
11758         printf "#ifdef SIG"; printf $1; printf "\n"
11759         printf "printf(\""; printf $1; printf " %%d\\n\",SIG";
11760         printf $1; printf ");\n"
11761         printf "#endif\n"
11762 }
11763 END {
11764         printf "#endif /* JUST_NSIG */\n";
11765         printf "}\n";
11766 }
11767 ' >>signal.c
11768 $cat >signal.awk <<'EOP'
11769 BEGIN { ndups = 0 }
11770 $1 ~ /^NSIG$/ { nsig = $2 }
11771 ($1 !~ /^NSIG$/) && (NF == 2) {
11772     if ($2 > maxsig) { maxsig = $2 }
11773     if (sig_name[$2]) {
11774         dup_name[ndups] = $1
11775         dup_num[ndups] = $2
11776         ndups++ 
11777     }
11778     else {
11779         sig_name[$2] = $1
11780         sig_num[$2] = $2
11781     }
11782 }
11783 END { 
11784     if (nsig == 0) {
11785         nsig = maxsig + 1
11786     }
11787     printf("NSIG %d\n", nsig);
11788     for (n = 1; n < nsig; n++) {
11789         if (sig_name[n]) {
11790             printf("%s %d\n", sig_name[n], sig_num[n])
11791         }
11792         else {
11793             printf("NUM%d %d\n", n, n) 
11794         }
11795     }
11796     for (n = 0; n < ndups; n++) {
11797         printf("%s %d\n", dup_name[n], dup_num[n])
11798     }
11799 }
11800 EOP
11801 $cat >signal_cmd <<EOS
11802 $startsh
11803 if $test -s signal.lst; then
11804     echo "Using your existing signal.lst file"
11805         exit 0
11806 fi
11807 xxx="$xxx"
11808 EOS
11809 $cat >>signal_cmd <<'EOS'
11810
11811 set signal
11812 if eval $compile_ok; then
11813         ./signal$_exe | $sort -n +1 | $uniq | $awk -f signal.awk >signal.lst
11814 else
11815         echo "(I can't seem be able to compile the whole test program)" >&4
11816         echo "(I'll try it in little pieces.)" >&4
11817         set signal -DJUST_NSIG
11818         if eval $compile_ok; then
11819                 ./signal$_exe > signal.nsg
11820                 $cat signal.nsg
11821         else
11822                 echo "I can't seem to figure out how many signals you have." >&4
11823                 echo "Guessing 50." >&4
11824                 echo 'NSIG 50' > signal.nsg
11825         fi
11826         : Now look at all the signal names, one at a time.
11827         for xx in `echo $xxx | $tr ' ' $trnl | $sort | $uniq`; do
11828                 $cat > signal.c <<EOCP
11829 #include <sys/types.h>
11830 #include <signal.h>
11831 #include <stdio.h>
11832 int main() {
11833 printf("$xx %d\n", SIG${xx});
11834 return 0;
11835 }
11836 EOCP
11837                 set signal
11838                 if eval $compile; then
11839                         echo "SIG${xx} found."
11840                         ./signal$_exe  >> signal.ls1
11841                 else
11842                         echo "SIG${xx} NOT found."
11843                 fi
11844         done
11845         if $test -s signal.ls1; then
11846                 $cat signal.nsg signal.ls1 |
11847                         $sort -n +1 | $uniq | $awk -f signal.awk >signal.lst
11848         fi
11849
11850 fi
11851 if $test -s signal.lst; then
11852         :
11853 else
11854         echo "(AAK! I can't compile the test programs -- Guessing)" >&4
11855         echo 'kill -l' >signal
11856         set X `csh -f <signal`
11857         $rm -f signal
11858         shift
11859         case $# in
11860         0) set HUP INT QUIT ILL TRAP ABRT EMT FPE KILL BUS SEGV SYS PIPE ALRM TERM;;
11861         esac
11862         echo $@ | $tr ' ' $trnl | \
11863             $awk '{ printf "%s %d\n", $1, ++s; }
11864                   END { printf "NSIG %d\n", ++s }' >signal.lst
11865 fi
11866 $rm -f signal.c signal$_exe signal$_o signal.nsg signal.ls1
11867 EOS
11868 chmod a+x signal_cmd
11869 $eunicefix signal_cmd
11870
11871 : generate list of signal names
11872 echo " "
11873 case "$sig_name_init" in
11874 '') doinit=yes ;;
11875 *)  case "$sig_num_init" in
11876     ''|*,*) doinit=yes ;;
11877     esac ;;
11878 esac
11879 case "$doinit" in
11880 yes)
11881         echo "Generating a list of signal names and numbers..." >&4
11882         . ./signal_cmd
11883         sig_count=`$awk '/^NSIG/ { printf "%d", $2 }' signal.lst`
11884         sig_name=`$awk 'BEGIN { printf "ZERO " }
11885                         !/^NSIG/ { printf "%s ", $1 }' signal.lst`
11886         sig_num=`$awk  'BEGIN { printf "0 " }
11887                         !/^NSIG/ { printf "%d ", $2 }' signal.lst`
11888         sig_name_init=`$awk 'BEGIN      { printf "\"ZERO\", " }
11889                              !/^NSIG/   { printf "\"%s\", ", $1 }
11890                              END        { printf "0\n" }' signal.lst`
11891         sig_num_init=`$awk  'BEGIN      { printf "0, " }
11892                              !/^NSIG/   { printf "%d, ", $2}
11893                              END        { printf "0\n"}' signal.lst`
11894         ;;
11895 esac
11896 echo "The following $sig_count signals are available:"
11897 echo " "
11898 echo $sig_name | $awk \
11899 'BEGIN { linelen = 0 }
11900 {
11901         for (i = 1; i <= NF; i++) {
11902                 name = "SIG" $i " "
11903                 linelen = linelen + length(name)
11904                 if (linelen > 70) {
11905                         printf "\n"
11906                         linelen = length(name)
11907                 }
11908                 printf "%s", name
11909         }
11910         printf "\n"
11911 }'
11912 $rm -f signal signal.c signal.awk signal.lst signal_cmd 
11913
11914 : see what type is used for signed size_t
11915 set ssize_t ssizetype int stdio.h sys/types.h
11916 eval $typedef
11917 dflt="$ssizetype"
11918 $cat > ssize.c <<EOM
11919 #include <stdio.h>
11920 #include <sys/types.h>
11921 #define Size_t $sizetype
11922 #define SSize_t $dflt
11923 int main()
11924 {
11925         if (sizeof(Size_t) == sizeof(SSize_t))
11926                 printf("$dflt\n");
11927         else if (sizeof(Size_t) == sizeof(int))
11928                 printf("int\n");
11929         else 
11930                 printf("long\n");
11931         exit(0);
11932 }
11933 EOM
11934 echo " "
11935 set ssize
11936 if eval $compile_ok && ./ssize > /dev/null; then
11937         ssizetype=`./ssize`
11938         echo "I'll be using $ssizetype for functions returning a byte count." >&4
11939 else
11940         $cat >&4 <<EOM
11941 Help! I can't compile and run the ssize_t test program: please enlighten me!
11942 (This is probably a misconfiguration in your system or libraries, and
11943 you really ought to fix it.  Still, I'll try anyway.)
11944
11945 I need a type that is the same size as $sizetype, but is guaranteed to
11946 be signed.  Common values are ssize_t, int and long.
11947
11948 EOM
11949         rp="What signed type is the same size as $sizetype?"
11950         . ./myread
11951         ssizetype="$ans"
11952 fi
11953 $rm -f ssize ssize.*
11954
11955 : see what type of char stdio uses.
11956 echo " "
11957 if $contains 'unsigned.*char.*_ptr;' `./findhdr stdio.h` >/dev/null 2>&1 ; then
11958         echo "Your stdio uses unsigned chars." >&4
11959         stdchar="unsigned char"
11960 else
11961         echo "Your stdio uses signed chars." >&4
11962         stdchar="char"
11963 fi
11964
11965 : see if time exists
11966 echo " "
11967 if test "X$d_time" = X -o X"$timetype" = X; then
11968     if set time val -f d_time; eval $csym; $val; then
11969                 echo 'time() found.' >&4
11970                 val="$define"
11971                 rp="What is the type returned by time() on this system?"
11972                 set time_t timetype long stdio.h sys/types.h
11973                 eval $typedef_ask
11974     else
11975                 echo 'time() not found, hope that will do.' >&4
11976                 val="$undef"
11977                 timetype='int';
11978     fi
11979     set d_time
11980     eval $setvar
11981 fi
11982
11983 : see what type uids are declared as in the kernel
11984 echo " "
11985 echo "Looking for the type for user ids returned by getuid()."
11986 set uid_t uidtype xxx stdio.h sys/types.h
11987 eval $typedef
11988 case "$uidtype" in
11989 xxx)
11990         xxx=`./findhdr sys/user.h`
11991         set `grep '_ruid;' "$xxx" 2>/dev/null` unsigned short
11992         case $1 in
11993         unsigned) dflt="$1 $2" ;;
11994         *) dflt="$1" ;;
11995         esac
11996         ;;
11997 *) dflt="$uidtype";;
11998 esac
11999 case "$uidtype" in
12000 uid_t)  echo "uid_t found." ;;
12001 *)      rp="What is the type for user ids returned by getuid()?"
12002         . ./myread
12003         uidtype="$ans"
12004         ;;
12005 esac
12006
12007 : see if dbm.h is available
12008 : see if dbmclose exists
12009 set dbmclose d_dbmclose
12010 eval $inlibc
12011
12012 case "$d_dbmclose" in
12013 $define)
12014         set dbm.h i_dbm
12015         eval $inhdr
12016         case "$i_dbm" in
12017         $define)
12018                 val="$undef"
12019                 set i_rpcsvcdbm
12020                 eval $setvar
12021                 ;;
12022         *)      set rpcsvc/dbm.h i_rpcsvcdbm
12023                 eval $inhdr
12024                 ;;
12025         esac
12026         ;;
12027 *)      echo "We won't be including <dbm.h>"
12028         val="$undef"
12029         set i_dbm
12030         eval $setvar
12031         val="$undef"
12032         set i_rpcsvcdbm
12033         eval $setvar
12034         ;;
12035 esac
12036
12037 : see if this is a sys/file.h system
12038 val=''
12039 set sys/file.h val
12040 eval $inhdr
12041
12042 : do we need to include sys/file.h ?
12043 case "$val" in
12044 "$define")
12045         echo " "
12046         if $h_sysfile; then
12047                 val="$define"
12048                 echo "We'll be including <sys/file.h>." >&4
12049         else
12050                 val="$undef"
12051                 echo "We won't be including <sys/file.h>." >&4
12052         fi
12053         ;;
12054 *)
12055         h_sysfile=false
12056         ;;
12057 esac
12058 set i_sysfile
12059 eval $setvar
12060
12061 : see if fcntl.h is there
12062 val=''
12063 set fcntl.h val
12064 eval $inhdr
12065
12066 : see if we can include fcntl.h
12067 case "$val" in
12068 "$define")
12069         echo " "
12070         if $h_fcntl; then
12071                 val="$define"
12072                 echo "We'll be including <fcntl.h>." >&4
12073         else
12074                 val="$undef"
12075                 if $h_sysfile; then
12076         echo "We don't need to include <fcntl.h> if we include <sys/file.h>." >&4
12077                 else
12078                         echo "We won't be including <fcntl.h>." >&4
12079                 fi
12080         fi
12081         ;;
12082 *)
12083         h_fcntl=false
12084         val="$undef"
12085         ;;
12086 esac
12087 set i_fcntl
12088 eval $setvar
12089
12090 : see if locale.h is available
12091 set locale.h i_locale
12092 eval $inhdr
12093
12094 : see if mach cthreads are available
12095 if test "X$usethreads" = "X$define"; then
12096         set mach/cthreads.h i_machcthr
12097         eval $inhdr
12098 else
12099         i_machcthr="$undef"
12100 fi
12101
12102
12103
12104 : see if this is a math.h system
12105 set math.h i_math
12106 eval $inhdr
12107
12108 : see if this is a mntent.h system
12109 set mntent.h i_mntent
12110 eval $inhdr
12111
12112 : see if ndbm.h is available
12113 set ndbm.h t_ndbm
12114 eval $inhdr
12115 case "$t_ndbm" in
12116 $define)
12117         : see if dbm_open exists
12118         set dbm_open d_dbm_open
12119         eval $inlibc
12120         case "$d_dbm_open" in
12121         $undef)
12122                 t_ndbm="$undef"
12123                 echo "We won't be including <ndbm.h>"
12124                 ;;
12125         esac
12126         ;;
12127 esac
12128 val="$t_ndbm"
12129 set i_ndbm
12130 eval $setvar
12131
12132 : see if net/errno.h is available
12133 val=''
12134 set net/errno.h val
12135 eval $inhdr
12136
12137 : Unfortunately, it causes problems on some systems.  Arrgh.
12138 case "$val" in
12139 $define)
12140         cat > try.c <<'EOM'
12141 #include <stdio.h>
12142 #include <errno.h>
12143 #include <net/errno.h>
12144 int func()
12145 {
12146         return ENOTSOCK;
12147 }
12148 EOM
12149         if $cc $ccflags -c try.c >/dev/null 2>&1; then
12150                 echo "We'll be including <net/errno.h>." >&4
12151         else
12152                 echo "We won't be including <net/errno.h>." >&4
12153                 val="$undef"
12154         fi
12155         $rm -f try.* try
12156         ;;
12157 esac
12158 set i_neterrno
12159 eval $setvar
12160
12161 : see if netinet/tcp.h is available
12162 set netinet/tcp.h i_netinettcp
12163 eval $inhdr
12164
12165 : see if this is a poll.h system
12166 set poll.h i_poll
12167 eval $inhdr
12168
12169 : get C preprocessor symbols handy
12170 echo " "
12171 $echo $n "Hmm... $c"
12172 echo $al | $tr ' ' $trnl >Cppsym.know
12173 $cat <<EOSS >Cppsym
12174 $startsh
12175 case "\$1" in
12176 -l) list=true
12177         shift
12178         ;;
12179 esac
12180 unknown=''
12181 case "\$list\$#" in
12182 1|2)
12183         for sym do
12184                 if $contains "^\$1$" Cppsym.true >/dev/null 2>&1; then
12185                         exit 0
12186                 elif $contains "^\$1$" Cppsym.know >/dev/null 2>&1; then
12187                         :
12188                 else
12189                         unknown="\$unknown \$sym"
12190                 fi
12191         done
12192         set X \$unknown
12193         shift
12194         ;;
12195 esac
12196 case \$# in
12197 0) exit 1;;
12198 esac
12199 echo \$* | $tr ' ' '$trnl' | $sed -e 's/\(.*\)/\\
12200 #ifdef \1\\
12201 exit 0; _ _ _ _\1\\      \1\\
12202 #endif\\
12203 /' >Cppsym\$\$
12204 echo "exit 1; _ _ _" >>Cppsym\$\$
12205 $cppstdin $cppminus <Cppsym\$\$ | $grep '^exit [01]; _ _'  >Cppsym2\$\$
12206 case "\$list" in
12207 true) $awk 'NF > 5 {print substr(\$6,2,100)}' <Cppsym2\$\$ ;;
12208 *)
12209         sh Cppsym2\$\$
12210         status=\$?
12211         ;;
12212 esac
12213 $rm -f Cppsym\$\$ Cppsym2\$\$
12214 exit \$status
12215 EOSS
12216 chmod +x Cppsym
12217 $eunicefix Cppsym
12218 ./Cppsym -l $al | $sort | $grep -v '^$' >Cppsym.true
12219
12220 : now check the C compiler for additional symbols
12221 postprocess_cc_v=''
12222 case "$osname" in
12223 aix) postprocess_cc_v="|$tr , ' '" ;;
12224 esac
12225 $cat >ccsym <<EOS
12226 $startsh
12227 $cat >tmp.c <<EOF
12228 extern int foo;
12229 EOF
12230 for i in \`$cc -v -c tmp.c 2>&1 $postprocess_cc_v\`
12231 do
12232         case "\$i" in
12233         -D*) echo "\$i" | $sed 's/^-D//';;
12234         -A*) $test "$gccversion" && echo "\$i" | $sed 's/^-A\(.*\)(\(.*\))/\1=\2/';;
12235         esac
12236 done
12237 $rm -f try.c
12238 EOS
12239 postprocess_cc_v=''
12240 chmod +x ccsym
12241 $eunicefix ccsym
12242 ./ccsym > ccsym1.raw
12243 if $test -s ccsym1.raw; then
12244        $sort ccsym1.raw | $uniq >ccsym.raw
12245 else
12246        mv ccsym1.raw ccsym.raw
12247 fi
12248
12249 $awk '/\=/ { print $0; next }
12250         { print $0"=1" }' ccsym.raw >ccsym.list
12251 $awk '{ print $0"=1" }' Cppsym.true >ccsym.true
12252 $comm -13 ccsym.true ccsym.list >ccsym.own
12253 $comm -12 ccsym.true ccsym.list >ccsym.com
12254 $comm -23 ccsym.true ccsym.list >ccsym.cpp
12255 also=''
12256 if $test -z ccsym.raw; then
12257         echo "Your C compiler doesn't seem to define any symbols!" >&4
12258         echo " "
12259         echo "However, your C preprocessor defines the following symbols:"
12260         $cat Cppsym.true
12261         ccsymbols=''
12262         cppsymbols=`$cat Cppsym.true`
12263         cppsymbols=`echo $cppsymbols`
12264         cppccsymbols="$cppsymbols"
12265 else
12266         if $test -s ccsym.com; then
12267                 echo "Your C compiler and pre-processor define these symbols:"
12268                 $sed -e 's/\(.*\)=.*/\1/' ccsym.com
12269                 also='also '
12270                 symbols='ones'
12271                 cppccsymbols=`$cat ccsym.com`
12272                 cppccsymbols=`echo $cppccsymbols`
12273                 $test "$silent" || sleep 1
12274         fi
12275         if $test -s ccsym.cpp; then
12276                 $test "$also" && echo " "
12277                 echo "Your C pre-processor ${also}defines the following symbols:"
12278                 $sed -e 's/\(.*\)=.*/\1/' ccsym.cpp
12279                 also='further '
12280                 cppsymbols=`$cat ccsym.cpp`
12281                 cppsymbols=`echo $cppsymbols`
12282                 $test "$silent" || sleep 1
12283         fi
12284         if $test -s ccsym.own; then
12285                 $test "$also" && echo " "
12286                 echo "Your C compiler ${also}defines the following cpp symbols:"
12287                 $sed -e 's/\(.*\)=1/\1/' ccsym.own
12288                 $sed -e 's/\(.*\)=.*/\1/' ccsym.own | $uniq >>Cppsym.true
12289                 ccsymbols=`$cat ccsym.own`
12290                 ccsymbols=`echo $ccsymbols`
12291                 $test "$silent" || sleep 1
12292         fi
12293 fi
12294 $rm -f ccsym*
12295
12296 : see if this is a termio system
12297 val="$undef"
12298 val2="$undef"
12299 val3="$undef"
12300 if $test `./findhdr termios.h`; then
12301         set tcsetattr i_termios
12302         eval $inlibc
12303         val3="$i_termios"
12304 fi
12305 echo " "
12306 case "$val3" in
12307 "$define") echo "You have POSIX termios.h... good!" >&4;;
12308 *) if ./Cppsym pyr; then
12309                 case "`/bin/universe`" in
12310                 ucb) if $test `./findhdr sgtty.h`; then
12311                                 val2="$define"
12312                                 echo "<sgtty.h> found." >&4
12313                         else
12314                                 echo "System is pyramid with BSD universe."
12315                                 echo "<sgtty.h> not found--you could have problems." >&4
12316                         fi;;
12317                 *) if $test `./findhdr termio.h`; then
12318                                 val="$define"
12319                                 echo "<termio.h> found." >&4
12320                         else
12321                                 echo "System is pyramid with USG universe."
12322                                 echo "<termio.h> not found--you could have problems." >&4
12323                         fi;;
12324                 esac
12325         elif ./usg; then
12326                 if $test `./findhdr termio.h`; then
12327                         echo "<termio.h> found." >&4
12328                         val="$define"
12329                 elif $test `./findhdr sgtty.h`; then
12330                         echo "<sgtty.h> found." >&4
12331                         val2="$define"
12332                 else
12333 echo "Neither <termio.h> nor <sgtty.h> found--you could have problems." >&4
12334                 fi
12335         else
12336                 if $test `./findhdr sgtty.h`; then
12337                         echo "<sgtty.h> found." >&4
12338                         val2="$define"
12339                 elif $test `./findhdr termio.h`; then
12340                         echo "<termio.h> found." >&4
12341                         val="$define"
12342                 else
12343 echo "Neither <sgtty.h> nor <termio.h> found--you could have problems." >&4
12344                 fi
12345         fi;;
12346 esac
12347 set i_termio; eval $setvar
12348 val=$val2; set i_sgtty; eval $setvar
12349 val=$val3; set i_termios; eval $setvar
12350
12351 : see if stdarg is available
12352 echo " "
12353 if $test `./findhdr stdarg.h`; then
12354         echo "<stdarg.h> found." >&4
12355         valstd="$define"
12356 else
12357         echo "<stdarg.h> NOT found." >&4
12358         valstd="$undef"
12359 fi
12360
12361 : see if varags is available
12362 echo " "
12363 if $test `./findhdr varargs.h`; then
12364         echo "<varargs.h> found." >&4
12365 else
12366         echo "<varargs.h> NOT found, but that's ok (I hope)." >&4
12367 fi
12368
12369 : set up the varargs testing programs
12370 $cat > varargs.c <<EOP
12371 #ifdef I_STDARG
12372 #include <stdarg.h>
12373 #endif
12374 #ifdef I_VARARGS
12375 #include <varargs.h>
12376 #endif
12377
12378 #ifdef I_STDARG
12379 int f(char *p, ...)
12380 #else
12381 int f(va_alist)
12382 va_dcl
12383 #endif
12384 {
12385         va_list ap;
12386 #ifndef I_STDARG
12387         char *p;
12388 #endif
12389 #ifdef I_STDARG
12390         va_start(ap,p);
12391 #else
12392         va_start(ap);
12393         p = va_arg(ap, char *);
12394 #endif
12395         va_end(ap);
12396 }
12397 EOP
12398 $cat > varargs <<EOP
12399 $startsh
12400 if $cc -c $ccflags -D\$1 varargs.c >/dev/null 2>&1; then
12401         echo "true"
12402 else
12403         echo "false"
12404 fi
12405 $rm -f varargs$_o
12406 EOP
12407 chmod +x varargs
12408
12409 : now check which varargs header should be included
12410 echo " "
12411 i_varhdr=''
12412 case "$valstd" in
12413 "$define")
12414         if `./varargs I_STDARG`; then
12415                 val='stdarg.h'
12416         elif `./varargs I_VARARGS`; then
12417                 val='varargs.h'
12418         fi
12419         ;;
12420 *)
12421         if `./varargs I_VARARGS`; then
12422                 val='varargs.h'
12423         fi
12424         ;;
12425 esac
12426 case "$val" in
12427 '')
12428 echo "I could not find the definition for va_dcl... You have problems..." >&4
12429         val="$undef"; set i_stdarg; eval $setvar
12430         val="$undef"; set i_varargs; eval $setvar
12431         ;;
12432 *) 
12433         set i_varhdr
12434         eval $setvar
12435         case "$i_varhdr" in
12436         stdarg.h)
12437                 val="$define"; set i_stdarg; eval $setvar
12438                 val="$undef"; set i_varargs; eval $setvar
12439                 ;;
12440         varargs.h)
12441                 val="$undef"; set i_stdarg; eval $setvar
12442                 val="$define"; set i_varargs; eval $setvar
12443                 ;;
12444         esac
12445         echo "We'll include <$i_varhdr> to get va_dcl definition." >&4;;
12446 esac
12447 $rm -f varargs*
12448
12449 : see if stddef is available
12450 set stddef.h i_stddef
12451 eval $inhdr
12452
12453 : see if sys/access.h is available
12454 set sys/access.h i_sysaccess
12455 eval $inhdr
12456
12457 : see if ioctl defs are in sgtty, termio, sys/filio or sys/ioctl
12458 set sys/filio.h i_sysfilio
12459 eval $inhdr
12460 echo " "
12461 if $test `./findhdr sys/ioctl.h`; then
12462         val="$define"
12463         echo '<sys/ioctl.h> found.' >&4
12464 else
12465         val="$undef"
12466         if $test $i_sysfilio = "$define"; then
12467             echo '<sys/ioctl.h> NOT found.' >&4
12468         else
12469                 $test $i_sgtty = "$define" && xxx="sgtty.h"
12470                 $test $i_termio = "$define" && xxx="termio.h"
12471                 $test $i_termios = "$define" && xxx="termios.h"
12472 echo "No <sys/ioctl.h> found, assuming ioctl args are defined in <$xxx>." >&4
12473         fi
12474 fi
12475 set i_sysioctl
12476 eval $setvar
12477
12478 : see if sys/resource.h has to be included
12479 set sys/resource.h i_sysresrc
12480 eval $inhdr
12481
12482 : see if sys/security.h is available
12483 set sys/security.h i_syssecrt
12484 eval $inhdr
12485
12486 : see if this is a sys/statvfs.h system
12487 set sys/statvfs.h i_sysstatvfs
12488 eval $inhdr
12489
12490 : see if this is a sys/un.h system
12491 set sys/un.h i_sysun
12492 eval $inhdr
12493
12494 : see if this is a syswait system
12495 set sys/wait.h i_syswait
12496 eval $inhdr
12497
12498 : see if this is an utime system
12499 set utime.h i_utime
12500 eval $inhdr
12501
12502 : see if this is a values.h system
12503 set values.h i_values
12504 eval $inhdr
12505
12506 : see if this is a vfork system
12507 case "$d_vfork" in
12508 "$define")
12509         set vfork.h i_vfork
12510         eval $inhdr
12511         ;;
12512 *)
12513         i_vfork="$undef"
12514         ;;
12515 esac
12516
12517 : see if gdbm.h is available
12518 set gdbm.h t_gdbm
12519 eval $inhdr
12520 case "$t_gdbm" in
12521 $define)
12522         : see if gdbm_open exists
12523         set gdbm_open d_gdbm_open
12524         eval $inlibc
12525         case "$d_gdbm_open" in
12526         $undef)
12527                 t_gdbm="$undef"
12528                 echo "We won't be including <gdbm.h>"
12529                 ;;
12530         esac
12531         ;;
12532 esac
12533 val="$t_gdbm"
12534 set i_gdbm
12535 eval $setvar
12536
12537 echo " "
12538 echo "Looking for extensions..." >&4
12539 tdir=`pwd`
12540 cd $rsrc/ext
12541 : If we are using the old config.sh, known_extensions may contain
12542 : old or inaccurate or duplicate values.
12543 known_extensions=''
12544 nonxs_extensions=''
12545 : We do not use find because it might not be available.
12546 : We do not just use MANIFEST because the user may have dropped
12547 : some additional extensions into the source tree and expect them
12548 : to be built.
12549 for xxx in * ; do
12550         case "$xxx" in
12551         DynaLoader|dynaload) ;;
12552         *)      if $test -f $xxx/$xxx.xs; then
12553                         known_extensions="$known_extensions $xxx"
12554                 elif $test -f $xxx/Makefile.PL; then
12555                         nonxs_extensions="$nonxs_extensions $xxx"
12556                 else
12557                         if $test -d $xxx; then
12558                                 # Look for nested extensions, eg. Devel/Dprof.
12559                                 cd $xxx
12560                                 for yyy in * ; do
12561                                 if $test -f $yyy/$yyy.xs; then
12562                                         known_extensions="$known_extensions $xxx/$yyy"
12563                                 elif $test -f $yyy/Makefile.PL; then
12564                                         nonxs_extensions="$nonxs_extensions $xxx/$yyy"
12565                                 fi
12566                                 done
12567                                 cd ..
12568                         fi
12569                 fi 
12570                 ;;
12571         esac
12572 done
12573 set X $nonxs_extensions
12574 shift
12575 nonxs_extensions="$*"
12576 set X $known_extensions
12577 shift
12578 known_extensions="$*"
12579 cd $tdir
12580
12581 : Now see which are supported on this system.
12582 avail_ext=''
12583 for xxx in $known_extensions ; do
12584         case "$xxx" in
12585         DB_File|db_file)
12586                 case "$i_db" in
12587                 $define) avail_ext="$avail_ext $xxx" ;;
12588                 esac
12589                 ;;
12590         GDBM_File|gdbm_fil)
12591                 case "$i_gdbm" in 
12592                 $define) avail_ext="$avail_ext $xxx" ;;
12593                 esac
12594                 ;;
12595         NDBM_File|ndbm_fil)
12596                 case "$i_ndbm" in
12597                 $define) avail_ext="$avail_ext $xxx" ;;
12598                 esac
12599                 ;;
12600         ODBM_File|odbm_fil) 
12601                 case "${i_dbm}${i_rpcsvcdbm}" in
12602                 *"${define}"*) avail_ext="$avail_ext $xxx" ;;
12603                 esac
12604                 ;;
12605         POSIX|posix)
12606                 case "$useposix" in
12607                 true|define|y) avail_ext="$avail_ext $xxx" ;;
12608                 esac
12609                 ;;
12610         Opcode|opcode)
12611                 case "$useopcode" in
12612                 true|define|y) avail_ext="$avail_ext $xxx" ;;
12613                 esac
12614                 ;;
12615         Socket|socket)
12616                 case "$d_socket" in 
12617                 true|$define|y) avail_ext="$avail_ext $xxx" ;;
12618                 esac
12619                 ;;
12620         Thread|thread)
12621                 case "$usethreads" in 
12622                 true|$define|y) avail_ext="$avail_ext $xxx" ;;
12623                 esac
12624                 ;;
12625         IPC/SysV|ipc/sysv)
12626                 : XXX Do we need a useipcsysv variable here
12627                 case "${d_msg}${d_sem}${d_shm}" in 
12628                 *"${define}"*) avail_ext="$avail_ext $xxx" ;;
12629                 esac
12630                 ;;
12631         *)      avail_ext="$avail_ext $xxx"
12632                 ;;
12633         esac
12634 done
12635
12636 set X $avail_ext
12637 shift
12638 avail_ext="$*"
12639
12640 : Now see which nonxs extensions are supported on this system.
12641 : For now assume all are.
12642 nonxs_ext=''
12643 for xxx in $nonxs_extensions ; do
12644         case "$xxx" in
12645         *)      nonxs_ext="$nonxs_ext $xxx"
12646                 ;;
12647         esac
12648 done
12649
12650 set X $nonxs_ext
12651 shift
12652 nonxs_ext="$*"
12653
12654 case $usedl in
12655 $define)
12656         $cat <<EOM
12657 A number of extensions are supplied with $package.  You may choose to
12658 compile these extensions for dynamic loading (the default), compile
12659 them into the $package executable (static loading), or not include
12660 them at all.  Answer "none" to include no extensions.
12661 Note that DynaLoader is always built and need not be mentioned here.
12662
12663 EOM
12664         case "$dynamic_ext" in
12665         '') dflt="$avail_ext" ;;
12666         *)      dflt="$dynamic_ext"
12667                 # Perhaps we are reusing an old out-of-date config.sh.
12668                 case "$hint" in
12669                 previous)
12670                         if test X"$dynamic_ext" != X"$avail_ext"; then
12671                                 $cat <<EOM
12672 NOTICE:  Your previous config.sh list may be incorrect. 
12673 The extensions now available to you are 
12674         ${avail_ext}
12675 but the default list from your previous config.sh is
12676         ${dynamic_ext} 
12677
12678 EOM
12679                         fi
12680                         ;;
12681                 esac
12682                 ;;
12683         esac
12684         case "$dflt" in
12685         '')     dflt=none;;
12686         esac
12687         rp="What extensions do you wish to load dynamically?"
12688         . ./myread
12689         case "$ans" in
12690         none) dynamic_ext=' ' ;;
12691         *) dynamic_ext="$ans" ;;
12692         esac
12693
12694         case "$static_ext" in
12695         '')
12696                 : Exclude those already listed in dynamic linking
12697                 dflt=''
12698                 for xxx in $avail_ext; do
12699                         case " $dynamic_ext " in
12700                         *" $xxx "*) ;;
12701                         *) dflt="$dflt $xxx" ;;
12702                         esac
12703                 done
12704                 set X $dflt
12705                 shift
12706                 dflt="$*"
12707                 ;;
12708         *)  dflt="$static_ext" 
12709                 ;;
12710         esac
12711
12712         case "$dflt" in
12713         '')     dflt=none;;
12714         esac
12715         rp="What extensions do you wish to load statically?"
12716         . ./myread
12717         case "$ans" in
12718         none) static_ext=' ' ;;
12719         *) static_ext="$ans" ;;
12720         esac
12721         ;;
12722 *)
12723         $cat <<EOM
12724 A number of extensions are supplied with $package.  Answer "none" 
12725 to include no extensions. 
12726 Note that DynaLoader is always built and need not be mentioned here.
12727
12728 EOM
12729         case "$static_ext" in
12730         '') dflt="$avail_ext" ;;
12731         *)      dflt="$static_ext"
12732                 # Perhaps we are reusing an old out-of-date config.sh.
12733                 case "$hint" in
12734                 previous)
12735                         if test X"$static_ext" != X"$avail_ext"; then
12736                                 $cat <<EOM
12737 NOTICE:  Your previous config.sh list may be incorrect. 
12738 The extensions now available to you are 
12739         ${avail_ext}
12740 but the default list from your previous config.sh is
12741         ${static_ext} 
12742
12743 EOM
12744                         fi
12745                         ;;
12746                 esac
12747                 ;;
12748         esac
12749         : Exclude those that are not xs extensions
12750         case "$dflt" in
12751         '')     dflt=none;;
12752         esac
12753         rp="What extensions do you wish to include?"
12754         . ./myread
12755         case "$ans" in
12756         none) static_ext=' ' ;;
12757         *) static_ext="$ans" ;;
12758         esac
12759         ;;
12760 esac
12761
12762 set X $dynamic_ext $static_ext $nonxs_ext
12763 shift
12764 extensions="$*"
12765
12766 : Remove build directory name from cppstdin so it can be used from
12767 : either the present location or the final installed location.
12768 echo " "
12769 : Get out of the UU directory to get correct path name.
12770 cd ..
12771 case "$cppstdin" in
12772 `pwd`/cppstdin)
12773         echo "Stripping down cppstdin path name"
12774         cppstdin=cppstdin
12775         ;;
12776 esac
12777 cd UU
12778
12779 : end of configuration questions
12780 echo " "
12781 echo "End of configuration questions."
12782 echo " "
12783
12784 : back to where it started
12785 if test -d ../UU; then
12786         cd ..
12787 fi
12788
12789 : configuration may be patched via a 'config.over' file
12790 if $test -f config.over; then
12791         echo " "
12792         dflt=y
12793         rp='I see a config.over file.  Do you wish to load it?'
12794         . UU/myread
12795         case "$ans" in
12796         n*) echo "OK, I'll ignore it.";;
12797         *)      . ./config.over
12798                 echo "Configuration override changes have been loaded."
12799                 ;;
12800         esac
12801 fi
12802
12803 : in case they want portability, strip down executable paths
12804 case "$d_portable" in
12805 "$define")
12806         echo " "
12807         echo "Stripping down executable paths..." >&4
12808         for file in $loclist $trylist; do
12809                 if test X$file != Xln -a X$file != Xar -o X$osname != Xos2; then
12810                         eval $file="\$file"
12811                 fi
12812         done
12813         ;;
12814 esac
12815
12816 : create config.sh file
12817 echo " "
12818 echo "Creating config.sh..." >&4
12819 $spitshell <<EOT >config.sh
12820 $startsh
12821 #
12822 # This file was produced by running the Configure script. It holds all the
12823 # definitions figured out by Configure. Should you modify one of these values,
12824 # do not forget to propagate your changes by running "Configure -der". You may
12825 # instead choose to run each of the .SH files by yourself, or "Configure -S".
12826 #
12827
12828 # Package name      : $package
12829 # Source directory  : $src
12830 # Configuration time: $cf_time
12831 # Configured by     : $cf_by
12832 # Target system     : $myuname
12833
12834 Author='$Author'
12835 Date='$Date'
12836 Header='$Header'
12837 Id='$Id'
12838 Locker='$Locker'
12839 Log='$Log'
12840 Mcc='$Mcc'
12841 RCSfile='$RCSfile'
12842 Revision='$Revision'
12843 Source='$Source'
12844 State='$State'
12845 _a='$_a'
12846 _exe='$_exe'
12847 _o='$_o'
12848 afs='$afs'
12849 alignbytes='$alignbytes'
12850 ansi2knr='$ansi2knr'
12851 aphostname='$aphostname'
12852 apiversion='$apiversion'
12853 ar='$ar'
12854 archlib='$archlib'
12855 archlibexp='$archlibexp'
12856 archname64='$archname64'
12857 archname='$archname'
12858 archobjs='$archobjs'
12859 awk='$awk'
12860 baserev='$baserev'
12861 bash='$bash'
12862 bin='$bin'
12863 binexp='$binexp'
12864 bison='$bison'
12865 byacc='$byacc'
12866 byteorder='$byteorder'
12867 c='$c'
12868 castflags='$castflags'
12869 cat='$cat'
12870 cc='$cc'
12871 cccdlflags='$cccdlflags'
12872 ccdlflags='$ccdlflags'
12873 ccflags='$ccflags'
12874 ccsymbols='$ccsymbols'
12875 cf_by='$cf_by'
12876 cf_email='$cf_email'
12877 cf_time='$cf_time'
12878 chgrp='$chgrp'
12879 chmod='$chmod'
12880 chown='$chown'
12881 clocktype='$clocktype'
12882 comm='$comm'
12883 compress='$compress'
12884 contains='$contains'
12885 cp='$cp'
12886 cpio='$cpio'
12887 cpp='$cpp'
12888 cpp_stuff='$cpp_stuff'
12889 cppccsymbols='$cppccsymbols'
12890 cppflags='$cppflags'
12891 cpplast='$cpplast'
12892 cppminus='$cppminus'
12893 cpprun='$cpprun'
12894 cppstdin='$cppstdin'
12895 cppsymbols='$cppsymbols'
12896 crosscompile='$crosscompile'
12897 cryptlib='$cryptlib'
12898 csh='$csh'
12899 d_Gconvert='$d_Gconvert'
12900 d_access='$d_access'
12901 d_accessx='$d_accessx'
12902 d_alarm='$d_alarm'
12903 d_archlib='$d_archlib'
12904 d_attribut='$d_attribut'
12905 d_bcmp='$d_bcmp'
12906 d_bcopy='$d_bcopy'
12907 d_bsd='$d_bsd'
12908 d_bsdgetpgrp='$d_bsdgetpgrp'
12909 d_bsdsetpgrp='$d_bsdsetpgrp'
12910 d_bzero='$d_bzero'
12911 d_casti32='$d_casti32'
12912 d_castneg='$d_castneg'
12913 d_charvspr='$d_charvspr'
12914 d_chown='$d_chown'
12915 d_chroot='$d_chroot'
12916 d_chsize='$d_chsize'
12917 d_closedir='$d_closedir'
12918 d_cmsghdr_s='$d_cmsghdr_s'
12919 d_const='$d_const'
12920 d_crypt='$d_crypt'
12921 d_csh='$d_csh'
12922 d_cuserid='$d_cuserid'
12923 d_dbl_dig='$d_dbl_dig'
12924 d_dbmclose64='$d_dbmclose64'
12925 d_dbminit64='$d_dbminit64'
12926 d_delete64='$d_delete64'
12927 d_difftime='$d_difftime'
12928 d_dirent64_s='$d_dirent64_s'
12929 d_dirnamlen='$d_dirnamlen'
12930 d_dlerror='$d_dlerror'
12931 d_dlopen='$d_dlopen'
12932 d_dlsymun='$d_dlsymun'
12933 d_dosuid='$d_dosuid'
12934 d_drand48proto='$d_drand48proto'
12935 d_dup2='$d_dup2'
12936 d_eaccess='$d_eaccess'
12937 d_endgrent='$d_endgrent'
12938 d_endhent='$d_endhent'
12939 d_endnent='$d_endnent'
12940 d_endpent='$d_endpent'
12941 d_endpwent='$d_endpwent'
12942 d_endsent='$d_endsent'
12943 d_eofnblk='$d_eofnblk'
12944 d_eunice='$d_eunice'
12945 d_fchmod='$d_fchmod'
12946 d_fchown='$d_fchown'
12947 d_fcntl='$d_fcntl'
12948 d_fd_macros='$d_fd_macros'
12949 d_fd_set='$d_fd_set'
12950 d_fds_bits='$d_fds_bits'
12951 d_fetch64='$d_fetch64'
12952 d_fgetpos64='$d_fgetpos64'
12953 d_fgetpos='$d_fgetpos'
12954 d_firstkey64='$d_firstkey64'
12955 d_flexfnam='$d_flexfnam'
12956 d_flock64_s='$d_flock64_s'
12957 d_flock='$d_flock'
12958 d_fopen64='$d_fopen64'
12959 d_fork='$d_fork'
12960 d_fpathconf='$d_fpathconf'
12961 d_freopen64='$d_freopen64'
12962 d_fseek64='$d_fseek64'
12963 d_fseeko64='$d_fseeko64'
12964 d_fseeko='$d_fseeko'
12965 d_fsetpos64='$d_fsetpos64'
12966 d_fsetpos='$d_fsetpos'
12967 d_fstat64='$d_fstat64'
12968 d_fstatfs='$d_fstatfs'
12969 d_fstatvfs='$d_fstatvfs'
12970 d_ftell64='$d_ftell64'
12971 d_ftello64='$d_ftello64'
12972 d_ftello='$d_ftello'
12973 d_ftime='$d_ftime'
12974 d_ftruncate64='$d_ftruncate64'
12975 d_getgrent='$d_getgrent'
12976 d_getgrps='$d_getgrps'
12977 d_gethbyaddr='$d_gethbyaddr'
12978 d_gethbyname='$d_gethbyname'
12979 d_gethent='$d_gethent'
12980 d_gethname='$d_gethname'
12981 d_gethostprotos='$d_gethostprotos'
12982 d_getlogin='$d_getlogin'
12983 d_getmntent='$d_getmntent'
12984 d_getnbyaddr='$d_getnbyaddr'
12985 d_getnbyname='$d_getnbyname'
12986 d_getnent='$d_getnent'
12987 d_getnetprotos='$d_getnetprotos'
12988 d_getpbyname='$d_getpbyname'
12989 d_getpbynumber='$d_getpbynumber'
12990 d_getpent='$d_getpent'
12991 d_getpgid='$d_getpgid'
12992 d_getpgrp2='$d_getpgrp2'
12993 d_getpgrp='$d_getpgrp'
12994 d_getppid='$d_getppid'
12995 d_getprior='$d_getprior'
12996 d_getprotoprotos='$d_getprotoprotos'
12997 d_getpwent='$d_getpwent'
12998 d_getsbyname='$d_getsbyname'
12999 d_getsbyport='$d_getsbyport'
13000 d_getsent='$d_getsent'
13001 d_getservprotos='$d_getservprotos'
13002 d_gettimeod='$d_gettimeod'
13003 d_gnulibc='$d_gnulibc'
13004 d_grpasswd='$d_grpasswd'
13005 d_hasmntopt='$d_hasmntopt'
13006 d_htonl='$d_htonl'
13007 d_index='$d_index'
13008 d_inetaton='$d_inetaton'
13009 d_ino64_t='$d_ino64_t'
13010 d_int64t='$d_int64t'
13011 d_iovec_s='$d_iovec_s'
13012 d_isascii='$d_isascii'
13013 d_killpg='$d_killpg'
13014 d_lchown='$d_lchown'
13015 d_link='$d_link'
13016 d_llseek='$d_llseek'
13017 d_locconv='$d_locconv'
13018 d_lockf64='$d_lockf64'
13019 d_lockf='$d_lockf'
13020 d_longdbl='$d_longdbl'
13021 d_longlong='$d_longlong'
13022 d_lseek64='$d_lseek64'
13023 d_lstat64='$d_lstat64'
13024 d_lstat='$d_lstat'
13025 d_madvise='$d_madvise'
13026 d_mblen='$d_mblen'
13027 d_mbstowcs='$d_mbstowcs'
13028 d_mbtowc='$d_mbtowc'
13029 d_memchr='$d_memchr'
13030 d_memcmp='$d_memcmp'
13031 d_memcpy='$d_memcpy'
13032 d_memmove='$d_memmove'
13033 d_memset='$d_memset'
13034 d_mkdir='$d_mkdir'
13035 d_mkfifo='$d_mkfifo'
13036 d_mktime='$d_mktime'
13037 d_mmap='$d_mmap'
13038 d_mprotect='$d_mprotect'
13039 d_msg='$d_msg'
13040 d_msg_ctrunc='$d_msg_ctrunc'
13041 d_msg_dontroute='$d_msg_dontroute'
13042 d_msg_oob='$d_msg_oob'
13043 d_msg_peek='$d_msg_peek'
13044 d_msg_proxy='$d_msg_proxy'
13045 d_msgctl='$d_msgctl'
13046 d_msgget='$d_msgget'
13047 d_msghdr_s='$d_msghdr_s'
13048 d_msgrcv='$d_msgrcv'
13049 d_msgsnd='$d_msgsnd'
13050 d_msync='$d_msync'
13051 d_munmap='$d_munmap'
13052 d_mymalloc='$d_mymalloc'
13053 d_nextkey64='$d_nextkey64'
13054 d_nice='$d_nice'
13055 d_off64_t='$d_off64_t'
13056 d_offset_t='$d_offset_t'
13057 d_old_pthread_create_joinable='$d_old_pthread_create_joinable'
13058 d_oldpthreads='$d_oldpthreads'
13059 d_oldsock='$d_oldsock'
13060 d_open3='$d_open3'
13061 d_open64='$d_open64'
13062 d_opendir64='$d_opendir64'
13063 d_pathconf='$d_pathconf'
13064 d_pause='$d_pause'
13065 d_phostname='$d_phostname'
13066 d_pipe='$d_pipe'
13067 d_poll='$d_poll'
13068 d_portable='$d_portable'
13069 d_pthread_yield='$d_pthread_yield'
13070 d_pwage='$d_pwage'
13071 d_pwchange='$d_pwchange'
13072 d_pwclass='$d_pwclass'
13073 d_pwcomment='$d_pwcomment'
13074 d_pwexpire='$d_pwexpire'
13075 d_pwgecos='$d_pwgecos'
13076 d_pwpasswd='$d_pwpasswd'
13077 d_pwquota='$d_pwquota'
13078 d_readdir64='$d_readdir64'
13079 d_readdir='$d_readdir'
13080 d_readlink='$d_readlink'
13081 d_readv='$d_readv'
13082 d_recvmsg='$d_recvmsg'
13083 d_rename='$d_rename'
13084 d_rewinddir='$d_rewinddir'
13085 d_rmdir='$d_rmdir'
13086 d_safebcpy='$d_safebcpy'
13087 d_safemcpy='$d_safemcpy'
13088 d_sanemcmp='$d_sanemcmp'
13089 d_sched_yield='$d_sched_yield'
13090 d_scm_rights='$d_scm_rights'
13091 d_seekdir64='$d_seekdir64'
13092 d_seekdir='$d_seekdir'
13093 d_select='$d_select'
13094 d_sem='$d_sem'
13095 d_semctl='$d_semctl'
13096 d_semctl_semid_ds='$d_semctl_semid_ds'
13097 d_semctl_semun='$d_semctl_semun'
13098 d_semget='$d_semget'
13099 d_semop='$d_semop'
13100 d_sendmsg='$d_sendmsg'
13101 d_setegid='$d_setegid'
13102 d_seteuid='$d_seteuid'
13103 d_setgrent='$d_setgrent'
13104 d_setgrps='$d_setgrps'
13105 d_sethent='$d_sethent'
13106 d_setlinebuf='$d_setlinebuf'
13107 d_setlocale='$d_setlocale'
13108 d_setnent='$d_setnent'
13109 d_setpent='$d_setpent'
13110 d_setpgid='$d_setpgid'
13111 d_setpgrp2='$d_setpgrp2'
13112 d_setpgrp='$d_setpgrp'
13113 d_setprior='$d_setprior'
13114 d_setpwent='$d_setpwent'
13115 d_setregid='$d_setregid'
13116 d_setresgid='$d_setresgid'
13117 d_setresuid='$d_setresuid'
13118 d_setreuid='$d_setreuid'
13119 d_setrgid='$d_setrgid'
13120 d_setruid='$d_setruid'
13121 d_setsent='$d_setsent'
13122 d_setsid='$d_setsid'
13123 d_setvbuf='$d_setvbuf'
13124 d_sfio='$d_sfio'
13125 d_shm='$d_shm'
13126 d_shmat='$d_shmat'
13127 d_shmatprototype='$d_shmatprototype'
13128 d_shmctl='$d_shmctl'
13129 d_shmdt='$d_shmdt'
13130 d_shmget='$d_shmget'
13131 d_sigaction='$d_sigaction'
13132 d_sigsetjmp='$d_sigsetjmp'
13133 d_socket='$d_socket'
13134 d_sockpair='$d_sockpair'
13135 d_stat64='$d_stat64'
13136 d_statblks='$d_statblks'
13137 d_statfs='$d_statfs'
13138 d_statfsflags='$d_statfsflags'
13139 d_statvfs='$d_statvfs'
13140 d_stdio_cnt_lval='$d_stdio_cnt_lval'
13141 d_stdio_ptr_lval='$d_stdio_ptr_lval'
13142 d_stdiobase='$d_stdiobase'
13143 d_stdstdio='$d_stdstdio'
13144 d_store64='$d_store64'
13145 d_strchr='$d_strchr'
13146 d_strcoll='$d_strcoll'
13147 d_strctcpy='$d_strctcpy'
13148 d_strerrm='$d_strerrm'
13149 d_strerror='$d_strerror'
13150 d_strtod='$d_strtod'
13151 d_strtol='$d_strtol'
13152 d_strtoul='$d_strtoul'
13153 d_strxfrm='$d_strxfrm'
13154 d_suidsafe='$d_suidsafe'
13155 d_symlink='$d_symlink'
13156 d_syscall='$d_syscall'
13157 d_sysconf='$d_sysconf'
13158 d_sysernlst='$d_sysernlst'
13159 d_syserrlst='$d_syserrlst'
13160 d_system='$d_system'
13161 d_tcgetpgrp='$d_tcgetpgrp'
13162 d_tcsetpgrp='$d_tcsetpgrp'
13163 d_telldir64='$d_telldir64'
13164 d_telldir='$d_telldir'
13165 d_telldirproto='$d_telldirproto'
13166 d_time='$d_time'
13167 d_times='$d_times'
13168 d_tmpfile64='$d_tmpfile64'
13169 d_truncate64='$d_truncate64'
13170 d_truncate='$d_truncate'
13171 d_tzname='$d_tzname'
13172 d_umask='$d_umask'
13173 d_uname='$d_uname'
13174 d_union_semun='$d_union_semun'
13175 d_vfork='$d_vfork'
13176 d_void_closedir='$d_void_closedir'
13177 d_voidsig='$d_voidsig'
13178 d_voidtty='$d_voidtty'
13179 d_volatile='$d_volatile'
13180 d_vprintf='$d_vprintf'
13181 d_wait4='$d_wait4'
13182 d_waitpid='$d_waitpid'
13183 d_wcstombs='$d_wcstombs'
13184 d_wctomb='$d_wctomb'
13185 d_writev='$d_writev'
13186 d_xenix='$d_xenix'
13187 date='$date'
13188 db_hashtype='$db_hashtype'
13189 db_prefixtype='$db_prefixtype'
13190 defvoidused='$defvoidused'
13191 direntrytype='$direntrytype'
13192 dlext='$dlext'
13193 dlsrc='$dlsrc'
13194 doublesize='$doublesize'
13195 drand01='$drand01'
13196 dynamic_ext='$dynamic_ext'
13197 eagain='$eagain'
13198 ebcdic='$ebcdic'
13199 echo='$echo'
13200 egrep='$egrep'
13201 emacs='$emacs'
13202 eunicefix='$eunicefix'
13203 exe_ext='$exe_ext'
13204 expr='$expr'
13205 extensions='$extensions'
13206 fflushNULL='$fflushNULL'
13207 fflushall='$fflushall'
13208 find='$find'
13209 firstmakefile='$firstmakefile'
13210 flex='$flex'
13211 fpostype='$fpostype'
13212 freetype='$freetype'
13213 full_ar='$full_ar'
13214 full_csh='$full_csh'
13215 full_sed='$full_sed'
13216 gccversion='$gccversion'
13217 gidtype='$gidtype'
13218 glibpth='$glibpth'
13219 grep='$grep'
13220 groupcat='$groupcat'
13221 groupstype='$groupstype'
13222 gzip='$gzip'
13223 h_fcntl='$h_fcntl'
13224 h_sysfile='$h_sysfile'
13225 hint='$hint'
13226 hostcat='$hostcat'
13227 huge='$huge'
13228 i_arpainet='$i_arpainet'
13229 i_bsdioctl='$i_bsdioctl'
13230 i_db='$i_db'
13231 i_dbm='$i_dbm'
13232 i_dirent='$i_dirent'
13233 i_dld='$i_dld'
13234 i_dlfcn='$i_dlfcn'
13235 i_fcntl='$i_fcntl'
13236 i_float='$i_float'
13237 i_gdbm='$i_gdbm'
13238 i_grp='$i_grp'
13239 i_inttypes='$i_inttypes'
13240 i_limits='$i_limits'
13241 i_locale='$i_locale'
13242 i_machcthr='$i_machcthr'
13243 i_malloc='$i_malloc'
13244 i_math='$i_math'
13245 i_memory='$i_memory'
13246 i_mntent='$i_mntent'
13247 i_ndbm='$i_ndbm'
13248 i_netdb='$i_netdb'
13249 i_neterrno='$i_neterrno'
13250 i_netinettcp='$i_netinettcp'
13251 i_niin='$i_niin'
13252 i_poll='$i_poll'
13253 i_pthread='$i_pthread'
13254 i_pwd='$i_pwd'
13255 i_rpcsvcdbm='$i_rpcsvcdbm'
13256 i_sfio='$i_sfio'
13257 i_sgtty='$i_sgtty'
13258 i_stdarg='$i_stdarg'
13259 i_stddef='$i_stddef'
13260 i_stdlib='$i_stdlib'
13261 i_string='$i_string'
13262 i_sysaccess='$i_sysaccess'
13263 i_sysdir='$i_sysdir'
13264 i_sysfile='$i_sysfile'
13265 i_sysfilio='$i_sysfilio'
13266 i_sysin='$i_sysin'
13267 i_sysioctl='$i_sysioctl'
13268 i_sysmman='$i_sysmman'
13269 i_sysmount='$i_sysmount'
13270 i_sysndir='$i_sysndir'
13271 i_sysparam='$i_sysparam'
13272 i_sysresrc='$i_sysresrc'
13273 i_syssecrt='$i_syssecrt'
13274 i_sysselct='$i_sysselct'
13275 i_syssockio='$i_syssockio'
13276 i_sysstat='$i_sysstat'
13277 i_sysstatvfs='$i_sysstatvfs'
13278 i_systime='$i_systime'
13279 i_systimek='$i_systimek'
13280 i_systimes='$i_systimes'
13281 i_systypes='$i_systypes'
13282 i_sysuio='$i_sysuio'
13283 i_sysun='$i_sysun'
13284 i_syswait='$i_syswait'
13285 i_termio='$i_termio'
13286 i_termios='$i_termios'
13287 i_time='$i_time'
13288 i_unistd='$i_unistd'
13289 i_utime='$i_utime'
13290 i_values='$i_values'
13291 i_varargs='$i_varargs'
13292 i_varhdr='$i_varhdr'
13293 i_vfork='$i_vfork'
13294 ignore_versioned_solibs='$ignore_versioned_solibs'
13295 incpath='$incpath'
13296 inews='$inews'
13297 installarchlib='$installarchlib'
13298 installbin='$installbin'
13299 installman1dir='$installman1dir'
13300 installman3dir='$installman3dir'
13301 installprivlib='$installprivlib'
13302 installscript='$installscript'
13303 installsitearch='$installsitearch'
13304 installsitelib='$installsitelib'
13305 installusrbinperl='$installusrbinperl'
13306 intsize='$intsize'
13307 known_extensions='$known_extensions'
13308 ksh='$ksh'
13309 large='$large'
13310 ld='$ld'
13311 lddlflags='$lddlflags'
13312 ldflags='$ldflags'
13313 less='$less'
13314 lib_ext='$lib_ext'
13315 libc='$libc'
13316 libperl='$libperl'
13317 libpth='$libpth'
13318 libs='$libs'
13319 libswanted='$libswanted'
13320 line='$line'
13321 lint='$lint'
13322 lkflags='$lkflags'
13323 ln='$ln'
13324 lns='$lns'
13325 locincpth='$locincpth'
13326 loclibpth='$loclibpth'
13327 longdblsize='$longdblsize'
13328 longlongsize='$longlongsize'
13329 longsize='$longsize'
13330 lp='$lp'
13331 lpr='$lpr'
13332 ls='$ls'
13333 lseeksize='$lseeksize'
13334 lseektype='$lseektype'
13335 mail='$mail'
13336 mailx='$mailx'
13337 make='$make'
13338 make_set_make='$make_set_make'
13339 mallocobj='$mallocobj'
13340 mallocsrc='$mallocsrc'
13341 malloctype='$malloctype'
13342 man1dir='$man1dir'
13343 man1direxp='$man1direxp'
13344 man1ext='$man1ext'
13345 man3dir='$man3dir'
13346 man3direxp='$man3direxp'
13347 man3ext='$man3ext'
13348 medium='$medium'
13349 mips='$mips'
13350 mips_type='$mips_type'
13351 mkdir='$mkdir'
13352 mmaptype='$mmaptype'
13353 models='$models'
13354 modetype='$modetype'
13355 more='$more'
13356 multiarch='$multiarch'
13357 mv='$mv'
13358 myarchname='$myarchname'
13359 mydomain='$mydomain'
13360 myhostname='$myhostname'
13361 myuname='$myuname'
13362 n='$n'
13363 netdb_hlen_type='$netdb_hlen_type'
13364 netdb_host_type='$netdb_host_type'
13365 netdb_name_type='$netdb_name_type'
13366 netdb_net_type='$netdb_net_type'
13367 nm='$nm'
13368 nm_opt='$nm_opt'
13369 nm_so_opt='$nm_so_opt'
13370 nonxs_ext='$nonxs_ext'
13371 nroff='$nroff'
13372 o_nonblock='$o_nonblock'
13373 obj_ext='$obj_ext'
13374 old_pthread_create_joinable='$old_pthread_create_joinable'
13375 optimize='$optimize'
13376 orderlib='$orderlib'
13377 osname='$osname'
13378 osvers='$osvers'
13379 package='$package'
13380 pager='$pager'
13381 passcat='$passcat'
13382 patchlevel='$patchlevel'
13383 path_sep='$path_sep'
13384 perl='$perl'
13385 perladmin='$perladmin'
13386 perlpath='$perlpath'
13387 pg='$pg'
13388 phostname='$phostname'
13389 pidtype='$pidtype'
13390 plibpth='$plibpth'
13391 pmake='$pmake'
13392 pr='$pr'
13393 prefix='$prefix'
13394 prefixexp='$prefixexp'
13395 privlib='$privlib'
13396 privlibexp='$privlibexp'
13397 prototype='$prototype'
13398 ptrsize='$ptrsize'
13399 randbits='$randbits'
13400 randfunc='$randfunc'
13401 randseedtype='$randseedtype'
13402 ranlib='$ranlib'
13403 rd_nodata='$rd_nodata'
13404 rm='$rm'
13405 rmail='$rmail'
13406 runnm='$runnm'
13407 sched_yield='$sched_yield'
13408 scriptdir='$scriptdir'
13409 scriptdirexp='$scriptdirexp'
13410 sed='$sed'
13411 seedfunc='$seedfunc'
13412 selectminbits='$selectminbits'
13413 selecttype='$selecttype'
13414 sendmail='$sendmail'
13415 sh='$sh'
13416 shar='$shar'
13417 sharpbang='$sharpbang'
13418 shmattype='$shmattype'
13419 shortsize='$shortsize'
13420 shrpenv='$shrpenv'
13421 shsharp='$shsharp'
13422 sig_count='$sig_count'
13423 sig_name='$sig_name'
13424 sig_name_init='$sig_name_init'
13425 sig_num='$sig_num'
13426 sig_num_init='$sig_num_init'
13427 signal_t='$signal_t'
13428 sitearch='$sitearch'
13429 sitearchexp='$sitearchexp'
13430 sitelib='$sitelib'
13431 sitelibexp='$sitelibexp'
13432 sizetype='$sizetype'
13433 sleep='$sleep'
13434 smail='$smail'
13435 small='$small'
13436 so='$so'
13437 sockethdr='$sockethdr'
13438 socketlib='$socketlib'
13439 sort='$sort'
13440 spackage='$spackage'
13441 spitshell='$spitshell'
13442 split='$split'
13443 src='$src'
13444 ssizetype='$ssizetype'
13445 startperl='$startperl'
13446 startsh='$startsh'
13447 static_ext='$static_ext'
13448 stdchar='$stdchar'
13449 stdio_base='$stdio_base'
13450 stdio_bufsiz='$stdio_bufsiz'
13451 stdio_cnt='$stdio_cnt'
13452 stdio_filbuf='$stdio_filbuf'
13453 stdio_ptr='$stdio_ptr'
13454 stdio_stream_array='$stdio_stream_array'
13455 strings='$strings'
13456 submit='$submit'
13457 subversion='$subversion'
13458 sysman='$sysman'
13459 tail='$tail'
13460 tar='$tar'
13461 tbl='$tbl'
13462 tee='$tee'
13463 test='$test'
13464 timeincl='$timeincl'
13465 timetype='$timetype'
13466 touch='$touch'
13467 tr='$tr'
13468 trnl='$trnl'
13469 troff='$troff'
13470 uidtype='$uidtype'
13471 uname='$uname'
13472 uniq='$uniq'
13473 use64bits='$use64bits'
13474 usedl='$usedl'
13475 usemultiplicity='$usemultiplicity'
13476 usemymalloc='$usemymalloc'
13477 usenm='$usenm'
13478 useopcode='$useopcode'
13479 useperlio='$useperlio'
13480 useposix='$useposix'
13481 usesfio='$usesfio'
13482 useshrplib='$useshrplib'
13483 usethreads='$usethreads'
13484 usevfork='$usevfork'
13485 usrinc='$usrinc'
13486 uuname='$uuname'
13487 version='$version'
13488 vi='$vi'
13489 voidflags='$voidflags'
13490 xlibpth='$xlibpth'
13491 zcat='$zcat'
13492 zip='$zip'
13493 EOT
13494
13495 : Add in command line options if available
13496 $test -f UU/cmdline.opt && $cat UU/cmdline.opt >> config.sh
13497
13498 : add special variables
13499 $test -f $src/patchlevel.h && \
13500 awk '/^#define[         ]+PERL_/ {printf "%s=%s\n",$2,$3}' $src/patchlevel.h >>config.sh
13501 echo "CONFIGDOTSH=true" >>config.sh
13502
13503 : propagate old symbols
13504 if $test -f UU/config.sh; then
13505         <UU/config.sh sort | uniq >UU/oldconfig.sh
13506         sed -n 's/^\([a-zA-Z_0-9]*\)=.*/\1/p' config.sh config.sh UU/oldconfig.sh |\
13507         sort | uniq -u >UU/oldsyms
13508         set X `cat UU/oldsyms`
13509         shift
13510         case $# in
13511         0) ;;
13512         *)
13513                 cat <<EOM
13514 Hmm...You had some extra variables I don't know about...I'll try to keep 'em...
13515 EOM
13516                 echo "# Variables propagated from previous config.sh file." >>config.sh
13517                 for sym in `cat UU/oldsyms`; do
13518                         echo "    Propagating $hint variable "'$'"$sym..."
13519                         eval 'tmp="$'"${sym}"'"'
13520                         echo "$tmp" | \
13521                                 sed -e "s/'/'\"'\"'/g" -e "s/^/$sym='/" -e "s/$/'/" >>config.sh
13522                 done
13523                 ;;
13524         esac
13525 fi
13526
13527 : Finish up by extracting the .SH files
13528 case "$alldone" in
13529 exit)
13530         $rm -rf UU
13531         echo "Done."
13532         exit 0
13533         ;;
13534 cont)
13535         ;;
13536 '')
13537         dflt=''
13538         nostick=true
13539         $cat <<EOM
13540
13541 If you'd like to make any changes to the config.sh file before I begin
13542 to configure things, do it as a shell escape now (e.g. !vi config.sh).
13543
13544 EOM
13545         rp="Press return or use a shell escape to edit config.sh:"
13546         . UU/myread
13547         nostick=''
13548         case "$ans" in
13549         '') ;;
13550         *) : in case they cannot read
13551                 sh 1>&4 -c "$ans";;
13552         esac
13553         ;;
13554 esac
13555
13556 : if this fails, just run all the .SH files by hand
13557 . ./config.sh
13558
13559 echo " "
13560 exec 1>&4
13561 . ./UU/extract
13562
13563 if $contains '^depend:' [Mm]akefile >/dev/null 2>&1; then
13564         dflt=y
13565         case "$silent" in
13566         true) ;;
13567         *)
13568                 $cat <<EOM
13569
13570 Now you need to generate make dependencies by running "$make depend".
13571 You might prefer to run it in background: "$make depend > makedepend.out &"
13572 It can take a while, so you might not want to run it right now.
13573
13574 EOM
13575                 ;;
13576         esac
13577         rp="Run $make depend now?"
13578         . UU/myread
13579         case "$ans" in
13580         y*)
13581                 $make depend && echo "Now you must run a $make."
13582                 ;;
13583         *)
13584                 echo "You must run '$make depend' then '$make'."
13585                 ;;
13586         esac
13587 elif test -f [Mm]akefile; then
13588         echo " "
13589         echo "Now you must run a $make."
13590 else
13591         echo "Done."
13592 fi
13593
13594 if $test -f Policy.sh; then
13595     $cat <<EOM
13596
13597 If you compile $package on a different machine or from a different object
13598 directory, copy the Policy.sh file from this object directory to the
13599 new one before you run Configure -- this will help you with most of
13600 the policy defaults.
13601
13602 EOM
13603 fi
13604 if $test -f config.msg; then
13605     echo "Hmm.  I also noted the following information while running:"
13606     echo " "
13607     $cat config.msg >&4
13608     $rm -f config.msg
13609 fi
13610 $rm -f kit*isdone ark*isdone
13611 $rm -rf UU
13612
13613 : End of Configure
13614