Make the use64bits and usethreads friendlier/braver;
[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 Sun Aug  1 00:18:49 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 bincompat5005=''
286 d_bincompat5005=''
287 byteorder=''
288 cc=''
289 gccversion=''
290 ccflags=''
291 cppflags=''
292 ldflags=''
293 lkflags=''
294 locincpth=''
295 optimize=''
296 cf_email=''
297 cf_by=''
298 cf_time=''
299 contains=''
300 cpp_stuff=''
301 cpplast=''
302 cppminus=''
303 cpprun=''
304 cppstdin=''
305 crosscompile=''
306 d_access=''
307 d_accessx=''
308 d_alarm=''
309 d_attribut=''
310 d_bcmp=''
311 d_bcopy=''
312 d_bzero=''
313 d_casti32=''
314 castflags=''
315 d_castneg=''
316 d_chown=''
317 d_chroot=''
318 d_chsize=''
319 d_closedir=''
320 d_void_closedir=''
321 d_const=''
322 cryptlib=''
323 d_crypt=''
324 d_csh=''
325 full_csh=''
326 d_cuserid=''
327 d_dbl_dig=''
328 d_difftime=''
329 d_dlerror=''
330 d_dlopen=''
331 d_dlsymun=''
332 d_dosuid=''
333 d_suidsafe=''
334 d_drand48proto=''
335 d_dup2=''
336 d_eaccess=''
337 d_endgrent=''
338 d_endhent=''
339 d_endnent=''
340 d_endpent=''
341 d_endpwent=''
342 d_endsent=''
343 d_endspent=''
344 d_fchmod=''
345 d_fchown=''
346 d_fcntl=''
347 d_fd_macros=''
348 d_fd_set=''
349 d_fds_bits=''
350 d_fgetpos=''
351 d_flexfnam=''
352 d_flock=''
353 d_fork=''
354 d_fseeko=''
355 d_fsetpos=''
356 d_ftello=''
357 d_ftime=''
358 d_gettimeod=''
359 d_Gconvert=''
360 d_getgrent=''
361 d_getgrps=''
362 d_gethbyaddr=''
363 d_gethbyname=''
364 d_gethent=''
365 aphostname=''
366 d_gethname=''
367 d_phostname=''
368 d_uname=''
369 d_gethostprotos=''
370 d_getlogin=''
371 d_getmntent=''
372 d_getnbyaddr=''
373 d_getnbyname=''
374 d_getnent=''
375 d_getnetprotos=''
376 d_getpent=''
377 d_getpgid=''
378 d_getpgrp2=''
379 d_bsdgetpgrp=''
380 d_getpgrp=''
381 d_getppid=''
382 d_getprior=''
383 d_getpbyname=''
384 d_getpbynumber=''
385 d_getprotoprotos=''
386 d_getpwent=''
387 d_getsent=''
388 d_getservprotos=''
389 d_getspent=''
390 d_getspnam=''
391 d_getsbyname=''
392 d_getsbyport=''
393 d_gnulibc=''
394 d_hasmntopt=''
395 d_htonl=''
396 d_inetaton=''
397 d_isascii=''
398 d_killpg=''
399 d_lchown=''
400 d_link=''
401 d_locconv=''
402 d_lockf=''
403 d_longdbl=''
404 longdblsize=''
405 d_longlong=''
406 longlongsize=''
407 d_lstat=''
408 d_madvise=''
409 d_mblen=''
410 d_mbstowcs=''
411 d_mbtowc=''
412 d_memchr=''
413 d_memcmp=''
414 d_memcpy=''
415 d_memmove=''
416 d_memset=''
417 d_mkdir=''
418 d_mkfifo=''
419 d_mktime=''
420 d_mmap=''
421 mmaptype=''
422 d_mprotect=''
423 d_msg=''
424 d_msgctl=''
425 d_msgget=''
426 d_msgrcv=''
427 d_msgsnd=''
428 d_msync=''
429 d_munmap=''
430 d_nice=''
431 d_open3=''
432 d_fpathconf=''
433 d_pathconf=''
434 d_pause=''
435 d_pipe=''
436 d_poll=''
437 d_portable=''
438 d_old_pthread_create_joinable=''
439 old_pthread_create_joinable=''
440 d_pthread_yield=''
441 d_sched_yield=''
442 sched_yield=''
443 d_readdir=''
444 d_rewinddir=''
445 d_seekdir=''
446 d_telldir=''
447 d_readlink=''
448 d_readv=''
449 d_rename=''
450 d_rmdir=''
451 d_safebcpy=''
452 d_safemcpy=''
453 d_sanemcmp=''
454 d_select=''
455 d_sem=''
456 d_semctl=''
457 d_semget=''
458 d_semop=''
459 d_setegid=''
460 d_seteuid=''
461 d_setgrent=''
462 d_setgrps=''
463 d_sethent=''
464 d_setlinebuf=''
465 d_setlocale=''
466 d_setnent=''
467 d_setpent=''
468 d_setpgid=''
469 d_setpgrp2=''
470 d_bsdsetpgrp=''
471 d_setpgrp=''
472 d_setprior=''
473 d_setpwent=''
474 d_setregid=''
475 d_setresgid=''
476 d_setresuid=''
477 d_setreuid=''
478 d_setrgid=''
479 d_setruid=''
480 d_setsent=''
481 d_setsid=''
482 d_setspent=''
483 d_setvbuf=''
484 d_sfio=''
485 usesfio=''
486 d_shm=''
487 d_shmat=''
488 d_shmatprototype=''
489 shmattype=''
490 d_shmctl=''
491 d_shmdt=''
492 d_shmget=''
493 d_sigaction=''
494 d_sigsetjmp=''
495 d_cmsghdr_s=''
496 d_msg_ctrunc=''
497 d_msg_dontroute=''
498 d_msg_oob=''
499 d_msg_peek=''
500 d_msg_proxy=''
501 d_msghdr_s=''
502 d_oldsock=''
503 d_recvmsg=''
504 d_scm_rights=''
505 d_sendmsg=''
506 d_socket=''
507 d_sockpair=''
508 sockethdr=''
509 socketlib=''
510 d_statblks=''
511 d_fstatfs=''
512 d_statfs=''
513 d_statfsflags=''
514 d_fstatvfs=''
515 d_statvfs=''
516 d_stdio_cnt_lval=''
517 d_stdio_ptr_lval=''
518 d_stdiobase=''
519 d_stdstdio=''
520 stdio_base=''
521 stdio_bufsiz=''
522 stdio_cnt=''
523 stdio_filbuf=''
524 stdio_ptr=''
525 d_index=''
526 d_strchr=''
527 d_strcoll=''
528 d_strctcpy=''
529 d_strerrm=''
530 d_strerror=''
531 d_sysernlst=''
532 d_syserrlst=''
533 d_strtod=''
534 d_strtol=''
535 d_strtoul=''
536 d_strxfrm=''
537 d_symlink=''
538 d_syscall=''
539 d_sysconf=''
540 d_system=''
541 d_tcgetpgrp=''
542 d_tcsetpgrp=''
543 d_telldirproto=''
544 d_time=''
545 timetype=''
546 clocktype=''
547 d_times=''
548 d_truncate=''
549 d_tzname=''
550 d_umask=''
551 d_semctl_semid_ds=''
552 d_semctl_semun=''
553 d_union_semun=''
554 d_vfork=''
555 usevfork=''
556 d_voidsig=''
557 signal_t=''
558 d_volatile=''
559 d_charvspr=''
560 d_vprintf=''
561 d_wait4=''
562 d_waitpid=''
563 d_wcstombs=''
564 d_wctomb=''
565 d_writev=''
566 d_dbmclose64=''
567 d_dbminit64=''
568 d_delete64=''
569 d_fetch64=''
570 d_firstkey64=''
571 d_nextkey64=''
572 d_store64=''
573 dlext=''
574 cccdlflags=''
575 ccdlflags=''
576 dlsrc=''
577 ld=''
578 lddlflags=''
579 usedl=''
580 doublesize=''
581 ebcdic=''
582 fflushNULL=''
583 fflushall=''
584 fpostype=''
585 gidtype=''
586 groupstype=''
587 h_fcntl=''
588 h_sysfile=''
589 i_arpainet=''
590 db_hashtype=''
591 db_prefixtype=''
592 i_db=''
593 i_dbm=''
594 i_rpcsvcdbm=''
595 d_dirnamlen=''
596 direntrytype=''
597 i_dirent=''
598 i_dld=''
599 i_dlfcn=''
600 i_fcntl=''
601 i_float=''
602 i_gdbm=''
603 d_grpasswd=''
604 i_grp=''
605 d_int64t=''
606 i_inttypes=''
607 i_limits=''
608 i_locale=''
609 i_machcthr=''
610 i_malloc=''
611 i_math=''
612 i_memory=''
613 i_mntent=''
614 i_ndbm=''
615 i_netdb=''
616 i_neterrno=''
617 i_netinettcp=''
618 i_niin=''
619 i_sysin=''
620 i_poll=''
621 i_pthread=''
622 d_pwage=''
623 d_pwchange=''
624 d_pwclass=''
625 d_pwcomment=''
626 d_pwexpire=''
627 d_pwgecos=''
628 d_pwpasswd=''
629 d_pwquota=''
630 i_pwd=''
631 i_sfio=''
632 i_shadow=''
633 i_socks=''
634 i_stddef=''
635 i_stdlib=''
636 i_string=''
637 strings=''
638 i_sysaccess=''
639 i_sysdir=''
640 i_sysfile=''
641 d_voidtty=''
642 i_bsdioctl=''
643 i_sysfilio=''
644 i_sysioctl=''
645 i_syssockio=''
646 i_sysmman=''
647 i_sysmount=''
648 i_sysndir=''
649 i_sysparam=''
650 i_sysresrc=''
651 i_syssecrt=''
652 i_sysselct=''
653 i_sysstat=''
654 i_sysstatvfs=''
655 i_systimes=''
656 i_systypes=''
657 d_iovec_s=''
658 i_sysuio=''
659 i_sysun=''
660 i_syswait=''
661 i_sgtty=''
662 i_termio=''
663 i_termios=''
664 i_systime=''
665 i_systimek=''
666 i_time=''
667 timeincl=''
668 i_unistd=''
669 i_utime=''
670 i_values=''
671 i_stdarg=''
672 i_varargs=''
673 i_varhdr=''
674 i_vfork=''
675 installprefix=''
676 installprefixexp=''
677 installstyle=''
678 installusrbinperl=''
679 intsize=''
680 longsize=''
681 shortsize=''
682 d_dirent64_s=''
683 d_flock64_s=''
684 d_fstat64=''
685 d_ftruncate64=''
686 d_ino64_t=''
687 d_llseek=''
688 d_lockf64=''
689 d_lseek64=''
690 d_lstat64=''
691 d_off64_t=''
692 d_offset_t=''
693 d_open64=''
694 d_opendir64=''
695 d_readdir64=''
696 d_seekdir64=''
697 d_stat64=''
698 d_telldir64=''
699 d_truncate64=''
700 libc=''
701 ldlibpthname=''
702 libperl=''
703 shrpenv=''
704 useshrplib=''
705 glibpth=''
706 libpth=''
707 loclibpth=''
708 plibpth=''
709 xlibpth=''
710 ignore_versioned_solibs=''
711 libs=''
712 lns=''
713 lseeksize=''
714 lseektype=''
715 make_set_make=''
716 d_mymalloc=''
717 freetype=''
718 mallocobj=''
719 mallocsrc=''
720 malloctype=''
721 usemymalloc=''
722 installman1dir=''
723 man1dir=''
724 man1direxp=''
725 man1ext=''
726 installman3dir=''
727 man3dir=''
728 man3direxp=''
729 man3ext=''
730 huge=''
731 large=''
732 medium=''
733 models=''
734 small=''
735 split=''
736 modetype=''
737 multiarch=''
738 mydomain=''
739 myhostname=''
740 phostname=''
741 c=''
742 n=''
743 d_eofnblk=''
744 eagain=''
745 o_nonblock=''
746 rd_nodata=''
747 netdb_hlen_type=''
748 netdb_host_type=''
749 netdb_name_type=''
750 netdb_net_type=''
751 groupcat=''
752 hostcat=''
753 passcat=''
754 orderlib=''
755 ranlib=''
756 package=''
757 spackage=''
758 pager=''
759 apiversion=''
760 patchlevel=''
761 subversion=''
762 version=''
763 perladmin=''
764 perlpath=''
765 pidtype=''
766 prefix=''
767 prefixexp=''
768 installprivlib=''
769 privlib=''
770 privlibexp=''
771 prototype=''
772 ptrsize=''
773 drand01=''
774 randbits=''
775 randfunc=''
776 randseedtype=''
777 seedfunc=''
778 installscript=''
779 scriptdir=''
780 scriptdirexp=''
781 selectminbits=''
782 selecttype=''
783 sh=''
784 sig_count=''
785 sig_name=''
786 sig_name_init=''
787 sig_num=''
788 sig_num_init=''
789 installsitearch=''
790 sitearch=''
791 sitearchexp=''
792 installsitelib=''
793 sitelib=''
794 sitelibexp=''
795 siteprefix=''
796 siteprefixexp=''
797 sizetype=''
798 so=''
799 sharpbang=''
800 shsharp=''
801 spitshell=''
802 src=''
803 ssizetype=''
804 startperl=''
805 startsh=''
806 stdchar=''
807 d_fgetpos64=''
808 d_fopen64=''
809 d_freopen64=''
810 d_fseek64=''
811 d_fseeko64=''
812 d_fsetpos64=''
813 d_ftell64=''
814 d_ftello64=''
815 d_tmpfile64=''
816 d_stdio_stream_array=''
817 stdio_stream_array=''
818 sysman=''
819 trnl=''
820 uidtype=''
821 archname64=''
822 use64bits=''
823 usemultiplicity=''
824 nm_opt=''
825 nm_so_opt=''
826 runnm=''
827 usenm=''
828 useperlio=''
829 usesocks=''
830 d_oldpthreads=''
831 usethreads=''
832 incpath=''
833 mips=''
834 mips_type=''
835 usrinc=''
836 d_vendorlib=''
837 installvendorlib=''
838 vendorlib=''
839 vendorlibexp=''
840 usevendorprefix=''
841 vendorprefix=''
842 vendorprefixexp=''
843 defvoidused=''
844 voidflags=''
845 CONFIG=''
846
847 define='define'
848 undef='undef'
849 smallmach='pdp11 i8086 z8000 i80286 iAPX286'
850 rmlist=''
851
852 : We must find out about Eunice early
853 eunicefix=':'
854 if test -f /etc/unixtovms; then
855         eunicefix=/etc/unixtovms
856 fi
857 if test -f /etc/unixtovms.exe; then
858         eunicefix=/etc/unixtovms.exe
859 fi
860
861 i_whoami=''
862 : Possible local include directories to search.
863 : Set locincpth to "" in a hint file to defeat local include searches.
864 locincpth="/usr/local/include /opt/local/include /usr/gnu/include"
865 locincpth="$locincpth /opt/gnu/include /usr/GNU/include /opt/GNU/include"
866 :
867 : no include file wanted by default
868 inclwanted=''
869
870 : list of known cpp symbols, sorted alphabetically
871 al="AMIX BIT_MSF BSD BSD4_3 BSD_NET2 CMU CRAY DGUX DOLPHIN DPX2"
872 al="$al GO32 GOULD_PN HP700 I386 I80960 I960 Lynx M68000 M68K MACH"
873 al="$al MIPSEB MIPSEL MSDOS MTXINU MULTIMAX MVS"
874 al="$al M_COFF M_I186 M_I286 M_I386 M_I8086 M_I86 M_I86SM"
875 al="$al M_SYS3 M_SYS5 M_SYSIII M_SYSV M_UNIX M_XENIX"
876 al="$al NeXT OCS88 OSF1 PARISC PC532 PORTAR POSIX"
877 al="$al PWB R3000 RES RISC6000 RT Sun386i SVR3 SVR4"
878 al="$al SYSTYPE_BSD SYSTYPE_SVR4 SYSTYPE_SYSV Tek4132 Tek4300"
879 al="$al UMAXV USGr4 USGr4_2 UTEK UTS UTek UnicomPBB UnicomPBD Utek"
880 al="$al VMS Xenix286"
881 al="$al _AIX _AIX32 _AIX370 _AIX41 _AM29000 _COFF _CRAY _CX_UX _EPI"
882 al="$al _IBMESA _IBMR2 _M88K _M88KBCS_TARGET _POWER"
883 al="$al _MIPSEB _MIPSEL _M_COFF _M_I86 _M_I86SM _M_SYS3"
884 al="$al _M_SYS5 _M_SYSIII _M_SYSV _M_UNIX _M_XENIX _NLS _PGC_ _R3000"
885 al="$al _SYSTYPE_BSD _SYSTYPE_BSD43 _SYSTYPE_SVR4"
886 al="$al _SYSTYPE_SYSV _SYSV3 _U370 _UNICOS"
887 al="$al __386BSD__ __BIG_ENDIAN __BIG_ENDIAN__ __BSD_4_4__"
888 al="$al __DGUX__ __DPX2__ __H3050R __H3050RX"
889 al="$al __LITTLE_ENDIAN __LITTLE_ENDIAN__ __MACH__"
890 al="$al __MIPSEB __MIPSEB__ __MIPSEL __MIPSEL__"
891 al="$al __Next__ __OSF1__ __PARAGON__ __PGC__ __PWB __STDC__"
892 al="$al __SVR4_2__ __UMAXV__"
893 al="$al ____386BSD____ __alpha __alpha__ __amiga"
894 al="$al __bsd4_2 __bsd4_2__ __bsdi__ __convex__"
895 al="$al __host_mips__"
896 al="$al __hp9000s200 __hp9000s300 __hp9000s400 __hp9000s500"
897 al="$al __hp9000s500 __hp9000s700 __hp9000s800"
898 al="$al __hppa __hpux __hp_osf __i286 __i286__ __i386 __i386__"
899 al="$al __i486 __i486__ __i860 __i860__ __ibmesa __ksr1__ __linux__"
900 al="$al __m68k __m68k__ __m88100__ __m88k __m88k__"
901 al="$al __mc68000 __mc68000__ __mc68020 __mc68020__"
902 al="$al __mc68030 __mc68030__ __mc68040 __mc68040__"
903 al="$al __mc88100 __mc88100__ __mips __mips__"
904 al="$al __motorola__ __osf__ __pa_risc __sparc__ __stdc__"
905 al="$al __sun __sun__ __svr3__ __svr4__ __ultrix __ultrix__"
906 al="$al __unix __unix__ __uxpm__ __uxps__ __vax __vax__"
907 al="$al _host_mips _mips _unix"
908 al="$al a29k aegis aix aixpc alliant alpha am29000 amiga ansi ardent"
909 al="$al apollo ardent att386 att3b"
910 al="$al bsd bsd43 bsd4_2 bsd4_3 bsd4_4 bsdi bull"
911 al="$al cadmus clipper concurrent convex cray ctix"
912 al="$al dmert encore gcos gcx gimpel gould"
913 al="$al hbullx20 hcx host_mips hp200 hp300 hp700 hp800"
914 al="$al hp9000 hp9000s300 hp9000s400 hp9000s500"
915 al="$al hp9000s700 hp9000s800 hp9k8 hppa hpux"
916 al="$al i186 i286 i386 i486 i8086"
917 al="$al i80960 i860 iAPX286 ibm ibm032 ibmrt interdata is68k"
918 al="$al ksr1 linux luna luna88k m68k m88100 m88k"
919 al="$al mc300 mc500 mc68000 mc68010 mc68020 mc68030"
920 al="$al mc68040 mc68060 mc68k mc68k32 mc700"
921 al="$al mc88000 mc88100 merlin mert mips mvs n16"
922 al="$al ncl_el ncl_mr"
923 al="$al news1500 news1700 news1800 news1900 news3700"
924 al="$al news700 news800 news900 ns16000 ns32000"
925 al="$al ns32016 ns32332 ns32k nsc32000 os osf"
926 al="$al parisc pc532 pdp11 plexus posix pyr"
927 al="$al riscix riscos scs sequent sgi sinix sony sony_news"
928 al="$al sonyrisc sparc sparclite spectrum stardent stratos"
929 al="$al sun sun3 sun386 svr4 sysV68 sysV88"
930 al="$al titan tower tower32 tower32_200 tower32_600 tower32_700"
931 al="$al tower32_800 tower32_850 tss u370 u3b u3b2 u3b20 u3b200"
932 al="$al u3b20d u3b5 ultrix unix unixpc unos vax venix vms"
933 al="$al xenix z8000"
934
935 : Trailing extension.  Override this in a hint file, if needed.
936 _exe=''
937 : Extra object files, if any, needed on this platform.
938 archobjs=''
939 groupstype=''
940 : change the next line if compiling for Xenix/286 on Xenix/386
941 xlibpth='/usr/lib/386 /lib/386'
942
943 : Possible local library directories to search.
944 loclibpth="/usr/local/lib /opt/local/lib /usr/gnu/lib"
945 loclibpth="$loclibpth /opt/gnu/lib /usr/GNU/lib /opt/GNU/lib"
946
947 : general looking path for locating libraries
948 glibpth="/shlib /usr/shlib /lib/pa1.1 /usr/lib/large"
949 glibpth="$glibpth /lib /usr/lib $xlibpth"
950 glibpth="$glibpth /lib/large /usr/lib/small /lib/small"
951 glibpth="$glibpth /usr/ccs/lib /usr/ucblib /usr/local/lib"
952
953 : Private path used by Configure to find libraries.  Its value
954 : is prepended to libpth. This variable takes care of special
955 : machines, like the mips.  Usually, it should be empty.
956 plibpth=''
957
958 : default library list
959 libswanted=''
960 : some systems want to use only the non-versioned libso:s
961 ignore_versioned_solibs=''
962 : full support for void wanted by default
963 defvoidused=15
964
965 : set useposix=false in your hint file to disable the POSIX extension.
966 useposix=true
967 : set useopcode=false in your hint file to disable the Opcode extension.
968 useopcode=true
969 : set usemultiplicity on the Configure command line to enable multiplicity.
970 : set usesocks on the Configure command line to enable socks.
971 : set usethreads on the Configure command line to enable threads.
972 : List of libraries we want.
973 : If anyone needs -lnet, put it in a hint file.
974 libswanted='sfio socket inet nsl nm ndbm gdbm dbm db malloc dl'
975 libswanted="$libswanted dld ld sun m rt c cposix posix"
976 libswanted="$libswanted ndir dir crypt sec"
977 libswanted="$libswanted ucb bsd BSD PW x"
978 : We probably want to search /usr/shlib before most other libraries.
979 : This is only used by the lib/ExtUtils/MakeMaker.pm routine extliblist.
980 glibpth=`echo " $glibpth " | sed -e 's! /usr/shlib ! !'`
981 glibpth="/usr/shlib $glibpth"
982 : Do not use vfork unless overridden by a hint file.
983 usevfork=false
984
985 : Find the basic shell for Bourne shell scripts
986 case "$sh" in
987 '')
988         case "$SYSTYPE" in
989         *bsd*|sys5*) xxx="/$SYSTYPE/bin/sh";;
990         *) xxx='/bin/sh';;
991         esac
992         if test -f "$xxx"; then
993                 sh="$xxx"
994         else
995                 : Build up a list and do a single loop so we can 'break' out.
996                 pth=`echo $PATH | sed -e "s/$p_/ /g"`
997                 for xxx in sh bash ksh pdksh ash; do
998                         for p in $pth; do
999                                 try="$try ${p}/${xxx}"
1000                         done
1001                 done
1002                 for xxx in $try; do
1003                         if test -f "$xxx"; then
1004                                 sh="$xxx";
1005                                 break
1006                         elif test -f "$xxx.exe"; then
1007                                 sh="$xxx";
1008                                 break
1009                         fi
1010                 done
1011         fi
1012         ;;
1013 esac
1014
1015 case "$sh" in
1016 '')     cat <<EOM >&2
1017 $me:  Fatal Error:  I can't find a Bourne Shell anywhere.  
1018
1019 Usually it's in /bin/sh.  How did you even get this far?
1020 Please contact me (Perl Maintainers) at perlbug@perl.com and 
1021 we'll try to straighten this all out.
1022 EOM
1023         exit 1
1024         ;;
1025 esac
1026
1027 : see if sh knows # comments
1028 if `$sh -c '#' >/dev/null 2>&1`; then
1029         shsharp=true
1030         spitshell=cat
1031         xcat=/bin/cat
1032         test -f $xcat || xcat=/usr/bin/cat
1033         echo "#!$xcat" >try
1034         $eunicefix try
1035         chmod +x try
1036         ./try > today
1037         if test -s today; then
1038                 sharpbang='#!'
1039         else
1040                 echo "#! $xcat" > try
1041                 $eunicefix try
1042                 chmod +x try
1043                 ./try > today
1044                 if test -s today; then
1045                         sharpbang='#! '
1046                 else
1047                         sharpbang=': use '
1048                 fi
1049         fi
1050 else
1051         echo " "
1052         echo "Your $sh doesn't grok # comments--I will strip them later on."
1053         shsharp=false
1054         cd ..
1055         echo "exec grep -v '^[  ]*#'" >spitshell
1056         chmod +x spitshell
1057         $eunicefix spitshell
1058         spitshell=`pwd`/spitshell
1059         cd UU
1060         echo "I presume that if # doesn't work, #! won't work either!"
1061         sharpbang=': use '
1062 fi
1063 rm -f try today
1064
1065 : figure out how to guarantee sh startup
1066 case "$startsh" in
1067 '') startsh=${sharpbang}${sh} ;;
1068 *)
1069 esac
1070 cat >try <<EOSS
1071 $startsh
1072 set abc
1073 test "$?abc" != 1
1074 EOSS
1075
1076 chmod +x try
1077 $eunicefix try
1078 if ./try; then
1079         : echo "Yup, it does."
1080 else
1081         echo "Hmm... '$startsh' does not guarantee sh startup..."
1082         echo "You may have to fix up the shell scripts to make sure $sh runs them."
1083 fi
1084 rm -f try
1085
1086
1087 : Save command line options in file UU/cmdline.opt for later use in
1088 : generating config.sh.
1089 cat > cmdline.opt <<EOSH
1090 # Configure command line arguments.
1091 config_arg0='$0'
1092 config_args='$*'
1093 config_argc=$#
1094 EOSH
1095 argn=1
1096 for arg in "$@"; do
1097         cat >>cmdline.opt <<EOSH
1098 config_arg$argn='$arg'
1099 EOSH
1100         argn=`expr $argn + 1`
1101 done
1102
1103 : produce awk script to parse command line options
1104 cat >options.awk <<'EOF'
1105 BEGIN {
1106         optstr = "dD:eEf:hKOrsSU:V";    # getopt-style specification
1107
1108         len = length(optstr);
1109         for (i = 1; i <= len; i++) {
1110                 c = substr(optstr, i, 1);
1111                 if (i < len) a = substr(optstr, i + 1, 1); else a = "";
1112                 if (a == ":") {
1113                         arg[c] = 1;
1114                         i++;
1115                 }
1116                 opt[c] = 1;
1117         }
1118 }
1119 {
1120         expect = 0;
1121         str = $0;
1122         if (substr(str, 1, 1) != "-") {
1123                 printf("'%s'\n", str);
1124                 next;
1125         }
1126         len = length($0);
1127         for (i = 2; i <= len; i++) {
1128                 c = substr(str, i, 1);
1129                 if (!opt[c]) {
1130                         printf("-%s\n", substr(str, i));
1131                         next;
1132                 }
1133                 printf("-%s\n", c);
1134                 if (arg[c]) {
1135                         if (i < len)
1136                                 printf("'%s'\n", substr(str, i + 1));
1137                         else
1138                                 expect = 1;
1139                         next;
1140                 }
1141         }
1142 }
1143 END {
1144         if (expect)
1145                 print "?";
1146 }
1147 EOF
1148
1149 : process the command line options
1150 set X `for arg in "$@"; do echo "X$arg"; done |
1151         sed -e s/X// | awk -f options.awk`
1152 eval "set $*"
1153 shift
1154 rm -f options.awk
1155
1156 : set up default values
1157 fastread=''
1158 reuseval=false
1159 config_sh=''
1160 alldone=''
1161 error=''
1162 silent=''
1163 extractsh=''
1164 override=''
1165 knowitall=''
1166 rm -f optdef.sh
1167 cat >optdef.sh <<EOS
1168 $startsh
1169 EOS
1170
1171
1172 : option parsing
1173 while test $# -gt 0; do
1174         case "$1" in
1175         -d) shift; fastread=yes;;
1176         -e) shift; alldone=cont;;
1177         -f)
1178                 shift
1179                 cd ..
1180                 if test -r "$1"; then
1181                         config_sh="$1"
1182                 else
1183                         echo "$me: cannot read config file $1." >&2
1184                         error=true
1185                 fi
1186                 cd UU
1187                 shift;;
1188         -h) shift; error=true;;
1189         -r) shift; reuseval=true;;
1190         -s) shift; silent=true; realsilent=true;;
1191         -E) shift; alldone=exit;;
1192         -K) shift; knowitall=true;;
1193         -O) shift; override=true;;
1194         -S) shift; silent=true; extractsh=true;;
1195         -D)
1196                 shift
1197                 case "$1" in
1198                 *=)
1199                         echo "$me: use '-U symbol=', not '-D symbol='." >&2
1200                         echo "$me: ignoring -D $1" >&2
1201                         ;;
1202                 *=*) echo "$1" | \
1203                                 sed -e "s/'/'\"'\"'/g" -e "s/=\(.*\)/='\1'/" >> optdef.sh;;
1204                 *) echo "$1='define'" >> optdef.sh;;
1205                 esac
1206                 shift
1207                 ;;
1208         -U)
1209                 shift
1210                 case "$1" in
1211                 *=) echo "$1" >> optdef.sh;;
1212                 *=*)
1213                         echo "$me: use '-D symbol=val', not '-U symbol=val'." >&2
1214                         echo "$me: ignoring -U $1" >&2
1215                         ;;
1216                 *) echo "$1='undef'" >> optdef.sh;;
1217                 esac
1218                 shift
1219                 ;;
1220         -V) echo "$me generated by metaconfig 3.0 PL70." >&2
1221                 exit 0;;
1222         --) break;;
1223         -*) echo "$me: unknown option $1" >&2; shift; error=true;;
1224         *) break;;
1225         esac
1226 done
1227
1228 case "$error" in
1229 true)
1230         cat >&2 <<EOM
1231 Usage: $me [-dehrsEKOSV] [-f config.sh] [-D symbol] [-D symbol=value]
1232                  [-U symbol] [-U symbol=]
1233   -d : use defaults for all answers.
1234   -e : go on without questioning past the production of config.sh.
1235   -f : specify an alternate default configuration file.
1236   -h : print this help message and exit (with an error status).
1237   -r : reuse C symbols value if possible (skips costly nm extraction).
1238   -s : silent mode, only echoes questions and essential information.
1239   -D : define symbol to have some value:
1240          -D symbol         symbol gets the value 'define'
1241          -D symbol=value   symbol gets the value 'value'
1242   -E : stop at the end of questions, after having produced config.sh.
1243   -K : do not use unless you know what you are doing.
1244   -O : let -D and -U override definitions from loaded configuration file.
1245   -S : perform variable substitutions on all .SH files (can mix with -f)
1246   -U : undefine symbol:
1247          -U symbol    symbol gets the value 'undef'
1248          -U symbol=   symbol gets completely empty
1249   -V : print version number and exit (with a zero status).
1250 EOM
1251         exit 1
1252         ;;
1253 esac
1254
1255 : Sanity checks
1256 case "$fastread$alldone" in
1257 yescont|yesexit) ;;
1258 *)
1259         if test ! -t 0; then
1260                 echo "Say 'sh Configure', not 'sh <Configure'"
1261                 exit 1
1262         fi
1263         ;;
1264 esac
1265
1266 exec 4>&1
1267 case "$silent" in
1268 true) exec 1>/dev/null;;
1269 esac
1270
1271 : run the defines and the undefines, if any, but leave the file out there...
1272 touch optdef.sh
1273 . ./optdef.sh
1274
1275 : set package name
1276 package=perl5
1277 first=`echo $package | sed -e 's/^\(.\).*/\1/'`
1278 last=`echo $package | sed -e 's/^.\(.*\)/\1/'`
1279 case "`echo AbyZ | tr '[:lower:]' '[:upper:]' 2>/dev/null`" in
1280 ABYZ) spackage=`echo $first | tr '[:lower:]' '[:upper:]'`$last;;
1281 *) spackage=`echo $first | tr '[a-z]' '[A-Z]'`$last;;
1282 esac
1283
1284 : Some greps do not return status, grrr.
1285 echo "grimblepritz" >grimble
1286 if grep blurfldyick grimble >/dev/null 2>&1 ; then
1287         contains=contains
1288 elif grep grimblepritz grimble >/dev/null 2>&1 ; then
1289         contains=grep
1290 else
1291         contains=contains
1292 fi
1293 rm -f grimble
1294 : the following should work in any shell
1295 case "$contains" in
1296 contains*)
1297         echo " "
1298         echo "AGH!  Grep doesn't return a status.  Attempting remedial action."
1299         cat >contains <<'EOSS'
1300 grep "$1" "$2" >.greptmp && cat .greptmp && test -s .greptmp
1301 EOSS
1302 chmod +x contains
1303 esac
1304
1305 : Find the path to the source tree
1306 case "$src" in
1307 '') case "$0" in
1308     */*) src=`echo $0 | sed -e 's%/[^/][^/]*$%%'`
1309          case "$src" in
1310          /*)    ;;
1311          *)     src=`cd ../$src && pwd` ;;
1312          esac
1313          ;;
1314     *)   src='.';;
1315     esac;;
1316 esac
1317 case "$src" in
1318 '')     src=/
1319         rsrc=/
1320         ;;
1321 /*) rsrc="$src";;
1322 *) rsrc="../$src";;
1323 esac
1324 if test -f $rsrc/Configure && \
1325         $contains "^package=$package$" $rsrc/Configure >/dev/null 2>&1
1326 then
1327    : found it, so we are ok.
1328 else
1329         rsrc=''
1330         for src in . .. ../.. ../../.. ../../../..; do
1331                 if test -f ../$src/Configure && \
1332                         $contains "^package=$package$" ../$src/Configure >/dev/null 2>&1
1333                 then
1334                         rsrc=../$src
1335                         break
1336                 fi
1337         done
1338 fi
1339 case "$rsrc" in
1340 '')
1341         cat <<EOM >&4
1342
1343 Sorry, I can't seem to locate the source dir for $package.  Please start
1344 Configure with an explicit path -- i.e. /some/path/Configure.
1345
1346 EOM
1347         exit 1
1348         ;;
1349 ../.)   rsrc='..';;
1350 *)
1351         echo " "
1352         echo "Sources for $package found in \"$src\"." >&4
1353         ;;
1354 esac
1355
1356 : script used to extract .SH files with variable substitutions
1357 cat >extract <<'EOS'
1358 CONFIGDOTSH=true
1359 echo "Doing variable substitutions on .SH files..."
1360 if test -f $src/MANIFEST; then
1361         set x `awk '{print $1}' <$src/MANIFEST | grep '\.SH$'`
1362 else
1363         echo "(Looking for .SH files under the source directory.)"
1364         set x `(cd $src; find . -name "*.SH" -print)`
1365 fi
1366 shift
1367 case $# in
1368 0) set x `(cd $src; echo *.SH)`; shift;;
1369 esac
1370 if test ! -f $src/$1; then
1371         shift
1372 fi
1373 mkdir_p='
1374 name=$1;
1375 create="";
1376 while test $name; do
1377         if test ! -d "$name"; then
1378                 create="$name $create";
1379                 name=`echo $name | sed -e "s|^[^/]*$||"`;
1380                 name=`echo $name | sed -e "s|\(.*\)/.*|\1|"`;
1381         else
1382                 name="";
1383         fi;
1384 done;
1385 for file in $create; do
1386         mkdir $file;
1387 done
1388 '
1389 for file in $*; do
1390         case "$src" in
1391         ".")
1392                 case "$file" in
1393                 */*)
1394                         dir=`expr X$file : 'X\(.*\)/'`
1395                         file=`expr X$file : 'X.*/\(.*\)'`
1396                         (cd $dir && . ./$file)
1397                         ;;
1398                 *)
1399                         . ./$file
1400                         ;;
1401                 esac
1402                 ;;
1403         *)
1404                 case "$file" in
1405                 */*)
1406                         dir=`expr X$file : 'X\(.*\)/'`
1407                         file=`expr X$file : 'X.*/\(.*\)'`
1408                         (set x $dir; shift; eval $mkdir_p)
1409                         sh <$src/$dir/$file
1410                         ;;
1411                 *)
1412                         sh <$src/$file
1413                         ;;
1414                 esac
1415                 ;;
1416         esac
1417 done
1418 if test -f $src/config_h.SH; then
1419         if test ! -f config.h; then
1420         : oops, they left it out of MANIFEST, probably, so do it anyway.
1421         . $src/config_h.SH
1422         fi
1423 fi
1424 EOS
1425
1426 : extract files and exit if asked to do so
1427 case "$extractsh" in
1428 true)
1429         case "$realsilent" in
1430         true) ;;
1431         *) exec 1>&4;;
1432         esac
1433         case "$config_sh" in
1434         '') config_sh='config.sh';;
1435         esac
1436         echo " "
1437         echo "Fetching answers from $config_sh..."
1438         cd ..
1439         . $config_sh
1440         test "$override" && . ./optdef.sh
1441         echo " "
1442         . UU/extract
1443         rm -rf UU
1444         echo "Done."
1445         exit 0
1446         ;;
1447 esac
1448
1449 : Eunice requires " " instead of "", can you believe it
1450 echo " "
1451 : Here we go...
1452 echo "Beginning of configuration questions for $package."
1453
1454 trap 'echo " "; test -d ../UU && rm -rf X $rmlist; exit 1' 1 2 3 15
1455
1456 : first determine how to suppress newline on echo command
1457 echo " "
1458 echo "Checking echo to see how to suppress newlines..."
1459 (echo "hi there\c" ; echo " ") >.echotmp
1460 if $contains c .echotmp >/dev/null 2>&1 ; then
1461         echo "...using -n."
1462         n='-n'
1463         c=''
1464 else
1465         cat <<'EOM'
1466 ...using \c
1467 EOM
1468         n=''
1469         c='\c'
1470 fi
1471 echo $n "The star should be here-->$c"
1472 echo '*'
1473 rm -f .echotmp
1474
1475 : Now test for existence of everything in MANIFEST
1476 echo " "
1477 if test -f $rsrc/MANIFEST; then
1478         echo "First let's make sure your kit is complete.  Checking..." >&4
1479         awk '$1 !~ /PACK[A-Z]+/ {print $1}' $rsrc/MANIFEST | split -50
1480         rm -f missing
1481         tmppwd=`pwd`
1482         for filelist in x??; do
1483                 (cd $rsrc; ls `cat $tmppwd/$filelist` >/dev/null 2>>$tmppwd/missing)
1484         done
1485         if test -s missing; then
1486                 cat missing >&4
1487                 cat >&4 <<'EOM'
1488
1489 THIS PACKAGE SEEMS TO BE INCOMPLETE.
1490
1491 You have the option of continuing the configuration process, despite the
1492 distinct possibility that your kit is damaged, by typing 'y'es.  If you
1493 do, don't blame me if something goes wrong.  I advise you to type 'n'o
1494 and contact the author (perlbug@perl.com).
1495
1496 EOM
1497                 echo $n "Continue? [n] $c" >&4
1498                 read ans
1499                 case "$ans" in
1500                 y*)
1501                         echo "Continuing..." >&4
1502                         rm -f missing
1503                         ;;
1504                 *)
1505                         echo "ABORTING..." >&4
1506                         kill $$
1507                         ;;
1508                 esac
1509         else
1510                 echo "Looks good..."
1511         fi
1512 else
1513         echo "There is no MANIFEST file.  I hope your kit is complete !"
1514 fi
1515 rm -f missing x??
1516
1517 echo " "
1518 : Find the appropriate value for a newline for tr
1519 if test -n "$DJGPP"; then
1520        trnl='\012'
1521 fi
1522 if test X"$trnl" = X; then
1523         case "`echo foo|tr '\n' x 2>/dev/null`" in
1524         foox) trnl='\n' ;;
1525         esac
1526 fi
1527 if test X"$trnl" = X; then
1528         case "`echo foo|tr '\012' x 2>/dev/null`" in
1529         foox) trnl='\012' ;;
1530         esac
1531 fi
1532 if test X"$trnl" = X; then
1533         cat <<EOM >&2
1534
1535 $me: Fatal Error: cannot figure out how to translate newlines with 'tr'.
1536
1537 EOM
1538         exit 1
1539 fi
1540
1541 : compute the number of columns on the terminal for proper question formatting
1542 case "$COLUMNS" in
1543 '') COLUMNS='80';;
1544 esac
1545
1546 : set up the echo used in my read
1547 myecho="case \"\$xxxm\" in
1548 '') echo $n \"\$rp $c\" >&4;;
1549 *) case \"\$rp\" in
1550         '') echo $n \"[\$xxxm] $c\";;
1551         *)
1552                 if test \`echo \"\$rp [\$xxxm]  \" | wc -c\` -ge $COLUMNS; then
1553                         echo \"\$rp\" >&4
1554                         echo $n \"[\$xxxm] $c\" >&4
1555                 else
1556                         echo $n \"\$rp [\$xxxm] $c\" >&4
1557                 fi
1558                 ;;
1559         esac;;
1560 esac"
1561
1562 : now set up to do reads with possible shell escape and default assignment
1563 cat <<EOSC >myread
1564 $startsh
1565 xxxm=\$dflt
1566 $myecho
1567 ans='!'
1568 case "\$fastread" in
1569 yes) case "\$dflt" in
1570         '') ;;
1571         *) ans='';
1572                 case "\$silent-\$rp" in
1573                 true-) ;;
1574                 *) echo " " >&4;;
1575                 esac;;
1576         esac;;
1577 *) case "\$silent" in
1578         true) case "\$rp" in
1579                 '') ans='';;
1580                 esac;;
1581         esac;;
1582 esac
1583 while expr "X\$ans" : "X!" >/dev/null; do
1584         read answ
1585         set x \$xxxm
1586         shift
1587         aok=''; eval "ans=\\"\$answ\\"" && aok=y
1588         case  "\$answ" in
1589         "!")
1590                 sh 1>&4
1591                 echo " "
1592                 $myecho
1593                 ;;
1594         !*)
1595                 set x \`expr "X\$ans" : "X!\(.*\)\$"\`
1596                 shift
1597                 sh 1>&4 -c "\$*"
1598                 echo " "
1599                 $myecho
1600                 ;;
1601         "\$ans")
1602                 case "\$ans" in
1603                 \\&*)
1604                         set x \`expr "X\$ans" : "X&\(.*\)\$"\`
1605                         shift
1606                         case "\$1" in
1607                         -d)
1608                                 fastread=yes
1609                                 echo "(OK, I'll run with -d after this question.)" >&4
1610                                 ;;
1611                         -*)
1612                                 echo "*** Sorry, \$1 not supported yet." >&4
1613                                 ;;
1614                         esac
1615                         $myecho
1616                         ans=!
1617                         ;;
1618                 esac;;
1619         *)
1620                 case "\$aok" in
1621                 y)
1622                         echo "*** Substitution done -- please confirm."
1623                         xxxm="\$ans"
1624                         ans=\`echo $n "\$ans$c" | tr '$trnl' ' '\`
1625                         xxxm="\$ans"
1626                         ans=!
1627                         ;;
1628                 *)
1629                         echo "*** Error -- try again."
1630                         ans=!
1631                         ;;
1632                 esac
1633                 $myecho
1634                 ;;
1635         esac
1636         case "\$ans\$xxxm\$nostick" in
1637         '')
1638                 ans=!
1639                 $myecho
1640                 ;;
1641         esac
1642 done
1643 case "\$ans" in
1644 '') ans="\$xxxm";;
1645 esac
1646 EOSC
1647
1648 : create .config dir to save info across Configure sessions
1649 test -d ../.config || mkdir ../.config
1650 cat >../.config/README <<EOF
1651 This directory created by Configure to save information that should
1652 persist across sessions for $package.
1653
1654 You may safely delete it if you wish.
1655 EOF
1656
1657 : general instructions
1658 needman=true
1659 firsttime=true
1660 user=`(logname) 2>/dev/null`
1661 case "$user" in
1662 '') user=`whoami 2>&1`;;
1663 esac
1664 if $contains "^$user\$" ../.config/instruct >/dev/null 2>&1; then
1665         firsttime=false
1666         echo " "
1667         rp='Would you like to see the instructions?'
1668         dflt=n
1669         . ./myread
1670         case "$ans" in
1671         [yY]*) ;;
1672         *) needman=false;;
1673         esac
1674 fi
1675 if $needman; then
1676         cat <<EOH
1677
1678 This installation shell script will examine your system and ask you questions
1679 to determine how the perl5 package should be installed. If you get
1680 stuck on a question, you may use a ! shell escape to start a subshell or
1681 execute a command.  Many of the questions will have default answers in square
1682 brackets; typing carriage return will give you the default.
1683
1684 On some of the questions which ask for file or directory names you are allowed
1685 to use the ~name construct to specify the login directory belonging to "name",
1686 even if you don't have a shell which knows about that.  Questions where this is
1687 allowed will be marked "(~name ok)".
1688
1689 EOH
1690         rp=''
1691         dflt='Type carriage return to continue'
1692         . ./myread
1693         cat <<'EOH'
1694
1695 The prompter used in this script allows you to use shell variables and
1696 backticks in your answers.  You may use $1, $2, etc...  to refer to the words
1697 in the default answer, as if the default line was a set of arguments given to a
1698 script shell.  This means you may also use $* to repeat the whole default line,
1699 so you do not have to re-type everything to add something to the default.
1700
1701 Everytime there is a substitution, you will have to confirm.  If there is an
1702 error (e.g. an unmatched backtick), the default answer will remain unchanged
1703 and you will be prompted again.
1704
1705 If you are in a hurry, you may run 'Configure -d'.  This will bypass nearly all
1706 the questions and use the computed defaults (or the previous answers if there
1707 was already a config.sh file). Type 'Configure -h' for a list of options.
1708 You may also start interactively and then answer '& -d' at any prompt to turn
1709 on the non-interactive behaviour for the remainder of the execution.
1710
1711 EOH
1712         . ./myread
1713         cat <<EOH
1714
1715 Much effort has been expended to ensure that this shell script will run on any
1716 Unix system.  If despite that it blows up on yours, your best bet is to edit
1717 Configure and run it again.  If you can't run Configure for some reason,
1718 you'll have to generate a config.sh file by hand.  Whatever problems you
1719 have, let me (perlbug@perl.com) know how I blew it.
1720
1721 This installation script affects things in two ways:
1722
1723 1) it may do direct variable substitutions on some of the files included
1724    in this kit.
1725 2) it builds a config.h file for inclusion in C programs.  You may edit
1726    any of these files as the need arises after running this script.
1727
1728 If you make a mistake on a question, there is no easy way to back up to it
1729 currently.  The easiest thing to do is to edit config.sh and rerun all the SH
1730 files.  Configure will offer to let you do this before it runs the SH files.
1731
1732 EOH
1733         dflt='Type carriage return to continue'
1734         . ./myread
1735         case "$firsttime" in
1736         true) echo $user >>../.config/instruct;;
1737         esac
1738 fi
1739
1740 : find out where common programs are
1741 echo " "
1742 echo "Locating common programs..." >&4
1743 cat <<EOSC >loc
1744 $startsh
1745 case \$# in
1746 0) exit 1;;
1747 esac
1748 thing=\$1
1749 shift
1750 dflt=\$1
1751 shift
1752 for dir in \$*; do
1753         case "\$thing" in
1754         .)
1755         if test -d \$dir/\$thing; then
1756                 echo \$dir
1757                 exit 0
1758         fi
1759         ;;
1760         *)
1761         for thisthing in \$dir/\$thing; do
1762                 : just loop through to pick last item
1763         done
1764         if test -f \$thisthing; then
1765                 echo \$thisthing
1766                 exit 0
1767         elif test -f \$dir/\$thing.exe; then
1768                 if test -n "$DJGPP"; then
1769                         echo \$dir/\$thing.exe
1770                 else
1771                         : on Eunice apparently
1772                         echo \$dir/\$thing
1773                 fi
1774                 exit 0
1775         fi
1776         ;;
1777         esac
1778 done
1779 echo \$dflt
1780 exit 1
1781 EOSC
1782 chmod +x loc
1783 $eunicefix loc
1784 loclist="
1785 awk
1786 cat
1787 comm
1788 cp
1789 echo
1790 expr
1791 grep
1792 ls
1793 make
1794 mkdir
1795 rm
1796 sed
1797 sort
1798 touch
1799 tr
1800 uniq
1801 "
1802 trylist="
1803 Mcc
1804 ar
1805 byacc
1806 cpp
1807 csh
1808 date
1809 egrep
1810 gzip
1811 less
1812 ln
1813 more
1814 nm
1815 nroff
1816 pg
1817 test
1818 uname
1819 zip
1820 "
1821 pth=`echo $PATH | sed -e "s/$p_/ /g"`
1822 pth="$pth /lib /usr/lib"
1823 for file in $loclist; do
1824         eval xxx=\$$file
1825         case "$xxx" in
1826         /*|?:[\\/]*)
1827                 if test -f "$xxx"; then
1828                         : ok
1829                 else
1830                         echo "WARNING: no $xxx -- ignoring your setting for $file." >&4
1831                         xxx=`./loc $file $file $pth`
1832                 fi
1833                 ;;
1834         '') xxx=`./loc $file $file $pth`;;
1835         *) xxx=`./loc $xxx $xxx $pth`;;
1836         esac
1837         eval $file=$xxx
1838         eval _$file=$xxx
1839         case "$xxx" in
1840         /*)
1841                 echo $file is in $xxx.
1842                 ;;
1843         ?:[\\/]*)
1844                 echo $file is in $xxx.
1845                 ;;
1846         *)
1847                 echo "I don't know where '$file' is, and my life depends on it." >&4
1848                 echo "Go find a public domain implementation or fix your PATH setting!" >&4
1849                 exit 1
1850                 ;;
1851         esac
1852 done
1853 echo " "
1854 echo "Don't worry if any of the following aren't found..."
1855 say=offhand
1856 for file in $trylist; do
1857         eval xxx=\$$file
1858         case "$xxx" in
1859         /*|?:[\\/]*)
1860                 if test -f "$xxx"; then
1861                         : ok
1862                 else
1863                         echo "WARNING: no $xxx -- ignoring your setting for $file." >&4
1864                         xxx=`./loc $file $file $pth`
1865                 fi
1866                 ;;
1867         '') xxx=`./loc $file $file $pth`;;
1868         *) xxx=`./loc $xxx $xxx $pth`;;
1869         esac
1870         eval $file=$xxx
1871         eval _$file=$xxx
1872         case "$xxx" in
1873         /*)
1874                 echo $file is in $xxx.
1875                 ;;
1876         ?:[\\/]*)
1877                 echo $file is in $xxx.
1878                 ;;
1879         *)
1880                 echo "I don't see $file out there, $say."
1881                 say=either
1882                 ;;
1883         esac
1884 done
1885 case "$egrep" in
1886 egrep)
1887         echo "Substituting grep for egrep."
1888         egrep=$grep
1889         ;;
1890 esac
1891 case "$ln" in
1892 ln)
1893         echo "Substituting cp for ln."
1894         ln=$cp
1895         ;;
1896 esac
1897 case "$test" in
1898 test)
1899         echo "Hopefully test is built into your sh."
1900         ;;
1901 *)
1902         if `sh -c "PATH= test true" >/dev/null 2>&1`; then
1903                 echo "Using the test built into your sh."
1904                 test=test
1905                 _test=test
1906         fi
1907         ;;
1908 esac
1909 case "$echo" in
1910 echo)
1911         echo "Hopefully echo is built into your sh."
1912         ;;
1913 '') ;;
1914 *)
1915         echo " "
1916 echo "Checking compatibility between $echo and builtin echo (if any)..." >&4
1917         $echo $n "hi there$c" >foo1
1918         echo $n "hi there$c" >foo2
1919         if cmp foo1 foo2 >/dev/null 2>&1; then
1920                 echo "They are compatible.  In fact, they may be identical."
1921         else
1922                 case "$n" in
1923                 '-n') n='' c='\c';;
1924                 *) n='-n' c='';;
1925                 esac
1926                 cat <<FOO
1927 They are not compatible!  You are probably running ksh on a non-USG system.
1928 I'll have to use $echo instead of the builtin, since Bourne shell doesn't
1929 have echo built in and we may have to run some Bourne shell scripts.  That
1930 means I'll have to use '$n$c' to suppress newlines now.  Life is ridiculous.
1931
1932 FOO
1933                 $echo $n "The star should be here-->$c"
1934                 $echo "*"
1935         fi
1936         $rm -f foo1 foo2
1937         ;;
1938 esac
1939
1940 : determine whether symbolic links are supported
1941 echo " "
1942 $touch blurfl
1943 if $ln -s blurfl sym > /dev/null 2>&1 ; then
1944         echo "Symbolic links are supported." >&4
1945         lns="$ln -s"
1946 else
1947         echo "Symbolic links are NOT supported." >&4
1948         lns="$ln"
1949 fi
1950 $rm -f blurfl sym
1951
1952 : see whether [:lower:] and [:upper:] are supported character classes
1953 echo " "
1954 case "`echo AbyZ | $tr '[:lower:]' '[:upper:]' 2>/dev/null`" in
1955 ABYZ)
1956         echo "Good, your tr supports [:lower:] and [:upper:] to convert case." >&4
1957         up='[:upper:]'
1958         low='[:lower:]'
1959         ;;
1960 *)      # There is a discontinuity in EBCDIC between 'I' and 'J'
1961         # (0xc9 and 0xd1), therefore that is a nice testing point.
1962         if test "X$up" = X -o "X$low" = X; then
1963             case "`echo IJ | $tr '[I-J]' '[i-j]' 2>/dev/null`" in
1964             ij) up='[A-Z]'
1965                 low='[a-z]'
1966                 ;;
1967             esac
1968         fi
1969         if test "X$up" = X -o "X$low" = X; then
1970             case "`echo IJ | $tr I-J i-j 2>/dev/null`" in
1971             ij) up='A-Z'
1972                 low='a-z'
1973                 ;;
1974             esac
1975         fi
1976         if test "X$up" = X -o "X$low" = X; then
1977             case "`echo IJ | od -x 2>/dev/null`" in
1978             *C9D1*|*c9d1*)
1979                 echo "Hey, this might be EBCDIC." >&4
1980                 if test "X$up" = X -o "X$low" = X; then
1981                     case "`echo IJ | $tr '[A-IJ-RS-Z]' '[a-ij-rs-z]' 2>/dev/null`" in
1982                     ij) up='[A-IJ-RS-Z]'
1983                         low='[a-ij-rs-z]'
1984                         ;;
1985                     esac
1986                 fi
1987                 if test "X$up" = X -o "X$low" = X; then
1988                     case "`echo IJ | $tr A-IJ-RS-Z a-ij-rs-z 2>/dev/null`" in
1989                     ij) up='A-IJ-RS-Z'
1990                         low='a-ij-rs-z'
1991                         ;;
1992                     esac
1993                 fi
1994                 ;;
1995             esac
1996         fi
1997 esac
1998 case "`echo IJ | $tr \"$up\" \"$low\" 2>/dev/null`" in
1999 ij)
2000     echo "Using $up and $low to convert case." >&4
2001     ;;
2002 *)
2003     echo "I don't know how to translate letters from upper to lower case." >&4
2004     echo "Your tr is not acting any way I know of." >&4
2005     exit 1
2006     ;;
2007 esac
2008 : set up the translation script tr, must be called with ./tr of course
2009 cat >tr <<EOSC
2010 $startsh
2011 case "\$1\$2" in
2012 '[A-Z][a-z]') exec $tr '$up' '$low';;
2013 '[a-z][A-Z]') exec $tr '$low' '$up';;
2014 esac
2015 exec $tr "\$@"
2016 EOSC
2017 chmod +x tr
2018 $eunicefix tr
2019
2020 : Try to determine whether config.sh was made on this system
2021 case "$config_sh" in
2022 '')
2023 myuname=`( ($uname -a) 2>/dev/null || hostname) 2>&1`
2024 # tr '[A-Z]' '[a-z]' would not work in EBCDIC
2025 # because the A-Z/a-z are not consecutive.
2026 myuname=`echo $myuname | $sed -e 's/^[^=]*=//' -e 's/\///g' | \
2027         ./tr '[A-Z]' '[a-z]' | $tr $trnl ' '`
2028 newmyuname="$myuname"
2029 dflt=n
2030 case "$knowitall" in
2031 '')
2032         if test -f ../config.sh; then
2033                 if $contains myuname= ../config.sh >/dev/null 2>&1; then
2034                         eval "`grep myuname= ../config.sh`"
2035                 fi
2036                 if test "X$myuname" = "X$newmyuname"; then
2037                         dflt=y
2038                 fi
2039         fi
2040         ;;
2041 *) dflt=y;;
2042 esac
2043
2044 : Get old answers from old config file if Configure was run on the
2045 : same system, otherwise use the hints.
2046 hint=default
2047 cd ..
2048 if test -f config.sh; then
2049         echo " "
2050         rp="I see a config.sh file.  Shall I use it to set the defaults?"
2051         . UU/myread
2052         case "$ans" in
2053         n*|N*) echo "OK, I'll ignore it."; mv config.sh config.sh.old;;
2054         *)  echo "Fetching default answers from your old config.sh file..." >&4
2055                 tmp_n="$n"
2056                 tmp_c="$c"
2057                 tmp_sh="$sh"
2058                 . ./config.sh
2059                 cp config.sh UU
2060                 n="$tmp_n"
2061                 c="$tmp_c"
2062                 : Older versions did not always set $sh.  Catch re-use of such
2063                 : an old config.sh.
2064                 case "$sh" in
2065                 '') sh="$tmp_sh" ;;
2066                 esac
2067                 hint=previous
2068                 ;;
2069         esac
2070 fi
2071 if test ! -f config.sh; then
2072         $cat <<EOM
2073
2074 First time through, eh?  I have some defaults handy for some systems
2075 that need some extra help getting the Configure answers right:
2076
2077 EOM
2078         (cd $src/hints; ls -C *.sh) | $sed 's/\.sh/   /g' >&4
2079         dflt=''
2080         : Half the following guesses are probably wrong... If you have better
2081         : tests or hints, please send them to perlbug@perl.com
2082         : The metaconfig authors would also appreciate a copy...
2083         $test -f /irix && osname=irix
2084         $test -f /xenix && osname=sco_xenix
2085         $test -f /dynix && osname=dynix
2086         $test -f /dnix && osname=dnix
2087         $test -f /lynx.os && osname=lynxos
2088         $test -f /unicos && osname=unicos && osvers=`$uname -r`
2089         $test -f /unicosmk.ar && osname=unicosmk && osvers=`$uname -r`
2090         $test -f /bin/mips && /bin/mips && osname=mips
2091         $test -d /NextApps && set X `hostinfo | grep 'NeXT Mach.*:' | \
2092                 $sed -e 's/://' -e 's/\./_/'` && osname=next && osvers=$4
2093         $test -d /usr/apollo/bin && osname=apollo
2094         $test -f /etc/saf/_sactab && osname=svr4
2095         $test -d /usr/include/minix && osname=minix
2096         if $test -d /MachTen -o -d /MachTen_Folder; then
2097                 osname=machten
2098                 if $test -x /sbin/version; then
2099                         osvers=`/sbin/version | $awk '{print $2}' |
2100                         $sed -e 's/[A-Za-z]$//'`
2101                 elif $test -x /usr/etc/version; then
2102                         osvers=`/usr/etc/version | $awk '{print $2}' |
2103                         $sed -e 's/[A-Za-z]$//'`
2104                 else
2105                         osvers="$2.$3"
2106                 fi
2107         fi
2108        $test -f /sys/posix.dll &&
2109                $test -f /usr/bin/what &&
2110                set X `/usr/bin/what /sys/posix.dll` &&
2111                $test "$3" = UWIN &&
2112                osname=uwin &&
2113                osvers="$5"
2114         if $test -f $uname; then
2115                 set X $myuname
2116                 shift
2117
2118                 case "$5" in
2119                 fps*) osname=fps ;;
2120                 mips*)
2121                         case "$4" in
2122                         umips) osname=umips ;;
2123                         *) osname=mips ;;
2124                         esac;;
2125                 [23]100) osname=mips ;;
2126                 next*) osname=next ;;
2127                 i386*)
2128                         tmp=`/bin/uname -X 2>/dev/null|awk '/3\.2v[45]/{ print $(NF) }'`
2129                         if $test "$tmp" != "" -a "$3" = "3.2" -a -f '/etc/systemid'; then
2130                                 osname='sco'
2131                                 osvers=$tmp
2132                         elif $test -f /etc/kconfig; then
2133                                 osname=isc
2134                                 if test "$lns" = "$ln -s"; then
2135                                         osvers=4
2136                                 elif $contains _SYSV3 /usr/include/stdio.h > /dev/null 2>&1 ; then
2137                                         osvers=3
2138                                 elif $contains _POSIX_SOURCE /usr/include/stdio.h > /dev/null 2>&1 ; then
2139                                         osvers=2
2140                                 fi
2141                         fi
2142                         tmp=''
2143                         ;;
2144                 pc*)
2145                         if test -n "$DJGPP"; then
2146                                 osname=dos
2147                                 osvers=djgpp
2148                         fi
2149                         ;;
2150                 esac
2151
2152                 case "$1" in
2153                 aix) osname=aix
2154                         tmp=`( (oslevel) 2>/dev/null || echo "not found") 2>&1`
2155                         case "$tmp" in
2156                         'not found') osvers="$4"."$3" ;;
2157                         '<3240'|'<>3240') osvers=3.2.0 ;;
2158                         '=3240'|'>3240'|'<3250'|'<>3250') osvers=3.2.4 ;;
2159                         '=3250'|'>3250') osvers=3.2.5 ;;
2160                         *) osvers=$tmp;;
2161                         esac
2162                         ;;
2163                 *dc.osx) osname=dcosx
2164                         osvers="$3"
2165                         ;;
2166                 dnix) osname=dnix
2167                         osvers="$3"
2168                         ;;
2169                 domainos) osname=apollo
2170                         osvers="$3"
2171                         ;;
2172                 dgux) osname=dgux 
2173                         osvers="$3"
2174                         ;;
2175                 dynixptx*) osname=dynixptx
2176                         osvers=`echo "$4"|sed 's/^v//'`
2177                         ;;
2178                 freebsd) osname=freebsd 
2179                         osvers="$3" ;;
2180                 genix) osname=genix ;;
2181                 hp*) osname=hpux 
2182                         osvers=`echo "$3" | $sed 's,.*\.\([0-9]*\.[0-9]*\),\1,'`
2183                         ;;
2184                 irix*) osname=irix
2185                         case "$3" in
2186                         4*) osvers=4 ;;
2187                         5*) osvers=5 ;;
2188                         *)      osvers="$3" ;;
2189                         esac
2190                         ;;
2191                 linux) osname=linux
2192                         case "$3" in
2193                         *)      osvers="$3" ;;
2194                         esac
2195                         ;;
2196                 MiNT) osname=mint
2197                         ;;
2198                 netbsd*) osname=netbsd
2199                         osvers="$3"
2200                         ;;
2201                 news-os) osvers="$3"
2202                         case "$3" in
2203                         4*) osname=newsos4 ;;
2204                         *) osname=newsos ;;
2205                         esac
2206                         ;;
2207                 bsd386) osname=bsd386
2208                         osvers=`$uname -r`
2209                         ;;
2210                 POSIX-BC | posix-bc ) osname=posix-bc
2211                         osvers="$3"
2212                         ;;
2213                 powerux | power_ux | powermax_os | powermaxos | \
2214                 powerunix | power_unix) osname=powerux
2215                         osvers="$3"
2216                         ;;
2217                 next*) osname=next ;;
2218                 solaris) osname=solaris
2219                         case "$3" in
2220                         5*) osvers=`echo $3 | $sed 's/^5/2/g'` ;;
2221                         *)      osvers="$3" ;;
2222                         esac
2223                         ;;
2224                 sunos) osname=sunos
2225                         case "$3" in
2226                         5*) osname=solaris
2227                                 osvers=`echo $3 | $sed 's/^5/2/g'` ;;
2228                         *)      osvers="$3" ;;
2229                         esac
2230                         ;;
2231                 titanos) osname=titanos
2232                         case "$3" in
2233                         1*) osvers=1 ;;
2234                         2*) osvers=2 ;;
2235                         3*) osvers=3 ;;
2236                         4*) osvers=4 ;;
2237                         *)      osvers="$3" ;;
2238                         esac
2239                         ;;
2240                 ultrix) osname=ultrix
2241                         osvers="$3"
2242                         ;;
2243                 osf1|mls+)      case "$5" in
2244                                 alpha)
2245                                         osname=dec_osf
2246                                         osvers=`echo "$3" | sed 's/^[xvt]//'`
2247                                         ;;
2248                         hp*)    osname=hp_osf1  ;;
2249                         mips)   osname=mips_osf1 ;;
2250                         esac
2251                         ;;
2252                 uts) osname=uts 
2253                         osvers="$3"
2254                         ;;
2255                 qnx) osname=qnx
2256                         osvers="$4"
2257                         ;;
2258                 $2) case "$osname" in
2259                         *isc*) ;;
2260                         *freebsd*) ;;
2261                         svr*)
2262                                 : svr4.x or possibly later
2263                                 case "svr$3" in 
2264                                 ${osname}*)
2265                                         osname=svr$3
2266                                         osvers=$4
2267                                         ;;
2268                                 esac
2269                                 case "$osname" in
2270                                 svr4.0)
2271                                         : Check for ESIX
2272                                         if test -f /stand/boot ; then
2273                                                 eval `grep '^INITPROG=[a-z/0-9]*$' /stand/boot`
2274                                                 if test -n "$INITPROG" -a -f "$INITPROG"; then
2275                         isesix=`strings -a $INITPROG|grep 'ESIX SYSTEM V/386 Release 4.0'`
2276                                                         if test -n "$isesix"; then
2277                                                                 osname=esix4
2278                                                         fi
2279                                                 fi
2280                                         fi
2281                                         ;;
2282                                 esac
2283                                 ;;
2284                         *)      if test -f /etc/systemid; then
2285                                         osname=sco
2286                                         set `echo $3 | $sed 's/\./ /g'` $4
2287                                         if $test -f $src/hints/sco_$1_$2_$3.sh; then
2288                                                 osvers=$1.$2.$3
2289                                         elif $test -f $src/hints/sco_$1_$2.sh; then
2290                                                 osvers=$1.$2
2291                                         elif $test -f $src/hints/sco_$1.sh; then
2292                                                 osvers=$1
2293                                         fi
2294                                 else
2295                                         case "$osname" in
2296                                         '') : Still unknown.  Probably a generic Sys V.
2297                                                 osname="sysv"
2298                                                 osvers="$3"
2299                                                 ;;
2300                                         esac
2301                                 fi
2302                                 ;;
2303                         esac
2304                         ;;
2305                 *)      case "$osname" in
2306                         '') : Still unknown.  Probably a generic BSD.
2307                                 osname="$1"
2308                                 osvers="$3"
2309                                 ;;
2310                         esac
2311                         ;;
2312                 esac
2313         else
2314                 if test -f /vmunix -a -f $src/hints/news_os.sh; then
2315                         (what /vmunix | UU/tr '[A-Z]' '[a-z]') > UU/kernel.what 2>&1
2316                         if $contains news-os UU/kernel.what >/dev/null 2>&1; then
2317                                 osname=news_os
2318                         fi
2319                         $rm -f UU/kernel.what
2320                 elif test -d c:/.; then
2321                         set X $myuname
2322                         osname=os2
2323                         osvers="$5"
2324                 fi
2325         fi
2326         
2327         : Now look for a hint file osname_osvers, unless one has been
2328         : specified already.
2329         case "$hintfile" in
2330         ''|' ')
2331                 file=`echo "${osname}_${osvers}" | $sed -e 's@\.@_@g' -e 's@_$@@'`
2332                 : Also try without trailing minor version numbers.
2333                 xfile=`echo $file | $sed -e 's@_[^_]*$@@'`
2334                 xxfile=`echo $xfile | $sed -e 's@_[^_]*$@@'`
2335                 xxxfile=`echo $xxfile | $sed -e 's@_[^_]*$@@'`
2336                 xxxxfile=`echo $xxxfile | $sed -e 's@_[^_]*$@@'`
2337                 case "$file" in
2338                 '') dflt=none ;;
2339                 *)  case "$osvers" in
2340                         '') dflt=$file
2341                                 ;;
2342                         *)  if $test -f $src/hints/$file.sh ; then
2343                                         dflt=$file
2344                                 elif $test -f $src/hints/$xfile.sh ; then
2345                                         dflt=$xfile
2346                                 elif $test -f $src/hints/$xxfile.sh ; then
2347                                         dflt=$xxfile
2348                                 elif $test -f $src/hints/$xxxfile.sh ; then
2349                                         dflt=$xxxfile
2350                                 elif $test -f $src/hints/$xxxxfile.sh ; then
2351                                         dflt=$xxxxfile
2352                                 elif $test -f "$src/hints/${osname}.sh" ; then
2353                                         dflt="${osname}"
2354                                 else
2355                                         dflt=none
2356                                 fi
2357                                 ;;
2358                         esac
2359                         ;;
2360                 esac
2361                 if $test -f Policy.sh ; then
2362                         case "$dflt" in
2363                         *Policy*) ;;
2364                         none) dflt="Policy" ;;
2365                         *) dflt="Policy $dflt" ;;
2366                         esac
2367                 fi
2368                 ;;
2369         *)
2370                 dflt=`echo $hintfile | $sed 's/\.sh$//'`
2371                 ;;
2372         esac
2373
2374         if $test -f Policy.sh ; then
2375                 $cat <<EOM
2376
2377 There's also a Policy hint file available, which should make the
2378 site-specific (policy) questions easier to answer.
2379 EOM
2380
2381         fi
2382
2383         $cat <<EOM
2384
2385 You may give one or more space-separated answers, or "none" if appropriate.
2386 A well-behaved OS will have no hints, so answering "none" or just "Policy"
2387 is a good thing.  DO NOT give a wrong version or a wrong OS.
2388
2389 EOM
2390
2391         rp="Which of these apply, if any?"
2392         . UU/myread
2393         tans=$ans
2394         for file in $tans; do
2395                 if $test X$file = XPolicy -a -f Policy.sh; then
2396                         . Policy.sh
2397                         $cat Policy.sh >> UU/config.sh
2398                 elif $test -f $src/hints/$file.sh; then
2399                         . $src/hints/$file.sh
2400                         $cat $src/hints/$file.sh >> UU/config.sh
2401                 elif $test X$tans = X -o X$tans = Xnone ; then
2402                         : nothing
2403                 else
2404                         : Give one chance to correct a possible typo.
2405                         echo "$file.sh does not exist"
2406                         dflt=$file
2407                         rp="hint to use instead?"
2408                         . UU/myread
2409                         for file in $ans; do
2410                                 if $test -f "$src/hints/$file.sh"; then
2411                                         . $src/hints/$file.sh
2412                                         $cat $src/hints/$file.sh >> UU/config.sh
2413                                 elif $test X$ans = X -o X$ans = Xnone ; then
2414                                         : nothing
2415                                 else
2416                                         echo "$file.sh does not exist -- ignored."
2417                                 fi
2418                         done
2419                 fi
2420         done
2421
2422         hint=recommended
2423         : Remember our hint file for later.
2424         if $test -f "$src/hints/$file.sh" ; then
2425                 hintfile="$file"
2426         else
2427                 hintfile=''
2428         fi
2429 fi
2430 cd UU
2431 ;;
2432 *)
2433         echo " "
2434         echo "Fetching default answers from $config_sh..." >&4
2435         tmp_n="$n"
2436         tmp_c="$c"
2437         cd ..
2438         cp $config_sh config.sh 2>/dev/null
2439         chmod +w config.sh
2440         . ./config.sh
2441         cd UU
2442         cp ../config.sh .
2443         n="$tmp_n"
2444         c="$tmp_c"
2445         hint=previous
2446         ;;
2447 esac
2448 test "$override" && . ./optdef.sh
2449 myuname="$newmyuname"
2450
2451 : Restore computed paths
2452 for file in $loclist $trylist; do
2453         eval $file="\$_$file"
2454 done
2455
2456 cat << EOM
2457
2458 Configure uses the operating system name and version to set some defaults.
2459 The default value is probably right if the name rings a bell. Otherwise,
2460 since spelling matters for me, either accept the default or answer "none"
2461 to leave it blank.
2462
2463 EOM
2464 case "$osname" in
2465         ''|' ')
2466                 case "$hintfile" in
2467                 ''|' '|none) dflt=none ;;
2468                 *)  dflt=`echo $hintfile | $sed -e 's/\.sh$//' -e 's/_.*$//'` ;;
2469                 esac
2470                 ;;
2471         *) dflt="$osname" ;;
2472 esac
2473 rp="Operating system name?"
2474 . ./myread
2475 case "$ans" in
2476 none)  osname='' ;;
2477 *) osname=`echo "$ans" | $sed -e 's/[   ][      ]*/_/g' | ./tr '[A-Z]' '[a-z]'`;;
2478 esac
2479 echo " "
2480 case "$osvers" in
2481         ''|' ')
2482                 case "$hintfile" in
2483                 ''|' '|none) dflt=none ;;
2484                 *)      dflt=`echo $hintfile | $sed -e 's/\.sh$//' -e 's/^[^_]*//'`
2485                         dflt=`echo $dflt | $sed -e 's/^_//' -e 's/_/./g'`
2486                         case "$dflt" in
2487                         ''|' ') dflt=none ;;
2488                         esac
2489                         ;;
2490                 esac
2491                 ;;
2492         *) dflt="$osvers" ;;
2493 esac
2494 rp="Operating system version?"
2495 . ./myread
2496 case "$ans" in
2497 none)  osvers='' ;;
2498 *) osvers="$ans" ;;
2499 esac
2500
2501 : who configured the system
2502 cf_time=`LC_ALL=C; LANGUAGE=C; export LC_ALL; export LANGUAGE; $date 2>&1`
2503 cf_by=`(logname) 2>/dev/null`
2504 case "$cf_by" in
2505 "")
2506         cf_by=`(whoami) 2>/dev/null`
2507         case "$cf_by" in
2508         "") cf_by=unknown ;;
2509         esac ;;
2510 esac
2511
2512 : set up the script used to warn in case of inconsistency
2513 cat <<EOS >whoa
2514 $startsh
2515 EOS
2516 cat <<'EOSC' >>whoa
2517 dflt=y
2518 echo " "
2519 echo "*** WHOA THERE!!! ***" >&4
2520 echo "    The $hint value for \$$var on this machine was \"$was\"!" >&4
2521 rp="    Keep the $hint value?"
2522 . ./myread
2523 case "$ans" in
2524 y) td=$was; tu=$was;;
2525 esac
2526 EOSC
2527
2528 : function used to set $1 to $val
2529 setvar='var=$1; eval "was=\$$1"; td=$define; tu=$undef;
2530 case "$val$was" in
2531 $define$undef) . ./whoa; eval "$var=\$td";;
2532 $undef$define) . ./whoa; eval "$var=\$tu";;
2533 *) eval "$var=$val";;
2534 esac'
2535
2536 cat <<EOM
2537
2538 Perl can be built to take advantage of threads, on some systems.
2539 To do so, Configure must be run with -Dusethreads.
2540
2541 Note that threading is a highly experimental feature, and
2542 some known race conditions still remain.  If you choose to try
2543 it, be very sure to not actually deploy it for production
2544 purposes.  README.threads has more details, and is required
2545 reading if you enable threads.
2546 EOM
2547 case "$usethreads" in
2548 $define|true|[yY]*)     dflt='y';;
2549 *) dflt='n';;
2550 esac
2551 rp='Build a threading Perl?'
2552 . ./myread
2553 case "$ans" in
2554 y|Y)    val="$define" ;;     
2555 *)      val="$undef" ;;
2556 esac
2557 set usethreads
2558 eval $setvar 
2559
2560 case "$d_oldpthreads" in
2561 '')     : Configure tests would be welcome here.  For now, assume undef.
2562         val="$undef" ;;
2563 *)      val="$d_oldpthreads" ;;
2564 esac
2565 set d_oldpthreads
2566 eval $setvar
2567
2568
2569 case "$usethreads" in
2570 "$define"|true|[yY]*)
2571 : Look for a hint-file generated 'call-back-unit'.  If the
2572 : user has specified that a threading perl is to be built,
2573 : we may need to set or change some other defaults.
2574         if $test -f usethreads.cbu; then
2575                 echo "Your platform has some specific hints for threaded builds, using them..."
2576                 . ./usethreads.cbu
2577         else
2578                 $cat <<EOM
2579 (Your platform doesn't have any specific hints for threaded builds.
2580  Assuming POSIX threads, then.)
2581 EOM
2582         fi
2583     ;;
2584 esac
2585
2586 cat <<EOM
2587
2588 Perl can be built so that multiple Perl interpreters can coexist
2589 within the same Perl executable.  To do so, Configure must be run with
2590 -Dusemultiplicity.
2591
2592 Normally you do not need this and you should answer no.
2593
2594 EOM
2595 case "$usemultiplicity" in
2596 $define|true|[yY]*)     dflt='y';;
2597 *) dflt='n';;
2598 esac
2599 rp='Build Perl for multiplicity?'
2600 . ./myread
2601 case "$ans" in
2602 y|Y)    val="$define" ;;     
2603 *)      val="$undef" ;;
2604 esac
2605 set usemultiplicity
2606 eval $setvar 
2607
2608 : determine where manual pages are on this system
2609 echo " "
2610 case "$sysman" in
2611 '') 
2612         syspath='/usr/man/man1 /usr/man/mann /usr/man/manl /usr/man/local/man1'
2613         syspath="$syspath /usr/man/u_man/man1 /usr/share/man/man1"
2614         syspath="$syspath /usr/catman/u_man/man1 /usr/man/l_man/man1"
2615         syspath="$syspath /usr/local/man/u_man/man1 /usr/local/man/l_man/man1"
2616         syspath="$syspath /usr/man/man.L /local/man/man1 /usr/local/man/man1"
2617         sysman=`./loc . /usr/man/man1 $syspath`
2618         ;;
2619 esac
2620 if $test -d "$sysman"; then
2621         echo "System manual is in $sysman." >&4
2622 else
2623         echo "Could not find manual pages in source form." >&4
2624 fi
2625
2626 : see what memory models we can support
2627 case "$models" in
2628 '')
2629         $cat >pdp11.c <<'EOP'
2630 int main() {
2631 #ifdef pdp11
2632         exit(0);
2633 #else
2634         exit(1);
2635 #endif
2636 }
2637 EOP
2638         ( cc -o pdp11 pdp11.c ) >/dev/null 2>&1
2639         if $test -f pdp11 && ./pdp11 2>/dev/null; then
2640                 dflt='unsplit split'
2641         else
2642                 tans=`./loc . X /lib/small /lib/large /usr/lib/small /usr/lib/large /lib/medium /usr/lib/medium /lib/huge`
2643                 case "$tans" in
2644                 X) dflt='none';;
2645                 *) if $test -d /lib/small || $test -d /usr/lib/small; then
2646                                 dflt='small'
2647                         else
2648                                 dflt=''
2649                         fi
2650                         if $test -d /lib/medium || $test -d /usr/lib/medium; then
2651                                 dflt="$dflt medium"
2652                         fi
2653                         if $test -d /lib/large || $test -d /usr/lib/large; then
2654                                 dflt="$dflt large"
2655                         fi
2656                         if $test -d /lib/huge || $test -d /usr/lib/huge; then
2657                                 dflt="$dflt huge"
2658                         fi
2659                 esac
2660         fi;;
2661 *) dflt="$models";;
2662 esac
2663 $cat <<EOM
2664  
2665 Some systems have different model sizes.  On most systems they are called
2666 small, medium, large, and huge.  On the PDP11 they are called unsplit and
2667 split.  If your system doesn't support different memory models, say "none".
2668 If you wish to force everything to one memory model, say "none" here and
2669 put the appropriate flags later when it asks you for other cc and ld flags.
2670 Venix systems may wish to put "none" and let the compiler figure things out.
2671 (In the following question multiple model names should be space separated.)
2672
2673 The default for most systems is "none".
2674
2675 EOM
2676 rp="Which memory models are supported?"
2677 . ./myread
2678 models="$ans"
2679
2680 case "$models" in
2681 none)
2682         small=''
2683         medium=''
2684         large=''
2685         huge=''
2686         unsplit=''
2687         split=''
2688         ;;
2689 *split)
2690         case "$split" in
2691         '') if $contains '\-i' $sysman/ld.1 >/dev/null 2>&1 || \
2692                          $contains '\-i' $sysman/cc.1 >/dev/null 2>&1; then
2693                         dflt='-i'
2694                 else
2695                         dflt='none'
2696                 fi;;
2697         *) dflt="$split";;
2698         esac
2699         rp="What flag indicates separate I and D space?"
2700         . ./myread
2701         tans="$ans"
2702         case "$tans" in
2703         none) tans='';;
2704         esac
2705         split="$tans"
2706         unsplit='';;
2707 *large*|*small*|*medium*|*huge*)
2708         case "$models" in
2709         *large*)
2710                 case "$large" in
2711                 '') dflt='-Ml';;
2712                 *) dflt="$large";;
2713                 esac
2714         rp="What flag indicates large model?"
2715         . ./myread
2716         tans="$ans"
2717         case "$tans" in
2718         none) tans='';
2719         esac
2720         large="$tans";;
2721         *) large='';;
2722         esac
2723         case "$models" in
2724         *huge*) case "$huge" in
2725                 '') dflt='-Mh';;
2726                 *) dflt="$huge";;
2727                 esac
2728                 rp="What flag indicates huge model?"
2729                 . ./myread
2730                 tans="$ans"
2731                 case "$tans" in
2732                 none) tans='';
2733                 esac
2734                 huge="$tans";;
2735         *) huge="$large";;
2736         esac
2737         case "$models" in
2738         *medium*) case "$medium" in
2739                 '') dflt='-Mm';;
2740                 *) dflt="$medium";;
2741                 esac
2742                 rp="What flag indicates medium model?"
2743                 . ./myread
2744                 tans="$ans"
2745                 case "$tans" in
2746                 none) tans='';
2747                 esac
2748                 medium="$tans";;
2749         *) medium="$large";;
2750         esac
2751         case "$models" in
2752         *small*) case "$small" in
2753                 '') dflt='none';;
2754                 *) dflt="$small";;
2755                 esac
2756                 rp="What flag indicates small model?"
2757                 . ./myread
2758                 tans="$ans"
2759                 case "$tans" in
2760                 none) tans='';
2761                 esac
2762                 small="$tans";;
2763         *) small='';;
2764         esac
2765         ;;
2766 *)
2767         echo "Unrecognized memory models--you may have to edit Makefile.SH" >&4
2768         ;;
2769 esac
2770 $rm -f pdp11.* pdp11
2771
2772 : make some quick guesses about what we are up against
2773 echo " "
2774 $echo $n "Hmm...  $c"
2775 echo exit 1 >bsd
2776 echo exit 1 >usg
2777 echo exit 1 >v7
2778 echo exit 1 >osf1
2779 echo exit 1 >eunice
2780 echo exit 1 >xenix
2781 echo exit 1 >venix
2782 echo exit 1 >os2
2783 d_bsd="$undef"
2784 $cat /usr/include/signal.h /usr/include/sys/signal.h >foo 2>/dev/null
2785 if test -f /osf_boot || $contains 'OSF/1' /usr/include/ctype.h >/dev/null 2>&1
2786 then
2787         echo "Looks kind of like an OSF/1 system, but we'll see..."
2788         echo exit 0 >osf1
2789 elif test `echo abc | tr a-z A-Z` = Abc ; then
2790         xxx=`./loc addbib blurfl $pth`
2791         if $test -f $xxx; then
2792         echo "Looks kind of like a USG system with BSD features, but we'll see..."
2793                 echo exit 0 >bsd
2794                 echo exit 0 >usg
2795         else
2796                 if $contains SIGTSTP foo >/dev/null 2>&1 ; then
2797                         echo "Looks kind of like an extended USG system, but we'll see..."
2798                 else
2799                         echo "Looks kind of like a USG system, but we'll see..."
2800                 fi
2801                 echo exit 0 >usg
2802         fi
2803 elif $contains SIGTSTP foo >/dev/null 2>&1 ; then
2804         echo "Looks kind of like a BSD system, but we'll see..."
2805         d_bsd="$define"
2806         echo exit 0 >bsd
2807 else
2808         echo "Looks kind of like a Version 7 system, but we'll see..."
2809         echo exit 0 >v7
2810 fi
2811 case "$eunicefix" in
2812 *unixtovms*)
2813         $cat <<'EOI'
2814 There is, however, a strange, musty smell in the air that reminds me of
2815 something...hmm...yes...I've got it...there's a VMS nearby, or I'm a Blit.
2816 EOI
2817         echo exit 0 >eunice
2818         d_eunice="$define"
2819 : it so happens the Eunice I know will not run shell scripts in Unix format
2820         ;;
2821 *)
2822         echo " "
2823         echo "Congratulations.  You aren't running Eunice."
2824         d_eunice="$undef"
2825         ;;
2826 esac
2827 : Detect OS2.  The p_ variable is set above in the Head.U unit.
2828 case "$p_" in
2829 :) ;;
2830 *)
2831         $cat <<'EOI'
2832 I have the feeling something is not exactly right, however...don't tell me...
2833 lemme think...does HAL ring a bell?...no, of course, you're only running OS/2!
2834 EOI
2835         echo exit 0 >os2
2836         ;;
2837 esac
2838 if test -f /xenix; then
2839         echo "Actually, this looks more like a XENIX system..."
2840         echo exit 0 >xenix
2841         d_xenix="$define"
2842 else
2843         echo " "
2844         echo "It's not Xenix..."
2845         d_xenix="$undef"
2846 fi
2847 chmod +x xenix
2848 $eunicefix xenix
2849 if test -f /venix; then
2850         echo "Actually, this looks more like a VENIX system..."
2851         echo exit 0 >venix
2852 else
2853         echo " "
2854         if ./xenix; then
2855                 : null
2856         else
2857                 echo "Nor is it Venix..."
2858         fi
2859 fi
2860 chmod +x bsd usg v7 osf1 eunice xenix venix os2
2861 $eunicefix bsd usg v7 osf1 eunice xenix venix os2
2862 $rm -f foo
2863
2864 : see if we need a special compiler
2865 echo " "
2866 if ./usg; then
2867         case "$cc" in
2868         '') case "$Mcc" in
2869                 /*) dflt='Mcc';;
2870                 *) case "$large" in
2871                         -M*) dflt='cc';;
2872                         *)      if $contains '\-M' $sysman/cc.1 >/dev/null 2>&1 ; then
2873                                         if $contains '\-M' $sysman/cpp.1 >/dev/null 2>&1; then
2874                                                 dflt='cc'
2875                                         else
2876                                                 dflt='cc -M'
2877                                         fi
2878                                 else
2879                                         dflt='cc'
2880                                 fi;;
2881                         esac;;
2882                 esac;;
2883         *)  dflt="$cc";;
2884         esac
2885         case "$dflt" in
2886         *M*)    $cat <<'EOM'
2887 On some older systems the default C compiler will not resolve multiple global
2888 references that happen to have the same name.  On some such systems the "Mcc"
2889 command may be used to force these to be resolved.  On other systems a "cc -M"
2890 command is required.  (Note that the -M flag on other systems indicates a
2891 memory model to use!) If you have the Gnu C compiler, you might wish to use
2892 that instead.
2893
2894 EOM
2895         ;;
2896         esac
2897         rp="Use which C compiler?"
2898         . ./myread
2899         cc="$ans"
2900 else
2901         case "$cc" in
2902         '') dflt=cc;;
2903         *) dflt="$cc";;
2904         esac
2905         rp="Use which C compiler?"
2906         . ./myread
2907         cc="$ans"
2908 fi
2909 : Look for a hint-file generated 'call-back-unit'.  Now that the
2910 : user has specified the compiler, we may need to set or change some
2911 : other defaults.
2912 if $test -f cc.cbu; then
2913     . ./cc.cbu
2914 fi
2915 echo " "
2916 echo "Checking for GNU cc in disguise and/or its version number..." >&4
2917 $cat >gccvers.c <<EOM
2918 #include <stdio.h>
2919 int main() {
2920 #ifdef __GNUC__
2921 #ifdef __VERSION__
2922         printf("%s\n", __VERSION__);
2923 #else
2924         printf("%s\n", "1");
2925 #endif
2926 #endif
2927         exit(0);
2928 }
2929 EOM
2930 if $cc -o gccvers gccvers.c; then
2931         gccversion=`./gccvers`
2932         case "$gccversion" in
2933         '') echo "You are not using GNU cc." ;;
2934         *)  echo "You are using GNU cc $gccversion." ;;
2935         esac
2936 else
2937         echo " "
2938         echo "*** WHOA THERE!!! ***" >&4
2939         echo "    Your C compiler \"$cc\" doesn't seem to be working!" >&4
2940         case "$knowitall" in
2941         '')
2942         echo "    You'd better start hunting for one and let me know about it." >&4
2943                 exit 1
2944                 ;;
2945         esac
2946 fi
2947 $rm -f gccvers*
2948 case "$gccversion" in
2949 1*) cpp=`./loc gcc-cpp $cpp $pth` ;;
2950 esac
2951
2952 cat <<EOM
2953
2954 Perl can be built to take advantage of explicit 64-bit interfaces,
2955 on some systems.  To do so, Configure must be run with -Duse64bits.
2956
2957 If this doesn't make any sense to you, just accept the default 'n'.
2958 EOM
2959 case "$use64bits" in
2960 $define|true|[yY]*)     dflt='y';;
2961 *) dflt='n';;
2962 esac
2963 rp='Try to use explicit 64-bit interfaces, if available?'
2964 . ./myread
2965 case "$ans" in
2966 y|Y) 
2967         val="$define"
2968         ;;     
2969 *)      
2970         val="$undef"
2971         ;;
2972 esac
2973 set use64bits
2974 eval $setvar
2975
2976 case "$archname64" in
2977 '') archname64='' ;;    # not a typo
2978 esac
2979
2980 case "$use64bits" in
2981 "$define"|true|[yY]*)
2982 : Look for a hint-file generated 'call-back-unit'.  If the
2983 : user has specified that a 64 bit perl is to be built,
2984 : we may need to set or change some other defaults.
2985         if $test -f use64bits.cbu; then
2986                 echo "Your platform has some specific hints for 64-bit builds, using them..."
2987                 . ./use64bits.cbu
2988         else
2989                 $cat <<EOM
2990 (Your platform doesn't have any specific hints for 64-bit builds.
2991  This is probably okay, especially if your system is a true 64-bit system.)
2992 EOM
2993                 case "$gccversion" in
2994                 '')     ;;
2995                 *)      $cat <<EOM
2996 But since you seem to be using gcc,
2997 I will now add -DUSE_LONG_LONG to the compilation flags.
2998 EOM
2999                         ccflags="$ccflags -DUSE_LONG_LONG"
3000                         ;;
3001                 esac
3002         fi
3003         ;;
3004 esac
3005
3006 : determine the architecture name
3007 echo " "
3008 if xxx=`./loc arch blurfl $pth`; $test -f "$xxx"; then
3009         tarch=`arch`"-$osname"
3010 elif xxx=`./loc uname blurfl $pth`; $test -f "$xxx" ; then
3011         if uname -m > tmparch 2>&1 ; then
3012                 tarch=`$sed -e 's/ *$//' -e 's/ /_/g' \
3013                         -e 's/$/'"-$osname/" tmparch`
3014         else
3015                 tarch="$osname"
3016         fi
3017         $rm -f tmparch
3018 else
3019         tarch="$osname"
3020 fi
3021 case "$myarchname" in
3022 ''|"$tarch") ;;
3023 *)
3024         echo "(Your architecture name used to be $myarchname.)"
3025         archname=''
3026         ;;
3027 esac
3028 myarchname="$tarch"
3029 case "$archname" in
3030 '') dflt="$tarch";;
3031 *) dflt="$archname";;
3032 esac
3033 rp='What is your architecture name'
3034 . ./myread
3035 archname="$ans"
3036 case "$usethreads" in
3037 $define)
3038         echo "Threads selected." >&4
3039         case "$archname" in
3040         *-thread*) echo "...and architecture name already has -thread." >&4
3041                 ;;
3042         *)      archname="$archname-thread"
3043                 echo "...setting architecture name to $archname." >&4
3044                 ;;
3045         esac
3046         ;;
3047 esac
3048 case "$usemultiplicity" in
3049 $define)
3050         echo "Multiplicity selected." >&4
3051         case "$archname" in
3052         *-multi*) echo "...and architecture name already has -multi." >&4
3053                 ;;
3054         *)      archname="$archname-multi"
3055                 echo "...setting architecture name to $archname." >&4
3056                 ;;
3057         esac
3058         ;;
3059 esac
3060 case "$use64bits" in
3061 $define)
3062         echo "Explicit 64-bitness selected." >&4
3063         case "$archname64" in
3064         '')
3065                 ;;
3066         *)
3067                 case "$archname" in
3068                 *-$archname64*) echo "...and architecture name already has $archname64." >&4
3069                         ;;
3070                 *)      archname="$archname-$archname64"
3071                         echo "...setting architecture name to $archname." >&4
3072                         ;;
3073                 esac
3074                 ;;
3075         esac
3076 esac
3077
3078 : decide how portable to be.  Allow command line overrides.
3079 case "$d_portable" in
3080 "$undef") ;;
3081 *)      d_portable="$define" ;;
3082 esac
3083
3084 : set up shell script to do ~ expansion
3085 cat >filexp <<EOSS
3086 $startsh
3087 : expand filename
3088 case "\$1" in
3089  ~/*|~)
3090         echo \$1 | $sed "s|~|\${HOME-\$LOGDIR}|"
3091         ;;
3092  ~*)
3093         if $test -f /bin/csh; then
3094                 /bin/csh -f -c "glob \$1"
3095                 failed=\$?
3096                 echo ""
3097                 exit \$failed
3098         else
3099                 name=\`$expr x\$1 : '..\([^/]*\)'\`
3100                 dir=\`$sed -n -e "/^\${name}:/{s/^[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:\([^:]*\).*"'\$'"/\1/" -e p -e q -e '}' </etc/passwd\`
3101                 if $test ! -d "\$dir"; then
3102                         me=\`basename \$0\`
3103                         echo "\$me: can't locate home directory for: \$name" >&2
3104                         exit 1
3105                 fi
3106                 case "\$1" in
3107                 */*)
3108                         echo \$dir/\`$expr x\$1 : '..[^/]*/\(.*\)'\`
3109                         ;;
3110                 *)
3111                         echo \$dir
3112                         ;;
3113                 esac
3114         fi
3115         ;;
3116 *)
3117         echo \$1
3118         ;;
3119 esac
3120 EOSS
3121 chmod +x filexp
3122 $eunicefix filexp
3123
3124 : now set up to get a file name
3125 cat <<EOS >getfile
3126 $startsh
3127 EOS
3128 cat <<'EOSC' >>getfile
3129 tilde=''
3130 fullpath=''
3131 already=''
3132 skip=''
3133 none_ok=''
3134 exp_file=''
3135 nopath_ok=''
3136 orig_rp="$rp"
3137 orig_dflt="$dflt"
3138 case "$gfpth" in
3139 '') gfpth='.' ;;
3140 esac
3141
3142 case "$fn" in
3143 *\(*)
3144         expr $fn : '.*(\(.*\)).*' | tr ',' $trnl >getfile.ok
3145         fn=`echo $fn | sed 's/(.*)//'`
3146         ;;
3147 esac
3148
3149 case "$fn" in
3150 *:*)
3151         loc_file=`expr $fn : '.*:\(.*\)'`
3152         fn=`expr $fn : '\(.*\):.*'`
3153         ;;
3154 esac
3155
3156 case "$fn" in
3157 *~*) tilde=true;;
3158 esac
3159 case "$fn" in
3160 */*) fullpath=true;;
3161 esac
3162 case "$fn" in
3163 *+*) skip=true;;
3164 esac
3165 case "$fn" in
3166 *n*) none_ok=true;;
3167 esac
3168 case "$fn" in
3169 *e*) exp_file=true;;
3170 esac
3171 case "$fn" in
3172 *p*) nopath_ok=true;;
3173 esac
3174
3175 case "$fn" in
3176 *f*) type='File';;
3177 *d*) type='Directory';;
3178 *l*) type='Locate';;
3179 esac
3180
3181 what="$type"
3182 case "$what" in
3183 Locate) what='File';;
3184 esac
3185
3186 case "$exp_file" in
3187 '')
3188         case "$d_portable" in
3189         "$define") ;;
3190         *) exp_file=true;;
3191         esac
3192         ;;
3193 esac
3194
3195 cd ..
3196 while test "$type"; do
3197         redo=''
3198         rp="$orig_rp"
3199         dflt="$orig_dflt"
3200         case "$tilde" in
3201         true) rp="$rp (~name ok)";;
3202         esac
3203         . UU/myread
3204         if test -f UU/getfile.ok && \
3205                 $contains "^$ans\$" UU/getfile.ok >/dev/null 2>&1
3206         then
3207                 value="$ans"
3208                 ansexp="$ans"
3209                 break
3210         fi
3211         case "$ans" in
3212         none)
3213                 value=''
3214                 ansexp=''
3215                 case "$none_ok" in
3216                 true) type='';;
3217                 esac
3218                 ;;
3219         *)
3220                 case "$tilde" in
3221                 '') value="$ans"
3222                         ansexp="$ans";;
3223                 *)
3224                         value=`UU/filexp $ans`
3225                         case $? in
3226                         0)
3227                                 if test "$ans" != "$value"; then
3228                                         echo "(That expands to $value on this system.)"
3229                                 fi
3230                                 ;;
3231                         *) value="$ans";;
3232                         esac
3233                         ansexp="$value"
3234                         case "$exp_file" in
3235                         '') value="$ans";;
3236                         esac
3237                         ;;
3238                 esac
3239                 case "$fullpath" in
3240                 true)
3241                         case "$ansexp" in
3242                         /*) value="$ansexp" ;;
3243                         *)
3244                                 redo=true
3245                                 case "$already" in
3246                                 true)
3247                                 echo "I shall only accept a full path name, as in /bin/ls." >&4
3248                                 echo "Use a ! shell escape if you wish to check pathnames." >&4
3249                                         ;;
3250                                 *)
3251                                 echo "Please give a full path name, starting with slash." >&4
3252                                         case "$tilde" in
3253                                         true)
3254                                 echo "Note that using ~name is ok provided it expands well." >&4
3255                                                 already=true
3256                                                 ;;
3257                                         esac
3258                                 esac
3259                                 ;;
3260                         esac
3261                         ;;
3262                 esac
3263                 case "$redo" in
3264                 '')
3265                         case "$type" in
3266                         File)
3267                                 for fp in $gfpth; do
3268                                         if test "X$fp" = X.; then
3269                                             pf="$ansexp"
3270                                         else    
3271                                             pf="$fp/$ansexp"
3272                                         fi
3273                                         if test -f "$pf"; then
3274                                                 type=''
3275                                         elif test -r "$pf" || (test -h "$pf") >/dev/null 2>&1
3276                                         then
3277                                                 echo "($value is not a plain file, but that's ok.)"
3278                                                 type=''
3279                                         fi
3280                                         if test X"$type" = X; then
3281                                             value="$pf"
3282                                             break
3283                                         fi
3284                                 done
3285                                 ;;
3286                         Directory)
3287                                 for fp in $gfpth; do
3288                                         if test "X$fp" = X.; then
3289                                             pf="$ansexp"
3290                                         else    
3291                                             pf="$fp/$ansexp"
3292                                         fi
3293                                         if test -d "$pf"; then
3294                                                 type=''
3295                                                 value="$pf"
3296                                                 break
3297                                         fi
3298                                 done
3299                                 ;;
3300                         Locate)
3301                                 if test -d "$ansexp"; then
3302                                         echo "(Looking for $loc_file in directory $value.)"
3303                                         value="$value/$loc_file"
3304                                         ansexp="$ansexp/$loc_file"
3305                                 fi
3306                                 if test -f "$ansexp"; then
3307                                         type=''
3308                                 fi
3309                                 case "$nopath_ok" in
3310                                 true)   case "$value" in
3311                                         */*) ;;
3312                                         *)      echo "Assuming $value will be in people's path."
3313                                                 type=''
3314                                                 ;;
3315                                         esac
3316                                         ;;
3317                                 esac
3318                                 ;;
3319                         esac
3320
3321                         case "$skip" in
3322                         true) type='';
3323                         esac
3324
3325                         case "$type" in
3326                         '') ;;
3327                         *)
3328                                 if test "$fastread" = yes; then
3329                                         dflt=y
3330                                 else
3331                                         dflt=n
3332                                 fi
3333                                 rp="$what $value doesn't exist.  Use that name anyway?"
3334                                 . UU/myread
3335                                 dflt=''
3336                                 case "$ans" in
3337                                 y*) type='';;
3338                                 *) echo " ";;
3339                                 esac
3340                                 ;;
3341                         esac
3342                         ;;
3343                 esac
3344                 ;;
3345         esac
3346 done
3347 cd UU
3348 ans="$value"
3349 rp="$orig_rp"
3350 dflt="$orig_dflt"
3351 rm -f getfile.ok
3352 test "X$gfpthkeep" != Xy && gfpth=""
3353 EOSC
3354
3355 : determine root of directory hierarchy where package will be installed.
3356 case "$prefix" in
3357 '')
3358         dflt=`./loc . /usr/local /usr/local /local /opt /usr`
3359         ;;
3360 *)
3361         dflt="$prefix"
3362         ;;
3363 esac
3364 $cat <<EOM
3365
3366 By default, $package will be installed in $dflt/bin, manual pages
3367 under $dflt/man, etc..., i.e. with $dflt as prefix for all
3368 installation directories. Typically this is something like /usr/local.
3369 If you wish to have binaries under /usr/bin but other parts of the
3370 installation under /usr/local, that's ok: you will be prompted
3371 separately for each of the installation directories, the prefix being
3372 only used to set the defaults.
3373
3374 EOM
3375 fn=d~
3376 rp='Installation prefix to use?'
3377 . ./getfile
3378 oldprefix=''
3379 case "$prefix" in
3380 '') ;;
3381 *)
3382         case "$ans" in
3383         "$prefix") ;;
3384         *) oldprefix="$prefix";;
3385         esac
3386         ;;
3387 esac
3388 prefix="$ans"
3389 prefixexp="$ansexp"
3390
3391 : is AFS running?
3392 echo " "
3393 case "$afs" in
3394 $define|true)   afs=true ;;
3395 $undef|false)   afs=false ;;
3396 *)      if test -d /afs; then
3397                 afs=true
3398         else
3399                 afs=false
3400         fi
3401         ;;
3402 esac
3403 if $afs; then
3404         echo "AFS may be running... I'll be extra cautious then..." >&4
3405 else
3406         echo "AFS does not seem to be running..." >&4
3407 fi
3408
3409 : determine installation prefix for where package is to be installed.
3410 if $afs; then 
3411 $cat <<EOM
3412
3413 Since you are running AFS, I need to distinguish the directory in which
3414 files will reside from the directory in which they are installed (and from
3415 which they are presumably copied to the former directory by occult means).
3416
3417 EOM
3418         case "$installprefix" in
3419         '') dflt=`echo $prefix | sed 's#^/afs/#/afs/.#'`;;
3420         *) dflt="$installprefix";;
3421         esac
3422 else
3423 $cat <<EOM
3424
3425 In some special cases, particularly when building $package for distribution,
3426 it is convenient to distinguish between the directory in which files should 
3427 be installed from the directory ($prefix) in which they 
3428 will eventually reside.  For most users, these two directories are the same.
3429
3430 EOM
3431         case "$installprefix" in
3432         '') dflt=$prefix ;;
3433         *) dflt=$installprefix;;
3434         esac
3435 fi
3436 fn=d~
3437 rp='What installation prefix should I use for installing files?'
3438 . ./getfile
3439 installprefix="$ans"
3440 installprefixexp="$ansexp"
3441
3442 : set the prefixit variable, to compute a suitable default value
3443 prefixit='case "$3" in
3444 ""|none)
3445         case "$oldprefix" in
3446         "") eval "$1=\"\$$2\"";;
3447         *)
3448                 case "$3" in
3449                 "") eval "$1=";;
3450                 none)
3451                         eval "tp=\"\$$2\"";
3452                         case "$tp" in
3453                         ""|" ") eval "$1=\"\$$2\"";;
3454                         *) eval "$1=";;
3455                         esac;;
3456                 esac;;
3457         esac;;
3458 *)
3459         eval "tp=\"$oldprefix-\$$2-\""; eval "tp=\"$tp\"";
3460         case "$tp" in
3461         --|/*--|\~*--) eval "$1=\"$prefix/$3\"";;
3462         /*-$oldprefix/*|\~*-$oldprefix/*)
3463                 eval "$1=\`echo \$$2 | sed \"s,^$oldprefix,$prefix,\"\`";;
3464         *) eval "$1=\"\$$2\"";;
3465         esac;;
3466 esac'
3467
3468 : set the base revision
3469 baserev=5.0
3470
3471 : get the patchlevel
3472 echo " "
3473 echo "Getting the current patchlevel..." >&4
3474 if $test -r $rsrc/patchlevel.h;then
3475         patchlevel=`awk '/define[       ]+PERL_VERSION/ {print $3}' $rsrc/patchlevel.h`
3476         subversion=`awk '/define[       ]+PERL_SUBVERSION/ {print $3}' $rsrc/patchlevel.h`
3477 else
3478         patchlevel=0
3479         subversion=0
3480 fi
3481 $echo $n "(You have $package" $c
3482 case "$package" in
3483 "*$baserev")    ;;
3484 *)              $echo $n " $baserev" $c ;;
3485 esac
3486 $echo $n " patchlevel $patchlevel" $c
3487 test 0 -eq "$subversion" || $echo $n " subversion $subversion" $c
3488 echo ".)"
3489
3490 if test 0 -eq "$subversion"; then
3491         version=`LC_ALL=C; export LC_ALL; \
3492                  echo $baserev $patchlevel | \
3493                  $awk '{ printf "%.3f\n", $1 + $2/1000.0 }'`
3494 else
3495         version=`LC_ALL=C; export LC_ALL; \
3496                  echo $baserev $patchlevel $subversion | \
3497                  $awk '{ printf "%.5f\n", $1 + $2/1000.0 + $3/100000.0 }'`
3498 fi
3499 : Figure out perl API version.  Perhaps this should be in patchlevel.h
3500 if test "$subversion" -lt 50; then
3501         apiversion=`LC_ALL=C; export LC_ALL; \
3502                  LANGUAGE=C; export LANGUAGE; \
3503                  echo $baserev $patchlevel | \
3504                  $awk '{ printf "%.3f\n", $1 + $2/1000.0 }'`
3505 else
3506         apiversion="$version"
3507 fi
3508
3509 : determine installation style
3510 : For now, try to deduce it from prefix unless it is already set.
3511 : Reproduce behavior of 5.005 and earlier, maybe drop that in 5.7.
3512 case "$installstyle" in
3513 '')     case "$prefix" in
3514                 *perl*) dflt='lib';;
3515                 *) dflt='lib/perl5' ;;
3516         esac
3517         ;;
3518 *)      dflt='lib/perl5' ;;
3519 esac
3520 : Probably not worth prompting for this since we prompt for all
3521 : the directories individually, and the prompt would be too long and
3522 : confusing anyway.
3523 installstyle=$dflt
3524
3525 : determine where private library files go
3526 : Usual default is /usr/local/lib/perl5/$version.
3527 : Also allow things like /opt/perl/lib/$version, since 
3528 : /opt/perl/lib/perl5... would be redundant.
3529 : The default "style" setting is made in installstyle.U
3530 case "$installstyle" in
3531 *lib/perl5*) set dflt privlib lib/$package/$version ;;
3532 *)       set dflt privlib lib/$version ;;
3533 esac
3534 eval $prefixit
3535 $cat <<EOM
3536
3537 There are some auxiliary files for $package that need to be put into a
3538 private library directory that is accessible by everyone.
3539
3540 EOM
3541 fn=d~+
3542 rp='Pathname where the private library files will reside?'
3543 . ./getfile
3544 privlib="$ans"
3545 privlibexp="$ansexp"
3546 : Change installation prefix, if necessary.
3547 if $test X"$prefix" != X"$installprefix"; then
3548         installprivlib=`echo $privlibexp | sed 's#^$prefix#$installprefix#'`
3549 else
3550         installprivlib="$privlibexp"
3551 fi
3552
3553 : set the prefixup variable, to restore leading tilda escape
3554 prefixup='case "$prefixexp" in
3555 "$prefix") ;;
3556 *) eval "$1=\`echo \$$1 | sed \"s,^$prefixexp,$prefix,\"\`";;
3557 esac'
3558
3559 : determine where public architecture dependent libraries go
3560 set archlib archlib
3561 eval $prefixit
3562 : privlib default is /usr/local/lib/$package/$version
3563 : archlib default is /usr/local/lib/$package/$version/$archname
3564 : privlib may have an optional trailing /share.
3565 tdflt=`echo $privlib | $sed 's,/share$,,'`
3566 tdflt=$tdflt/$archname
3567 case "$archlib" in
3568 '')     dflt=$tdflt
3569         ;;
3570 *)      dflt="$archlib"
3571     ;;
3572 esac
3573 $cat <<EOM
3574
3575 $spackage contains architecture-dependent library files.  If you are
3576 sharing libraries in a heterogeneous environment, you might store
3577 these files in a separate location.  Otherwise, you can just include
3578 them with the rest of the public library files.
3579
3580 EOM
3581 fn=d+~
3582 rp='Where do you want to put the public architecture-dependent libraries?'
3583 . ./getfile
3584 archlib="$ans"
3585 archlibexp="$ansexp"
3586 if $test X"$archlib" = X"$privlib"; then
3587         d_archlib="$undef"
3588 else
3589         d_archlib="$define"
3590 fi
3591 : Change installation prefix, if necessary.
3592 if $test X"$prefix" != X"$installprefix"; then
3593         installarchlib=`echo $archlibexp | sed 's#^$prefix#$installprefix#'`
3594 else
3595         installarchlib="$archlibexp"
3596 fi
3597
3598
3599 : Binary compatibility with 5.005 is not possible for builds
3600 : with advanced features
3601 case "$usethreads$usemultiplicity" in
3602 *define*) bincompat5005="$undef" ;;
3603 *)      $cat <<EOM
3604
3605 Perl 5.006 can be compiled for binary compatibility with 5.005.
3606 If you decide to do so, you will be able to continue using most
3607 of the extensions that were compiled for Perl 5.005.
3608
3609 EOM
3610         case "$bincompat5005$d_bincompat5005" in
3611         *"$undef"*) dflt=n ;;
3612         *) dflt=y ;;
3613         esac
3614         rp='Binary compatibility with Perl 5.005?'
3615         . ./myread
3616         case "$ans" in
3617         y*) val="$define" ;;
3618         *)  val="$undef" ;;
3619         esac
3620         set d_bincompat5005
3621         eval $setvar
3622         case "$d_bincompat5005" in
3623         "$define") bincompat5005="$define" ;;
3624         *) bincompat5005="$undef" ;;
3625         esac
3626         ;;
3627 esac
3628
3629
3630 : see if setuid scripts can be secure
3631 $cat <<EOM
3632
3633 Some kernels have a bug that prevents setuid #! scripts from being
3634 secure.  Some sites have disabled setuid #! scripts because of this.
3635
3636 First let's decide if your kernel supports secure setuid #! scripts.
3637 (If setuid #! scripts would be secure but have been disabled anyway,
3638 don't say that they are secure if asked.)
3639
3640 EOM
3641
3642 val="$undef"
3643 if $test -d /dev/fd; then
3644         echo "#!$ls" >reflect
3645         chmod +x,u+s reflect
3646         ./reflect >flect 2>&1
3647         if $contains "/dev/fd" flect >/dev/null; then
3648                 echo "Congratulations, your kernel has secure setuid scripts!" >&4
3649                 val="$define"
3650         else
3651                 $cat <<EOM
3652 If you are not sure if they are secure, I can check but I'll need a
3653 username and password different from the one you are using right now.
3654 If you don't have such a username or don't want me to test, simply
3655 enter 'none'.
3656
3657 EOM
3658                 rp='Other username to test security of setuid scripts with?'
3659                 dflt='none'
3660                 . ./myread
3661                 case "$ans" in
3662                 n|none)
3663                         case "$d_suidsafe" in
3664                         '')     echo "I'll assume setuid scripts are *not* secure." >&4
3665                                 dflt=n;;
3666                         "$undef")
3667                                 echo "Well, the $hint value is *not* secure." >&4
3668                                 dflt=n;;
3669                         *)      echo "Well, the $hint value *is* secure." >&4
3670                                 dflt=y;;
3671                         esac
3672                         ;;
3673                 *)
3674                         $rm -f reflect flect
3675                         echo "#!$ls" >reflect
3676                         chmod +x,u+s reflect
3677                         echo >flect
3678                         chmod a+w flect
3679                         echo '"su" will (probably) prompt you for '"$ans's password."
3680                         su $ans -c './reflect >flect'
3681                         if $contains "/dev/fd" flect >/dev/null; then
3682                                 echo "Okay, it looks like setuid scripts are secure." >&4
3683                                 dflt=y
3684                         else
3685                                 echo "I don't think setuid scripts are secure." >&4
3686                                 dflt=n
3687                         fi
3688                         ;;
3689                 esac
3690                 rp='Does your kernel have *secure* setuid scripts?'
3691                 . ./myread
3692                 case "$ans" in
3693                 [yY]*)  val="$define";;
3694                 *)      val="$undef";;
3695                 esac
3696         fi
3697 else
3698         echo "I don't think setuid scripts are secure (no /dev/fd directory)." >&4
3699         echo "(That's for file descriptors, not floppy disks.)"
3700         val="$undef"
3701 fi
3702 set d_suidsafe
3703 eval $setvar
3704
3705 $rm -f reflect flect
3706
3707 : now see if they want to do setuid emulation
3708 echo " "
3709 val="$undef"
3710 case "$d_suidsafe" in
3711 "$define")
3712         val="$undef"
3713         echo "No need to emulate SUID scripts since they are secure here." >& 4
3714         ;;
3715 *)
3716         $cat <<EOM
3717 Some systems have disabled setuid scripts, especially systems where
3718 setuid scripts cannot be secure.  On systems where setuid scripts have
3719 been disabled, the setuid/setgid bits on scripts are currently
3720 useless.  It is possible for $package to detect those bits and emulate
3721 setuid/setgid in a secure fashion.  This emulation will only work if
3722 setuid scripts have been disabled in your kernel.
3723
3724 EOM
3725         case "$d_dosuid" in
3726         "$define") dflt=y ;;
3727         *) dflt=n ;;
3728         esac
3729         rp="Do you want to do setuid/setgid emulation?"
3730         . ./myread
3731         case "$ans" in
3732         [yY]*)  val="$define";;
3733         *)      val="$undef";;
3734         esac
3735         ;;
3736 esac
3737 set d_dosuid
3738 eval $setvar
3739
3740 : What should the include directory be ?
3741 echo " "
3742 $echo $n "Hmm...  $c"
3743 dflt='/usr/include'
3744 incpath=''
3745 mips_type=''
3746 if $test -f /bin/mips && /bin/mips; then
3747         echo "Looks like a MIPS system..."
3748         $cat >usr.c <<'EOCP'
3749 #ifdef SYSTYPE_BSD43
3750 /bsd43
3751 #endif
3752 EOCP
3753         if $cc -E usr.c > usr.out && $contains / usr.out >/dev/null 2>&1; then
3754                 dflt='/bsd43/usr/include'
3755                 incpath='/bsd43'
3756                 mips_type='BSD 4.3'
3757         else
3758                 mips_type='System V'
3759         fi
3760         $rm -f usr.c usr.out
3761         echo "and you're compiling with the $mips_type compiler and libraries."
3762         xxx_prompt=y
3763         echo "exit 0" >mips
3764 else
3765         echo "Doesn't look like a MIPS system."
3766         xxx_prompt=n
3767         echo "exit 1" >mips
3768 fi
3769 chmod +x mips
3770 $eunicefix mips
3771 case "$usrinc" in
3772 '') ;;
3773 *) dflt="$usrinc";;
3774 esac
3775 case "$xxx_prompt" in
3776 y)      fn=d/
3777         echo " "
3778         rp='Where are the include files you want to use?'
3779         . ./getfile
3780         usrinc="$ans"
3781         ;;
3782 *)      usrinc="$dflt"
3783         ;;
3784 esac
3785
3786 : see how we invoke the C preprocessor
3787 echo " "
3788 echo "Now, how can we feed standard input to your C preprocessor..." >&4
3789 cat <<'EOT' >testcpp.c
3790 #define ABC abc
3791 #define XYZ xyz
3792 ABC.XYZ
3793 EOT
3794 cd ..
3795 if test ! -f cppstdin; then
3796         echo 'cat >.$$.c; '"$cc"' -E ${1+"$@"} .$$.c; rm .$$.c' >cppstdin
3797 else
3798         echo "Keeping your $hint cppstdin wrapper."
3799 fi
3800 chmod 755 cppstdin
3801 wrapper=`pwd`/cppstdin
3802 ok='false'
3803 cd UU
3804
3805 if $test "X$cppstdin" != "X" && \
3806         $cppstdin $cppminus <testcpp.c >testcpp.out 2>&1 && \
3807         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
3808 then
3809         echo "You used to use $cppstdin $cppminus so we'll use that again."
3810         case "$cpprun" in
3811         '') echo "But let's see if we can live without a wrapper..." ;;
3812         *)
3813                 if $cpprun $cpplast <testcpp.c >testcpp.out 2>&1 && \
3814                         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
3815                 then
3816                         echo "(And we'll use $cpprun $cpplast to preprocess directly.)"
3817                         ok='true'
3818                 else
3819                         echo "(However, $cpprun $cpplast does not work, let's see...)"
3820                 fi
3821                 ;;
3822         esac
3823 else
3824         case "$cppstdin" in
3825         '') ;;
3826         *)
3827                 echo "Good old $cppstdin $cppminus does not seem to be of any help..."
3828                 ;;
3829         esac
3830 fi
3831
3832 if $ok; then
3833         : nothing
3834 elif echo 'Maybe "'"$cc"' -E" will work...'; \
3835         $cc -E <testcpp.c >testcpp.out 2>&1; \
3836         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3837         echo "Yup, it does."
3838         x_cpp="$cc -E"
3839         x_minus='';
3840 elif echo 'Nope...maybe "'"$cc"' -E -" will work...'; \
3841         $cc -E - <testcpp.c >testcpp.out 2>&1; \
3842         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3843         echo "Yup, it does."
3844         x_cpp="$cc -E"
3845         x_minus='-';
3846 elif echo 'Nope...maybe "'"$cc"' -P" will work...'; \
3847         $cc -P <testcpp.c >testcpp.out 2>&1; \
3848         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3849         echo "Yipee, that works!"
3850         x_cpp="$cc -P"
3851         x_minus='';
3852 elif echo 'Nope...maybe "'"$cc"' -P -" will work...'; \
3853         $cc -P - <testcpp.c >testcpp.out 2>&1; \
3854         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3855         echo "At long last!"
3856         x_cpp="$cc -P"
3857         x_minus='-';
3858 elif echo 'No such luck, maybe "'$cpp'" will work...'; \
3859         $cpp <testcpp.c >testcpp.out 2>&1; \
3860         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3861         echo "It works!"
3862         x_cpp="$cpp"
3863         x_minus='';
3864 elif echo 'Nixed again...maybe "'$cpp' -" will work...'; \
3865         $cpp - <testcpp.c >testcpp.out 2>&1; \
3866         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3867         echo "Hooray, it works!  I was beginning to wonder."
3868         x_cpp="$cpp"
3869         x_minus='-';
3870 elif echo 'Uh-uh.  Time to get fancy.  Trying a wrapper...'; \
3871         $wrapper <testcpp.c >testcpp.out 2>&1; \
3872         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3873         x_cpp="$wrapper"
3874         x_minus=''
3875         echo "Eureka!"
3876 else
3877         dflt=''
3878         rp="No dice.  I can't find a C preprocessor.  Name one:"
3879         . ./myread
3880         x_cpp="$ans"
3881         x_minus=''
3882         $x_cpp <testcpp.c >testcpp.out 2>&1
3883         if $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3884                 echo "OK, that will do." >&4
3885         else
3886 echo "Sorry, I can't get that to work.  Go find one and rerun Configure." >&4
3887                 exit 1
3888         fi
3889 fi
3890
3891 case "$ok" in
3892 false)
3893         cppstdin="$x_cpp"
3894         cppminus="$x_minus"
3895         cpprun="$x_cpp"
3896         cpplast="$x_minus"
3897         set X $x_cpp
3898         shift
3899         case "$1" in
3900         "$cpp")
3901                 echo "Perhaps can we force $cc -E using a wrapper..."
3902                 if $wrapper <testcpp.c >testcpp.out 2>&1; \
3903                         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
3904                 then
3905                         echo "Yup, we can."
3906                         cppstdin="$wrapper"
3907                         cppminus='';
3908                 else
3909                         echo "Nope, we'll have to live without it..."
3910                 fi
3911                 ;;
3912         esac
3913         case "$cpprun" in
3914         "$wrapper")
3915                 cpprun=''
3916                 cpplast=''
3917                 ;;
3918         esac
3919         ;;
3920 esac
3921
3922 case "$cppstdin" in
3923 "$wrapper"|'cppstdin') ;;
3924 *) $rm -f $wrapper;;
3925 esac
3926 $rm -f testcpp.c testcpp.out
3927
3928 : Set private lib path
3929 case "$plibpth" in
3930 '') if ./mips; then
3931                 plibpth="$incpath/usr/lib /usr/local/lib /usr/ccs/lib"
3932         fi;;
3933 esac
3934 case "$libpth" in
3935 ' ') dlist='';;
3936 '') dlist="$loclibpth $plibpth $glibpth";;
3937 *) dlist="$libpth";;
3938 esac
3939
3940 : Now check and see which directories actually exist, avoiding duplicates
3941 libpth=''
3942 for xxx in $dlist
3943 do
3944     if $test -d $xxx; then
3945                 case " $libpth " in
3946                 *" $xxx "*) ;;
3947                 *) libpth="$libpth $xxx";;
3948                 esac
3949     fi
3950 done
3951 $cat <<'EOM'
3952
3953 Some systems have incompatible or broken versions of libraries.  Among
3954 the directories listed in the question below, please remove any you
3955 know not to be holding relevant libraries, and add any that are needed.
3956 Say "none" for none.
3957
3958 EOM
3959 case "$libpth" in
3960 '') dflt='none';;
3961 *)
3962         set X $libpth
3963         shift
3964         dflt=${1+"$@"}
3965         ;;
3966 esac
3967 rp="Directories to use for library searches?"
3968 . ./myread
3969 case "$ans" in
3970 none) libpth=' ';;
3971 *) libpth="$ans";;
3972 esac
3973
3974 : compute shared library extension
3975 case "$so" in
3976 '')
3977         if xxx=`./loc libc.sl X $libpth`; $test -f "$xxx"; then
3978                 dflt='sl'
3979         else
3980                 dflt='so'
3981         fi
3982         ;;
3983 *) dflt="$so";;
3984 esac
3985 $cat <<EOM
3986
3987 On some systems, shared libraries may be available.  Answer 'none' if
3988 you want to suppress searching of shared libraries for the remaining
3989 of this configuration.
3990
3991 EOM
3992 rp='What is the file extension used for shared libraries?'
3993 . ./myread
3994 so="$ans"
3995
3996 : Define several unixisms.
3997 : Hints files or command line option can be used to override them.
3998 : The convoluted testing is in case hints files set either the old
3999 : or the new name.
4000 case "$_exe" in
4001 '')     case "$exe_ext" in
4002     '') ;;
4003         *)      _exe="$exe_ext" ;;
4004         esac
4005         ;;
4006 esac
4007 case "$_a" in
4008 '')     case "$lib_ext" in
4009     '') _a='.a';;
4010         *)      _a="$lib_ext" ;;
4011         esac
4012         ;;
4013 esac
4014 case "$_o" in
4015 '') case "$obj_ext" in
4016         '')     _o='.o';;
4017         *)      _o="$obj_ext";;
4018         esac
4019         ;;
4020 esac
4021 case "$p_" in
4022 '') case "$path_sep" in
4023         '')     p_=':';;
4024         *)      p_="$path_sep";;
4025         esac
4026         ;;
4027 esac
4028 exe_ext=$_exe
4029 lib_ext=$_a
4030 obj_ext=$_o
4031 path_sep=$p_
4032
4033 : Which makefile gets called first.  This is used by make depend.
4034 case "$firstmakefile" in
4035 '') firstmakefile='makefile';;
4036 esac
4037
4038 cat <<EOM
4039
4040 Perl can be built to use the SOCKS proxy protocol library.  To do so,
4041 Configure must be run with -Dusesocks.
4042
4043 Normally you do not need this and you should answer no.
4044
4045 EOM
4046 case "$usesocks" in
4047 $define|true|[yY]*)     dflt='y';;
4048 *) dflt='n';;
4049 esac
4050 rp='Build Perl for SOCKS?'
4051 . ./myread
4052 case "$ans" in
4053 y|Y)    val="$define" ;;     
4054 *)      val="$undef" ;;
4055 esac
4056 set usesocks
4057 eval $setvar
4058
4059 : Looking for optional libraries
4060 echo " "
4061 echo "Checking for optional libraries..." >&4
4062 case "$libs" in
4063 ' '|'') dflt='';;
4064 *) dflt="$libs";;
4065 esac
4066 case "$libswanted" in
4067 '') libswanted='c_s';;
4068 esac
4069 case "$usesocks" in
4070 $define)
4071         libswanted="$libswanted socks5 socks5_sh"
4072         ;;
4073 esac
4074 for thislib in $libswanted; do
4075         
4076         if xxx=`./loc lib$thislib.$so.[0-9]'*' X $libpth`;
4077                 $test -f "$xxx" -a "X$ignore_versioned_solibs" = "X"; then
4078                 echo "Found -l$thislib (shared)."
4079                 case " $dflt " in
4080                 *"-l$thislib "*);;
4081                 *) dflt="$dflt -l$thislib";;
4082                 esac
4083         elif xxx=`./loc lib$thislib.$so X $libpth` ; $test -f "$xxx"; then
4084                 echo "Found -l$thislib (shared)."
4085                 case " $dflt " in
4086                 *"-l$thislib "*);;
4087                 *) dflt="$dflt -l$thislib";;
4088                 esac
4089         elif xxx=`./loc lib$thislib$_a X $libpth`; $test -f "$xxx"; then
4090                 echo "Found -l$thislib."
4091                 case " $dflt " in
4092                 *"-l$thislib "*);;
4093                 *) dflt="$dflt -l$thislib";;
4094                 esac
4095         elif xxx=`./loc $thislib$_a X $libpth`; $test -f "$xxx"; then
4096                 echo "Found -l$thislib."
4097                 case " $dflt " in
4098                 *"-l$thislib "*);;
4099                 *) dflt="$dflt -l$thislib";;
4100                 esac
4101         elif xxx=`./loc lib${thislib}_s$_a X $libpth`; $test -f "$xxx"; then
4102                 echo "Found -l${thislib}_s."
4103                 case " $dflt " in
4104                 *"-l$thislib "*);;
4105                 *) dflt="$dflt -l${thislib}_s";;
4106                 esac
4107         elif xxx=`./loc Slib$thislib$_a X $xlibpth`; $test -f "$xxx"; then
4108                 echo "Found -l$thislib."
4109                 case " $dflt " in
4110                 *"-l$thislib "*);;
4111                 *) dflt="$dflt -l$thislib";;
4112                 esac
4113         else
4114                 echo "No -l$thislib."
4115         fi
4116 done
4117 set X $dflt
4118 shift
4119 dflt="$*"
4120 case "$libs" in
4121 '') dflt="$dflt";;
4122 *) dflt="$libs";;
4123 esac
4124 case "$dflt" in
4125 ' '|'') dflt='none';;
4126 esac
4127
4128 $cat <<EOM
4129
4130 In order to compile $package on your machine, a number of libraries
4131 are usually needed.  Include any other special libraries here as well.
4132 Say "none" for none.  The default list is almost always right.
4133 EOM
4134
4135 echo " "
4136 rp="What libraries to use?"
4137 . ./myread
4138 case "$ans" in
4139 none) libs=' ';;
4140 *) libs="$ans";;
4141 esac
4142
4143 : determine optimize, if desired, or use for debug flag also
4144 case "$optimize" in
4145 ' '|$undef) dflt='none';;
4146 '') dflt='-O';;
4147 *) dflt="$optimize";;
4148 esac
4149 $cat <<EOH
4150
4151 Some C compilers have problems with their optimizers.  By default, $package
4152 compiles with the -O flag to use the optimizer.  Alternately, you might want
4153 to use the symbolic debugger, which uses the -g flag (on traditional Unix
4154 systems).  Either flag can be specified here.  To use neither flag, specify
4155 the word "none".
4156
4157 EOH
4158 rp="What optimizer/debugger flag should be used?"
4159 . ./myread
4160 optimize="$ans"
4161 case "$optimize" in
4162 'none') optimize=" ";;
4163 esac
4164
4165 dflt=''
4166 : We will not override a previous value, but we might want to
4167 : augment a hint file
4168 case "$hint" in
4169 none|recommended)
4170         case "$gccversion" in
4171         1*) dflt='-fpcc-struct-return' ;;
4172         esac
4173         case "$optimize" in
4174         *-g*) dflt="$dflt -DDEBUGGING";;
4175         esac
4176         case "$gccversion" in
4177         2*) if test -d /etc/conf/kconfig.d &&
4178                         $contains _POSIX_VERSION $usrinc/sys/unistd.h >/dev/null 2>&1
4179                 then
4180                         dflt="$dflt -posix"
4181                 fi
4182                 ;;
4183         esac
4184         ;;
4185 esac
4186
4187 case "$mips_type" in
4188 *BSD*|'') inclwanted="$locincpth $usrinc";;
4189 *) inclwanted="$locincpth $inclwanted $usrinc/bsd";;
4190 esac
4191 for thisincl in $inclwanted; do
4192         if $test -d $thisincl; then
4193                 if $test x$thisincl != x$usrinc; then
4194                         case "$dflt" in
4195                         *$thisincl*);;
4196                         *) dflt="$dflt -I$thisincl";;
4197                         esac
4198                 fi
4199         fi
4200 done
4201
4202 inctest='if $contains $2 $usrinc/$1 >/dev/null 2>&1; then
4203         xxx=true;
4204 elif $contains $2 $usrinc/sys/$1 >/dev/null 2>&1; then
4205         xxx=true;
4206 else
4207         xxx=false;
4208 fi;
4209 if $xxx; then
4210         case "$dflt" in
4211         *$2*);;
4212         *) dflt="$dflt -D$2";;
4213         esac;
4214 fi'
4215
4216 set signal.h LANGUAGE_C; eval $inctest
4217
4218 case "$usesocks" in
4219 $define)
4220         ccflags="$ccflags -DSOCKS"
4221         ;;
4222 esac
4223
4224 case "$hint" in
4225 none|recommended) dflt="$ccflags $dflt" ;;
4226 *) dflt="$ccflags";;
4227 esac
4228
4229 case "$dflt" in
4230 ''|' ') dflt=none;;
4231 esac
4232 $cat <<EOH
4233
4234 Your C compiler may want other flags.  For this question you should include
4235 -I/whatever and -DWHATEVER flags and any other flags used by the C compiler,
4236 but you should NOT include libraries or ld flags like -lwhatever.  If you
4237 want $package to honor its debug switch, you should include -DDEBUGGING here.
4238 Your C compiler might also need additional flags, such as -D_POSIX_SOURCE.
4239
4240 To use no flags, specify the word "none".
4241
4242 EOH
4243 set X $dflt
4244 shift
4245 dflt=${1+"$@"}
4246 rp="Any additional cc flags?"
4247 . ./myread
4248 case "$ans" in
4249 none) ccflags='';;
4250 *) ccflags="$ans";;
4251 esac
4252
4253 : the following weeds options from ccflags that are of no interest to cpp
4254 cppflags="$ccflags"
4255 case "$gccversion" in
4256 1*) cppflags="$cppflags -D__GNUC__"
4257 esac
4258 case "$mips_type" in
4259 '');;
4260 *BSD*) cppflags="$cppflags -DSYSTYPE_BSD43";;
4261 esac
4262 case "$cppflags" in
4263 '');;
4264 *)
4265         echo " "
4266         echo "Let me guess what the preprocessor flags are..." >&4
4267         set X $cppflags
4268         shift
4269         cppflags=''
4270         $cat >cpp.c <<'EOM'
4271 #define BLURFL foo
4272
4273 BLURFL xx LFRULB
4274 EOM
4275         previous=''
4276         for flag in $*
4277         do
4278                 case "$flag" in
4279                 -*) ftry="$flag";;
4280                 *) ftry="$previous $flag";;
4281                 esac
4282                 if $cppstdin -DLFRULB=bar $cppflags $ftry $cppminus <cpp.c \
4283                         >cpp1.out 2>/dev/null && \
4284                         $cpprun -DLFRULB=bar $cppflags $ftry $cpplast <cpp.c \
4285                         >cpp2.out 2>/dev/null && \
4286                         $contains 'foo.*xx.*bar' cpp1.out >/dev/null 2>&1 && \
4287                         $contains 'foo.*xx.*bar' cpp2.out >/dev/null 2>&1
4288                 then
4289                         cppflags="$cppflags $ftry"
4290                         previous=''
4291                 else
4292                         previous="$flag"
4293                 fi
4294         done
4295         set X $cppflags
4296         shift
4297         cppflags=${1+"$@"}
4298         case "$cppflags" in
4299         *-*)  echo "They appear to be: $cppflags";;
4300         esac
4301         $rm -f cpp.c cpp?.out
4302         ;;
4303 esac
4304
4305 : flags used in final linking phase
4306 case "$ldflags" in
4307 '') if ./venix; then
4308                 dflt='-i -z'
4309         else
4310                 dflt=''
4311         fi
4312         case "$ccflags" in
4313         *-posix*) dflt="$dflt -posix" ;;
4314         esac
4315         ;;
4316 *) dflt="$ldflags";;
4317 esac
4318
4319 : Try to guess additional flags to pick up local libraries.
4320 for thislibdir in $libpth; do
4321         case " $loclibpth " in
4322         *" $thislibdir "*)
4323                 case "$dflt " in 
4324                 *"-L$thislibdir "*) ;;
4325                 *)  dflt="$dflt -L$thislibdir" ;;
4326                 esac
4327                 ;;
4328         esac
4329 done
4330
4331 case "$dflt" in
4332 '') dflt='none' ;;
4333 esac
4334
4335 $cat <<EOH
4336
4337 Your C linker may need flags.  For this question you should
4338 include -L/whatever and any other flags used by the C linker, but you
4339 should NOT include libraries like -lwhatever.
4340
4341 Make sure you include the appropriate -L/path flags if your C linker
4342 does not normally search all of the directories you specified above,
4343 namely
4344         $libpth
4345 To use no flags, specify the word "none".
4346
4347 EOH
4348
4349 rp="Any additional ld flags (NOT including libraries)?"
4350 . ./myread
4351 case "$ans" in
4352 none) ldflags='';;
4353 *) ldflags="$ans";;
4354 esac
4355 rmlist="$rmlist pdp11"
4356
4357 : coherency check
4358 echo " "
4359 echo "Checking your choice of C compiler and flags for coherency..." >&4
4360 $cat > try.c <<'EOF'
4361 #include <stdio.h>
4362 int main() { printf("Ok\n"); exit(0); }
4363 EOF
4364 set X $cc $optimize $ccflags -o try $ldflags try.c $libs
4365 shift
4366 $cat >try.msg <<'EOM'
4367 I've tried to compile and run the following simple program:
4368
4369 EOM
4370 $cat try.c >> try.msg
4371
4372 $cat >> try.msg <<EOM
4373
4374 I used the command:
4375
4376         $*
4377         ./try
4378
4379 and I got the following output:
4380
4381 EOM
4382 dflt=y
4383 if sh -c "$cc $optimize $ccflags -o try $ldflags try.c $libs" >>try.msg 2>&1; then
4384         if sh -c './try' >>try.msg 2>&1; then
4385                 xxx=`./try`
4386                 case "$xxx" in
4387                 "Ok") dflt=n ;;
4388                 *)      echo 'The program compiled OK, but produced no output.' >> try.msg
4389                         case " $libs " in
4390                         *" -lsfio "*)
4391                                 cat >> try.msg <<'EOQS'
4392 If $libs contains -lsfio, and sfio is mis-configured, then it
4393 sometimes (apparently) runs and exits with a 0 status, but with no
4394 output!  It may have to do with sfio's use of _exit vs. exit.
4395
4396 EOQS
4397                                 rp="You have a big problem.  Shall I abort Configure"
4398                                 dflt=y
4399                                 ;;
4400                         esac
4401                         ;;
4402                 esac
4403         else
4404                 echo "The program compiled OK, but exited with status $?." >>try.msg
4405                 rp="You have a problem.  Shall I abort Configure"
4406                 dflt=y
4407         fi
4408 else
4409         echo "I can't compile the test program." >>try.msg
4410         rp="You have a BIG problem.  Shall I abort Configure"
4411         dflt=y
4412 fi
4413 case "$dflt" in
4414 y)
4415         $cat try.msg >&4
4416         case "$knowitall" in
4417         '')
4418                 echo "(The supplied flags or libraries might be incorrect.)"
4419                 ;;
4420         *) dflt=n;;
4421         esac
4422         echo " "
4423         . ./myread
4424         case "$ans" in
4425         n*|N*) ;;
4426         *)      echo "Ok.  Stopping Configure." >&4
4427                 exit 1
4428                 ;;
4429         esac
4430         ;;
4431 n) echo "OK, that should do.";;
4432 esac
4433 $rm -f try try.* core
4434
4435 : determine filename position in cpp output
4436 echo " "
4437 echo "Computing filename position in cpp output for #include directives..." >&4
4438 echo '#include <stdio.h>' > foo.c
4439 $cat >fieldn <<EOF
4440 $startsh
4441 $cppstdin $cppflags $cppminus <foo.c 2>/dev/null | \
4442 $grep '^[       ]*#.*stdio\.h' | \
4443 while read cline; do
4444         pos=1
4445         set \$cline
4446         while $test \$# -gt 0; do
4447                 if $test -r \`echo \$1 | $tr -d '"'\`; then
4448                         echo "\$pos"
4449                         exit 0
4450                 fi
4451                 shift
4452                 pos=\`expr \$pos + 1\`
4453         done
4454 done
4455 EOF
4456 chmod +x fieldn
4457 fieldn=`./fieldn`
4458 $rm -f foo.c fieldn
4459 case $fieldn in
4460 '') pos='???';;
4461 1) pos=first;;
4462 2) pos=second;;
4463 3) pos=third;;
4464 *) pos="${fieldn}th";;
4465 esac
4466 echo "Your cpp writes the filename in the $pos field of the line."
4467
4468 : locate header file
4469 $cat >findhdr <<EOF
4470 $startsh
4471 wanted=\$1
4472 name=''
4473 for usrincdir in $usrinc
4474 do
4475         if test -f \$usrincdir/\$wanted; then
4476                 echo "\$usrincdir/\$wanted"
4477                 exit 0
4478         fi
4479 done
4480 awkprg='{ print \$$fieldn }'
4481 echo "#include <\$wanted>" > foo\$\$.c
4482 $cppstdin $cppminus $cppflags < foo\$\$.c 2>/dev/null | \
4483 $grep "^[       ]*#.*\$wanted" | \
4484 while read cline; do
4485         name=\`echo \$cline | $awk "\$awkprg" | $tr -d '"'\`
4486         case "\$name" in
4487         *[/\\\\]\$wanted) echo "\$name"; exit 1;;
4488         *[\\\\/]\$wanted) echo "\$name"; exit 1;;
4489         *) exit 2;;
4490         esac;
4491 done;
4492 #
4493 # status = 0: grep returned 0 lines, case statement not executed
4494 # status = 1: headerfile found
4495 # status = 2: while loop executed, no headerfile found
4496 #
4497 status=\$?
4498 $rm -f foo\$\$.c;
4499 if test \$status -eq 1; then
4500         exit 0;
4501 fi
4502 exit 1
4503 EOF
4504 chmod +x findhdr
4505
4506 : define an alternate in-header-list? function
4507 inhdr='echo " "; td=$define; tu=$undef; yyy=$@;
4508 cont=true; xxf="echo \"<\$1> found.\" >&4";
4509 case $# in 2) xxnf="echo \"<\$1> NOT found.\" >&4";;
4510 *) xxnf="echo \"<\$1> NOT found, ...\" >&4";;
4511 esac;
4512 case $# in 4) instead=instead;; *) instead="at last";; esac;
4513 while $test "$cont"; do
4514         xxx=`./findhdr $1`
4515         var=$2; eval "was=\$$2";
4516         if $test "$xxx" && $test -r "$xxx";
4517         then eval $xxf;
4518         eval "case \"\$$var\" in $undef) . ./whoa; esac"; eval "$var=\$td";
4519                 cont="";
4520         else eval $xxnf;
4521         eval "case \"\$$var\" in $define) . ./whoa; esac"; eval "$var=\$tu"; fi;
4522         set $yyy; shift; shift; yyy=$@;
4523         case $# in 0) cont="";;
4524         2) xxf="echo \"but I found <\$1> $instead.\" >&4";
4525                 xxnf="echo \"and I did not find <\$1> either.\" >&4";;
4526         *) xxf="echo \"but I found <\$1\> instead.\" >&4";
4527                 xxnf="echo \"there is no <\$1>, ...\" >&4";;
4528         esac;
4529 done;
4530 while $test "$yyy";
4531 do set $yyy; var=$2; eval "was=\$$2";
4532         eval "case \"\$$var\" in $define) . ./whoa; esac"; eval "$var=\$tu";
4533         set $yyy; shift; shift; yyy=$@;
4534 done'
4535
4536 : see if this is a malloc.h system
4537 set malloc.h i_malloc
4538 eval $inhdr
4539
4540 : see if stdlib is available
4541 set stdlib.h i_stdlib
4542 eval $inhdr
4543
4544 : determine which malloc to compile in
4545 echo " "
4546 case "$usemymalloc" in
4547 ''|[yY]*|true|$define)  dflt='y' ;;
4548 *)      dflt='n' ;;
4549 esac
4550 rp="Do you wish to attempt to use the malloc that comes with $package?"
4551 . ./myread
4552 usemymalloc="$ans"
4553 case "$ans" in
4554 y*|true)
4555         usemymalloc='y'
4556         mallocsrc='malloc.c'
4557         mallocobj="malloc$_o"
4558         d_mymalloc="$define"
4559         case "$libs" in
4560         *-lmalloc*)
4561                 : Remove malloc from list of libraries to use
4562                 echo "Removing unneeded -lmalloc from library list" >&4
4563                 set `echo X $libs | $sed -e 's/-lmalloc / /' -e 's/-lmalloc$//'`
4564                 shift
4565                 libs="$*"
4566                 echo "libs = $libs" >&4
4567                 ;;
4568         esac
4569         ;;
4570 *)
4571         usemymalloc='n'
4572         mallocsrc=''
4573         mallocobj=''
4574         d_mymalloc="$undef"
4575         ;;
4576 esac
4577
4578 : compute the return types of malloc and free
4579 echo " "
4580 $cat >malloc.c <<END
4581 #$i_malloc I_MALLOC
4582 #$i_stdlib I_STDLIB
4583 #include <stdio.h>
4584 #include <sys/types.h>
4585 #ifdef I_MALLOC
4586 #include <malloc.h>
4587 #endif
4588 #ifdef I_STDLIB
4589 #include <stdlib.h>
4590 #endif
4591 #ifdef TRY_MALLOC
4592 void *malloc();
4593 #endif
4594 #ifdef TRY_FREE
4595 void free();
4596 #endif
4597 END
4598 case "$malloctype" in
4599 '')
4600         if $cc $ccflags -c -DTRY_MALLOC malloc.c >/dev/null 2>&1; then
4601                 malloctype='void *'
4602         else
4603                 malloctype='char *'
4604         fi
4605         ;;
4606 esac
4607 echo "Your system wants malloc to return '$malloctype', it would seem." >&4
4608
4609 case "$freetype" in
4610 '')
4611         if $cc $ccflags -c -DTRY_FREE malloc.c >/dev/null 2>&1; then
4612                 freetype='void'
4613         else
4614                 freetype='int'
4615         fi
4616         ;;
4617 esac
4618 echo "Your system uses $freetype free(), it would seem." >&4
4619 $rm -f malloc.[co]
4620 $cat <<EOM
4621
4622 The installation process will also create a directory for
4623 vendor-supplied add-ons.  Vendors who supply perl with their system
4624 may find it convenient to place all vendor-supplied files in this
4625 directory rather than in the main distribution directory.  This will
4626 ease upgrades between binary-compatible maintenance versions of perl.
4627
4628 Of course you may also use these directories in whatever way you see
4629 fit.  For example, you might use them to access modules shared over a
4630 company-wide network.
4631
4632 The default answer should be fine for most people.
4633 This causes further questions about vendor add-ons to be skipped
4634 and no vendor-specific directories will be configured for perl.
4635
4636 EOM
4637 rp='Do you want to configure vendor-specific add-on directories?'
4638 case "$usevendorprefix" in
4639 define|true|[yY]*) dflt=y ;;
4640 *) dflt=n ;;
4641 esac
4642 . ./myread
4643 case "$ans" in
4644 [yY]*)  fn=d~+
4645         rp='Installation prefix to use for vendor-supplied add-ons?'
4646         case "$vendorprefix" in
4647         '') dflt='' ;;
4648         *)  dflt=$vendorprefix ;;
4649         esac
4650         . ./getfile
4651         oldvendorprefix=''
4652         case "$vendorprefix" in
4653         '') ;;
4654         *)      case "$ans" in
4655                 "$prefix") ;;
4656                 *) oldvendorprefix="$prefix";;
4657                 esac
4658                 ;;
4659         esac
4660         usevendorprefix="$define"
4661         vendorprefix="$ans"
4662         vendorprefixexp="$ansexp"
4663         ;;
4664 *)      usevendorprefix="$undef"
4665         vendorprefix=''
4666         vendorprefixexp=''
4667         ;;
4668 esac
4669
4670 case "$vendorprefix" in
4671 '')     d_vendorlib="$undef"
4672         vendorlib=''
4673         vendorlibexp=''
4674         ;;
4675 *)      d_vendorlib="$define"
4676         : determine where vendor-supplied modules go.
4677         : Usual default is /usr/local/lib/perl5/vendor_perl
4678         prog=`echo $package | $sed 's/-*[0-9.]*$//'`
4679         case "$installstyle" in
4680         *lib/perl5*) dflt=$vendorprefix/lib/$package/vendor_$prog ;;
4681         *)           dflt=$vendorprefix/lib/vendor_$prog ;;
4682         esac
4683         fn=d~+
4684         rp='Pathname for the vendor-supplied library files?'
4685         . ./getfile
4686         vendorlib="$ans"
4687         vendorlibexp="$ansexp"
4688         : Change installation prefix, if necessary.
4689         if $test X"$prefix" != X"$installprefix"; then
4690                 installvendorlib=`echo $vendorlibexp | $sed 's#^$prefix#$installprefix#'`
4691         else
4692                 installvendorlib="$vendorlibexp"
4693         fi
4694         ;;
4695 esac
4696
4697 : Cruising for prototypes
4698 echo " "
4699 echo "Checking out function prototypes..." >&4
4700 $cat >prototype.c <<'EOCP'
4701 int main(int argc, char *argv[]) {
4702         exit(0);}
4703 EOCP
4704 if $cc $ccflags -c prototype.c >prototype.out 2>&1 ; then
4705         echo "Your C compiler appears to support function prototypes."
4706         val="$define"
4707 else
4708         echo "Your C compiler doesn't seem to understand function prototypes."
4709         val="$undef"
4710 fi
4711 set prototype
4712 eval $setvar
4713 $rm -f prototype*
4714
4715 case "$prototype" in
4716 "$define") ;;
4717 *)      ansi2knr='ansi2knr'
4718         echo " "
4719         cat <<EOM >&4
4720
4721 $me:  FATAL ERROR:
4722 This version of $package can only be compiled by a compiler that 
4723 understands function prototypes.  Unfortunately, your C compiler 
4724         $cc $ccflags
4725 doesn't seem to understand them.  Sorry about that.
4726
4727 If GNU cc is available for your system, perhaps you could try that instead.  
4728
4729 Eventually, we hope to support building Perl with pre-ANSI compilers.
4730 If you would like to help in that effort, please contact <perlbug@perl.org>.
4731
4732 Aborting Configure now.
4733 EOM
4734         exit 2
4735         ;;
4736 esac
4737
4738 : determine where public executables go
4739 echo " "
4740 set dflt bin bin
4741 eval $prefixit
4742 fn=d~
4743 rp='Pathname where the public executables will reside?'
4744 . ./getfile
4745 if $test "X$ansexp" != "X$binexp"; then
4746         installbin=''
4747 fi
4748 bin="$ans"
4749 binexp="$ansexp"
4750 : Change installation prefix, if necessary.
4751 : XXX Bug? -- ignores Configure -Dinstallprefix setting.
4752 if $test X"$prefix" != X"$installprefix"; then
4753         installbin=`echo $binexp | sed 's#^$prefix#$installprefix#'`
4754 else
4755         installbin="$binexp"
4756 fi
4757
4758 : determine whether to install perl also as /usr/bin/perl
4759
4760 echo " "
4761 if $test -d /usr/bin -a "X$installbin" != X/usr/bin; then
4762         $cat <<EOM
4763 Many scripts expect to perl to be installed as /usr/bin/perl.
4764 I can install the perl you are about to compile also as /usr/bin/perl
4765 (in addition to $installbin/perl).
4766 EOM
4767         case "$installusrbinperl" in
4768         "$undef"|[nN]*) dflt='n';;
4769         *)              dflt='y';;
4770         esac
4771         rp="Do you want to install perl as /usr/bin/perl?"
4772         . ./myread
4773         case "$ans" in
4774         [yY]*)  val="$define";;
4775         *)      val="$undef" ;;
4776         esac
4777 else
4778         val="$undef"
4779 fi
4780 set installusrbinperl
4781 eval $setvar
4782
4783 : define a shorthand compile call
4784 compile='
4785 mc_file=$1;
4786 shift;
4787 $cc $optimize $ccflags $ldflags -o ${mc_file} $* ${mc_file}.c $libs > /dev/null 2>&1;'
4788 : define a shorthand compile call for compilations that should be ok.
4789 compile_ok='
4790 mc_file=$1;
4791 shift;
4792 $cc $optimize $ccflags $ldflags -o ${mc_file} $* ${mc_file}.c $libs;'
4793
4794 echo " "
4795 echo "Checking for GNU C Library..." >&4
4796 cat >gnulibc.c <<EOM
4797 #include <stdio.h>
4798 int main()
4799 {
4800 #ifdef __GLIBC__
4801     exit(0);
4802 #else
4803     exit(1);
4804 #endif
4805 }
4806 EOM
4807 set gnulibc
4808 if eval $compile_ok && ./gnulibc; then
4809         val="$define"
4810         echo "You are using the GNU C Library"
4811 else
4812         val="$undef"
4813         echo "You are not using the GNU C Library"
4814 fi
4815 $rm -f gnulibc*
4816 set d_gnulibc
4817 eval $setvar
4818
4819 : see if nm is to be used to determine whether a symbol is defined or not
4820 case "$usenm" in
4821 '')
4822         dflt=''
4823         case "$d_gnulibc" in
4824         "$define")
4825                 echo " "
4826                 echo "nm probably won't work on the GNU C Library." >&4
4827                 dflt=n
4828                 ;;
4829         esac
4830         case "$dflt" in
4831         '') 
4832                 if $test "$osname" = aix -a ! -f /lib/syscalls.exp; then
4833                         echo " "
4834                         echo "Whoops!  This is an AIX system without /lib/syscalls.exp!" >&4
4835                         echo "'nm' won't be sufficient on this sytem." >&4
4836                         dflt=n
4837                 fi
4838                 ;;
4839         esac
4840         case "$dflt" in
4841         '') dflt=`$egrep 'inlibc|csym' $rsrc/Configure | wc -l 2>/dev/null`
4842                 if $test $dflt -gt 20; then
4843                         dflt=y
4844                 else
4845                         dflt=n
4846                 fi
4847                 ;;
4848         esac
4849         ;;
4850 *)
4851         case "$usenm" in
4852         true|$define) dflt=y;;
4853         *) dflt=n;;
4854         esac
4855         ;;
4856 esac
4857 $cat <<EOM
4858
4859 I can use $nm to extract the symbols from your C libraries. This
4860 is a time consuming task which may generate huge output on the disk (up
4861 to 3 megabytes) but that should make the symbols extraction faster. The
4862 alternative is to skip the 'nm' extraction part and to compile a small
4863 test program instead to determine whether each symbol is present. If
4864 you have a fast C compiler and/or if your 'nm' output cannot be parsed,
4865 this may be the best solution.
4866
4867 You probably shouldn't let me use 'nm' if you are using the GNU C Library.
4868
4869 EOM
4870 rp="Shall I use $nm to extract C symbols from the libraries?"
4871 . ./myread
4872 case "$ans" in
4873 [Nn]*) usenm=false;;
4874 *) usenm=true;;
4875 esac
4876
4877 runnm=$usenm
4878 case "$reuseval" in
4879 true) runnm=false;;
4880 esac
4881
4882 : nm options which may be necessary
4883 case "$nm_opt" in
4884 '') if $test -f /mach_boot; then
4885                 nm_opt=''       # Mach
4886         elif $test -d /usr/ccs/lib; then
4887                 nm_opt='-p'     # Solaris (and SunOS?)
4888         elif $test -f /dgux; then
4889                 nm_opt='-p'     # DG-UX
4890         elif $test -f /lib64/rld; then
4891                 nm_opt='-p'     # 64-bit Irix
4892         else
4893                 nm_opt=''
4894         fi;;
4895 esac
4896
4897 : nm options which may be necessary for shared libraries but illegal
4898 : for archive libraries.  Thank you, Linux.
4899 case "$nm_so_opt" in
4900 '')     case "$myuname" in
4901         *linux*)
4902                 if $nm --help | $grep 'dynamic' > /dev/null 2>&1; then
4903                         nm_so_opt='--dynamic'
4904                 fi
4905                 ;;
4906         esac
4907         ;;
4908 esac
4909
4910 case "$runnm" in
4911 true)
4912 : get list of predefined functions in a handy place
4913 echo " "
4914 case "$libc" in
4915 '') libc=unknown
4916         case "$libs" in
4917         *-lc_s*) libc=`./loc libc_s$_a $libc $libpth`
4918         esac
4919         ;;
4920 esac
4921 libnames='';
4922 case "$libs" in
4923 '') ;;
4924 *)  for thislib in $libs; do
4925         case "$thislib" in
4926         -lc|-lc_s)
4927                 : Handle C library specially below.
4928                 ;;
4929         -l*)
4930                 thislib=`echo $thislib | $sed -e 's/^-l//'`
4931                 if try=`./loc lib$thislib.$so.'*' X $libpth`; $test -f "$try"; then
4932                         :
4933                 elif try=`./loc lib$thislib.$so X $libpth`; $test -f "$try"; then
4934                         :
4935                 elif try=`./loc lib$thislib$_a X $libpth`; $test -f "$try"; then
4936                         :
4937                 elif try=`./loc $thislib$_a X $libpth`; $test -f "$try"; then
4938                         :
4939                 elif try=`./loc lib$thislib X $libpth`; $test -f "$try"; then
4940                         :
4941                 elif try=`./loc $thislib X $libpth`; $test -f "$try"; then
4942                         :
4943                 elif try=`./loc Slib$thislib$_a X $xlibpth`; $test -f "$try"; then
4944                         :
4945                 else
4946                         try=''
4947                 fi
4948                 libnames="$libnames $try"
4949                 ;;
4950         *) libnames="$libnames $thislib" ;;
4951         esac
4952         done
4953         ;;
4954 esac
4955 xxx=normal
4956 case "$libc" in
4957 unknown)
4958         set /lib/libc.$so
4959         for xxx in $libpth; do
4960                 $test -r $1 || set $xxx/libc.$so
4961                 : The messy sed command sorts on library version numbers.
4962                 $test -r $1 || \
4963                         set `echo blurfl; echo $xxx/libc.$so.[0-9]* | \
4964                         tr ' ' $trnl | egrep -v '\.[A-Za-z]*$' | $sed -e '
4965                                 h
4966                                 s/[0-9][0-9]*/0000&/g
4967                                 s/0*\([0-9][0-9][0-9][0-9][0-9]\)/\1/g
4968                                 G
4969                                 s/\n/ /' | \
4970                          sort | $sed -e 's/^.* //'`
4971                 eval set \$$#
4972         done
4973         $test -r $1 || set /usr/ccs/lib/libc.$so
4974         $test -r $1 || set /lib/libsys_s$_a
4975         ;;
4976 *)
4977         set blurfl
4978         ;;
4979 esac
4980 if $test -r "$1"; then
4981         echo "Your (shared) C library seems to be in $1."
4982         libc="$1"
4983 elif $test -r /lib/libc && $test -r /lib/clib; then
4984         echo "Your C library seems to be in both /lib/clib and /lib/libc."
4985         xxx=apollo
4986         libc='/lib/clib /lib/libc'
4987         if $test -r /lib/syslib; then
4988                 echo "(Your math library is in /lib/syslib.)"
4989                 libc="$libc /lib/syslib"
4990         fi
4991 elif $test -r "$libc" || (test -h "$libc") >/dev/null 2>&1; then
4992         echo "Your C library seems to be in $libc, as you said before."
4993 elif $test -r $incpath/usr/lib/libc$_a; then
4994         libc=$incpath/usr/lib/libc$_a;
4995         echo "Your C library seems to be in $libc.  That's fine."
4996 elif $test -r /lib/libc$_a; then
4997         libc=/lib/libc$_a;
4998         echo "Your C library seems to be in $libc.  You're normal."
4999 else
5000         if tans=`./loc libc$_a blurfl/dyick $libpth`; $test -r "$tans"; then
5001                 :
5002         elif tans=`./loc libc blurfl/dyick $libpth`; $test -r "$tans"; then
5003                 libnames="$libnames "`./loc clib blurfl/dyick $libpth`
5004         elif tans=`./loc clib blurfl/dyick $libpth`; $test -r "$tans"; then
5005                 :
5006         elif tans=`./loc Slibc$_a blurfl/dyick $xlibpth`; $test -r "$tans"; then
5007                 :
5008         elif tans=`./loc Mlibc$_a blurfl/dyick $xlibpth`; $test -r "$tans"; then
5009                 :
5010         else
5011                 tans=`./loc Llibc$_a blurfl/dyick $xlibpth`
5012         fi
5013         if $test -r "$tans"; then
5014                 echo "Your C library seems to be in $tans, of all places."
5015                 libc=$tans
5016         else
5017                 libc='blurfl'
5018         fi
5019 fi
5020 if $test $xxx = apollo -o -r "$libc" || (test -h "$libc") >/dev/null 2>&1; then
5021         dflt="$libc"
5022         cat <<EOM
5023
5024 If the guess above is wrong (which it might be if you're using a strange
5025 compiler, or your machine supports multiple models), you can override it here.
5026
5027 EOM
5028 else
5029         dflt=''
5030         echo $libpth | tr ' ' $trnl | sort | uniq > libpath
5031         cat >&4 <<EOM
5032 I can't seem to find your C library.  I've looked in the following places:
5033
5034 EOM
5035         $sed 's/^/      /' libpath
5036         cat <<EOM
5037
5038 None of these seems to contain your C library. I need to get its name...
5039
5040 EOM
5041 fi
5042 fn=f
5043 rp='Where is your C library?'
5044 . ./getfile
5045 libc="$ans"
5046
5047 echo " "
5048 echo $libc $libnames | tr ' ' $trnl | sort | uniq > libnames
5049 set X `cat libnames`
5050 shift
5051 xxx=files
5052 case $# in 1) xxx=file; esac
5053 echo "Extracting names from the following $xxx for later perusal:" >&4
5054 echo " "
5055 $sed 's/^/      /' libnames >&4
5056 echo " "
5057 $echo $n "This may take a while...$c" >&4
5058
5059 for file in $*; do
5060         case $file in
5061         *$so*) $nm $nm_so_opt $nm_opt $file 2>/dev/null;;
5062         *) $nm $nm_opt $file 2>/dev/null;;
5063         esac
5064 done >libc.tmp
5065
5066 $echo $n ".$c"
5067 $grep fprintf libc.tmp > libc.ptf
5068 xscan='eval "<libc.ptf $com >libc.list"; $echo $n ".$c" >&4'
5069 xrun='eval "<libc.tmp $com >libc.list"; echo "done" >&4'
5070 xxx='[ADTSIW]'
5071 if com="$sed -n -e 's/__IO//' -e 's/^.* $xxx  *_[_.]*//p' -e 's/^.* $xxx  *//p'";\
5072         eval $xscan;\
5073         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5074                 eval $xrun
5075 elif com="$sed -n -e 's/^__*//' -e 's/^\([a-zA-Z_0-9$]*\).*xtern.*/\1/p'";\
5076         eval $xscan;\
5077         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5078                 eval $xrun
5079 elif com="$sed -n -e '/|UNDEF/d' -e '/FUNC..GL/s/^.*|__*//p'";\
5080         eval $xscan;\
5081         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5082                 eval $xrun
5083 elif com="$sed -n -e 's/^.* D __*//p' -e 's/^.* D //p'";\
5084         eval $xscan;\
5085         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5086                 eval $xrun
5087 elif com="$sed -n -e 's/^_//' -e 's/^\([a-zA-Z_0-9]*\).*xtern.*text.*/\1/p'";\
5088         eval $xscan;\
5089         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5090                 eval $xrun
5091 elif com="$sed -n -e 's/^.*|FUNC |GLOB .*|//p'";\
5092         eval $xscan;\
5093         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5094                 eval $xrun
5095 elif com="$grep '|' | $sed -n -e '/|COMMON/d' -e '/|DATA/d' \
5096                                 -e '/ file/d' -e 's/^\([^       ]*\).*/\1/p'";\
5097         eval $xscan;\
5098         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5099                 eval $xrun
5100 elif com="$sed -n -e 's/^.*|FUNC |GLOB .*|//p' -e 's/^.*|FUNC |WEAK .*|//p'";\
5101         eval $xscan;\
5102         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5103                 eval $xrun
5104 elif com="$sed -n -e 's/^__//' -e '/|Undef/d' -e '/|Proc/s/ .*//p'";\
5105         eval $xscan;\
5106         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5107                 eval $xrun
5108 elif com="$sed -n -e 's/^.*|Proc .*|Text *| *//p'";\
5109         eval $xscan;\
5110         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5111                 eval $xrun
5112 elif com="$sed -n -e '/Def. Text/s/.* \([^ ]*\)\$/\1/p'";\
5113         eval $xscan;\
5114         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5115                 eval $xrun
5116 elif com="$sed -n -e 's/^[-0-9a-f ]*_\(.*\)=.*/\1/p'";\
5117         eval $xscan;\
5118         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5119                 eval $xrun
5120 elif com="$sed -n -e 's/.*\.text n\ \ \ \.//p'";\
5121         eval $xscan;\
5122         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5123                 eval $xrun
5124 elif com="sed -n -e 's/^__.*//' -e 's/[       ]*D[    ]*[0-9]*.*//p'";\
5125         eval $xscan;\
5126         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5127                 eval $xrun
5128 else
5129         $nm -p $* 2>/dev/null >libc.tmp
5130         $grep fprintf libc.tmp > libc.ptf
5131         if com="$sed -n -e 's/^.* [ADTSIW]  *_[_.]*//p' -e 's/^.* [ADTSIW] //p'";\
5132                 eval $xscan; $contains '^fprintf$' libc.list >/dev/null 2>&1
5133         then
5134                 nm_opt='-p'
5135                 eval $xrun
5136         else
5137                 echo " "
5138                 echo "$nm didn't seem to work right. Trying $ar instead..." >&4
5139                 com=''
5140                 if $ar t $libc > libc.tmp && $contains '^fprintf$' libc.tmp >/dev/null 2>&1; then
5141                         for thisname in $libnames $libc; do
5142                                 $ar t $thisname >>libc.tmp
5143                         done
5144                         $sed -e "s/\\$_o\$//" < libc.tmp > libc.list
5145                         echo "Ok." >&4
5146                 elif test "X$osname" = "Xos2" && $ar tv $libc > libc.tmp; then
5147                         # Repeat libc to extract forwarders to DLL entries too
5148                         for thisname in $libnames $libc; do
5149                                 $ar tv $thisname >>libc.tmp
5150                                 # Revision 50 of EMX has bug in $ar.
5151                                 # it will not extract forwarders to DLL entries
5152                                 # Use emximp which will extract exactly them.
5153                                 emximp -o tmp.imp $thisname \
5154                                     2>/dev/null && \
5155                                     $sed -e 's/^\([_a-zA-Z0-9]*\) .*$/\1/p' \
5156                                     < tmp.imp >>libc.tmp
5157                                 $rm tmp.imp
5158                         done
5159                         $sed -e "s/\\$_o\$//" -e 's/^ \+//' < libc.tmp > libc.list
5160                         echo "Ok." >&4
5161                 else
5162                         echo "$ar didn't seem to work right." >&4
5163                         echo "Maybe this is a Cray...trying bld instead..." >&4
5164                         if bld t $libc | $sed -e 's/.*\///' -e "s/\\$_o:.*\$//" > libc.list
5165                         then
5166                                 for thisname in $libnames; do
5167                                         bld t $libnames | \
5168                                         $sed -e 's/.*\///' -e "s/\\$_o:.*\$//" >>libc.list
5169                                         $ar t $thisname >>libc.tmp
5170                                 done
5171                                 echo "Ok." >&4
5172                         else
5173                                 echo "That didn't work either.  Giving up." >&4
5174                                 exit 1
5175                         fi
5176                 fi
5177         fi
5178 fi
5179 nm_extract="$com"
5180 if $test -f /lib/syscalls.exp; then
5181         echo " "
5182         echo "Also extracting names from /lib/syscalls.exp for good ole AIX..." >&4
5183         $sed -n 's/^\([^        ]*\)[   ]*syscall[0-9]*$/\1/p' /lib/syscalls.exp >>libc.list
5184 fi
5185 ;;
5186 esac
5187 $rm -f libnames libpath
5188
5189 : see if dld is available
5190 set dld.h i_dld
5191 eval $inhdr
5192
5193 : is a C symbol defined?
5194 csym='tlook=$1;
5195 case "$3" in
5196 -v) tf=libc.tmp; tc=""; tdc="";;
5197 -a) tf=libc.tmp; tc="[0]"; tdc="[]";;
5198 *) tlook="^$1\$"; tf=libc.list; tc="()"; tdc="()";;
5199 esac;
5200 tx=yes;
5201 case "$reuseval-$4" in
5202 true-) ;;
5203 true-*) tx=no; eval "tval=\$$4"; case "$tval" in "") tx=yes;; esac;;
5204 esac;
5205 case "$tx" in
5206 yes)
5207         case "$runnm" in
5208         true)
5209                 if $contains $tlook $tf >/dev/null 2>&1;
5210                 then tval=true;
5211                 else tval=false;
5212                 fi;;
5213         *)
5214                 echo "int main() { extern short $1$tdc; printf(\"%hd\", $1$tc); }" > t.c;
5215                 if $cc $optimize $ccflags $ldflags -o t t.c $libs >/dev/null 2>&1;
5216                 then tval=true;
5217                 else tval=false;
5218                 fi;
5219                 $rm -f t t.c;;
5220         esac;;
5221 *)
5222         case "$tval" in
5223         $define) tval=true;;
5224         *) tval=false;;
5225         esac;;
5226 esac;
5227 eval "$2=$tval"'
5228
5229 : define an is-in-libc? function
5230 inlibc='echo " "; td=$define; tu=$undef;
5231 sym=$1; var=$2; eval "was=\$$2";
5232 tx=yes;
5233 case "$reuseval$was" in
5234 true) ;;
5235 true*) tx=no;;
5236 esac;
5237 case "$tx" in
5238 yes)
5239         set $sym tres -f;
5240         eval $csym;
5241         case "$tres" in
5242         true)
5243                 echo "$sym() found." >&4;
5244                 case "$was" in $undef) . ./whoa; esac; eval "$var=\$td";;
5245         *)
5246                 echo "$sym() NOT found." >&4;
5247                 case "$was" in $define) . ./whoa; esac; eval "$var=\$tu";;
5248         esac;;
5249 *)
5250         case "$was" in
5251         $define) echo "$sym() found." >&4;;
5252         *) echo "$sym() NOT found." >&4;;
5253         esac;;
5254 esac'
5255
5256 : see if dlopen exists
5257 xxx_runnm="$runnm"
5258 runnm=false
5259 set dlopen d_dlopen
5260 eval $inlibc
5261 runnm="$xxx_runnm"
5262
5263 : determine which dynamic loading, if any, to compile in
5264 echo " "
5265 dldir="ext/DynaLoader"
5266 case "$usedl" in
5267 $define|y|true)
5268         dflt='y'
5269         usedl="$define"
5270         ;;
5271 $undef|n|false)
5272         dflt='n'
5273         usedl="$undef"
5274         ;;
5275 *) 
5276         dflt='n'
5277         case "$d_dlopen" in
5278             $define) dflt='y' ;;
5279         esac
5280         case "$i_dld" in
5281             $define) dflt='y' ;;
5282         esac
5283         : Does a dl_xxx.xs file exist for this operating system
5284         $test -f $rsrc/$dldir/dl_${osname}.xs && dflt='y'
5285         ;;
5286 esac
5287 rp="Do you wish to use dynamic loading?"
5288 . ./myread
5289 usedl="$ans"
5290 case "$ans" in
5291 y*) usedl="$define"
5292         case "$dlsrc" in
5293         '')
5294                 if $test -f $rsrc/$dldir/dl_${osname}.xs ; then
5295                         dflt="$dldir/dl_${osname}.xs"
5296                 elif $test "$d_dlopen" = "$define" ; then
5297                         dflt="$dldir/dl_dlopen.xs"
5298                 elif $test "$i_dld" = "$define" ; then
5299                         dflt="$dldir/dl_dld.xs"
5300                 else
5301                         dflt=''
5302                 fi
5303                 ;;
5304         *)      dflt="$dldir/$dlsrc"
5305                 ;;
5306         esac
5307     echo "The following dynamic loading files are available:"
5308         : Can not go over to $dldir because getfile has path hard-coded in.
5309         tdir=`pwd`; cd $rsrc; $ls -C $dldir/dl*.xs; cd $tdir
5310         rp="Source file to use for dynamic loading"
5311         fn="fne"
5312         gfpth="$src"
5313         . ./getfile
5314         usedl="$define"
5315         : emulate basename
5316         dlsrc=`echo $ans | $sed -e 's@.*/\([^/]*\)$@\1@'`
5317
5318         $cat << EOM
5319
5320 Some systems may require passing special flags to $cc -c to
5321 compile modules that will be used to create a shared library.
5322 To use no flags, say "none".
5323
5324 EOM
5325     case "$cccdlflags" in
5326     '') case "$gccversion" in
5327                 '') case "$osname" in
5328                         hpux)   dflt='+z' ;;
5329                         next)   dflt='none' ;;
5330                         irix*)  dflt='-KPIC' ;;
5331                         svr4*|esix*|solaris) dflt='-KPIC' ;;
5332                         sunos)  dflt='-pic' ;;
5333                         *)      dflt='none' ;;
5334                     esac
5335                         ;;
5336                 *)  case "$osname" in
5337                         svr4*|esix*|solaris) dflt='-fPIC' ;;
5338                         *)      dflt='-fpic' ;;
5339                     esac ;;
5340             esac ;;
5341         ' ') dflt='none' ;;
5342     *)  dflt="$cccdlflags" ;;
5343     esac
5344     rp="Any special flags to pass to $cc -c to compile shared library modules?"
5345     . ./myread
5346     case "$ans" in
5347     none) cccdlflags=' ' ;;
5348     *) cccdlflags="$ans" ;;
5349     esac
5350
5351     cat << EOM
5352
5353 Some systems use ld to create libraries that can be dynamically loaded,
5354 while other systems (such as those using ELF) use $cc.
5355
5356 EOM
5357         case "$ld" in
5358         '')     $cat >try.c <<'EOM'
5359 /* Test for whether ELF binaries are produced */
5360 #include <fcntl.h>
5361 #include <stdlib.h>
5362 int main() {
5363         char b[4];
5364         int i = open("a.out",O_RDONLY);
5365         if(i == -1) 
5366                 exit(1); /* fail */
5367         if(read(i,b,4)==4 && b[0]==127 && b[1]=='E' && b[2]=='L' && b[3]=='F')
5368                 exit(0); /* succeed (yes, it's ELF) */
5369         else
5370                 exit(1); /* fail */
5371 }
5372 EOM
5373                 if $cc $ccflags try.c >/dev/null 2>&1 && ./a.out; then
5374                         cat <<EOM
5375 You appear to have ELF support.  I'll use $cc to build dynamic libraries.
5376 EOM
5377                         dflt="$cc"
5378                 else
5379                         echo "I'll use ld to build dynamic libraries."
5380                         dflt='ld'
5381                 fi
5382                 rm -f try.c a.out
5383                 ;;
5384         *)      dflt="$ld"
5385                 ;;
5386         esac
5387
5388     rp="What command should be used to create dynamic libraries?"
5389     . ./myread
5390         ld="$ans"
5391
5392     cat << EOM
5393
5394 Some systems may require passing special flags to $ld to create a
5395 library that can be dynamically loaded.  If your ld flags include
5396 -L/other/path options to locate libraries outside your loader's normal
5397 search path, you may need to specify those -L options here as well.  To
5398 use no flags, say "none".
5399
5400 EOM
5401     case "$lddlflags" in
5402     '') case "$osname" in
5403                         beos) dflt='-nostart' ;;
5404                         hpux)  dflt='-b' ;;
5405                         linux|irix*)    dflt='-shared' ;;
5406                         next)  dflt='none' ;;
5407                         solaris) dflt='-G' ;;
5408                         sunos) dflt='-assert nodefinitions' ;;
5409                         svr4*|esix*) dflt="-G $ldflags" ;;
5410                 *)     dflt='none' ;;
5411                         esac
5412                         ;;
5413     *) dflt="$lddlflags" ;;
5414     esac
5415
5416         : Try to guess additional flags to pick up local libraries.
5417         : Be careful not to append to a plain 'none'
5418         case "$dflt" in
5419         none) dflt='' ;;
5420         esac
5421         for thisflag in $ldflags; do
5422                 case "$thisflag" in
5423                 -L*)
5424                         case " $dflt " in
5425                         *" $thisflag "*) ;;
5426                         *) dflt="$dflt $thisflag" ;;
5427                         esac
5428                         ;;
5429                 esac
5430         done
5431
5432         case "$dflt" in
5433         ''|' ') dflt='none' ;;
5434         esac
5435
5436     rp="Any special flags to pass to $ld to create a dynamically loaded library?"
5437     . ./myread
5438     case "$ans" in
5439     none) lddlflags=' ' ;;
5440     *) lddlflags="$ans" ;;
5441     esac
5442
5443         cat <<EOM
5444
5445 Some systems may require passing special flags to $cc to indicate that
5446 the resulting executable will use dynamic linking.  To use no flags,
5447 say "none".
5448
5449 EOM
5450     case "$ccdlflags" in
5451     '') case "$osname" in
5452                 hpux)   dflt='-Wl,-E' ;;
5453                 linux)  dflt='-rdynamic' ;;
5454                 next)   dflt='none' ;;
5455                 sunos)  dflt='none' ;;
5456                 *)      dflt='none' ;;
5457             esac ;;
5458     ' ')  dflt='none' ;;
5459     *)  dflt="$ccdlflags" ;;
5460     esac
5461     rp="Any special flags to pass to $cc to use dynamic loading?"
5462     . ./myread
5463     case "$ans" in
5464     none) ccdlflags=' ' ;;
5465     *) ccdlflags="$ans" ;;
5466     esac
5467     ;;
5468 *)  usedl="$undef"
5469         ld='ld'
5470     dlsrc='dl_none.xs'
5471     lddlflags=''
5472     ccdlflags=''
5473     ;;
5474 esac
5475
5476 also=''
5477 case "$usedl" in
5478 $undef)
5479         # No dynamic loading being used, so don't bother even to prompt.
5480         useshrplib='false'
5481         ;;
5482 *)      case "$useshrplib" in
5483         '')     case "$osname" in
5484                 svr4*|dgux|dynixptx|esix|powerux|beos)
5485                         dflt=y
5486                         also='Building a shared libperl is required for dynamic loading to work on your system.'
5487                         ;;
5488                 next*)
5489                         case "$osvers" in
5490                         4*)     dflt=y
5491                                 also='Building a shared libperl is needed for MAB support.'
5492                                 ;;
5493                         *)      dflt=n
5494                                 ;;
5495                         esac
5496                         ;;
5497                 *)      dflt=n
5498                         ;;
5499                 esac
5500                 ;;
5501         $define|true|[Yy]*)
5502                 dflt=y
5503                 ;;
5504         *)      dflt=n
5505                 ;;
5506         esac
5507         $cat << EOM
5508
5509 The perl executable is normally obtained by linking perlmain.c with
5510 libperl${_a}, any static extensions (usually just DynaLoader), and
5511 any other libraries needed on this system (such as -lm, etc.).  Since
5512 your system supports dynamic loading, it is probably possible to build
5513 a shared libperl.$so.  If you will have more than one executable linked
5514 to libperl.$so, this will significantly reduce the size of each
5515 executable, but it may have a noticeable affect on performance.  The
5516 default is probably sensible for your system.
5517 $also
5518
5519 EOM
5520         rp="Build a shared libperl.$so (y/n)"
5521         . ./myread
5522         case "$ans" in
5523         true|$define|[Yy]*)
5524                 useshrplib='true'  ;;
5525         *)      useshrplib='false' ;;
5526         esac
5527         ;;
5528 esac
5529
5530 case "$useshrplib" in
5531 true)
5532         case "$libperl" in
5533         '')
5534                 # Figure out a good name for libperl.so.  Since it gets stored in
5535                 # a version-specific architecture-dependent library, the version
5536                 # number isn't really that important, except for making cc/ld happy.
5537                 #
5538                 # A name such as libperl.so.3.1
5539                 majmin="libperl.$so.$patchlevel.$subversion"
5540                 # A name such as libperl.so.301
5541                 majonly=`echo $patchlevel $subversion |
5542                         $awk '{printf "%d%02d", $1, $2}'`
5543                 majonly=libperl.$so.$majonly
5544                 # I'd prefer to keep the os-specific stuff here to a minimum, and
5545                 # rely on figuring it out from the naming of libc.
5546                 case "${osname}${osvers}" in
5547                 next4*)
5548                         dflt=libperl.5.$so
5549                         # XXX How handle the --version stuff for MAB?
5550                         ;;
5551                 linux*)  # ld won't link with a bare -lperl otherwise.
5552                         dflt=libperl.$so
5553                         ;;
5554                 *)      # Try to guess based on whether libc has major.minor.
5555                         case "$libc" in
5556                         *libc.$so.[0-9]*.[0-9]*) dflt=$majmin ;;
5557                         *libc.$so.[0-9]*) dflt=$majonly ;;
5558                         *)      dflt=libperl.$so ;;
5559                         esac
5560                         ;;
5561                 esac
5562                 ;;
5563         *)      dflt=$libperl
5564                 ;;
5565         esac
5566         cat << EOM
5567
5568 I need to select a good name for the shared libperl.  If your system uses
5569 library names with major and minor numbers, then you might want something
5570 like $majmin.  Alternatively, if your system uses a single version
5571 number for shared libraries, then you might want to use $majonly.
5572 Or, your system might be quite happy with a simple libperl.$so.
5573
5574 Since the shared libperl will get installed into a version-specific
5575 architecture-dependent directory, the version number of the shared perl
5576 library probably isn't important, so the default should be o.k.
5577
5578 EOM
5579         rp='What name do you want to give to the shared libperl?'
5580         . ./myread
5581         libperl=$ans
5582         echo "Ok, I'll use $libperl"
5583         ;;
5584 *)
5585         libperl="libperl${_a}"
5586         ;;
5587 esac
5588
5589 # Detect old use of shrpdir via undocumented Configure -Dshrpdir
5590 case "$shrpdir" in
5591 '') ;;
5592 *)      $cat >&4 <<EOM
5593 WARNING:  Use of the shrpdir variable for the installation location of
5594 the shared $libperl is not supported.  It was never documented and
5595 will not work in this version.  Let me (perlbug@perl.com)
5596 know of any problems this may cause.
5597
5598 EOM
5599         case "$shrpdir" in
5600         "$archlibexp/CORE")
5601                 $cat >&4 <<EOM
5602 But your current setting of $shrpdir is
5603 the default anyway, so it's harmless.
5604 EOM
5605                 ;;
5606         *)
5607                 $cat >&4 <<EOM
5608 Further, your current attempted setting of $shrpdir
5609 conflicts with the value of $archlibexp/CORE
5610 that installperl will use.
5611 EOM
5612                 ;;
5613         esac
5614         ;;
5615 esac
5616
5617 # How will the perl executable find the installed shared $libperl?
5618 # Add $xxx to ccdlflags.
5619 # If we can't figure out a command-line option, use $shrpenv to
5620 # set env LD_RUN_PATH.  The main perl makefile uses this.
5621 shrpdir=$archlibexp/CORE
5622 xxx=''
5623 tmp_shrpenv=''
5624 if "$useshrplib"; then
5625     case "$osname" in 
5626         aix)
5627                 # We'll set it in Makefile.SH...
5628                 ;;
5629         solaris|netbsd)
5630                 xxx="-R $shrpdir"
5631                 ;;
5632         freebsd)
5633                 xxx="-Wl,-R$shrpdir"
5634                 ;;
5635         linux|irix*|dec_osf)
5636                 xxx="-Wl,-rpath,$shrpdir"
5637                 ;;
5638         next)
5639                 # next doesn't like the default...
5640                 ;;
5641         beos)
5642                 # beos doesn't like the default, either.
5643                 ;;
5644         hpux*)
5645                 # hpux doesn't like the default, either.
5646                 tmp_shrpenv="env LDOPTS=\"+s +b${shrpdir}\""
5647                 ;;
5648         *)
5649                 tmp_shrpenv="env LD_RUN_PATH=$shrpdir"
5650                 ;;
5651         esac
5652         case "$xxx" in
5653         '') ;;
5654         *)      
5655                 # Only add $xxx if it isn't already in ccdlflags.
5656                 case " $ccdlflags " in
5657                 *" $xxx "*)     ;;
5658                 *)      ccdlflags="$ccdlflags $xxx"
5659                         cat <<EOM >&4
5660
5661 Adding $xxx to the flags
5662 passed to $ld so that the perl executable will find the 
5663 installed shared $libperl.
5664
5665 EOM
5666                         ;;
5667                 esac
5668                 ;;
5669         esac
5670 fi
5671 # Fix ccdlflags in AIX for building external extensions.
5672 # (For building Perl itself bare -bE:perl.exp is needed,
5673 #  Makefile.SH takes care of this.)
5674 case "$osname" in
5675 aix) ccdlflags="$ccdlflags -bE:$installarchlib/CORE/perl.exp" ;;
5676 esac
5677 # Respect a hint or command-line value.
5678 case "$shrpenv" in
5679 '') shrpenv="$tmp_shrpenv" ;;
5680 esac
5681 case "$ldlibpthname" in
5682 '')     ldlibpthname=LD_LIBRARY_PATH ;;
5683 none)   ldlibpthname='' ;;
5684 esac
5685
5686 : determine where manual pages go
5687 set man1dir man1dir none
5688 eval $prefixit
5689 $cat <<EOM
5690
5691 $spackage has manual pages available in source form.
5692 EOM
5693 case "$nroff" in
5694 nroff)
5695         echo "However, you don't have nroff, so they're probably useless to you."
5696         case "$man1dir" in
5697         '') man1dir="none";;
5698         esac;;
5699 esac
5700 echo "If you don't want the manual sources installed, answer 'none'."
5701 case "$man1dir" in
5702 ' ') dflt=none
5703         ;;
5704 '')
5705         lookpath="$prefixexp/man/man1 $prefixexp/man/l_man/man1"
5706         lookpath="$lookpath $prefixexp/man/p_man/man1"
5707         lookpath="$lookpath $prefixexp/man/u_man/man1"
5708         lookpath="$lookpath $prefixexp/man/man.1"
5709         case "$sysman" in
5710         */?_man*)       dflt=`./loc . $prefixexp/l_man/man1 $lookpath` ;;
5711         *)      dflt=`./loc . $prefixexp/man/man1 $lookpath` ;;
5712         esac
5713         set dflt
5714         eval $prefixup
5715         ;;
5716 *)  dflt="$man1dir"
5717         ;;
5718 esac
5719 echo " "
5720 fn=dn+~
5721 rp="Where do the main $spackage manual pages (source) go?"
5722 . ./getfile
5723 if $test "X$man1direxp" != "X$ansexp"; then
5724         installman1dir=''
5725 fi
5726 man1dir="$ans"
5727 man1direxp="$ansexp"
5728 case "$man1dir" in
5729 '')     man1dir=' '
5730         installman1dir='';;
5731 esac
5732
5733 : Change installation prefix, if necessary.
5734 if $test X"$prefix" != X"$installprefix"; then
5735         installman1dir=`echo $man1direxp | $sed 's#^$prefix#$installprefix#'`
5736 else
5737         installman1dir="$man1direxp"
5738 fi
5739
5740 : What suffix to use on installed man pages
5741
5742 case "$man1dir" in
5743 ' ')
5744         man1ext='0'
5745         ;;
5746 *)
5747         rp="What suffix should be used for the main $spackage man pages?"
5748         case "$man1ext" in
5749         '')     case "$man1dir" in
5750                 *1)  dflt=1 ;;
5751                 *1p) dflt=1p ;;
5752                 *1pm) dflt=1pm ;;
5753                 *l) dflt=l;;
5754                 *n) dflt=n;;
5755                 *o) dflt=o;;
5756                 *p) dflt=p;;
5757                 *C) dflt=C;;
5758                 *L) dflt=L;;
5759                 *L1) dflt=L1;;
5760                 *) dflt=1;;
5761                 esac
5762                 ;;
5763         *)      dflt="$man1ext";;
5764         esac
5765         . ./myread
5766         man1ext="$ans"
5767         ;;
5768 esac
5769
5770 : see if we can have long filenames
5771 echo " "
5772 rmlist="$rmlist /tmp/cf$$"
5773 $test -d /tmp/cf$$ || mkdir /tmp/cf$$
5774 first=123456789abcdef
5775 second=/tmp/cf$$/$first
5776 $rm -f $first $second
5777 if (echo hi >$first) 2>/dev/null; then
5778         if $test -f 123456789abcde; then
5779                 echo 'You cannot have filenames longer than 14 characters.  Sigh.' >&4
5780                 val="$undef"
5781         else
5782                 if (echo hi >$second) 2>/dev/null; then
5783                         if $test -f /tmp/cf$$/123456789abcde; then
5784                                 $cat <<'EOM'
5785 That's peculiar... You can have filenames longer than 14 characters, but only
5786 on some of the filesystems.  Maybe you are using NFS.  Anyway, to avoid problems
5787 I shall consider your system cannot support long filenames at all.
5788 EOM
5789                                 val="$undef"
5790                         else
5791                                 echo 'You can have filenames longer than 14 characters.' >&4
5792                                 val="$define"
5793                         fi
5794                 else
5795                         $cat <<'EOM'
5796 How confusing! Some of your filesystems are sane enough to allow filenames
5797 longer than 14 characters but some others like /tmp can't even think about them.
5798 So, for now on, I shall assume your kernel does not allow them at all.
5799 EOM
5800                         val="$undef"
5801                 fi
5802         fi
5803 else
5804         $cat <<'EOM'
5805 You can't have filenames longer than 14 chars.  You can't even think about them!
5806 EOM
5807         val="$undef"
5808 fi 
5809 set d_flexfnam
5810 eval $setvar
5811 $rm -rf /tmp/cf$$ 123456789abcde*
5812
5813 : determine where library module manual pages go
5814 set man3dir man3dir none
5815 eval $prefixit
5816 $cat <<EOM
5817
5818 $spackage has manual pages for many of the library modules.
5819 EOM
5820
5821 case "$nroff" in
5822 nroff)
5823         $cat <<'EOM'
5824 However, you don't have nroff, so they're probably useless to you.
5825 EOM
5826         case "$man3dir" in
5827         '') man3dir="none";;
5828         esac;;
5829 esac
5830
5831 case "$d_flexfnam" in
5832 undef)
5833         $cat <<'EOM'
5834 However, your system can't handle the long file names like File::Basename.3. 
5835 EOM
5836         case "$man3dir" in
5837         '') man3dir="none";;
5838         esac;;
5839 esac
5840
5841 echo "If you don't want the manual sources installed, answer 'none'."
5842 prog=`echo $package | $sed 's/-*[0-9.]*$//'`
5843 case "$man3dir" in
5844 '')     dflt=`echo $man1dir | $sed -e 's/man1/man3/g' -e 's/man\.1/man\.3/g'`
5845         if $test -d "$privlib/man/man3"; then
5846                 cat <<EOM >&4
5847
5848 WARNING:  Previous versions of perl installed man3 pages into
5849 $privlib/man/man3.  This version will suggest a 
5850 new default of $dflt.  
5851 EOM
5852                 tdflt=$dflt
5853                 dflt='n'
5854                 rp='Do you wish to preserve the old behavior?(y/n)'
5855                 . ./myread
5856                 case "$ans" in
5857                 y*) dflt="$privlib/man/man3" ;;
5858                 *)  dflt=$tdflt ;;
5859                 esac
5860     fi
5861         ;;
5862 ' ') dflt=none;;
5863 *)      dflt="$man3dir" ;;
5864 esac
5865 echo " "
5866 fn=dn+~
5867 rp="Where do the $package library man pages (source) go?"
5868 . ./getfile
5869 man3dir="$ans"
5870 man3direxp="$ansexp"
5871 case "$man1dir" in
5872 '')     man3dir=' '
5873         installman3dir='';;
5874 esac
5875
5876 : Change installation prefix, if necessary.
5877 if $test X"$prefix" != X"$installprefix"; then
5878         installman3dir=`echo $man3direxp | $sed 's#^$prefix#$installprefix#'`
5879 else
5880         installman3dir="$man3direxp"
5881 fi
5882
5883 : What suffix to use on installed man pages
5884 case "$man3dir" in
5885 ' ')
5886         man3ext='0'
5887         ;;
5888 *)
5889         rp="What suffix should be used for the $package library man pages?"
5890         case "$man3ext" in
5891         '')     case "$man3dir" in
5892                 *3)  dflt=3 ;;
5893                 *3p) dflt=3p ;;
5894                 *3pm) dflt=3pm ;;
5895                 *l) dflt=l;;
5896                 *n) dflt=n;;
5897                 *o) dflt=o;;
5898                 *p) dflt=p;;
5899                 *C) dflt=C;;
5900                 *L) dflt=L;;
5901                 *L3) dflt=L3;;
5902                 *) dflt=3;;
5903                 esac
5904                 ;;
5905         *)      dflt="$man3ext";;
5906         esac
5907         . ./myread
5908         man3ext="$ans"
5909         ;;
5910 esac
5911
5912 : see if we have to deal with yellow pages, now NIS.
5913 if $test -d /usr/etc/yp || $test -d /etc/yp; then
5914         if $test -f /usr/etc/nibindd; then
5915                 echo " "
5916                 echo "I'm fairly confident you're on a NeXT."
5917                 echo " "
5918                 rp='Do you get the hosts file via NetInfo?'
5919                 dflt=y
5920                 case "$hostcat" in
5921                 nidump*) ;;
5922                 '') ;;
5923                 *) dflt=n;;
5924                 esac
5925                 . ./myread
5926                 case "$ans" in
5927                 y*) hostcat='nidump hosts .';;
5928                 *)      case "$hostcat" in
5929                         nidump*) hostcat='';;
5930                         esac
5931                         ;;
5932                 esac
5933         fi
5934         case "$hostcat" in
5935         nidump*) ;;
5936         *)
5937                 case "$hostcat" in
5938                 *ypcat*) dflt=y;;
5939                 '') if $contains '^\+' /etc/passwd >/dev/null 2>&1; then
5940                                 dflt=y
5941                         else
5942                                 dflt=n
5943                         fi;;
5944                 *) dflt=n;;
5945                 esac
5946                 echo " "
5947                 rp='Are you getting the hosts file via yellow pages?'
5948                 . ./myread
5949                 case "$ans" in
5950                 y*) hostcat='ypcat hosts';;
5951                 *) hostcat='cat /etc/hosts';;
5952                 esac
5953                 ;;
5954         esac
5955 fi
5956 case "$hostcat" in
5957 '') hostcat='cat /etc/hosts';;
5958 esac
5959 case "$groupcat" in
5960 '') groupcat='cat /etc/group';;
5961 esac
5962 case "$passcat" in
5963 '') passcat='cat /etc/passwd';;
5964 esac
5965
5966 : now get the host name
5967 echo " "
5968 echo "Figuring out host name..." >&4
5969 case "$myhostname" in
5970 '') cont=true
5971         echo 'Maybe "hostname" will work...'
5972         if tans=`sh -c hostname 2>&1` ; then
5973                 myhostname=$tans
5974                 phostname=hostname
5975                 cont=''
5976         fi
5977         ;;
5978 *) cont='';;
5979 esac
5980 if $test "$cont"; then
5981         if ./xenix; then
5982                 echo 'Oh, dear.  Maybe "/etc/systemid" is the key...'
5983                 if tans=`cat /etc/systemid 2>&1` ; then
5984                         myhostname=$tans
5985                         phostname='cat /etc/systemid'
5986                         echo "Whadyaknow.  Xenix always was a bit strange..."
5987                         cont=''
5988                 fi
5989         elif $test -r /etc/systemid; then
5990                 echo "(What is a non-Xenix system doing with /etc/systemid?)"
5991         fi
5992 fi
5993 if $test "$cont"; then
5994         echo 'No, maybe "uuname -l" will work...'
5995         if tans=`sh -c 'uuname -l' 2>&1` ; then
5996                 myhostname=$tans
5997                 phostname='uuname -l'
5998         else
5999                 echo 'Strange.  Maybe "uname -n" will work...'
6000                 if tans=`sh -c 'uname -n' 2>&1` ; then
6001                         myhostname=$tans
6002                         phostname='uname -n'
6003                 else
6004                         echo 'Oh well, maybe I can mine it out of whoami.h...'
6005                         if tans=`sh -c $contains' sysname $usrinc/whoami.h' 2>&1` ; then
6006                                 myhostname=`echo "$tans" | $sed 's/^.*"\(.*\)"/\1/'`
6007                                 phostname="sed -n -e '"'/sysname/s/^.*\"\\(.*\\)\"/\1/{'"' -e p -e q -e '}' <$usrinc/whoami.h"
6008                         else
6009                                 case "$myhostname" in
6010                                 '') echo "Does this machine have an identity crisis or something?"
6011                                         phostname='';;
6012                                 *)
6013                                         echo "Well, you said $myhostname before..."
6014                                         phostname='echo $myhostname';;
6015                                 esac
6016                         fi
6017                 fi
6018         fi
6019 fi
6020 : you do not want to know about this
6021 set $myhostname
6022 myhostname=$1
6023
6024 : verify guess
6025 if $test "$myhostname" ; then
6026         dflt=y
6027         rp='Your host name appears to be "'$myhostname'".'" Right?"
6028         . ./myread
6029         case "$ans" in
6030         y*) ;;
6031         *) myhostname='';;
6032         esac
6033 fi
6034
6035 : bad guess or no guess
6036 while $test "X$myhostname" = X ; do
6037         dflt=''
6038         rp="Please type the (one word) name of your host:"
6039         . ./myread
6040         myhostname="$ans"
6041 done
6042
6043 : translate upper to lower if necessary
6044 case "$myhostname" in
6045 *[A-Z]*)
6046         echo "(Normalizing case in your host name)"
6047         myhostname=`echo $myhostname | ./tr '[A-Z]' '[a-z]'`
6048         ;;
6049 esac
6050
6051 case "$myhostname" in
6052 *.*)
6053         dflt=`expr "X$myhostname" : "X[^.]*\(\..*\)"`
6054         myhostname=`expr "X$myhostname" : "X\([^.]*\)\."`
6055         echo "(Trimming domain name from host name--host name is now $myhostname)"
6056         ;;
6057 *) case "$mydomain" in
6058         '')
6059                 {
6060                         test "X$hostcat" = "Xypcat hosts" &&
6061                         ypmatch "$myhostname" hosts 2>/dev/null |\
6062                                 $sed -e 's/[     ]*#.*//; s/$/ /' > hosts && \
6063                         $test -s hosts
6064                 } || {
6065                         $hostcat | $sed -n -e "s/[       ]*#.*//; s/\$/ /
6066                                         /[       ]$myhostname[  . ]/p" > hosts
6067                 }
6068                 tmp_re="[       . ]"
6069                 $test x`$awk "/[0-9].*[  ]$myhostname$tmp_re/ { sum++ }
6070                              END { print sum }" hosts` = x1 || tmp_re="[         ]"
6071                 dflt=.`$awk "/[0-9].*[   ]$myhostname$tmp_re/ {for(i=2; i<=NF;i++) print \\\$i}" \
6072                         hosts | $sort | $uniq | \
6073                         $sed -n -e "s/$myhostname\.\([-a-zA-Z0-9_.]\)/\1/p"`
6074                 case `$echo X$dflt` in
6075                 X*\ *)  echo "(Several hosts in /etc/hosts matched hostname)"
6076                         dflt=.
6077                         ;;
6078                 X.) echo "(You do not have fully-qualified names in /etc/hosts)"
6079                         ;;
6080                 esac
6081                 case "$dflt" in
6082                 .)
6083                         tans=`./loc resolv.conf X /etc /usr/etc`
6084                         if $test -f "$tans"; then
6085                                 echo "(Attempting domain name extraction from $tans)"
6086                                 dflt=.`$sed -n -e 's/   / /g' \
6087                                   -e 's/^search  *\([^ ]*\).*/\1/p' $tans \
6088                                   | ./tr '[A-Z]' '[a-z]' 2>/dev/null`
6089                                 case "$dflt" in
6090                                 .) dflt=.`$sed -n -e 's/        / /g' \
6091                                      -e 's/^domain  *\([^ ]*\).*/\1/p' $tans \
6092                                      | ./tr '[A-Z]' '[a-z]' 2>/dev/null`
6093                                         ;;
6094                                 esac
6095                         fi
6096                         ;;
6097                 esac
6098                 case "$dflt" in
6099                 .) echo "(No help from resolv.conf either -- attempting clever guess)"
6100                         dflt=.`sh -c domainname 2>/dev/null`
6101                         case "$dflt" in
6102                         '') dflt='.';;
6103                         .nis.*|.yp.*|.main.*) dflt=`echo $dflt | $sed -e 's/^\.[^.]*//'`;;
6104                         esac
6105                         ;;
6106                 esac
6107                 case "$dflt" in
6108                 .) echo "(Lost all hope -- silly guess then)"
6109                         dflt='.uucp'
6110                         ;;
6111                 esac
6112                 $rm -f hosts
6113                 ;;
6114         *) dflt="$mydomain";;
6115         esac;;
6116 esac
6117 echo " "
6118 rp="What is your domain name?"
6119 . ./myread
6120 tans="$ans"
6121 case "$ans" in
6122 '') ;;
6123 .*) ;;
6124 *) tans=".$tans";;
6125 esac
6126 mydomain="$tans"
6127
6128 : translate upper to lower if necessary
6129 case "$mydomain" in
6130 *[A-Z]*)
6131         echo "(Normalizing case in your domain name)"
6132         mydomain=`echo $mydomain | ./tr '[A-Z]' '[a-z]'`
6133         ;;
6134 esac
6135
6136 : a little sanity check here
6137 case "$phostname" in
6138 '') ;;
6139 *)
6140         case `$phostname | ./tr '[A-Z]' '[a-z]'` in
6141         $myhostname$mydomain|$myhostname) ;;
6142         *)
6143                 case "$phostname" in
6144                 sed*)
6145                         echo "(That doesn't agree with your whoami.h file, by the way.)"
6146                         ;;
6147                 *)
6148                         echo "(That doesn't agree with your $phostname command, by the way.)"
6149                         ;;
6150                 esac
6151         ;;
6152         esac
6153         ;;
6154 esac
6155
6156 $cat <<EOM
6157
6158 I need to get your e-mail address in Internet format if possible, i.e.
6159 something like user@host.domain. Please answer accurately since I have
6160 no easy means to double check it. The default value provided below
6161 is most probably close to the reality but may not be valid from outside
6162 your organization...
6163
6164 EOM
6165 cont=x
6166 while test "$cont"; do
6167         case "$cf_email" in
6168         '') dflt="$cf_by@$myhostname$mydomain";;
6169         *) dflt="$cf_email";;
6170         esac
6171         rp='What is your e-mail address?'
6172         . ./myread
6173         cf_email="$ans"
6174         case "$cf_email" in
6175         *@*.*) cont='' ;;
6176         *)
6177                 rp='Address does not look like an Internet one.  Use it anyway?'
6178                 case "$fastread" in
6179                 yes) dflt=y ;;
6180                 *) dflt=n ;;
6181                 esac
6182                 . ./myread
6183                 case "$ans" in
6184                 y*) cont='' ;;
6185                 *) echo " " ;;
6186                 esac
6187                 ;;
6188         esac
6189 done
6190
6191 $cat <<EOM
6192
6193 If you or somebody else will be maintaining perl at your site, please
6194 fill in the correct e-mail address here so that they may be contacted
6195 if necessary. Currently, the "perlbug" program included with perl
6196 will send mail to this address in addition to perlbug@perl.com. You may
6197 enter "none" for no administrator.
6198
6199 EOM
6200 case "$perladmin" in
6201 '') dflt="$cf_email";;
6202 *) dflt="$perladmin";;
6203 esac
6204 rp='Perl administrator e-mail address'
6205 . ./myread
6206 perladmin="$ans"
6207
6208 : figure out how to guarantee perl startup
6209 case "$startperl" in
6210 '')
6211         case "$sharpbang" in
6212         *!)
6213                 $cat <<EOH
6214
6215 I can use the #! construct to start perl on your system. This will
6216 make startup of perl scripts faster, but may cause problems if you
6217 want to share those scripts and perl is not in a standard place
6218 ($binexp/perl) on all your platforms. The alternative is to force
6219 a shell by starting the script with a single ':' character.
6220
6221 EOH
6222                 dflt="$binexp/perl"
6223                 rp='What shall I put after the #! to start up perl ("none" to not use #!)?'
6224                 . ./myread
6225                 case "$ans" in
6226                 none)   startperl=": # use perl";;
6227                 *)      startperl="#!$ans"
6228                         if $test 30 -lt `echo "$ans" | wc -c`; then
6229                                 $cat >&4 <<EOM
6230
6231 WARNING:  Some systems limit the #! command to 32 characters.
6232 If you experience difficulty running Perl scripts with #!, try
6233 installing Perl in a directory with a shorter pathname.
6234
6235 EOM
6236                         fi ;;
6237                 esac
6238                 ;;
6239         *) startperl=": # use perl"
6240                 ;;
6241         esac
6242         ;;
6243 esac
6244 echo "I'll use $startperl to start perl scripts."
6245
6246 : figure best path for perl in scripts
6247 case "$perlpath" in
6248 '')
6249         perlpath="$binexp/perl"
6250         case "$startperl" in
6251         *!*) ;;
6252         *)
6253                 $cat <<EOH
6254
6255 I will use the "eval 'exec'" idiom to start Perl on your system.
6256 I can use the full path of your Perl binary for this purpose, but
6257 doing so may cause problems if you want to share those scripts and
6258 Perl is not always in a standard place ($binexp/perl).
6259
6260 EOH
6261                 dflt="$binexp/perl"
6262                 rp="What path shall I use in \"eval 'exec'\"?"
6263                 . ./myread
6264                 perlpath="$ans"
6265                 ;;
6266         esac
6267         ;;
6268 esac
6269 case "$startperl" in
6270 *!*)    ;;
6271 *)      echo "I'll use $perlpath in \"eval 'exec'\"" ;;
6272 esac
6273
6274 : determine where public executable scripts go
6275 set scriptdir scriptdir
6276 eval $prefixit
6277 case "$scriptdir" in
6278 '')
6279         dflt="$bin"
6280         : guess some guesses
6281         $test -d /usr/share/scripts && dflt=/usr/share/scripts
6282         $test -d /usr/share/bin     && dflt=/usr/share/bin
6283         $test -d /usr/local/script  && dflt=/usr/local/script
6284         $test -d /usr/local/scripts && dflt=/usr/local/scripts
6285         $test -d $prefixexp/script  && dflt=$prefixexp/script
6286         set dflt
6287         eval $prefixup
6288         ;;
6289 *)  dflt="$scriptdir"
6290         ;;
6291 esac
6292 $cat <<EOM
6293  
6294 Some installations have a separate directory just for executable scripts so
6295 that they can mount it across multiple architectures but keep the scripts in
6296 one spot.  You might, for example, have a subdirectory of /usr/share for this.
6297 Or you might just lump your scripts in with all your other executables.
6298  
6299 EOM
6300 fn=d~
6301 rp='Where do you keep publicly executable scripts?'
6302 . ./getfile
6303 if $test "X$ansexp" != "X$scriptdirexp"; then
6304         installscript=''
6305 fi
6306 scriptdir="$ans"
6307 scriptdirexp="$ansexp"
6308 : Change installation prefix, if necessary.
6309 if $test X"$prefix" != X"$installprefix"; then
6310         installscript=`echo $scriptdirexp | sed 's#^$prefix#$installprefix#'`
6311 else
6312         installscript="$scriptdirexp"
6313 fi
6314
6315 $cat <<EOM
6316
6317 After $package is installed, you may wish to install various
6318 add-on modules and utilities.  Typically, these add-ons will
6319 be installed under $prefix with the rest
6320 of this package.  However, you may wish to install such add-ons
6321 elsewhere under a different prefix.
6322
6323 If you do not wish to put everything under a single prefix, that's
6324 ok.  You will be prompted for the individual locations; this siteprefix
6325 is only used to suggest the defaults.
6326
6327 The default should be fine for most people.
6328
6329 EOM
6330 fn=d~+
6331 rp='Installation prefix to use for add-on modules and utilities?'
6332 : XXX Here might be another good place for an installstyle setting.
6333 case "$siteprefix" in
6334 '') dflt=$prefix ;;
6335 *)  dflt=$siteprefix ;;
6336 esac
6337 . ./getfile
6338 oldsiteprefix=''
6339 case "$siteprefix" in
6340 '') ;;
6341 *)
6342         case "$ans" in
6343         "$prefix") ;;
6344         *) oldsiteprefix="$prefix";;
6345         esac
6346         ;;
6347 esac
6348 siteprefix="$ans"
6349 siteprefixexp="$ansexp"
6350
6351 : determine where site specific libraries go.
6352 : Usual default is /usr/local/lib/perl5/site_perl
6353 : The default "style" setting is made in installstyle.U
6354 : XXX No longer works with Prefixit stuff.
6355 prog=`echo $package | $sed 's/-*[0-9.]*$//'`
6356 case "$installstyle" in
6357 *lib/perl5*) dflt=$siteprefix/lib/site_$prog ;;
6358 *)       dflt=$siteprefix/lib/site_$prog ;;
6359 esac
6360 $cat <<EOM
6361
6362 The installation process will create a directory for
6363 site-specific extensions and modules.  Most users find it convenient
6364 to place all site-specific files in this directory rather than in the
6365 main distribution directory.
6366
6367 EOM
6368 fn=d~+
6369 rp='Pathname for the site-specific library files?'
6370 . ./getfile
6371 sitelib="$ans"
6372 sitelibexp="$ansexp"
6373 : Change installation prefix, if necessary.
6374 if $test X"$prefix" != X"$installprefix"; then
6375         installsitelib=`echo $sitelibexp | sed 's#^$prefix#$installprefix#'`
6376 else
6377         installsitelib="$sitelibexp"
6378 fi
6379
6380 : determine where site specific architecture-dependent libraries go.
6381 : sitelib  default is /usr/local/lib/perl5/site_perl/
6382 : sitearch default is /usr/local/lib/perl5/site_perl/$apiversion/$archname
6383 : sitelib may have an optional trailing /share.
6384 tdflt=`echo $sitelib | $sed 's,/share$,,'`
6385 tdflt="$tdflt/$apiversion/$archname"
6386 set sitearch sitearch none
6387 eval $prefixit
6388 case "$sitearch" in
6389 '')     dflt="$tdflt" ;;
6390 *)      dflt="$sitearch" ;;
6391 esac
6392 $cat <<EOM
6393
6394 The installation process will also create a directory for
6395 architecture-dependent site-specific extensions and modules.
6396
6397 EOM
6398 fn=nd~+
6399 rp='Pathname for the site-specific architecture-dependent library files?'
6400 . ./getfile
6401 sitearch="$ans"
6402 sitearchexp="$ansexp"
6403 : Change installation prefix, if necessary.
6404 if $test X"$prefix" != X"$installprefix"; then
6405         installsitearch=`echo $sitearchexp | sed 's#^$prefix#$installprefix#'`
6406 else
6407         installsitearch="$sitearchexp"
6408 fi
6409
6410 cat <<EOM
6411
6412 Previous version of $package used the standard IO mechanisms as defined
6413 in <stdio.h>.  Versions 5.003_02 and later of perl allow alternate IO
6414 mechanisms via a "PerlIO" abstraction, but the stdio mechanism is still
6415 the default.  This abstraction layer can use AT&T's sfio (if you already
6416 have sfio installed) or regular stdio.  Using PerlIO with sfio may cause
6417 problems with some extension modules.  Using PerlIO with stdio is safe,
6418 but it is slower than plain stdio and therefore is not the default.
6419
6420 If this doesn't make any sense to you, just accept the default 'n'.
6421 EOM
6422 case "$useperlio" in
6423 $define|true|[yY]*)     dflt='y';;
6424 *) dflt='n';;
6425 esac
6426 rp='Use the experimental PerlIO abstraction layer?'
6427 . ./myread
6428 case "$ans" in
6429 y|Y) 
6430         val="$define"
6431         ;;     
6432 *)      
6433         echo "Ok, doing things the stdio way"
6434         val="$undef"
6435         ;;
6436 esac
6437 set useperlio
6438 eval $setvar 
6439
6440 : Check how to convert floats to strings.
6441 if test "X$d_Gconvert" = X; then
6442         echo " "
6443         echo "Checking for an efficient way to convert floats to strings."
6444         $cat >try.c <<'EOP'
6445 #ifdef TRY_gconvert
6446 #define Gconvert(x,n,t,b) gconvert((x),(n),(t),(b))
6447 char *myname = "gconvert";
6448 #endif
6449 #ifdef TRY_gcvt
6450 #define Gconvert(x,n,t,b) gcvt((x),(n),(b))
6451 char *myname = "gcvt";
6452 #endif
6453 #ifdef TRY_sprintf
6454 #define Gconvert(x,n,t,b) sprintf((b),"%.*g",(n),(x))
6455 char *myname = "sprintf";
6456 #endif
6457
6458 #include <stdio.h>
6459
6460 int
6461 checkit(expect, got)
6462 char *expect;
6463 char *got;
6464 {
6465     if (strcmp(expect, got)) {
6466                 printf("%s oddity:  Expected %s, got %s\n",
6467                         myname, expect, got);
6468                 exit(1);
6469         }
6470 }
6471
6472 int main()
6473
6474         char buf[64]; 
6475         buf[63] = '\0';
6476
6477         /* This must be 1st test on (which?) platform */
6478         /* Alan Burlison <AlanBurlsin@unn.unisys.com> */
6479         Gconvert(0.1, 8, 0, buf);
6480         checkit("0.1", buf);
6481
6482         Gconvert(1.0, 8, 0, buf); 
6483         checkit("1", buf);
6484
6485         Gconvert(0.0, 8, 0, buf); 
6486         checkit("0", buf);
6487
6488         Gconvert(-1.0, 8, 0, buf); 
6489         checkit("-1", buf);
6490
6491         /* Some Linux gcvt's give 1.e+5 here. */
6492         Gconvert(100000.0, 8, 0, buf); 
6493         checkit("100000", buf);
6494         
6495         /* Some Linux gcvt's give -1.e+5 here. */
6496         Gconvert(-100000.0, 8, 0, buf); 
6497         checkit("-100000", buf);
6498
6499         exit(0);
6500 }
6501 EOP
6502         case "$d_Gconvert" in
6503         gconvert*) xxx_list='gconvert gcvt sprintf' ;;
6504         gcvt*) xxx_list='gcvt gconvert sprintf' ;;
6505         sprintf*) xxx_list='sprintf gconvert gcvt' ;;
6506         *) xxx_list='gconvert gcvt sprintf' ;;
6507         esac
6508
6509         for xxx_convert in $xxx_list; do
6510                 echo "Trying $xxx_convert"
6511                 $rm -f try try$_o
6512                 set try -DTRY_$xxx_convert
6513                 if eval $compile; then
6514                         echo "$xxx_convert" found. >&4
6515                         if ./try; then
6516                                 echo "I'll use $xxx_convert to convert floats into a string." >&4
6517                                 break;
6518                         else
6519                                 echo "...But $xxx_convert didn't work as I expected."
6520                         fi
6521                 else
6522                         echo "$xxx_convert NOT found." >&4
6523                 fi
6524         done
6525                 
6526         case "$xxx_convert" in
6527         gconvert) d_Gconvert='gconvert((x),(n),(t),(b))' ;;
6528         gcvt) d_Gconvert='gcvt((x),(n),(b))' ;;
6529         *) d_Gconvert='sprintf((b),"%.*g",(n),(x))' ;;
6530         esac
6531 fi
6532
6533 : Initialize h_fcntl
6534 h_fcntl=false
6535
6536 : Initialize h_sysfile
6537 h_sysfile=false
6538
6539 : access call always available on UNIX
6540 set access d_access
6541 eval $inlibc
6542
6543 : locate the flags for 'access()'
6544 case "$d_access" in
6545 "$define")
6546         echo " "
6547         $cat >access.c <<'EOCP'
6548 #include <sys/types.h>
6549 #ifdef I_FCNTL
6550 #include <fcntl.h>
6551 #endif
6552 #ifdef I_SYS_FILE
6553 #include <sys/file.h>
6554 #endif
6555 #ifdef I_UNISTD
6556 #include <unistd.h>
6557 #endif
6558 int main() {
6559         exit(R_OK);
6560 }
6561 EOCP
6562         : check sys/file.h first, no particular reason here
6563         if $test `./findhdr sys/file.h` && \
6564                 $cc $cppflags -DI_SYS_FILE -o access access.c >/dev/null 2>&1 ; then
6565                 h_sysfile=true;
6566                 echo "<sys/file.h> defines the *_OK access constants." >&4
6567         elif $test `./findhdr fcntl.h` && \
6568                 $cc $cppflags -DI_FCNTL -o access access.c >/dev/null 2>&1 ; then
6569                 h_fcntl=true;
6570                 echo "<fcntl.h> defines the *_OK access constants." >&4
6571         elif $test `./findhdr unistd.h` && \
6572                 $cc $cppflags -DI_UNISTD -o access access.c >/dev/null 2>&1 ; then
6573                 echo "<unistd.h> defines the *_OK access constants." >&4
6574         else
6575                 echo "I can't find the four *_OK access constants--I'll use mine." >&4
6576         fi
6577         ;;
6578 esac
6579 $rm -f access*
6580
6581 : see if accessx exists
6582 set accessx d_accessx
6583 eval $inlibc
6584
6585 : see if alarm exists
6586 set alarm d_alarm
6587 eval $inlibc
6588
6589 : Look for GNU-cc style attribute checking
6590 echo " "
6591 echo "Checking whether your compiler can handle __attribute__ ..." >&4
6592 $cat >attrib.c <<'EOCP'
6593 #include <stdio.h>
6594 void croak (char* pat,...) __attribute__((format(printf,1,2),noreturn));
6595 EOCP
6596 if $cc $ccflags -c attrib.c >attrib.out 2>&1 ; then
6597         if $contains 'warning' attrib.out >/dev/null 2>&1; then
6598                 echo "Your C compiler doesn't fully support __attribute__."
6599                 val="$undef"
6600         else
6601                 echo "Your C compiler supports __attribute__."
6602                 val="$define"
6603         fi
6604 else
6605         echo "Your C compiler doesn't seem to understand __attribute__ at all."
6606         val="$undef"
6607 fi
6608 set d_attribut
6609 eval $setvar
6610 $rm -f attrib*
6611
6612 : see if bcmp exists
6613 set bcmp d_bcmp
6614 eval $inlibc
6615
6616 : see if bcopy exists
6617 set bcopy d_bcopy
6618 eval $inlibc
6619
6620 : see if this is a unistd.h system
6621 set unistd.h i_unistd
6622 eval $inhdr
6623
6624 : see if getpgrp exists
6625 set getpgrp d_getpgrp
6626 eval $inlibc
6627
6628 case "$d_getpgrp" in
6629 "$define")
6630         echo " "
6631         echo "Checking to see which flavor of getpgrp is in use..."
6632         $cat >set.c <<EOP
6633 #$i_unistd I_UNISTD
6634 #include <sys/types.h>
6635 #ifdef I_UNISTD
6636 #  include <unistd.h>
6637 #endif
6638 int main()
6639 {
6640         if (getuid() == 0) {
6641                 printf("(I see you are running Configure as super-user...)\n");
6642                 setuid(1);
6643         }
6644 #ifdef TRY_BSD_PGRP
6645         if (getpgrp(1) == 0)
6646                 exit(0);
6647 #else
6648         if (getpgrp() > 0)
6649                 exit(0);
6650 #endif
6651         exit(1);
6652 }
6653 EOP
6654         if $cc -DTRY_BSD_PGRP $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1 && ./set; then
6655                 echo "You have to use getpgrp(pid) instead of getpgrp()." >&4
6656                 val="$define"
6657         elif $cc $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1 && ./set; then
6658                 echo "You have to use getpgrp() instead of getpgrp(pid)." >&4
6659                 val="$undef"
6660         else
6661                 echo "I can't seem to compile and run the test program."
6662                 if ./usg; then
6663                         xxx="a USG one, i.e. you use getpgrp()."
6664                 else
6665                         # SVR4 systems can appear rather BSD-ish.
6666                         case "$i_unistd" in
6667                         $undef)
6668                                 xxx="a BSD one, i.e. you use getpgrp(pid)."
6669                                 val="$define"
6670                                 ;;
6671                         $define)
6672                                 xxx="probably a USG one, i.e. you use getpgrp()."
6673                                 val="$undef"
6674                                 ;;
6675                         esac
6676                 fi
6677                 echo "Assuming your getpgrp is $xxx" >&4
6678         fi
6679         ;;
6680 *) val="$undef";;
6681 esac
6682 set d_bsdgetpgrp
6683 eval $setvar
6684 $rm -f set set.c
6685
6686 : see if setpgrp exists
6687 set setpgrp d_setpgrp
6688 eval $inlibc
6689
6690 case "$d_setpgrp" in
6691 "$define")
6692         echo " "
6693         echo "Checking to see which flavor of setpgrp is in use..."
6694         $cat >set.c <<EOP
6695 #$i_unistd I_UNISTD
6696 #include <sys/types.h>
6697 #ifdef I_UNISTD
6698 #  include <unistd.h>
6699 #endif
6700 int main()
6701 {
6702         if (getuid() == 0) {
6703                 printf("(I see you are running Configure as super-user...)\n");
6704                 setuid(1);
6705         }
6706 #ifdef TRY_BSD_PGRP
6707         if (-1 == setpgrp(1, 1))
6708                 exit(0);
6709 #else
6710         if (setpgrp() != -1)
6711                 exit(0);
6712 #endif
6713         exit(1);
6714 }
6715 EOP
6716         if $cc -DTRY_BSD_PGRP $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1 && ./set; then
6717                 echo 'You have to use setpgrp(pid,pgrp) instead of setpgrp().' >&4
6718                 val="$define"
6719         elif $cc $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1 && ./set; then
6720                 echo 'You have to use setpgrp() instead of setpgrp(pid,pgrp).' >&4
6721                 val="$undef"
6722         else
6723                 echo "(I can't seem to compile and run the test program.)"
6724                 if ./usg; then
6725                         xxx="a USG one, i.e. you use setpgrp()."
6726                 else
6727                         # SVR4 systems can appear rather BSD-ish.
6728                         case "$i_unistd" in
6729                         $undef)
6730                                 xxx="a BSD one, i.e. you use setpgrp(pid,pgrp)."
6731                                 val="$define"
6732                                 ;;
6733                         $define)
6734                                 xxx="probably a USG one, i.e. you use setpgrp()."
6735                                 val="$undef"
6736                                 ;;
6737                         esac
6738                 fi
6739                 echo "Assuming your setpgrp is $xxx" >&4
6740         fi
6741         ;;
6742 *) val="$undef";;
6743 esac
6744 set d_bsdsetpgrp
6745 eval $setvar
6746 $rm -f set set.c
6747 : see if bzero exists
6748 set bzero d_bzero
6749 eval $inlibc
6750
6751 : check for lengths of integral types
6752 echo " "
6753 case "$intsize" in
6754 '')
6755         echo "Checking to see how big your integers are..." >&4
6756         $cat >intsize.c <<'EOCP'
6757 #include <stdio.h>
6758 int main()
6759 {
6760         printf("intsize=%d;\n", sizeof(int));
6761         printf("longsize=%d;\n", sizeof(long));
6762         printf("shortsize=%d;\n", sizeof(short));
6763         exit(0);
6764 }
6765 EOCP
6766         set intsize
6767         if eval $compile_ok && ./intsize > /dev/null; then
6768                 eval `./intsize`
6769                 echo "Your integers are $intsize bytes long."
6770                 echo "Your long integers are $longsize bytes long."
6771                 echo "Your short integers are $shortsize bytes long."
6772         else
6773                 $cat >&4 <<EOM
6774 !
6775 Help! I can't compile and run the intsize test program: please enlighten me!
6776 (This is probably a misconfiguration in your system or libraries, and
6777 you really ought to fix it.  Still, I'll try anyway.)
6778 !
6779 EOM
6780                 dflt=4
6781                 rp="What is the size of an integer (in bytes)?"
6782                 . ./myread
6783                 intsize="$ans"
6784                 dflt=$intsize
6785                 rp="What is the size of a long integer (in bytes)?"
6786                 . ./myread
6787                 longsize="$ans"
6788                 dflt=2
6789                 rp="What is the size of a short integer (in bytes)?"
6790                 . ./myread
6791                 shortsize="$ans"
6792         fi
6793         ;;
6794 esac
6795 $rm -f intsize intsize.*
6796
6797 : see if signal is declared as pointer to function returning int or void
6798 echo " "
6799 xxx=`./findhdr signal.h`
6800 $test "$xxx" && $cppstdin $cppminus $cppflags < $xxx >$$.tmp 2>/dev/null
6801 if $contains 'int.*\*[  ]*signal' $$.tmp >/dev/null 2>&1 ; then
6802         echo "You have int (*signal())() instead of void." >&4
6803         val="$undef"
6804 elif $contains 'void.*\*[       ]*signal' $$.tmp >/dev/null 2>&1 ; then
6805         echo "You have void (*signal())()." >&4
6806         val="$define"
6807 elif $contains 'extern[         ]*[(\*]*signal' $$.tmp >/dev/null 2>&1 ; then
6808         echo "You have int (*signal())() instead of void." >&4
6809         val="$undef"
6810 elif $contains 'void.*\*.*sig' $$.tmp >/dev/null 2>&1 ; then
6811         echo "You have void (*signal())()." >&4
6812         val="$define"
6813 else
6814         case "$d_voidsig" in
6815         '')
6816         echo "I can't determine whether signal handler returns void or int..." >&4
6817                 dflt=void
6818                 rp="What type does your signal handler return?"
6819                 . ./myread
6820                 case "$ans" in
6821                 v*) val="$define";;
6822                 *) val="$undef";;
6823                 esac;;
6824         "$define")
6825                 echo "As you already told me, signal handler returns void." >&4
6826                 val="$define"
6827                 ;;
6828         *)      echo "As you already told me, signal handler returns int." >&4
6829                 val="$undef"
6830                 ;;
6831         esac
6832 fi
6833 set d_voidsig
6834 eval $setvar
6835 case "$d_voidsig" in
6836 "$define") signal_t="void";;
6837 *) signal_t="int";;
6838 esac
6839 $rm -f $$.tmp
6840
6841 : check for ability to cast large floats to 32-bit ints.
6842 echo " "
6843 echo 'Checking whether your C compiler can cast large floats to int32.' >&4
6844 if $test "$intsize" -ge 4; then
6845         xxx=int
6846 else
6847         xxx=long
6848 fi
6849 $cat >try.c <<EOCP
6850 #include <stdio.h>
6851 #include <sys/types.h>
6852 #include <signal.h>
6853 $signal_t blech(s) int s; { exit(3); }
6854 int main()
6855 {
6856         $xxx i32;
6857         double f, g;
6858         int result = 0;
6859         char str[16];
6860         signal(SIGFPE, blech);
6861
6862         /* Don't let compiler optimize the test away.  Store the number 
6863            in a writable string for gcc to pass to sscanf under HP/UX.
6864         */
6865         sprintf(str, "2147483647");
6866         sscanf(str, "%lf", &f); /* f = (double) 0x7fffffff; */
6867         g = 10 * f;
6868         i32  = ($xxx) g;
6869
6870         /* x86 processors will probably give 0x8000 0000, which is a
6871        sign change.  We don't want that.  We want to mimic SPARC
6872            behavior here, which is to preserve the sign and give
6873            back 0x7fff ffff.
6874         */
6875         if (i32 != ($xxx) f)
6876                 result |= 1;
6877         exit(result);
6878 }
6879 EOCP
6880 set try
6881 if eval $compile_ok; then
6882         ./try
6883         yyy=$?
6884 else
6885         echo "(I can't seem to compile the test program--assuming it can't)"
6886         yyy=1
6887 fi
6888 case "$yyy" in
6889 0)      val="$define"
6890         echo "Yup, it can."
6891         ;;
6892 *)      val="$undef"
6893         echo "Nope, it can't."
6894         ;;
6895 esac
6896 set d_casti32
6897 eval $setvar
6898 $rm -f try try.*
6899
6900 : check for ability to cast negative floats to unsigned
6901 echo " "
6902 echo 'Checking whether your C compiler can cast negative float to unsigned.' >&4
6903 $cat >try.c <<EOCP
6904 #include <stdio.h>
6905 #include <sys/types.h>
6906 #include <signal.h>
6907 $signal_t blech(s) int s; { exit(7); }
6908 $signal_t blech_in_list(s) int s; { exit(4); }
6909 unsigned long dummy_long(p) unsigned long p; { return p; }
6910 unsigned int dummy_int(p) unsigned int p; { return p; }
6911 unsigned short dummy_short(p) unsigned short p; { return p; }
6912 int main()
6913 {
6914         double f;
6915         unsigned long along;
6916         unsigned int aint;
6917         unsigned short ashort;
6918         int result = 0;
6919         char str[16];
6920         
6921         /* Frustrate gcc-2.7.2's optimizer which failed this test with
6922            a direct f = -123. assignment.  gcc-2.8.0 reportedly
6923            optimized the whole file away
6924         */
6925         /* Store the number in a writable string for gcc to pass to 
6926            sscanf under HP/UX.
6927         */
6928         sprintf(str, "-123");
6929         sscanf(str, "%lf", &f);  /* f = -123.; */
6930
6931         signal(SIGFPE, blech);
6932         along = (unsigned long)f;
6933         aint = (unsigned int)f;
6934         ashort = (unsigned short)f;
6935         if (along != (unsigned long)-123)
6936                 result |= 1;
6937         if (aint != (unsigned int)-123)
6938                 result |= 1;
6939         if (ashort != (unsigned short)-123)
6940                 result |= 1;
6941         sprintf(str, "1073741824.");
6942         sscanf(str, "%lf", &f); /* f = (double)0x40000000; */
6943         f = f + f;
6944         along = 0;
6945         along = (unsigned long)f;
6946         if (along != 0x80000000)
6947                 result |= 2;
6948         f -= 1.;
6949         along = 0;
6950         along = (unsigned long)f;
6951         if (along != 0x7fffffff)
6952                 result |= 1;
6953         f += 2.;
6954         along = 0;
6955         along = (unsigned long)f;
6956         if (along != 0x80000001)
6957                 result |= 2;
6958         if (result)
6959                 exit(result);
6960         signal(SIGFPE, blech_in_list);
6961         sprintf(str, "123.");
6962         sscanf(str, "%lf", &f);  /* f = 123.; */
6963         along = dummy_long((unsigned long)f);
6964         aint = dummy_int((unsigned int)f);
6965         ashort = dummy_short((unsigned short)f);
6966         if (along != (unsigned long)123)
6967                 result |= 4;
6968         if (aint != (unsigned int)123)
6969                 result |= 4;
6970         if (ashort != (unsigned short)123)
6971                 result |= 4;
6972         exit(result);
6973
6974 }
6975 EOCP
6976 set try
6977 if eval $compile_ok; then
6978         ./try
6979         castflags=$?
6980 else
6981         echo "(I can't seem to compile the test program--assuming it can't)"
6982         castflags=7
6983 fi
6984 case "$castflags" in
6985 0)      val="$define"
6986         echo "Yup, it can."
6987         ;;
6988 *)      val="$undef"
6989         echo "Nope, it can't."
6990         ;;
6991 esac
6992 set d_castneg
6993 eval $setvar
6994 $rm -f try.*
6995
6996 : see if vprintf exists
6997 echo " "
6998 if set vprintf val -f d_vprintf; eval $csym; $val; then
6999         echo 'vprintf() found.' >&4
7000         val="$define"
7001         $cat >vprintf.c <<'EOF'
7002 #include <varargs.h>
7003
7004 int main() { xxx("foo"); }
7005
7006 xxx(va_alist)
7007 va_dcl
7008 {
7009         va_list args;
7010         char buf[10];
7011
7012         va_start(args);
7013         exit((unsigned long)vsprintf(buf,"%s",args) > 10L);
7014 }
7015 EOF
7016         set vprintf
7017         if eval $compile && ./vprintf; then
7018                 echo "Your vsprintf() returns (int)." >&4
7019                 val2="$undef"
7020         else
7021                 echo "Your vsprintf() returns (char*)." >&4
7022                 val2="$define"
7023         fi
7024 else
7025         echo 'vprintf() NOT found.' >&4
7026                 val="$undef"
7027                 val2="$undef"
7028 fi
7029 set d_vprintf
7030 eval $setvar
7031 val=$val2
7032 set d_charvspr
7033 eval $setvar
7034
7035 : see if chown exists
7036 set chown d_chown
7037 eval $inlibc
7038
7039 : see if chroot exists
7040 set chroot d_chroot
7041 eval $inlibc
7042
7043 : see if chsize exists
7044 set chsize d_chsize
7045 eval $inlibc
7046
7047 hasfield='varname=$1; struct=$2; field=$3; shift; shift; shift;
7048 while $test $# -ge 2; do
7049         case "$1" in
7050         $define) echo "#include <$2>";;
7051         esac ;
7052     shift 2;
7053 done > try.c;
7054 echo "int main () { struct $struct foo; foo.$field = 0; }" >> try.c;
7055 if $cc $optimize $ccflags -c try.c >/dev/null 2>&1; then
7056         val="$define";
7057 else
7058         val="$undef";
7059 fi;
7060 set $varname;
7061 eval $setvar;
7062 $rm -f try.c try.o'
7063
7064 : see if this is a sys/uio.h system
7065 set sys/uio.h i_sysuio
7066 eval $inhdr
7067
7068 echo "Checking to see if your system supports struct iovec..." >&4
7069 set d_iovec_s iovec iov_base $i_sysuio sys/uio.h
7070 eval $hasfield
7071 case "$d_iovec_s" in
7072 "$define")      echo "Yup, it does." >&4
7073                 ;;
7074 *)              echo "Nope, it doesn't." >&4
7075                 ;;
7076 esac
7077
7078 socketlib=''
7079 sockethdr=''
7080 : see whether socket exists
7081 echo " "
7082 $echo $n "Hmm... $c" >&4
7083 if set socket val -f d_socket; eval $csym; $val; then
7084         echo "Looks like you have Berkeley networking support." >&4
7085         d_socket="$define"
7086         if set setsockopt val -f; eval $csym; $val; then
7087                 d_oldsock="$undef"
7088         else
7089                 echo "...but it uses the old BSD 4.1c interface, rather than 4.2." >&4
7090                 d_oldsock="$define"
7091         fi
7092 else
7093         if $contains socklib libc.list >/dev/null 2>&1; then
7094                 echo "Looks like you have Berkeley networking support." >&4
7095                 d_socket="$define"
7096                 : we will have to assume that it supports the 4.2 BSD interface
7097                 d_oldsock="$undef"
7098         else
7099                 echo "You don't have Berkeley networking in libc$_a..." >&4
7100                 if test "X$d_socket" = "X$define"; then
7101                    echo "...but you seem to believe that you have sockets." >&4
7102                 else
7103                         for net in net socket
7104                         do
7105                                 if test -f /usr/lib/lib$net$_a; then
7106                                         ( ($nm $nm_opt /usr/lib/lib$net$_a | eval $nm_extract) ||  \
7107                                         $ar t /usr/lib/lib$net$_a) 2>/dev/null >> libc.list
7108                                         if $contains socket libc.list >/dev/null 2>&1; then
7109                                                 d_socket="$define"
7110                                                 socketlib="-l$net"
7111                                                 case "$net" in
7112                                                 net)
7113                                                         echo "...but the Wollongong group seems to have hacked it in." >&4
7114                                                         sockethdr="-I/usr/netinclude"
7115                                                         ;;
7116                                                 esac
7117                                                 echo "Found Berkeley sockets interface in lib$net." >& 4 
7118                                                 if $contains setsockopt libc.list >/dev/null 2>&1; then
7119                                                         d_oldsock="$undef"
7120                                                 else
7121                                                         echo "...using the old BSD 4.1c interface, rather than 4.2." >&4
7122                                                         d_oldsock="$define"
7123                                                 fi
7124                                                 break
7125                                         fi
7126                                 fi
7127                         done
7128                         if test "X$d_socket" != "X$define"; then
7129                            echo "or anywhere else I see." >&4
7130                            d_socket="$undef"
7131                            d_oldsock="$undef"
7132                         fi
7133                 fi
7134         fi
7135 fi
7136
7137 : see if socketpair exists
7138 set socketpair d_sockpair
7139 eval $inlibc
7140
7141
7142 echo " "
7143 echo "Checking the availability of certain socket constants..." >& 4
7144 for ENUM in MSG_CTRUNC MSG_DONTROUTE MSG_OOB MSG_PEEK MSG_PROXY SCM_RIGHTS; do
7145         enum=`$echo $ENUM|./tr '[A-Z]' '[a-z]'`
7146         $cat >try.c <<EOF
7147 #include <sys/types.h>
7148 #include <sys/socket.h>
7149 int main() {
7150     int i = $ENUM;
7151 }
7152 EOF
7153         val="$undef"
7154         set try; if eval $compile; then
7155                 val="$define"
7156         fi
7157         set d_${enum}; eval $setvar
7158         $rm -f try.c try
7159 done
7160
7161 set sendmsg d_sendmsg
7162 eval $inlibc
7163
7164 set recvmsg d_recvmsg
7165 eval $inlibc
7166
7167 echo " "
7168 $echo $n "Checking to see if your system supports struct msghdr...$c" >&4
7169 set d_msghdr_s msghdr msg_name define sys/types.h $d_socket sys/socket.h $i_sysuio sys/uio.h
7170 eval $hasfield
7171 case "$d_msghdr_s" in
7172 "$define")      echo "Yup, it does." >&4
7173                 ;;
7174 *)              echo "Nope, it doesn't." >&4
7175                 ;;
7176 esac
7177
7178 $echo $n "Checking to see if your system supports struct cmsghdr...$c" >&4
7179 set d_cmsghdr_s cmsghdr cmsg_len define sys/types.h $d_socket sys/socket.h $i_sysuio sys/uio.h
7180 eval $hasfield
7181 case "$d_cmsghdr_s" in
7182 "$define")      echo "Yup, it does." >&4
7183                 ;;
7184 *)              echo "Nope, it doesn't." >&4
7185                 ;;
7186 esac
7187
7188 : check for const keyword
7189 echo " "
7190 echo 'Checking to see if your C compiler knows about "const"...' >&4
7191 $cat >const.c <<'EOCP'
7192 typedef struct spug { int drokk; } spug;
7193 int main()
7194 {
7195         const char *foo;
7196         const spug y;
7197 }
7198 EOCP
7199 if $cc -c $ccflags const.c >/dev/null 2>&1 ; then
7200         val="$define"
7201         echo "Yup, it does."
7202 else
7203         val="$undef"
7204         echo "Nope, it doesn't."
7205 fi
7206 set d_const
7207 eval $setvar
7208
7209 : see if crypt exists
7210 echo " "
7211 if set crypt val -f d_crypt; eval $csym; $val; then
7212         echo 'crypt() found.' >&4
7213         val="$define"
7214         cryptlib=''
7215 else
7216         cryptlib=`./loc Slibcrypt$_a "" $xlibpth`
7217         if $test -z "$cryptlib"; then
7218                 cryptlib=`./loc Mlibcrypt$_a "" $xlibpth`
7219         else
7220                 cryptlib=-lcrypt
7221         fi
7222         if $test -z "$cryptlib"; then
7223                 cryptlib=`./loc Llibcrypt$_a "" $xlibpth`
7224         else
7225                 cryptlib=-lcrypt
7226         fi
7227         if $test -z "$cryptlib"; then
7228                 cryptlib=`./loc libcrypt$_a "" $libpth`
7229         else
7230                 cryptlib=-lcrypt
7231         fi
7232         if $test -z "$cryptlib"; then
7233                 echo 'crypt() NOT found.' >&4
7234                 val="$undef"
7235         else
7236                 val="$define"
7237         fi
7238 fi
7239 set d_crypt
7240 eval $setvar
7241
7242 : get csh whereabouts
7243 case "$csh" in
7244 'csh') val="$undef" ;;
7245 *) val="$define" ;;
7246 esac
7247 set d_csh
7248 eval $setvar
7249 : Respect a hint or command line value for full_csh.
7250 case "$full_csh" in
7251 '') full_csh=$csh ;;
7252 esac
7253
7254 : see if cuserid exists
7255 set cuserid d_cuserid
7256 eval $inlibc
7257
7258 : see if this is a limits.h system
7259 set limits.h i_limits
7260 eval $inhdr
7261
7262 : see if this is a float.h system
7263 set float.h i_float
7264 eval $inhdr
7265
7266 : See if number of significant digits in a double precision number is known
7267 echo " "
7268 $cat >dbl_dig.c <<EOM
7269 #$i_limits I_LIMITS
7270 #$i_float I_FLOAT
7271 #ifdef I_LIMITS
7272 #include <limits.h>
7273 #endif
7274 #ifdef I_FLOAT
7275 #include <float.h>
7276 #endif
7277 #ifdef DBL_DIG
7278 printf("Contains DBL_DIG");
7279 #endif
7280 EOM
7281 $cppstdin $cppflags $cppminus < dbl_dig.c >dbl_dig.E 2>/dev/null
7282 if $contains 'DBL_DIG' dbl_dig.E >/dev/null 2>&1; then
7283         echo "DBL_DIG found." >&4
7284         val="$define"
7285 else
7286         echo "DBL_DIG NOT found." >&4
7287         val="$undef"
7288 fi
7289 $rm -f dbl_dig.?
7290 set d_dbl_dig
7291 eval $setvar
7292
7293
7294 if $test X"$use64bits" = X"$define"; then
7295         : see if dbminit64 exists
7296         set dbminit64 d_dbminit64
7297         eval $inlibc
7298
7299         : see if dbmclose64 exists
7300         set dbmclose64 d_dbmclose64
7301         eval $inlibc
7302
7303         : see if fetch64 exists
7304         set fetch64 d_fetch64
7305         eval $inlibc
7306
7307         : see if store64 exists
7308         set store64 d_store64
7309         eval $inlibc
7310
7311         : see if delete64 exists
7312         set delete64 d_delete64
7313         eval $inlibc
7314
7315         : see if firstkey64 exists
7316         set firstkey64 d_firstkey64
7317         eval $inlibc
7318
7319         : see if nextkey64 exists
7320         set nextkey64 d_nextkey64
7321         eval $inlibc
7322 else
7323         val="$undef"
7324         for xxx in d_dbminit64 d_dbmclose64 d_fetch64 d_store64 d_delete64 d_firstkey64 d_nextkey64
7325         do
7326                 set $xxx
7327                 eval $setvar
7328         done
7329 fi
7330
7331 : see if difftime exists
7332 set difftime d_difftime
7333 eval $inlibc
7334
7335 : see if sys/stat.h is available
7336 set sys/stat.h i_sysstat
7337 eval $inhdr
7338
7339 : see if this is a dirent system
7340 echo " "
7341 if xinc=`./findhdr dirent.h`; $test "$xinc"; then
7342         val="$define"
7343         echo "<dirent.h> found." >&4
7344 else
7345         val="$undef"
7346         if xinc=`./findhdr sys/dir.h`; $test "$xinc"; then
7347                 echo "<sys/dir.h> found." >&4
7348                 echo " "
7349         else
7350                 xinc=`./findhdr sys/ndir.h`
7351         fi
7352         echo "<dirent.h> NOT found." >&4
7353 fi
7354 set i_dirent
7355 eval $setvar
7356
7357 : Look for type of directory structure.
7358 echo " "
7359 $cppstdin $cppflags $cppminus < "$xinc" > try.c
7360
7361 case "$direntrytype" in
7362 ''|' ')
7363         case "$i_dirent" in
7364         $define) guess1='struct dirent' ;;
7365         *) guess1='struct direct'  ;;
7366         esac
7367         ;;
7368 *)      guess1="$direntrytype"
7369         ;;
7370 esac
7371
7372 case "$guess1" in
7373 'struct dirent') guess2='struct direct' ;;
7374 *) guess2='struct dirent' ;;
7375 esac
7376                 
7377 if $contains "$guess1" try.c >/dev/null 2>&1; then
7378         direntrytype="$guess1"
7379         echo "Your directory entries are $direntrytype." >&4
7380 elif $contains "$guess2" try.c >/dev/null 2>&1; then
7381         direntrytype="$guess2"
7382         echo "Your directory entries seem to be $direntrytype." >&4
7383 else
7384         echo "I don't recognize your system's directory entries." >&4
7385         rp="What type is used for directory entries on this system?"
7386         dflt="$guess1"
7387         . ./myread
7388         direntrytype="$ans"
7389 fi
7390 $rm -f try.c
7391
7392
7393 : see if the directory entry stores field length
7394 echo " "
7395 $cppstdin $cppflags $cppminus < "$xinc" > try.c
7396 if $contains 'd_namlen' try.c >/dev/null 2>&1; then
7397         echo "Good, your directory entry keeps length information in d_namlen." >&4
7398         val="$define"
7399 else
7400         echo "Your directory entry does not know about the d_namlen field." >&4
7401         val="$undef"
7402 fi
7403 set d_dirnamlen
7404 eval $setvar
7405 $rm -f try.c
7406
7407
7408 if $test X"$use64bits" = X"$define"; then
7409         : see if fstat64 exists
7410         set fstat64 d_fstat64
7411         eval $inlibc
7412
7413         : see if ftruncate64 exists
7414         set ftruncate64 d_ftruncate64
7415         eval $inlibc
7416
7417         : see if lockf64 exists
7418         set lockf64 d_lockf64
7419         eval $inlibc
7420
7421         : see if llseek exists
7422         set llseek d_llseek
7423         eval $inlibc
7424
7425         : see if lseek64 exists
7426         set lseek64 d_lseek64
7427         eval $inlibc
7428
7429         : see if lstat64 exists
7430         set lstat64 d_lstat64
7431         eval $inlibc
7432
7433         : see if open64 exists
7434         set open64 d_open64
7435         eval $inlibc
7436
7437         : see if opendir64 exists
7438         set opendir64 d_opendir64
7439         eval $inlibc
7440
7441         : see if readdir64 exists
7442         set readdir64 d_readdir64
7443         eval $inlibc
7444
7445         : see if seekdir64 exists
7446         set seekdir64 d_seekdir64
7447         eval $inlibc
7448
7449         : see if stat64 exists
7450         set stat64 d_stat64
7451         eval $inlibc
7452
7453         : see if telldir64 exists
7454         set telldir64 d_telldir64
7455         eval $inlibc
7456
7457         : see if truncate64 exists
7458         set truncate64 d_truncate64
7459         eval $inlibc
7460
7461         : check for off64_t
7462         echo " "
7463         echo $n "Checking to see if your system supports off64_t...$c" >&4
7464         $cat >try.c <<EOCP
7465 #include <sys/types.h>
7466 #include <unistd.h>
7467 off64_t foo() { off64_t x; x = 7; return x; }'
7468 EOCP
7469         if $cc $optimize $ccflags -c try.c >/dev/null 2>&1; then
7470                 val="$define"
7471                 echo " Yup, it does." >&4
7472         else
7473                 val="$undef"
7474                 echo " Nope, it doesn't." >&4
7475         fi
7476         $rm -f try.*
7477         set d_off64_t
7478         eval $setvar
7479
7480         : check for offset_t
7481         echo " "
7482         echo $n "Checking to see if your system supports offset_t...$c" >&4
7483         $cat >try.c <<EOCP
7484 #include <sys/types.h>
7485 #include <unistd.h>
7486 offset_t foo() { offset_t x; x = 7; return x; }'
7487 EOCP
7488         if $cc $optimize $ccflags -c try.c >/dev/null 2>&1; then
7489                 val="$define"
7490                 echo " Yup, it does." >&4
7491         else
7492                 val="$undef"
7493                 echo " Nope, it doesn't." >&4
7494         fi
7495         $rm -f try.*
7496         set d_offset_t
7497         eval $setvar
7498
7499         : check for ino64_t
7500         echo " "
7501         echo $n "Checking to see if your system supports ino64_t...$c" >&4
7502         val="$undef"
7503         case "$i_sysstat" in
7504         "$define" )
7505                 $cat >try.c <<EOCP
7506 #include <sys/types.h>
7507 #include <sys/stat.h>
7508 ino64_t foo() { ino64_t x; x = 7; return x; }'
7509 EOCP
7510                 if $cc $optimize $ccflags -c try.c >/dev/null 2>&1; then
7511                         val="$define"
7512                 fi
7513                 $rm -f try.*
7514                 ;;
7515         esac
7516         if $test "X$val" = X"$define"; then
7517                 echo " Yup, it does." >&4
7518         else
7519                 echo " Nope, it doesn't." >&4
7520         fi
7521         set d_ino64_t
7522         eval $setvar
7523
7524         : check for struct flock64
7525         echo " "
7526         echo "Checking to see if your system supports struct flock64..." >&4
7527         if $h_fcntl; then
7528                 set d_flock64_s flock64 l_len define fcntl.h
7529                 eval $hasfield
7530         else
7531                 val="$undef"
7532                 set d_flock64_s
7533                 eval $setvar
7534         fi
7535         case "$d_flock64_s" in
7536         "$define")      echo "Yup, it does." >&4
7537                         ;;
7538         *)              echo "Nope, it doesn't." >&4
7539                         ;;
7540         esac
7541
7542         : check for struct dirent64
7543         echo " "
7544         echo "Checking to see if your system supports struct dirent64..." >&4
7545         set d_dirent64_s dirent64 d_off $i_dirent dirent.h
7546         eval $hasfield
7547         case "$d_dirent64_s" in
7548         "$define")      echo "Yup, it does." >&4
7549                         ;;
7550         *)              echo "Nope, it doesn't." >&4
7551                         ;;
7552         esac
7553
7554 else
7555         val="$undef"
7556         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
7557         do
7558                 set $xxx
7559                 eval $setvar
7560         done
7561 fi
7562
7563 : see if dlerror exists
7564 xxx_runnm="$runnm"
7565 runnm=false
7566 set dlerror d_dlerror
7567 eval $inlibc
7568 runnm="$xxx_runnm"
7569
7570 : see if dlfcn is available
7571 set dlfcn.h i_dlfcn
7572 eval $inhdr
7573
7574 case "$usedl" in
7575 $define|y|true)
7576         $cat << EOM
7577
7578 On a few systems, the dynamically loaded modules that perl generates and uses
7579 will need a different extension than shared libs. The default will probably
7580 be appropriate.
7581
7582 EOM
7583         case "$dlext" in
7584         '')     dflt="$so" ;;
7585         *)      dflt="$dlext" ;;
7586         esac
7587         rp='What is the extension of dynamically loaded modules'
7588         . ./myread
7589         dlext="$ans"
7590         ;;
7591 *)
7592         dlext="none"
7593         ;;
7594 esac
7595
7596 : Check if dlsym need a leading underscore
7597 echo " "
7598 val="$undef"
7599
7600 case "$dlsrc" in
7601 dl_dlopen.xs)
7602         echo "Checking whether your dlsym() needs a leading underscore ..." >&4
7603         $cat >dyna.c <<'EOM'
7604 fred () { }
7605 EOM
7606
7607 $cat >fred.c<<EOM
7608
7609 #include <stdio.h>
7610 #$i_dlfcn I_DLFCN
7611 #ifdef I_DLFCN
7612 #include <dlfcn.h>      /* the dynamic linker include file for Sunos/Solaris */
7613 #else
7614 #include <sys/types.h>
7615 #include <nlist.h>
7616 #include <link.h>
7617 #endif
7618
7619 extern int fred() ;
7620
7621 int main()
7622 {
7623     void * handle ;
7624     void * symbol ;
7625 #ifndef RTLD_LAZY
7626     int mode = 1 ;
7627 #else
7628     int mode = RTLD_LAZY ;
7629 #endif
7630     handle = dlopen("./dyna.$dlext", mode) ;
7631     if (handle == NULL) {
7632         printf ("1\n") ;
7633         fflush (stdout) ;
7634         exit(0);
7635     }
7636     symbol = dlsym(handle, "fred") ;
7637     if (symbol == NULL) {
7638         /* try putting a leading underscore */
7639         symbol = dlsym(handle, "_fred") ;
7640         if (symbol == NULL) {
7641             printf ("2\n") ;
7642             fflush (stdout) ;
7643             exit(0);
7644         }
7645         printf ("3\n") ;
7646     }
7647     else
7648         printf ("4\n") ;
7649     fflush (stdout) ;
7650     exit(0);
7651 }
7652 EOM
7653         : Call the object file tmp-dyna.o in case dlext=o.
7654         if $cc $ccflags $cccdlflags -c dyna.c > /dev/null 2>&1 && 
7655                 mv dyna${_o} tmp-dyna${_o} > /dev/null 2>&1 && 
7656                 $ld $lddlflags -o dyna.$dlext tmp-dyna${_o} > /dev/null 2>&1 && 
7657                 $cc $ccflags -o fred $ldflags $cccdlflags $ccdlflags fred.c $libs > /dev/null 2>&1; then
7658                 xxx=`./fred`
7659                 case $xxx in
7660                 1)      echo "Test program failed using dlopen." >&4
7661                         echo "Perhaps you should not use dynamic loading." >&4;;
7662                 2)      echo "Test program failed using dlsym." >&4
7663                         echo "Perhaps you should not use dynamic loading." >&4;;
7664                 3)      echo "dlsym needs a leading underscore" >&4
7665                         val="$define" ;;
7666                 4)      echo "dlsym doesn't need a leading underscore." >&4;;
7667                 esac
7668         else
7669                 echo "I can't compile and run the test program." >&4
7670         fi
7671         ;;
7672 esac
7673                 
7674 $rm -f fred fred.? dyna.$dlext dyna.? tmp-dyna.?
7675
7676 set d_dlsymun
7677 eval $setvar
7678
7679 hasproto='varname=$1; func=$2; shift; shift;
7680 while $test $# -ge 2; do
7681         case "$1" in
7682         $define) echo "#include <$2>";;
7683         esac ;
7684     shift 2;
7685 done > try.c;
7686 $cppstdin $cppflags $cppminus < try.c > tryout.c 2>/dev/null;
7687 if $contains "$func.*(" tryout.c >/dev/null 2>&1; then
7688         echo "$func() prototype found.";
7689         val="$define";
7690 else
7691         echo "$func() prototype NOT found.";
7692         val="$undef";
7693 fi;
7694 set $varname;
7695 eval $setvar;
7696 $rm -f try.c tryout.c'
7697
7698 : see if prototype for drand48 is available
7699 echo " "
7700 set d_drand48proto drand48 $i_stdlib stdlib.h $i_unistd unistd.h
7701 eval $hasproto
7702
7703 : see if dup2 exists
7704 set dup2 d_dup2
7705 eval $inlibc
7706
7707 : see if eaccess exists
7708 set eaccess d_eaccess
7709 eval $inlibc
7710
7711 : see if endgrent exists
7712 set endgrent d_endgrent
7713 eval $inlibc
7714
7715 : see if endhostent exists
7716 set endhostent d_endhent
7717 eval $inlibc
7718
7719 : see if endnetent exists
7720 set endnetent d_endnent
7721 eval $inlibc
7722
7723 : see if endprotoent exists
7724 set endprotoent d_endpent
7725 eval $inlibc
7726
7727 : see if endpwent exists
7728 set endpwent d_endpwent
7729 eval $inlibc
7730
7731 : see if endservent exists
7732 set endservent d_endsent
7733 eval $inlibc
7734
7735 : see if endspent exists
7736 set endspent d_endspent
7737 eval $inlibc
7738
7739 : Locate the flags for 'open()'
7740 echo " "
7741 $cat >open3.c <<'EOCP'
7742 #include <sys/types.h>
7743 #ifdef I_FCNTL
7744 #include <fcntl.h>
7745 #endif
7746 #ifdef I_SYS_FILE
7747 #include <sys/file.h>
7748 #endif
7749 int main() {
7750         if(O_RDONLY);
7751 #ifdef O_TRUNC
7752         exit(0);
7753 #else
7754         exit(1);
7755 #endif
7756 }
7757 EOCP
7758 : check sys/file.h first to get FREAD on Sun
7759 if $test `./findhdr sys/file.h` && \
7760                 set open3 -DI_SYS_FILE && eval $compile; then
7761         h_sysfile=true;
7762         echo "<sys/file.h> defines the O_* constants..." >&4
7763         if ./open3; then
7764                 echo "and you have the 3 argument form of open()." >&4
7765                 val="$define"
7766         else
7767                 echo "but not the 3 argument form of open().  Oh, well." >&4
7768                 val="$undef"
7769         fi
7770 elif $test `./findhdr fcntl.h` && \
7771                 set open3 -DI_FCNTL && eval $compile; then
7772         h_fcntl=true;
7773         echo "<fcntl.h> defines the O_* constants..." >&4
7774         if ./open3; then
7775                 echo "and you have the 3 argument form of open()." >&4
7776                 val="$define"
7777         else
7778                 echo "but not the 3 argument form of open().  Oh, well." >&4
7779                 val="$undef"
7780         fi
7781 else
7782         val="$undef"
7783         echo "I can't find the O_* constant definitions!  You got problems." >&4
7784 fi
7785 set d_open3
7786 eval $setvar
7787 $rm -f open3*
7788
7789 : check for non-blocking I/O stuff
7790 case "$h_sysfile" in
7791 true) echo "#include <sys/file.h>" > head.c;;
7792 *)
7793         case "$h_fcntl" in
7794         true) echo "#include <fcntl.h>" > head.c;;
7795         *) echo "#include <sys/fcntl.h>" > head.c;;
7796         esac
7797         ;;
7798 esac
7799 echo " "
7800 echo "Figuring out the flag used by open() for non-blocking I/O..." >&4
7801 case "$o_nonblock" in
7802 '')
7803         $cat head.c > try.c
7804         $cat >>try.c <<'EOCP'
7805 int main() {
7806 #ifdef O_NONBLOCK
7807         printf("O_NONBLOCK\n");
7808         exit(0);
7809 #endif
7810 #ifdef O_NDELAY
7811         printf("O_NDELAY\n");
7812         exit(0);
7813 #endif
7814 #ifdef FNDELAY
7815         printf("FNDELAY\n");
7816         exit(0);
7817 #endif
7818         exit(0);
7819 }
7820 EOCP
7821         set try
7822         if eval $compile_ok; then
7823                 o_nonblock=`./try`
7824                 case "$o_nonblock" in
7825                 '') echo "I can't figure it out, assuming O_NONBLOCK will do.";;
7826                 *) echo "Seems like we can use $o_nonblock.";;
7827                 esac
7828         else
7829                 echo "(I can't compile the test program; pray O_NONBLOCK is right!)"
7830         fi
7831         ;;
7832 *) echo "Using $hint value $o_nonblock.";;
7833 esac
7834 $rm -f try try.* .out core
7835
7836 echo " "
7837 echo "Let's see what value errno gets from read() on a $o_nonblock file..." >&4
7838 case "$eagain" in
7839 '')
7840         $cat head.c > try.c
7841         $cat >>try.c <<EOCP
7842 #include <errno.h>
7843 #include <sys/types.h>
7844 #include <signal.h>
7845 #define MY_O_NONBLOCK $o_nonblock
7846 #ifndef errno  /* XXX need better Configure test */
7847 extern int errno;
7848 #endif
7849 $signal_t blech(x) int x; { exit(3); }
7850 EOCP
7851         $cat >> try.c <<'EOCP'
7852 int main()
7853 {
7854         int pd[2];
7855         int pu[2];
7856         char buf[1];
7857         char string[100];
7858
7859         pipe(pd);       /* Down: child -> parent */
7860         pipe(pu);       /* Up: parent -> child */
7861         if (0 != fork()) {
7862                 int ret;
7863                 close(pd[1]);   /* Parent reads from pd[0] */
7864                 close(pu[0]);   /* Parent writes (blocking) to pu[1] */
7865                 if (-1 == fcntl(pd[0], F_SETFL, MY_O_NONBLOCK))
7866                         exit(1);
7867                 signal(SIGALRM, blech);
7868                 alarm(5);
7869                 if ((ret = read(pd[0], buf, 1)) > 0)    /* Nothing to read! */
7870                         exit(2);
7871                 sprintf(string, "%d\n", ret);
7872                 write(2, string, strlen(string));
7873                 alarm(0);
7874 #ifdef EAGAIN
7875                 if (errno == EAGAIN) {
7876                         printf("EAGAIN\n");
7877                         goto ok;
7878                 }
7879 #endif
7880 #ifdef EWOULDBLOCK
7881                 if (errno == EWOULDBLOCK)
7882                         printf("EWOULDBLOCK\n");
7883 #endif
7884         ok:
7885                 write(pu[1], buf, 1);   /* Unblocks child, tell it to close our pipe */
7886                 sleep(2);                               /* Give it time to close our pipe */
7887                 alarm(5);
7888                 ret = read(pd[0], buf, 1);      /* Should read EOF */
7889                 alarm(0);
7890                 sprintf(string, "%d\n", ret);
7891                 write(3, string, strlen(string));
7892                 exit(0);
7893         }
7894
7895         close(pd[0]);                   /* We write to pd[1] */
7896         close(pu[1]);                   /* We read from pu[0] */
7897         read(pu[0], buf, 1);    /* Wait for parent to signal us we may continue */
7898         close(pd[1]);                   /* Pipe pd is now fully closed! */
7899         exit(0);                                /* Bye bye, thank you for playing! */
7900 }
7901 EOCP
7902         set try
7903         if eval $compile_ok; then
7904                 echo "$startsh" >mtry
7905                 echo "./try >try.out 2>try.ret 3>try.err || exit 4" >>mtry
7906                 chmod +x mtry
7907                 ./mtry >/dev/null 2>&1
7908                 case $? in
7909                 0) eagain=`$cat try.out`;;
7910                 1) echo "Could not perform non-blocking setting!";;
7911                 2) echo "I did a successful read() for something that was not there!";;
7912                 3) echo "Hmm... non-blocking I/O does not seem to be working!";;
7913                 *) echo "Something terribly wrong happened during testing.";;
7914                 esac
7915                 rd_nodata=`$cat try.ret`
7916                 echo "A read() system call with no data present returns $rd_nodata."
7917                 case "$rd_nodata" in
7918                 0|-1) ;;
7919                 *)
7920                         echo "(That's peculiar, fixing that to be -1.)"
7921                         rd_nodata=-1
7922                         ;;
7923                 esac
7924                 case "$eagain" in
7925                 '')
7926                         echo "Forcing errno EAGAIN on read() with no data available."
7927                         eagain=EAGAIN
7928                         ;;
7929                 *)
7930                         echo "Your read() sets errno to $eagain when no data is available."
7931                         ;;
7932                 esac
7933                 status=`$cat try.err`
7934                 case "$status" in
7935                 0) echo "And it correctly returns 0 to signal EOF.";;
7936                 -1) echo "But it also returns -1 to signal EOF, so be careful!";;
7937                 *) echo "However, your read() returns '$status' on EOF??";;
7938                 esac
7939                 val="$define"
7940                 if test "$status" = "$rd_nodata"; then
7941                         echo "WARNING: you can't distinguish between EOF and no data!"
7942                         val="$undef"
7943                 fi
7944         else
7945                 echo "I can't compile the test program--assuming errno EAGAIN will do."
7946                 eagain=EAGAIN
7947         fi
7948         set d_eofnblk
7949         eval $setvar
7950         ;;
7951 *)
7952         echo "Using $hint value $eagain."
7953         echo "Your read() returns $rd_nodata when no data is present."
7954         case "$d_eofnblk" in
7955         "$define") echo "And you can see EOF because read() returns 0.";;
7956         "$undef") echo "But you can't see EOF status from read() returned value.";;
7957         *)
7958                 echo "(Assuming you can't see EOF status from read anyway.)"
7959                 d_eofnblk=$undef
7960                 ;;
7961         esac
7962         ;;
7963 esac
7964 $rm -f try try.* .out core head.c mtry
7965
7966 : see if fchmod exists
7967 set fchmod d_fchmod
7968 eval $inlibc
7969
7970 : see if fchown exists
7971 set fchown d_fchown
7972 eval $inlibc
7973
7974 : see if this is an fcntl system
7975 set fcntl d_fcntl
7976 eval $inlibc
7977
7978 : see if sys/select.h has to be included
7979 set sys/select.h i_sysselct
7980 eval $inhdr
7981
7982 : see if we should include time.h, sys/time.h, or both
7983 echo " "
7984 if test "X$timeincl" = X; then
7985         echo "Testing to see if we should include <time.h>, <sys/time.h> or both." >&4
7986         $echo $n "I'm now running the test program...$c"
7987         $cat >try.c <<'EOCP'
7988 #include <sys/types.h>
7989 #ifdef I_TIME
7990 #include <time.h>
7991 #endif
7992 #ifdef I_SYSTIME
7993 #ifdef SYSTIMEKERNEL
7994 #define KERNEL
7995 #endif
7996 #include <sys/time.h>
7997 #endif
7998 #ifdef I_SYSSELECT
7999 #include <sys/select.h>
8000 #endif
8001 int main()
8002 {
8003         struct tm foo;
8004 #ifdef S_TIMEVAL
8005         struct timeval bar;
8006 #endif
8007 #ifdef S_TIMEZONE
8008         struct timezone tzp;
8009 #endif
8010         if (foo.tm_sec == foo.tm_sec)
8011                 exit(0);
8012 #ifdef S_TIMEVAL
8013         if (bar.tv_sec == bar.tv_sec)
8014                 exit(0);
8015 #endif
8016         exit(1);
8017 }
8018 EOCP
8019         flags=''
8020         for s_timezone in '-DS_TIMEZONE' ''; do
8021         sysselect=''
8022         for s_timeval in '-DS_TIMEVAL' ''; do
8023         for i_systimek in '' '-DSYSTIMEKERNEL'; do
8024         for i_time in '' '-DI_TIME'; do
8025         for i_systime in '-DI_SYSTIME' ''; do
8026                 case "$flags" in
8027                 '') $echo $n ".$c"
8028                         set try $i_time $i_systime $i_systimek $sysselect $s_timeval $s_timezone
8029                         if eval $compile; then
8030                                 set X $i_time $i_systime $i_systimek $sysselect $s_timeval
8031                                 shift
8032                                 flags="$*"
8033                                 echo " "
8034                                 $echo $n "Succeeded with $flags$c"
8035                         fi
8036                         ;;
8037                 esac
8038         done
8039         done
8040         done
8041         done
8042         done
8043         timeincl=''
8044         echo " "
8045         case "$flags" in
8046         *SYSTIMEKERNEL*) i_systimek="$define"
8047                 timeincl=`./findhdr sys/time.h`
8048                 echo "We'll include <sys/time.h> with KERNEL defined." >&4;;
8049         *) i_systimek="$undef";;
8050         esac
8051         case "$flags" in
8052         *I_TIME*) i_time="$define"
8053                 timeincl=`./findhdr time.h`" $timeincl"
8054                 echo "We'll include <time.h>." >&4;;
8055         *) i_time="$undef";;
8056         esac
8057         case "$flags" in
8058         *I_SYSTIME*) i_systime="$define"
8059                 timeincl=`./findhdr sys/time.h`" $timeincl"
8060                 echo "We'll include <sys/time.h>." >&4;;
8061         *) i_systime="$undef";;
8062         esac
8063         $rm -f try.c try
8064 fi
8065
8066 : check for fd_set items
8067 $cat <<EOM
8068
8069 Checking to see how well your C compiler handles fd_set and friends ...
8070 EOM
8071 $cat >fd_set.c <<EOCP
8072 #$i_systime I_SYS_TIME
8073 #$i_sysselct I_SYS_SELECT
8074 #$d_socket HAS_SOCKET
8075 #include <sys/types.h>
8076 #ifdef HAS_SOCKET
8077 #include <sys/socket.h> /* Might include <sys/bsdtypes.h> */
8078 #endif
8079 #ifdef I_SYS_TIME
8080 #include <sys/time.h>
8081 #endif
8082 #ifdef I_SYS_SELECT
8083 #include <sys/select.h>
8084 #endif
8085 int main() {
8086         fd_set fds;
8087
8088 #ifdef TRYBITS
8089         if(fds.fds_bits);
8090 #endif
8091
8092 #if defined(FD_SET) && defined(FD_CLR) && defined(FD_ISSET) && defined(FD_ZERO)
8093         exit(0);
8094 #else
8095         exit(1);
8096 #endif
8097 }
8098 EOCP
8099 set fd_set -DTRYBITS
8100 if eval $compile; then
8101         d_fds_bits="$define"
8102         d_fd_set="$define"
8103         echo "Well, your system knows about the normal fd_set typedef..." >&4
8104         if ./fd_set; then
8105                 echo "and you have the normal fd_set macros (just as I'd expect)." >&4
8106                 d_fd_macros="$define"
8107         else
8108                 $cat >&4 <<'EOM'
8109 but not the normal fd_set macros!  Gaaack!  I'll have to cover for you.
8110 EOM
8111                 d_fd_macros="$undef"
8112         fi
8113 else
8114         $cat <<'EOM'
8115 Hmm, your compiler has some difficulty with fd_set.  Checking further...
8116 EOM
8117         set fd_set
8118         if eval $compile; then
8119                 d_fds_bits="$undef"
8120                 d_fd_set="$define"
8121                 echo "Well, your system has some sort of fd_set available..." >&4
8122                 if ./fd_set; then
8123                         echo "and you have the normal fd_set macros." >&4
8124                         d_fd_macros="$define"
8125                 else
8126                         $cat <<'EOM'
8127 but not the normal fd_set macros!  Gross!  More work for me...
8128 EOM
8129                         d_fd_macros="$undef"
8130                 fi
8131         else
8132         echo "Well, you got zip.  That's OK, I can roll my own fd_set stuff." >&4
8133                 d_fd_set="$undef"
8134                 d_fds_bits="$undef"
8135                 d_fd_macros="$undef"
8136         fi
8137 fi
8138 $rm -f fd_set*
8139
8140 : see if fgetpos exists
8141 set fgetpos d_fgetpos
8142 eval $inlibc
8143
8144
8145 if $test X"$use64bits" = X"$define"; then
8146         : see if fgetpos64 exists
8147         set fgetpos64 d_fgetpos64
8148         eval $inlibc
8149
8150         : see if fopen64 exists
8151         set freopen64 d_fopen64
8152         eval $inlibc
8153
8154         : see if freopen64 exists
8155         set freopen64 d_freopen64
8156         eval $inlibc
8157
8158         : see if fseek64 exists
8159         set fseek64 d_fseek64
8160         eval $inlibc
8161
8162         : see if fseeko64 exists
8163         set fseeko64 d_fseeko64
8164         eval $inlibc
8165
8166         : see if fsetpos64 exists
8167         set fsetpos64 d_fsetpos64
8168         eval $inlibc
8169
8170         : see if ftell64 exists
8171         set ftell64 d_ftell64
8172         eval $inlibc
8173
8174         : see if ftello64 exists
8175         set ftello64 d_ftello64
8176         eval $inlibc
8177
8178         : see if tmpfile64 exists
8179         set tmpfile64 d_tmpfile64
8180         eval $inlibc
8181 else
8182         val="$undef"
8183         for xxx in d_fgetpos64 d_fopen64 d_freopen64 d_fseek64 d_fseeko64 d_fsetpos64 d_ftell64 d_ftello64 d_tmpfile64
8184         do
8185                 set $xxx
8186                 eval $setvar
8187         done
8188 fi
8189
8190 : see if flock exists
8191 set flock d_flock
8192 eval $inlibc
8193
8194 : see if fork exists
8195 set fork d_fork
8196 eval $inlibc
8197
8198 : see if pathconf exists
8199 set pathconf d_pathconf
8200 eval $inlibc
8201
8202 : see if fpathconf exists
8203 set fpathconf d_fpathconf
8204 eval $inlibc
8205
8206 : see if fseeko exists
8207 set fseeko d_fseeko
8208 eval $inlibc
8209
8210 : see if fsetpos exists
8211 set fsetpos d_fsetpos
8212 eval $inlibc
8213
8214 : see if this is a sys/param system
8215 set sys/param.h i_sysparam
8216 eval $inhdr
8217
8218 : see if this is a sys/mount.h system
8219 set sys/mount.h i_sysmount
8220 eval $inhdr
8221
8222
8223 : see if statfs exists
8224 set statfs d_statfs
8225 eval $inlibc
8226
8227 : see if fstatfs exists
8228 set fstatfs d_fstatfs
8229 eval $inlibc
8230
8231 : see if statfs knows about mount flags
8232 set d_statfsflags statfs f_flags $i_sysparam sys/param.h $i_sysmount sys/mount.h
8233 eval $hasfield
8234
8235
8236 : see if statvfs exists
8237 set statvfs d_statvfs
8238 eval $inlibc
8239
8240 : see if fstatvfs exists
8241 set fstatvfs d_fstatvfs
8242 eval $inlibc
8243
8244
8245 : see if ftello exists
8246 set ftello d_ftello
8247 eval $inlibc
8248
8249 : see if getgrent exists
8250 set getgrent d_getgrent
8251 eval $inlibc
8252
8253 : see if gethostbyaddr exists
8254 set gethostbyaddr d_gethbyaddr
8255 eval $inlibc
8256
8257 : see if gethostbyname exists
8258 set gethostbyname d_gethbyname
8259 eval $inlibc
8260
8261 : see if gethostent exists
8262 set gethostent d_gethent
8263 eval $inlibc
8264
8265 : see how we will look up host name
8266 echo " "
8267 call=''
8268 if set gethostname val -f d_gethname; eval $csym; $val; then
8269         echo 'gethostname() found.' >&4
8270         d_gethname="$define"
8271         call=gethostname
8272 fi
8273 if set uname val -f d_uname; eval $csym; $val; then
8274         if ./xenix; then
8275                 $cat <<'EOM'
8276 uname() was found, but you're running xenix, and older versions of xenix
8277 have a broken uname(). If you don't really know whether your xenix is old
8278 enough to have a broken system call, use the default answer.
8279
8280 EOM
8281                 dflt=y
8282                 case "$d_uname" in
8283                 "$define") dflt=n;;
8284                 esac
8285                 rp='Is your uname() broken?'
8286                 . ./myread
8287                 case "$ans" in
8288                 n*) d_uname="$define"; call=uname;;
8289                 esac
8290         else
8291                 echo 'uname() found.' >&4
8292                 d_uname="$define"
8293                 case "$call" in
8294                 '') call=uname ;;
8295                 esac
8296         fi
8297 fi
8298 case "$d_gethname" in
8299 '') d_gethname="$undef";;
8300 esac
8301 case "$d_uname" in
8302 '') d_uname="$undef";;
8303 esac
8304 case "$d_uname$d_gethname" in
8305 *define*)
8306         dflt=n
8307         cat <<EOM
8308  
8309 Every now and then someone has a $call() that lies about the hostname
8310 but can't be fixed for political or economic reasons.  If you wish, I can
8311 pretend $call() isn't there and maybe compute hostname at run-time
8312 thanks to the '$phostname' command.
8313
8314 EOM
8315         rp="Shall I ignore $call() from now on?"
8316         . ./myread
8317         case "$ans" in
8318         y*) d_uname="$undef" d_gethname="$undef"; $echo $n "Okay...$c";;
8319         esac;;
8320 esac
8321 case "$phostname" in
8322 '') aphostname='';;
8323 *) case "$aphostname" in
8324         /*) ;;
8325         *) set X $phostname
8326                 shift
8327                 file=$1
8328                 shift
8329                 file=`./loc $file $file $pth`
8330                 aphostname=`echo $file $*`
8331                 ;;
8332         esac
8333         ;;
8334 esac
8335 case "$d_uname$d_gethname" in
8336 *define*) ;;
8337 *)
8338         case "$phostname" in
8339         '')
8340                 echo "There will be no way for $package to get your hostname." >&4;;
8341         *)
8342         echo "I'll use 'popen("'"'$aphostname'", "r")'"' to get your hostname." >&4
8343                 ;;
8344         esac;;
8345 esac
8346 case "$d_phostname" in
8347 '') d_phostname="$undef";;
8348 esac
8349
8350 : see if this is a netdb.h system
8351 set netdb.h i_netdb
8352 eval $inhdr
8353
8354 : see if prototypes for various gethostxxx netdb.h functions are available
8355 echo " "
8356 set d_gethostprotos gethostent $i_netdb netdb.h
8357 eval $hasproto
8358
8359 : see if getlogin exists
8360 set getlogin d_getlogin
8361 eval $inlibc
8362
8363 : see if getmntent exists
8364 set getmntent d_getmntent
8365 eval $inlibc
8366
8367 : see if getnetbyaddr exists
8368 set getnetbyaddr d_getnbyaddr
8369 eval $inlibc
8370
8371 : see if getnetbyname exists
8372 set getnetbyname d_getnbyname
8373 eval $inlibc
8374
8375 : see if getnetent exists
8376 set getnetent d_getnent
8377 eval $inlibc
8378
8379 : see if prototypes for various getnetxxx netdb.h functions are available
8380 echo " "
8381 set d_getnetprotos getnetent $i_netdb netdb.h
8382 eval $hasproto
8383
8384
8385 : see if getprotobyname exists
8386 set getprotobyname d_getpbyname
8387 eval $inlibc
8388
8389 : see if getprotobynumber exists
8390 set getprotobynumber d_getpbynumber
8391 eval $inlibc
8392
8393 : see if getprotoent exists
8394 set getprotoent d_getpent
8395 eval $inlibc
8396
8397 : see if getpgid exists
8398 set getpgid d_getpgid
8399 eval $inlibc
8400
8401 : see if getpgrp2 exists
8402 set getpgrp2 d_getpgrp2
8403 eval $inlibc
8404
8405 : see if getppid exists
8406 set getppid d_getppid
8407 eval $inlibc
8408
8409 : see if getpriority exists
8410 set getpriority d_getprior
8411 eval $inlibc
8412
8413 : see if prototypes for various getprotoxxx netdb.h functions are available
8414 echo " "
8415 set d_getprotoprotos getprotoent $i_netdb netdb.h
8416 eval $hasproto
8417
8418 : see if getpwent exists
8419 set getpwent d_getpwent
8420 eval $inlibc
8421
8422
8423 : see if getservbyname exists
8424 set getservbyname d_getsbyname
8425 eval $inlibc
8426
8427 : see if getservbyport exists
8428 set getservbyport d_getsbyport
8429 eval $inlibc
8430
8431 : see if getservent exists
8432 set getservent d_getsent
8433 eval $inlibc
8434
8435 : see if prototypes for various getservxxx netdb.h functions are available
8436 echo " "
8437 set d_getservprotos getservent $i_netdb netdb.h
8438 eval $hasproto
8439
8440 : see if getspent exists
8441 set getspent d_getspent
8442 eval $inlibc
8443
8444 : see if getspnam exists
8445 set getspnam d_getspnam
8446 eval $inlibc
8447
8448 : see if gettimeofday or ftime exists
8449 set gettimeofday d_gettimeod
8450 eval $inlibc
8451 case "$d_gettimeod" in
8452 "$undef")
8453         set ftime d_ftime 
8454         eval $inlibc
8455         ;;
8456 *)
8457         val="$undef"; set d_ftime; eval $setvar
8458         ;;
8459 esac
8460 case "$d_gettimeod$d_ftime" in
8461 "$undef$undef")
8462         echo " "
8463         echo 'No ftime() nor gettimeofday() -- timing may be less accurate.' >&4
8464         ;;
8465 esac
8466
8467 : see if this is an grp system
8468 set grp.h i_grp
8469 eval $inhdr
8470
8471 case "$i_grp" in
8472 $define)
8473         xxx=`./findhdr grp.h`
8474         $cppstdin $cppflags $cppminus < $xxx >$$.h
8475
8476         if $contains 'gr_passwd' $$.h >/dev/null 2>&1; then
8477                 val="$define"
8478         else
8479                 val="$undef"
8480         fi
8481         set d_grpasswd
8482         eval $setvar
8483
8484         $rm -f $$.h
8485         ;;
8486 *)
8487         val="$undef";
8488         set d_grpasswd; eval $setvar
8489         ;;
8490 esac
8491
8492 : see if hasmntopt exists
8493 set hasmntopt d_hasmntopt
8494 eval $inlibc
8495
8496 : see if this is a netinet/in.h or sys/in.h system
8497 set netinet/in.h i_niin sys/in.h i_sysin
8498 eval $inhdr
8499
8500 : see if arpa/inet.h has to be included
8501 set arpa/inet.h i_arpainet
8502 eval $inhdr
8503
8504 : see if htonl --and friends-- exists
8505 val=''
8506 set htonl val
8507 eval $inlibc
8508
8509 : Maybe they are macros.
8510 case "$val" in
8511 $undef)
8512         $cat >htonl.c <<EOM
8513 #include <stdio.h>
8514 #include <sys/types.h>
8515 #$i_niin I_NETINET_IN
8516 #$i_sysin I_SYS_IN
8517 #$i_arpainet I_ARPA_INET
8518 #ifdef I_NETINET_IN
8519 #include <netinet/in.h>
8520 #endif
8521 #ifdef I_SYS_IN
8522 #include <sys/in.h>
8523 #endif
8524 #ifdef I_ARPA_INET
8525 #include <arpa/inet.h>
8526 #endif
8527 #ifdef htonl
8528 printf("Defined as a macro.");
8529 #endif
8530 EOM
8531         $cppstdin $cppflags $cppminus < htonl.c >htonl.E 2>/dev/null
8532         if $contains 'Defined as a macro' htonl.E >/dev/null 2>&1; then
8533                 val="$define"
8534                 echo "But it seems to be defined as a macro." >&4
8535         fi
8536         $rm -f htonl.?
8537         ;;
8538 esac
8539 set d_htonl
8540 eval $setvar
8541
8542 : see which of string.h or strings.h is needed
8543 echo " "
8544 strings=`./findhdr string.h`
8545 if $test "$strings" && $test -r "$strings"; then
8546         echo "Using <string.h> instead of <strings.h>." >&4
8547         val="$define"
8548 else
8549         val="$undef"
8550         strings=`./findhdr strings.h`
8551         if $test "$strings" && $test -r "$strings"; then
8552                 echo "Using <strings.h> instead of <string.h>." >&4
8553         else
8554                 echo "No string header found -- You'll surely have problems." >&4
8555         fi
8556 fi
8557 set i_string
8558 eval $setvar
8559 case "$i_string" in
8560 "$undef") strings=`./findhdr strings.h`;;
8561 *)        strings=`./findhdr string.h`;;
8562 esac
8563
8564 : index or strchr
8565 echo " "
8566 if set index val -f; eval $csym; $val; then
8567         if set strchr val -f d_strchr; eval $csym; $val; then
8568                 if $contains strchr "$strings" >/dev/null 2>&1 ; then
8569                         val="$define"
8570                         vali="$undef"
8571                         echo "strchr() found." >&4
8572                 else
8573                         val="$undef"
8574                         vali="$define"
8575                         echo "index() found." >&4
8576                 fi
8577         else
8578                 val="$undef"
8579                 vali="$define"
8580                 echo "index() found." >&4
8581         fi
8582 else
8583         if set strchr val -f d_strchr; eval $csym; $val; then
8584                 val="$define"
8585                 vali="$undef"
8586                 echo "strchr() found." >&4
8587         else
8588                 echo "No index() or strchr() found!" >&4
8589                 val="$undef"
8590                 vali="$undef"
8591         fi
8592 fi
8593 set d_strchr; eval $setvar
8594 val="$vali"
8595 set d_index; eval $setvar
8596
8597 : check whether inet_aton exists
8598 set inet_aton d_inetaton
8599 eval $inlibc
8600
8601 : see if inttypes.h is available
8602 : we want a real compile instead of Inhdr because some systems
8603 : have an inttypes.h which includes non-existent headers
8604 echo " "
8605 $cat >try.c <<EOCP
8606 #include <inttypes.h>
8607 int main() {
8608         static int32_t foo32 = 0x12345678;
8609 }
8610 EOCP
8611 set try
8612 if eval $compile; then
8613         echo "<inttypes.h> found." >&4
8614         val="$define"
8615 else
8616         echo "<inttypes.h> NOT found." >&4
8617         val="$undef"
8618 fi
8619 $rm -f try.c try
8620 set i_inttypes
8621 eval $setvar
8622
8623 : check for int64_t
8624 case "$use64bits" in
8625 "$define" )
8626         echo " "
8627         echo $n "Checking to see if your system supports int64_t...$c" >&4
8628         $cat >try.c <<EOCP
8629 #include <sys/types.h>
8630 #$i_inttypes I_INTTYPES
8631 #ifdef I_INTTYPES
8632 #include <inttypes.h>
8633 #endif
8634 int64_t foo() { int64_t x; x = 7; return x; }
8635 EOCP
8636         if $cc $optimize $ccflags -c try.c >/dev/null 2>&1; then
8637                 val="$define"
8638                 echo " Yup, it does." >&4
8639         else
8640                 val="$undef"
8641                 echo " Nope, it doesn't." >&4
8642         fi
8643         $rm -f try.*
8644         ;;
8645 *)      val="$undef"
8646         ;;
8647 esac
8648 set d_int64t
8649 eval $setvar
8650
8651
8652 : Look for isascii
8653 echo " "
8654 $cat >isascii.c <<'EOCP'
8655 #include <stdio.h>
8656 #include <ctype.h>
8657 int main() {
8658         int c = 'A';
8659         if (isascii(c))
8660                 exit(0);
8661         else
8662                 exit(1);
8663 }
8664 EOCP
8665 set isascii
8666 if eval $compile; then
8667         echo "isascii() found." >&4
8668         val="$define"
8669 else
8670         echo "isascii() NOT found." >&4
8671         val="$undef"
8672 fi
8673 set d_isascii
8674 eval $setvar
8675 $rm -f isascii*
8676
8677 : see if killpg exists
8678 set killpg d_killpg
8679 eval $inlibc
8680
8681 : see if lchown exists
8682 echo " "
8683 $cat > try.c <<'EOCP'
8684 /* System header to define __stub macros and hopefully few prototypes,
8685     which can conflict with char lchown(); below.  */
8686 #include <assert.h>
8687 /* Override any gcc2 internal prototype to avoid an error.  */
8688 /* We use char because int might match the return type of a gcc2
8689    builtin and then its argument prototype would still apply.  */
8690 char lchown();
8691 int main() {
8692     /*  The GNU C library defines this for functions which it implements
8693         to always fail with ENOSYS.  Some functions are actually named
8694         something starting with __ and the normal name is an alias.  */
8695 #if defined (__stub_lchown) || defined (__stub___lchown)
8696 choke me
8697 #else
8698 lchown();
8699 #endif
8700 ; return 0; }
8701 EOCP
8702 set try
8703 if eval $compile; then
8704     $echo "lchown() found." >&4
8705     val="$define"
8706 else
8707     $echo "lchown() NOT found." >&4
8708     val="$undef"
8709 fi
8710 set d_lchown
8711 eval $setvar
8712
8713 : see if link exists
8714 set link d_link
8715 eval $inlibc
8716
8717 : see if localeconv exists
8718 set localeconv d_locconv
8719 eval $inlibc
8720
8721 : see if lockf exists
8722 set lockf d_lockf
8723 eval $inlibc
8724
8725 : check for length of double
8726 echo " "
8727 case "$doublesize" in
8728 '')
8729         $echo $n "Checking to see how big your double precision numbers are...$c" >&4
8730         $cat >try.c <<'EOCP'
8731 #include <stdio.h>
8732 int main()
8733 {
8734         printf("%d\n", sizeof(double));
8735 }
8736 EOCP
8737         set try
8738         if eval $compile_ok; then
8739                 doublesize=`./try`
8740                 $echo " $doublesize bytes." >&4
8741         else
8742                 dflt='8'
8743                 echo "(I can't seem to compile the test program.  Guessing...)"
8744                 rp="What is the size of a double precision number (in bytes)?"
8745                 . ./myread
8746                 doublesize="$ans"
8747         fi
8748         ;;
8749 esac
8750 $rm -f try.c try
8751
8752 : check for long doubles
8753 echo " "
8754 echo $n "Checking to see if your system supports long doubles...$c" >&4
8755 echo 'long double foo() { long double x; x = 7.0; return x; }' > try.c
8756 if $cc $optimize $ccflags -c try.c >/dev/null 2>&1; then
8757         val="$define"
8758         echo " Yup, it does." >&4
8759 else
8760         val="$undef"
8761         echo " Nope, it doesn't." >&4
8762 fi
8763 $rm try.*
8764 set d_longdbl
8765 eval $setvar
8766
8767 : check for length of long double
8768 case "${d_longdbl}${longdblsize}" in
8769 $define)
8770         echo " "
8771         $echo $n "Checking to see how big your long doubles are...$c" >&4
8772         $cat >try.c <<'EOCP'
8773 #include <stdio.h>
8774 int main()
8775 {
8776         printf("%d\n", sizeof(long double));
8777 }
8778 EOCP
8779         set try
8780         if eval $compile; then
8781                 longdblsize=`./try`
8782                 $echo " $longdblsize bytes." >&4
8783         else
8784                 dflt='8'
8785                 echo " "
8786                 echo "(I can't seem to compile the test program.  Guessing...)" >&4
8787                 rp="What is the size of a long double (in bytes)?"
8788                 . ./myread
8789                 longdblsize="$ans"
8790         fi
8791         if $test "X$doublesize" = "X$longdblsize"; then
8792                 echo "(That isn't any different from an ordinary double.)"
8793         fi      
8794         ;;
8795 esac
8796 $rm -f try.c try
8797
8798 : check for long long
8799 echo " "
8800 echo $n "Checking to see if your system supports long long...$c" >&4
8801 echo 'long long foo() { long long x; x = 7; return x; }' > try.c
8802 if $cc $optimize $ccflags -c try.c >/dev/null 2>&1; then
8803         val="$define"
8804         echo " Yup, it does." >&4
8805 else
8806         val="$undef"
8807         echo " Nope, it doesn't." >&4
8808 fi
8809 $rm try.*
8810 set d_longlong
8811 eval $setvar
8812
8813 : check for length of long long
8814 case "${d_longlong}${longlongsize}" in
8815 $define)
8816         echo " "
8817         $echo $n "Checking to see how big your long longs are...$c" >&4
8818         $cat >try.c <<'EOCP'
8819 #include <stdio.h>
8820 int main()
8821 {
8822         printf("%d\n", sizeof(long long));
8823 }
8824 EOCP
8825         set try
8826         if eval $compile_ok; then
8827                 longlongsize=`./try`
8828                 $echo " $longlongsize bytes." >&4
8829         else
8830                 dflt='8'
8831                 echo " "
8832                 echo "(I can't seem to compile the test program.  Guessing...)"
8833                 rp="What is the size of a long long (in bytes)?"
8834                 . ./myread
8835                 longlongsize="$ans"
8836         fi
8837         if $test "X$longsize" = "X$longlongsize"; then
8838                 echo "(That isn't any different from an ordinary long.)"
8839         fi      
8840         ;;
8841 esac
8842 $rm -f try.c try
8843
8844 : see if lstat exists
8845 set lstat d_lstat
8846 eval $inlibc
8847
8848 : see if madvise exists
8849 set madvise d_madvise
8850 eval $inlibc
8851
8852 : see if mblen exists
8853 set mblen d_mblen
8854 eval $inlibc
8855
8856 : see if mbstowcs exists
8857 set mbstowcs d_mbstowcs
8858 eval $inlibc
8859
8860 : see if mbtowc exists
8861 set mbtowc d_mbtowc
8862 eval $inlibc
8863
8864 : see if memchr exists
8865 set memchr d_memchr
8866 eval $inlibc
8867
8868 : see if memcmp exists
8869 set memcmp d_memcmp
8870 eval $inlibc
8871
8872 : see if memcpy exists
8873 set memcpy d_memcpy
8874 eval $inlibc
8875
8876 : see if memmove exists
8877 set memmove d_memmove
8878 eval $inlibc
8879
8880 : see if memset exists
8881 set memset d_memset
8882 eval $inlibc
8883
8884 : see if mkdir exists
8885 set mkdir d_mkdir
8886 eval $inlibc
8887
8888 : see if mkfifo exists
8889 set mkfifo d_mkfifo
8890 eval $inlibc
8891
8892 : see if mktime exists
8893 set mktime d_mktime
8894 eval $inlibc
8895
8896 : see if this is a sys/mman.h system
8897 set sys/mman.h i_sysmman
8898 eval $inhdr
8899
8900 : see if mmap exists
8901 set mmap d_mmap
8902 eval $inlibc
8903 : see what shmat returns
8904 : default to something harmless
8905 mmaptype='void *'
8906 case "$i_sysmman$d_mmap" in
8907 "$define$define")
8908         $cat >mmap.c <<'END'
8909 #include <sys/mman.h>
8910 void *mmap();
8911 END
8912         if $cc $ccflags -c mmap.c >/dev/null 2>&1; then
8913                 mmaptype='void *'
8914         else
8915                 mmaptype='caddr_t'
8916         fi
8917         echo "and it returns ($mmaptype)." >&4
8918         ;;
8919 esac
8920
8921
8922
8923 : see if mprotect exists
8924 set mprotect d_mprotect
8925 eval $inlibc
8926
8927 : see if msgctl exists
8928 set msgctl d_msgctl
8929 eval $inlibc
8930
8931 : see if msgget exists
8932 set msgget d_msgget
8933 eval $inlibc
8934
8935 : see if msgsnd exists
8936 set msgsnd d_msgsnd
8937 eval $inlibc
8938
8939 : see if msgrcv exists
8940 set msgrcv d_msgrcv
8941 eval $inlibc
8942
8943 : see how much of the 'msg*(2)' library is present.
8944 h_msg=true
8945 echo " "
8946 case "$d_msgctl$d_msgget$d_msgsnd$d_msgrcv" in
8947 *"$undef"*) h_msg=false;;
8948 esac
8949 case "$osname" in
8950 freebsd)
8951     case "`ipcs 2>&1`" in
8952     "SVID messages"*"not configured"*)
8953         echo "Your $osname does not have the msg*(2) configured." >&4
8954         h_msg=false
8955         val="$undef"
8956         set msgctl d_msgctl
8957         eval $setvar
8958         set msgget d_msgget
8959         eval $setvar
8960         set msgsnd d_msgsnd
8961         eval $setvar
8962         set msgrcv d_msgrcv
8963         eval $setvar
8964         ;;
8965     esac
8966     ;;
8967 esac
8968 : we could also check for sys/ipc.h ...
8969 if $h_msg && $test `./findhdr sys/msg.h`; then
8970         echo "You have the full msg*(2) library." >&4
8971         val="$define"
8972 else
8973         echo "You don't have the full msg*(2) library." >&4
8974         val="$undef"
8975 fi
8976 set d_msg
8977 eval $setvar
8978
8979 : see if msync exists
8980 set msync d_msync
8981 eval $inlibc
8982
8983 : see if munmap exists
8984 set munmap d_munmap
8985 eval $inlibc
8986
8987 : see if nice exists
8988 set nice d_nice
8989 eval $inlibc
8990
8991 : see if POSIX threads are available
8992 if test "X$usethreads" = "X$define"; then
8993         set pthread.h i_pthread
8994         eval $inhdr
8995 else
8996         i_pthread="$undef"
8997 fi
8998
8999
9000
9001 : how to create joinable pthreads
9002 if test "X$usethreads" = "X$define" -a "X$i_pthread" = "X$define"; then
9003         echo " "
9004         echo "Checking what constant to use for creating joinable pthreads..." >&4 
9005         $cat >try.c <<'EOCP'
9006 #include <pthread.h>
9007 int main() {
9008     int detachstate = JOINABLE;
9009 }
9010 EOCP
9011         set try -DJOINABLE=PTHREAD_CREATE_JOINABLE
9012         if eval $compile; then
9013                 echo "You seem to use PTHREAD_CREATE_JOINABLE." >&4
9014                 val="$undef" # Yes, undef.
9015                 set d_old_pthread_create_joinable
9016                 eval $setvar
9017                 val=""
9018                 set old_pthread_create_joinable
9019                 eval $setvar
9020         else
9021                 set try -DJOINABLE=PTHREAD_CREATE_UNDETACHED
9022                 if eval $compile; then
9023                         echo "You seem to use PTHREAD_CREATE_UNDETACHED." >&4
9024                         val="$define"
9025                         set d_old_pthread_create_joinable
9026                         eval $setvar
9027                         val=PTHREAD_CREATE_UNDETACHED
9028                         set old_pthread_create_joinable
9029                         eval $setvar
9030                 else            
9031                         set try -DJOINABLE=__UNDETACHED
9032                         if eval $compile; then
9033                                 echo "You seem to use __UNDETACHED." >&4
9034                                 val="$define"
9035                                 set d_old_pthread_create_joinable
9036                                 eval $setvar
9037                                 val=__UNDETACHED
9038                                 set old_pthread_create_joinable
9039                                 eval $setvar
9040                         else
9041                                 echo "Egads, nothing obvious found.  Guessing that you use 0." >&4
9042                                 val="$define"
9043                                 set d_old_pthread_create_joinable
9044                                 eval $setvar
9045                                 val=0
9046                                 set old_pthread_create_joinable
9047                                 eval $setvar
9048                         fi
9049                 fi
9050         fi
9051         $rm -f try try.*
9052 else
9053     d_old_pthread_create_joinable="$undef"
9054     old_pthread_create_joinable=""
9055 fi
9056
9057 : see if pause exists
9058 set pause d_pause
9059 eval $inlibc
9060
9061 : see if pipe exists
9062 set pipe d_pipe
9063 eval $inlibc
9064
9065 : see if poll exists
9066 set poll d_poll
9067 eval $inlibc
9068
9069
9070 : see whether the various POSIXish _yields exist
9071 $cat >try.c <<EOP
9072 #include <pthread.h>
9073 #include <stdio.h>
9074 int main() {
9075 #ifdef SCHED_YIELD
9076         sched_yield();
9077 #else
9078 #ifdef PTHREAD_YIELD
9079         pthread_yield();
9080 #else
9081 #ifdef PTHREAD_YIELD_NULL
9082         pthread_yield(NULL);
9083 #endif
9084 #endif
9085 #endif
9086 }
9087 EOP
9088 : see if sched_yield exists
9089 set try -DSCHED_YIELD
9090 if eval $compile; then
9091     val="$define"
9092     sched_yield='sched_yield()'
9093 else
9094     val="$undef"
9095 fi
9096 case "$usethreads" in
9097 $define)
9098         case "$val" in
9099         $define) echo 'sched_yield() found.' >&4        ;;
9100         *)       echo 'sched_yield() NOT found.' >&4    ;;
9101         esac
9102 esac
9103 set d_sched_yield
9104 eval $setvar
9105
9106 : see if pthread_yield exists
9107 set try -DPTHREAD_YIELD
9108 if eval $compile; then
9109     val="$define"
9110     case "$sched_yield" in
9111     '') sched_yield='pthread_yield()' ;;
9112     esac
9113 else
9114     set try -DPTHREAD_YIELD_NULL
9115     if eval $compile; then
9116         val="$define"
9117         case "$sched_yield" in
9118         '') sched_yield='pthread_yield(NULL)' ;;
9119         esac
9120     else
9121         val="$undef"
9122     fi
9123 fi
9124 case "$usethreads" in
9125 $define)
9126         case "$val" in
9127         $define) echo 'pthread_yield() found.' >&4      ;;
9128         *)       echo 'pthread_yield() NOT found.' >&4  ;;
9129         esac
9130         ;;
9131 esac
9132 set d_pthread_yield
9133 eval $setvar
9134
9135 case "$sched_yield" in
9136 '') sched_yield=undef ;;
9137 esac
9138
9139 $rm -f try try.*
9140
9141 : see if this is a pwd.h system
9142 set pwd.h i_pwd
9143 eval $inhdr
9144
9145 case "$i_pwd" in
9146 $define)
9147         xxx=`./findhdr pwd.h`
9148         $cppstdin $cppflags $cppminus < $xxx >$$.h
9149
9150         if $contains 'pw_quota' $$.h >/dev/null 2>&1; then
9151                 val="$define"
9152         else
9153                 val="$undef"
9154         fi
9155         set d_pwquota
9156         eval $setvar
9157
9158         if $contains 'pw_age' $$.h >/dev/null 2>&1; then
9159                 val="$define"
9160         else
9161                 val="$undef"
9162         fi
9163         set d_pwage
9164         eval $setvar
9165
9166         if $contains 'pw_change' $$.h >/dev/null 2>&1; then
9167                 val="$define"
9168         else
9169                 val="$undef"
9170         fi
9171         set d_pwchange
9172         eval $setvar
9173
9174         if $contains 'pw_class' $$.h >/dev/null 2>&1; then
9175                 val="$define"
9176         else
9177                 val="$undef"
9178         fi
9179         set d_pwclass
9180         eval $setvar
9181
9182         if $contains 'pw_expire' $$.h >/dev/null 2>&1; then
9183                 val="$define"
9184         else
9185                 val="$undef"
9186         fi
9187         set d_pwexpire
9188         eval $setvar
9189
9190         if $contains 'pw_comment' $$.h >/dev/null 2>&1; then
9191                 val="$define"
9192         else
9193                 val="$undef"
9194         fi
9195         set d_pwcomment
9196         eval $setvar
9197
9198         if $contains 'pw_gecos' $$.h >/dev/null 2>&1; then
9199                 val="$define"
9200         else
9201                 val="$undef"
9202         fi
9203         set d_pwgecos
9204         eval $setvar
9205
9206         if $contains 'pw_passwd' $$.h >/dev/null 2>&1; then
9207                 val="$define"
9208         else
9209                 val="$undef"
9210         fi
9211         set d_pwpasswd
9212         eval $setvar
9213
9214         $rm -f $$.h
9215         ;;
9216 *)
9217         val="$undef"; 
9218         set d_pwquota; eval $setvar
9219         set d_pwage; eval $setvar
9220         set d_pwchange; eval $setvar
9221         set d_pwclass; eval $setvar
9222         set d_pwexpire; eval $setvar
9223         set d_pwcomment; eval $setvar
9224         set d_pwgecos; eval $setvar
9225         set d_pwpasswd; eval $setvar
9226         ;;
9227 esac
9228
9229 : see if readdir and friends exist
9230 set readdir d_readdir
9231 eval $inlibc
9232 set seekdir d_seekdir
9233 eval $inlibc
9234 set telldir d_telldir
9235 eval $inlibc
9236 set rewinddir d_rewinddir
9237 eval $inlibc
9238
9239 : see if readlink exists
9240 set readlink d_readlink
9241 eval $inlibc
9242
9243 : see if readv exists
9244 set readv d_readv
9245 eval $inlibc
9246
9247 : see if rename exists
9248 set rename d_rename
9249 eval $inlibc
9250
9251 : see if rmdir exists
9252 set rmdir d_rmdir
9253 eval $inlibc
9254
9255 : see if memory.h is available.
9256 val=''
9257 set memory.h val
9258 eval $inhdr
9259
9260 : See if it conflicts with string.h
9261 case "$val" in
9262 $define)
9263         case "$strings" in
9264         '') ;;
9265         *)
9266                 $cppstdin $cppflags $cppminus < $strings > mem.h
9267                 if $contains 'memcpy' mem.h >/dev/null 2>&1; then
9268                         echo " "
9269                         echo "We won't be including <memory.h>."
9270                         val="$undef"
9271                 fi
9272                 $rm -f mem.h
9273                 ;;
9274         esac
9275 esac
9276 set i_memory
9277 eval $setvar
9278
9279 : can bcopy handle overlapping blocks?
9280 val="$undef"
9281 case "$d_bcopy" in
9282 "$define")
9283         echo " "
9284         echo "Checking to see if your bcopy() can do overlapping copies..." >&4
9285         $cat >try.c <<EOCP
9286 #$i_memory I_MEMORY
9287 #$i_stdlib I_STDLIB
9288 #$i_string I_STRING
9289 #$i_unistd I_UNISTD
9290 EOCP
9291         $cat >>try.c <<'EOCP'
9292 #include <stdio.h>
9293 #ifdef I_MEMORY
9294 #  include <memory.h>
9295 #endif
9296 #ifdef I_STDLIB
9297 #  include <stdlib.h>
9298 #endif
9299 #ifdef I_STRING
9300 #  include <string.h>
9301 #else
9302 #  include <strings.h>
9303 #endif
9304 #ifdef I_UNISTD
9305 #  include <unistd.h>  /* Needed for NetBSD */
9306 #endif
9307 int main()
9308 {
9309 char buf[128], abc[128];
9310 char *b;
9311 int len;
9312 int off;
9313 int align;
9314
9315 bcopy("abcdefghijklmnopqrstuvwxyz0123456789", abc, 36);
9316
9317 for (align = 7; align >= 0; align--) {
9318         for (len = 36; len; len--) {
9319                 b = buf+align;
9320                 bcopy(abc, b, len);
9321                 for (off = 1; off <= len; off++) {
9322                         bcopy(b, b+off, len);
9323                         bcopy(b+off, b, len);
9324                         if (bcmp(b, abc, len))
9325                                 exit(1);
9326                 }
9327         }
9328 }
9329 exit(0);
9330 }
9331 EOCP
9332         set try
9333         if eval $compile_ok; then
9334                 if ./try 2>/dev/null; then
9335                         echo "Yes, it can."
9336                         val="$define"
9337                 else
9338                         echo "It can't, sorry."
9339                         case "$d_memmove" in
9340                         "$define") echo "But that's Ok since you have memmove()." ;;
9341                         esac
9342                 fi
9343         else
9344                 echo "(I can't compile the test program, so we'll assume not...)"
9345                 case "$d_memmove" in
9346                 "$define") echo "But that's Ok since you have memmove()." ;;
9347                 esac
9348         fi
9349         ;;
9350 esac
9351 $rm -f try.* try core
9352 set d_safebcpy
9353 eval $setvar
9354
9355 : can memcpy handle overlapping blocks?
9356 val="$undef"
9357 case "$d_memcpy" in
9358 "$define")
9359         echo " "
9360         echo "Checking to see if your memcpy() can do overlapping copies..." >&4
9361         $cat >try.c <<EOCP
9362 #$i_memory I_MEMORY
9363 #$i_stdlib I_STDLIB
9364 #$i_string I_STRING
9365 #$i_unistd I_UNISTD
9366 EOCP
9367         $cat >>try.c <<'EOCP'
9368 #include <stdio.h>
9369 #ifdef I_MEMORY
9370 #  include <memory.h>
9371 #endif
9372 #ifdef I_STDLIB
9373 #  include <stdlib.h>
9374 #endif
9375 #ifdef I_STRING
9376 #  include <string.h>
9377 #else
9378 #  include <strings.h>
9379 #endif
9380 #ifdef I_UNISTD
9381 #  include <unistd.h>  /* Needed for NetBSD */
9382 #endif
9383 int main()
9384 {
9385 char buf[128], abc[128];
9386 char *b;
9387 int len;
9388 int off;
9389 int align;
9390
9391 /* Copy "abcde..." string to char abc[] so that gcc doesn't
9392    try to store the string in read-only memory. */
9393 memcpy(abc, "abcdefghijklmnopqrstuvwxyz0123456789", 36);
9394
9395 for (align = 7; align >= 0; align--) {
9396         for (len = 36; len; len--) {
9397                 b = buf+align;
9398                 memcpy(b, abc, len);
9399                 for (off = 1; off <= len; off++) {
9400                         memcpy(b+off, b, len);
9401                         memcpy(b, b+off, len);
9402                         if (memcmp(b, abc, len))
9403                                 exit(1);
9404                 }
9405         }
9406 }
9407 exit(0);
9408 }
9409 EOCP
9410         set try
9411         if eval $compile_ok; then
9412                 if ./try 2>/dev/null; then
9413                         echo "Yes, it can."
9414                         val="$define"
9415                 else
9416                         echo "It can't, sorry."
9417                         case "$d_memmove" in
9418                         "$define") echo "But that's Ok since you have memmove()." ;;
9419                         esac
9420                 fi
9421         else
9422                 echo "(I can't compile the test program, so we'll assume not...)"
9423                 case "$d_memmove" in
9424                 "$define") echo "But that's Ok since you have memmove()." ;;
9425                 esac
9426         fi
9427         ;;
9428 esac
9429 $rm -f try.* try core
9430 set d_safemcpy
9431 eval $setvar
9432
9433 : can memcmp be trusted to compare relative magnitude?
9434 val="$undef"
9435 case "$d_memcmp" in
9436 "$define")
9437         echo " "
9438         echo "Checking if your memcmp() can compare relative magnitude..." >&4
9439         $cat >try.c <<EOCP
9440 #$i_memory I_MEMORY
9441 #$i_stdlib I_STDLIB
9442 #$i_string I_STRING
9443 #$i_unistd I_UNISTD
9444 EOCP
9445         $cat >>try.c <<'EOCP'
9446 #include <stdio.h>
9447 #ifdef I_MEMORY
9448 #  include <memory.h>
9449 #endif
9450 #ifdef I_STDLIB
9451 #  include <stdlib.h>
9452 #endif
9453 #ifdef I_STRING
9454 #  include <string.h>
9455 #else
9456 #  include <strings.h>
9457 #endif
9458 #ifdef I_UNISTD
9459 #  include <unistd.h>  /* Needed for NetBSD */
9460 #endif
9461 int main()
9462 {
9463 char a = -1;
9464 char b = 0;
9465 if ((a < b) && memcmp(&a, &b, 1) < 0)
9466         exit(1);
9467 exit(0);
9468 }
9469 EOCP
9470         set try
9471         if eval $compile_ok; then
9472                 if ./try 2>/dev/null; then
9473                         echo "Yes, it can."
9474                         val="$define"
9475                 else
9476                         echo "No, it can't (it uses signed chars)."
9477                 fi
9478         else
9479                 echo "(I can't compile the test program, so we'll assume not...)"
9480         fi
9481         ;;
9482 esac
9483 $rm -f try.* try core
9484 set d_sanemcmp
9485 eval $setvar
9486
9487 : see if select exists
9488 set select d_select
9489 eval $inlibc
9490
9491 : see if semctl exists
9492 set semctl d_semctl
9493 eval $inlibc
9494
9495 : see if semget exists
9496 set semget d_semget
9497 eval $inlibc
9498
9499 : see if semop exists
9500 set semop d_semop
9501 eval $inlibc
9502
9503 : see how much of the 'sem*(2)' library is present.
9504 h_sem=true
9505 echo " "
9506 case "$d_semctl$d_semget$d_semop" in
9507 *"$undef"*) h_sem=false;;
9508 esac
9509 case "$osname" in
9510 freebsd)
9511     case "`ipcs 2>&1`" in
9512     "SVID messages"*"not configured"*)
9513         echo "Your $osname does not have the sem*(2) configured." >&4
9514         h_sem=false
9515         val="$undef"
9516         set semctl d_semctl
9517         eval $setvar
9518         set semget d_semget
9519         eval $setvar
9520         set semop d_semop
9521         eval $setvar
9522         ;;
9523     esac
9524     ;;
9525 esac
9526 : we could also check for sys/ipc.h ...
9527 if $h_sem && $test `./findhdr sys/sem.h`; then
9528         echo "You have the full sem*(2) library." >&4
9529         val="$define"
9530 else
9531         echo "You don't have the full sem*(2) library." >&4
9532         val="$undef"
9533 fi
9534 set d_sem
9535 eval $setvar
9536
9537 : see whether sys/sem.h defines union semun
9538 echo " "
9539 $cat > try.c <<'END'
9540 #include <sys/types.h>
9541 #include <sys/ipc.h>
9542 #include <sys/sem.h>
9543 int main () { union semun semun; semun.buf = 0; }
9544 END
9545 set try
9546 if eval $compile; then
9547     echo "You have union semun in <sys/sem.h>." >&4
9548     val="$define"
9549 else
9550     echo "You do not have union semun in <sys/sem.h>." >&4
9551     val="$undef"
9552 fi
9553 $rm -f try try.c try.h
9554 set d_union_semun
9555 eval $setvar
9556
9557 : see how to do semctl IPC_STAT
9558 case "$d_sem" in
9559 $define)
9560     : see whether semctl IPC_STAT can use union semun
9561     echo " "
9562     $cat > try.h <<END
9563 #ifndef S_IRUSR
9564 #   ifdef S_IREAD
9565 #       define S_IRUSR S_IREAD
9566 #       define S_IWUSR S_IWRITE
9567 #       define S_IXUSR S_IEXEC
9568 #   else
9569 #       define S_IRUSR 0400
9570 #       define S_IWUSR 0200
9571 #       define S_IXUSR 0100
9572 #   endif
9573 #   define S_IRGRP (S_IRUSR>>3)
9574 #   define S_IWGRP (S_IWUSR>>3)
9575 #   define S_IXGRP (S_IXUSR>>3)
9576 #   define S_IROTH (S_IRUSR>>6)
9577 #   define S_IWOTH (S_IWUSR>>6)
9578 #   define S_IXOTH (S_IXUSR>>6)
9579 #endif
9580 #ifndef S_IRWXU
9581 #   define S_IRWXU (S_IRUSR|S_IWUSR|S_IXUSR)
9582 #   define S_IRWXG (S_IRGRP|S_IWGRP|S_IXGRP)
9583 #   define S_IRWXO (S_IROTH|S_IWOTH|S_IXOTH)
9584 #endif
9585 END
9586
9587     $cat > try.c <<END
9588 #include <sys/types.h>
9589 #include <sys/ipc.h>
9590 #include <sys/sem.h>
9591 #include <sys/stat.h>
9592 #include <stdio.h>
9593 #include <errno.h>
9594 #include "try.h"
9595 #ifndef errno
9596 extern int errno;
9597 #endif
9598 #$d_union_semun HAS_UNION_SEMUN
9599 int main() {
9600     union semun
9601 #ifndef HAS_UNION_SEMUN
9602     {
9603         int val;
9604         struct semid_ds *buf;
9605         unsigned short *array;
9606     }
9607 #endif
9608     arg;
9609     int sem, st;
9610
9611 #if defined(IPC_PRIVATE) && defined(S_IRWXU) && defined(S_IRWXG) && defined(S_IRWXO) && defined(IPC_CREAT)
9612     sem = semget(IPC_PRIVATE, 1, S_IRWXU|S_IRWXG|S_IRWXO|IPC_CREAT);
9613     if (sem > -1) {
9614         struct semid_ds argbuf;
9615         arg.buf = &argbuf;
9616 #       ifdef IPC_STAT
9617         st = semctl(sem, 0, IPC_STAT, arg);
9618         if (st == 0)
9619             printf("semun\n");
9620         else
9621 #       endif /* IPC_STAT */
9622             printf("semctl IPC_STAT failed: errno = %d\n", errno);
9623 #       ifdef IPC_RMID
9624         if (semctl(sem, 0, IPC_RMID, arg) != 0)
9625 #       endif /* IPC_RMID */
9626             printf("semctl IPC_RMID failed: errno = %d\n", errno);
9627     } else
9628 #endif /* IPC_PRIVATE && ... */
9629         printf("semget failed: errno = %d\n", errno);
9630   return 0;
9631 }
9632 END
9633     val="$undef"
9634     set try
9635     if eval $compile; then
9636         xxx=`./try`
9637         case "$xxx" in
9638         semun) val="$define" ;;
9639         esac
9640     fi
9641     $rm -f try try.c
9642     set d_semctl_semun
9643     eval $setvar
9644     case "$d_semctl_semun" in
9645     $define)
9646         echo "You can use union semun for semctl IPC_STAT." >&4
9647         also='also'
9648         ;;
9649     *)  echo "You cannot use union semun for semctl IPC_STAT." >&4
9650         also=''
9651         ;;
9652     esac
9653
9654     : see whether semctl IPC_STAT can use struct semid_ds pointer
9655     $cat > try.c <<'END'
9656 #include <sys/types.h>
9657 #include <sys/ipc.h>
9658 #include <sys/sem.h>
9659 #include <sys/stat.h>
9660 #include "try.h"
9661 #include <stdio.h>
9662 #include <errno.h>
9663 #ifndef errno
9664 extern int errno;
9665 #endif
9666 int main() {
9667     struct semid_ds arg;
9668     int sem, st;
9669
9670 #if defined(IPC_PRIVATE) && defined(S_IRWXU) && defined(S_IRWXG) &&  defined(S_IRWXO) && defined(IPC_CREAT)
9671     sem = semget(IPC_PRIVATE, 1, S_IRWXU|S_IRWXG|S_IRWXO|IPC_CREAT);
9672     if (sem > -1) {
9673 #       ifdef IPC_STAT
9674         st = semctl(sem, 0, IPC_STAT, &arg);
9675         if (st == 0)
9676             printf("semid_ds\n");
9677         else
9678 #       endif /* IPC_STAT */
9679             printf("semctl IPC_STAT failed: errno = %d\n", errno);
9680 #       ifdef IPC_RMID
9681         if (semctl(sem, 0, IPC_RMID, &arg) != 0)
9682 #       endif /* IPC_RMID */
9683             printf("semctl IPC_RMID failed: errno = %d\n", errno);
9684     } else
9685 #endif /* IPC_PRIVATE && ... */
9686         printf("semget failed: errno = %d\n", errno);
9687
9688     return 0;
9689 }
9690 END
9691     val="$undef"
9692     set try
9693     if eval $compile; then
9694         xxx=`./try`
9695         case "$xxx" in
9696         semid_ds) val="$define" ;;
9697         esac
9698     fi
9699     $rm -f try try.c
9700     set d_semctl_semid_ds
9701     eval $setvar
9702     case "$d_semctl_semid_ds" in
9703     $define)
9704         echo "You can $also use struct semid_ds* for semctl IPC_STAT." >&4
9705         ;;
9706     *)  echo "You cannot use struct semid_ds* for semctl IPC_STAT." >&4
9707         ;;
9708     esac
9709     $rm -f try.h
9710     ;;
9711 *)  val="$undef"
9712
9713     # We do not have the full sem*(2) library, so assume we can not
9714     # use either.
9715
9716     set d_semctl_semun
9717     eval $setvar
9718
9719     set d_semctl_semid_ds
9720     eval $setvar
9721     ;;
9722 esac
9723
9724 : see if setegid exists
9725 set setegid d_setegid
9726 eval $inlibc
9727
9728 : see if seteuid exists
9729 set seteuid d_seteuid
9730 eval $inlibc
9731
9732 : see if setgrent exists
9733 set setgrent d_setgrent
9734 eval $inlibc
9735
9736 : see if sethostent exists
9737 set sethostent d_sethent
9738 eval $inlibc
9739
9740 : see if setlinebuf exists
9741 set setlinebuf d_setlinebuf
9742 eval $inlibc
9743
9744 : see if setlocale exists
9745 set setlocale d_setlocale
9746 eval $inlibc
9747
9748 : see if setnetent exists
9749 set setnetent d_setnent
9750 eval $inlibc
9751
9752 : see if setprotoent exists
9753 set setprotoent d_setpent
9754 eval $inlibc
9755
9756 : see if setpgid exists
9757 set setpgid d_setpgid
9758 eval $inlibc
9759
9760 : see if setpgrp2 exists
9761 set setpgrp2 d_setpgrp2
9762 eval $inlibc
9763
9764 : see if setpriority exists
9765 set setpriority d_setprior
9766 eval $inlibc
9767
9768 : see if setpwent exists
9769 set setpwent d_setpwent
9770 eval $inlibc
9771
9772 : see if setregid exists
9773 set setregid d_setregid
9774 eval $inlibc
9775 set setresgid d_setresgid
9776 eval $inlibc
9777
9778 : see if setreuid exists
9779 set setreuid d_setreuid
9780 eval $inlibc
9781 set setresuid d_setresuid
9782 eval $inlibc
9783
9784 : see if setrgid exists
9785 set setrgid d_setrgid
9786 eval $inlibc
9787
9788 : see if setruid exists
9789 set setruid d_setruid
9790 eval $inlibc
9791
9792 : see if setservent exists
9793 set setservent d_setsent
9794 eval $inlibc
9795
9796 : see if setsid exists
9797 set setsid d_setsid
9798 eval $inlibc
9799
9800 : see if setspent exists
9801 set setspent d_setspent
9802 eval $inlibc
9803
9804 : see if setvbuf exists
9805 set setvbuf d_setvbuf
9806 eval $inlibc
9807
9808 : see if sfio.h is available
9809 set sfio.h i_sfio
9810 eval $inhdr
9811
9812
9813 : see if sfio library is available
9814 case "$i_sfio" in
9815 $define)
9816         val=''
9817         set sfreserve val
9818         eval $inlibc
9819         ;;
9820 *)
9821         val="$undef"
9822         ;;
9823 esac
9824 : Ok, but do we want to use it.
9825 case "$val" in
9826 $define)
9827         case "$usesfio" in
9828         true|$define|[yY]*) dflt='y';;
9829         *) dflt='n';;
9830         esac
9831         echo "$package can use the sfio library, but it is experimental."
9832         rp="You seem to have sfio available, do you want to try using it?"
9833         . ./myread
9834         case "$ans" in
9835         y|Y) ;;
9836         *)      echo "Ok, avoiding sfio this time.  I'll use stdio instead."
9837                 val="$undef"
9838                 : Remove sfio from list of libraries to use
9839                 set `echo X $libs | $sed -e 's/-lsfio / /' -e 's/-lsfio$//'`
9840                 shift
9841                 libs="$*"
9842                 echo "libs = $libs" >&4
9843                 ;;
9844         esac
9845         ;;
9846 *)      case "$usesfio" in
9847         true|$define|[yY]*)
9848                 echo "Sorry, cannot find sfio on this machine" >&4
9849                 echo "Ignoring your setting of usesfio=$usesfio" >&4
9850                 ;;
9851         esac
9852         ;;
9853 esac
9854 set d_sfio
9855 eval $setvar
9856 case "$d_sfio" in
9857 $define) usesfio='true';;
9858 *) usesfio='false';;
9859 esac
9860
9861 : see if shmctl exists
9862 set shmctl d_shmctl
9863 eval $inlibc
9864
9865 : see if shmget exists
9866 set shmget d_shmget
9867 eval $inlibc
9868
9869 : see if shmat exists
9870 set shmat d_shmat
9871 eval $inlibc
9872 : see what shmat returns
9873 case "$d_shmat" in
9874 "$define")
9875         $cat >shmat.c <<'END'
9876 #include <sys/shm.h>
9877 void *shmat();
9878 END
9879         if $cc $ccflags -c shmat.c >/dev/null 2>&1; then
9880                 shmattype='void *'
9881         else
9882                 shmattype='char *'
9883         fi
9884         echo "and it returns ($shmattype)." >&4
9885         : see if a prototype for shmat is available
9886         xxx=`./findhdr sys/shm.h`
9887         $cppstdin $cppflags $cppminus < $xxx > shmat.c 2>/dev/null
9888         if $contains 'shmat.*(' shmat.c >/dev/null 2>&1; then
9889                 val="$define"
9890         else
9891                 val="$undef"
9892         fi
9893         $rm -f shmat.[co]
9894         ;;
9895 *)
9896         val="$undef"
9897         ;;
9898 esac
9899 set d_shmatprototype
9900 eval $setvar
9901
9902 : see if shmdt exists
9903 set shmdt d_shmdt
9904 eval $inlibc
9905
9906 : see how much of the 'shm*(2)' library is present.
9907 h_shm=true
9908 echo " "
9909 case "$d_shmctl$d_shmget$d_shmat$d_shmdt" in
9910 *"$undef"*) h_shm=false;;
9911 esac
9912 case "$osname" in
9913 freebsd)
9914     case "`ipcs 2>&1`" in
9915     "SVID shared memory"*"not configured"*)
9916         echo "Your $osname does not have the shm*(2) configured." >&4
9917         h_shm=false
9918         val="$undef"
9919         set shmctl d_shmctl
9920         evat $setvar
9921         set shmget d_shmget
9922         evat $setvar
9923         set shmat d_shmat
9924         evat $setvar
9925         set shmdt d_shmdt
9926         evat $setvar
9927         ;;
9928     esac
9929     ;;
9930 esac
9931 : we could also check for sys/ipc.h ...
9932 if $h_shm && $test `./findhdr sys/shm.h`; then
9933         echo "You have the full shm*(2) library." >&4
9934         val="$define"
9935 else
9936         echo "You don't have the full shm*(2) library." >&4
9937         val="$undef"
9938 fi
9939 set d_shm
9940 eval $setvar
9941
9942 echo " "
9943 : see if we have sigaction
9944 if set sigaction val -f d_sigaction; eval $csym; $val; then
9945         echo 'sigaction() found.' >&4
9946         $cat > try.c <<'EOP'
9947 #include <stdio.h>
9948 #include <sys/types.h>
9949 #include <signal.h>
9950 int main()
9951 {
9952     struct sigaction act, oact;
9953 }
9954 EOP
9955         set try
9956         if eval $compile_ok; then
9957                 val="$define"
9958         else
9959                 echo "But you don't seem to have a useable struct sigaction." >&4
9960                 val="$undef"
9961         fi
9962 else
9963         echo 'sigaction NOT found.' >&4
9964         val="$undef"
9965 fi
9966 set d_sigaction; eval $setvar
9967 $rm -f try try$_o try.c
9968
9969 : see if sigsetjmp exists
9970 echo " "
9971 case "$d_sigsetjmp" in
9972 '')
9973         $cat >try.c <<'EOP'
9974 #include <setjmp.h>
9975 sigjmp_buf env;
9976 int set = 1;
9977 int main()
9978 {
9979         if (sigsetjmp(env,1))
9980                 exit(set);
9981         set = 0;
9982         siglongjmp(env, 1);
9983         exit(1);
9984 }
9985 EOP
9986         set try
9987         if eval $compile; then
9988                 if ./try >/dev/null 2>&1; then
9989                         echo "POSIX sigsetjmp found." >&4
9990                         val="$define"
9991                 else
9992                         $cat >&4 <<EOM
9993 Uh-Oh! You have POSIX sigsetjmp and siglongjmp, but they do not work properly!!
9994 I'll ignore them.
9995 EOM
9996                         val="$undef"
9997                 fi
9998         else
9999                 echo "sigsetjmp not found." >&4
10000                 val="$undef"
10001         fi
10002         ;;
10003 *) val="$d_sigsetjmp"
10004         case "$d_sigsetjmp" in
10005         $define) echo "POSIX sigsetjmp found." >&4;;
10006         $undef) echo "sigsetjmp not found." >&4;;
10007         esac
10008         ;;
10009 esac
10010 set d_sigsetjmp
10011 eval $setvar
10012 $rm -f try.c try
10013
10014 : see if stat knows about block sizes
10015 echo " "
10016 set d_statblks stat st_blocks $i_sysstat sys/stat.h
10017 eval $hasfield
10018
10019 : see if _ptr and _cnt from stdio act std
10020 echo " "
10021 if $contains '_IO_fpos_t' `./findhdr stdio.h` `./findhdr libio.h` >/dev/null 2>&1 ; then
10022         echo "(Looks like you have stdio.h from Linux.)"
10023         case "$stdio_ptr" in
10024         '') stdio_ptr='((fp)->_IO_read_ptr)'
10025                 ptr_lval=$define
10026                 ;;
10027         *)      ptr_lval=$d_stdio_ptr_lval;;
10028         esac
10029         case "$stdio_cnt" in
10030         '') stdio_cnt='((fp)->_IO_read_end - (fp)->_IO_read_ptr)'
10031                 cnt_lval=$undef
10032                 ;;
10033         *)      cnt_lval=$d_stdio_cnt_lval;;
10034         esac
10035         case "$stdio_base" in
10036         '') stdio_base='((fp)->_IO_read_base)';;
10037         esac
10038         case "$stdio_bufsiz" in
10039         '') stdio_bufsiz='((fp)->_IO_read_end - (fp)->_IO_read_base)';;
10040         esac
10041 else
10042         case "$stdio_ptr" in
10043         '') stdio_ptr='((fp)->_ptr)'
10044                 ptr_lval=$define
10045                 ;;
10046         *)      ptr_lval=$d_stdio_ptr_lval;;
10047         esac
10048         case "$stdio_cnt" in
10049         '') stdio_cnt='((fp)->_cnt)'
10050                 cnt_lval=$define
10051                 ;;
10052         *)      cnt_lval=$d_stdio_cnt_lval;;
10053         esac
10054         case "$stdio_base" in
10055         '') stdio_base='((fp)->_base)';;
10056         esac
10057         case "$stdio_bufsiz" in
10058         '') stdio_bufsiz='((fp)->_cnt + (fp)->_ptr - (fp)->_base)';;
10059         esac
10060 fi
10061 : test whether _ptr and _cnt really work
10062 echo "Checking how std your stdio is..." >&4
10063 $cat >try.c <<EOP
10064 #include <stdio.h>
10065 #define FILE_ptr(fp)    $stdio_ptr
10066 #define FILE_cnt(fp)    $stdio_cnt
10067 int main() {
10068         FILE *fp = fopen("try.c", "r");
10069         char c = getc(fp);
10070         if (
10071                 18 <= FILE_cnt(fp) &&
10072                 strncmp(FILE_ptr(fp), "include <stdio.h>\n", 18) == 0
10073         )
10074                 exit(0);
10075         exit(1);
10076 }
10077 EOP
10078 val="$undef"
10079 set try
10080 if eval $compile; then
10081         if ./try; then
10082                 echo "Your stdio acts pretty std."
10083                 val="$define"
10084         else
10085                 echo "Your stdio isn't very std."
10086         fi
10087 else
10088         echo "Your stdio doesn't appear very std."
10089 fi
10090 $rm -f try.c try
10091 set d_stdstdio
10092 eval $setvar
10093
10094 : Can _ptr be used as an lvalue?
10095 case "$d_stdstdio$ptr_lval" in
10096 $define$define) val=$define ;;
10097 *) val=$undef ;;
10098 esac
10099 set d_stdio_ptr_lval
10100 eval $setvar
10101
10102 : Can _cnt be used as an lvalue?
10103 case "$d_stdstdio$cnt_lval" in
10104 $define$define) val=$define ;;
10105 *) val=$undef ;;
10106 esac
10107 set d_stdio_cnt_lval
10108 eval $setvar
10109
10110 : see if _base is also standard
10111 val="$undef"
10112 case "$d_stdstdio" in
10113 $define)
10114         $cat >try.c <<EOP
10115 #include <stdio.h>
10116 #define FILE_base(fp)   $stdio_base
10117 #define FILE_bufsiz(fp) $stdio_bufsiz
10118 int main() {
10119         FILE *fp = fopen("try.c", "r");
10120         char c = getc(fp);
10121         if (
10122                 19 <= FILE_bufsiz(fp) &&
10123                 strncmp(FILE_base(fp), "#include <stdio.h>\n", 19) == 0
10124         )
10125                 exit(0);
10126         exit(1);
10127 }
10128 EOP
10129         set try
10130         if eval $compile; then
10131                 if ./try; then
10132                         echo "And its _base field acts std."
10133                         val="$define"
10134                 else
10135                         echo "But its _base field isn't std."
10136                 fi
10137         else
10138                 echo "However, it seems to be lacking the _base field."
10139         fi
10140         $rm -f try.c try
10141         ;;
10142 esac
10143 set d_stdiobase
10144 eval $setvar
10145
10146 $cat >&4 <<EOM
10147 Checking how to access stdio streams by file descriptor number...
10148 EOM
10149 case "$stdio_stream_array" in
10150 '')     $cat >try.c <<EOCP
10151 #include <stdio.h>
10152 int main() {
10153   if (&STDIO_STREAM_ARRAY[fileno(stdin)] == stdin)
10154     printf("yes\n");
10155 }
10156 EOCP
10157         for s in _iob __iob __sF
10158         do
10159                 set try -DSTDIO_STREAM_ARRAY=$s
10160                 if eval $compile; then
10161                         case "`./try$exe_ext`" in
10162                         yes)    stdio_stream_array=$s; break ;;
10163                         esac
10164                 fi
10165         done
10166         $rm -f try.* try$exe_ext
10167 esac
10168 case "$stdio_stream_array" in
10169 '')     $cat >&4 <<EOM
10170 I can't figure out how to access stdio streams by file descriptor number.
10171 EOM
10172         d_stdio_stream_array="$undef"
10173         ;;
10174 *)      $cat >&4 <<EOM
10175 You can access stdio streams by file descriptor number by the $stdio_stream_array array.
10176 EOM
10177         d_stdio_stream_array="$define"
10178         ;;
10179 esac
10180
10181 : see if strcoll exists
10182 set strcoll d_strcoll
10183 eval $inlibc
10184
10185 : check for structure copying
10186 echo " "
10187 echo "Checking to see if your C compiler can copy structs..." >&4
10188 $cat >try.c <<'EOCP'
10189 int main()
10190 {
10191         struct blurfl {
10192                 int dyick;
10193         } foo, bar;
10194
10195         foo = bar;
10196 }
10197 EOCP
10198 if $cc -c try.c >/dev/null 2>&1 ; then
10199         val="$define"
10200         echo "Yup, it can."
10201 else
10202         val="$undef"
10203         echo "Nope, it can't."
10204 fi
10205 set d_strctcpy
10206 eval $setvar
10207 $rm -f try.*
10208
10209 : see if strerror and/or sys_errlist[] exist
10210 echo " "
10211 if test "X$d_strerror" = X -o "X$d_syserrlst" = X; then
10212     if set strerror val -f d_strerror; eval $csym; $val; then
10213                 echo 'strerror() found.' >&4
10214                 d_strerror="$define"
10215                 d_strerrm='strerror(e)'
10216                 if set sys_errlist val -a d_syserrlst; eval $csym; $val; then   
10217                         echo "(You also have sys_errlist[], so we could roll our own strerror.)" 
10218                         d_syserrlst="$define"
10219                 else
10220                         echo "(Since you don't have sys_errlist[], sterror() is welcome.)"
10221                         d_syserrlst="$undef"
10222                 fi
10223     elif xxx=`./findhdr string.h`; test "$xxx" || xxx=`./findhdr strings.h`; \
10224                         $contains '#[   ]*define.*strerror' "$xxx" >/dev/null 2>&1; then
10225                 echo 'strerror() found in string header.' >&4
10226                 d_strerror="$define"
10227                 d_strerrm='strerror(e)'
10228                 if set sys_errlist val -a d_syserrlst; eval $csym; $val; then   
10229                         echo "(Most probably, strerror() uses sys_errlist[] for descriptions.)"
10230                                 d_syserrlst="$define"
10231                 else
10232                         echo "(You don't appear to have any sys_errlist[], how can this be?)"
10233                         d_syserrlst="$undef"
10234                 fi
10235     elif set sys_errlist val -a d_syserrlst; eval $csym; $val; then
10236                 echo "strerror() not found, but you have sys_errlist[] so we'll use that." >&4
10237                 d_strerror="$undef"
10238                 d_syserrlst="$define"
10239                 d_strerrm='((e)<0||(e)>=sys_nerr?"unknown":sys_errlist[e])'
10240     else
10241                 echo 'strerror() and sys_errlist[] NOT found.' >&4
10242                 d_strerror="$undef"
10243                 d_syserrlst="$undef"
10244                 d_strerrm='"unknown"'
10245     fi
10246 fi
10247
10248 : see if strtod exists
10249 set strtod d_strtod
10250 eval $inlibc
10251
10252 : see if strtol exists
10253 set strtol d_strtol
10254 eval $inlibc
10255
10256 : see if strtoul exists
10257 set strtoul d_strtoul
10258 eval $inlibc
10259
10260 : see if strxfrm exists
10261 set strxfrm d_strxfrm
10262 eval $inlibc
10263
10264 : see if symlink exists
10265 set symlink d_symlink
10266 eval $inlibc
10267
10268 : see if syscall exists
10269 set syscall d_syscall
10270 eval $inlibc
10271
10272 : see if sysconf exists
10273 set sysconf d_sysconf
10274 eval $inlibc
10275
10276 : see if system exists
10277 set system d_system
10278 eval $inlibc
10279
10280 : see if tcgetpgrp exists
10281 set tcgetpgrp d_tcgetpgrp
10282 eval $inlibc
10283
10284 : see if tcsetpgrp exists
10285 set tcsetpgrp d_tcsetpgrp
10286 eval $inlibc
10287
10288 : see if sys/types.h has to be included
10289 set sys/types.h i_systypes
10290 eval $inhdr
10291
10292 : see if prototype for telldir is available
10293 echo " "
10294 set d_telldirproto telldir $i_systypes sys/types.h $i_dirent dirent.h
10295 eval $hasproto
10296
10297 : define an is-a-typedef? function
10298 typedef='type=$1; var=$2; def=$3; shift; shift; shift; inclist=$@;
10299 case "$inclist" in
10300 "") inclist="sys/types.h";;
10301 esac;
10302 eval "varval=\$$var";
10303 case "$varval" in
10304 "")
10305         $rm -f temp.c;
10306         for inc in $inclist; do
10307                 echo "#include <$inc>" >>temp.c;
10308         done;
10309         echo "#ifdef $type" >> temp.c;
10310         echo "printf(\"We have $type\");" >> temp.c;
10311         echo "#endif" >> temp.c;
10312         $cppstdin $cppflags $cppminus < temp.c >temp.E 2>/dev/null;
10313         if $contains $type temp.E >/dev/null 2>&1; then
10314                 eval "$var=\$type";
10315         else
10316                 eval "$var=\$def";
10317         fi;
10318         $rm -f temp.?;;
10319 *) eval "$var=\$varval";;
10320 esac'
10321
10322 : define an is-a-typedef? function that prompts if the type is not available.
10323 typedef_ask='type=$1; var=$2; def=$3; shift; shift; shift; inclist=$@;
10324 case "$inclist" in
10325 "") inclist="sys/types.h";;
10326 esac;
10327 eval "varval=\$$var";
10328 case "$varval" in
10329 "")
10330         $rm -f temp.c;
10331         for inc in $inclist; do
10332                 echo "#include <$inc>" >>temp.c;
10333         done;
10334         echo "#ifdef $type" >> temp.c;
10335         echo "printf(\"We have $type\");" >> temp.c;
10336         echo "#endif" >> temp.c;
10337         $cppstdin $cppflags $cppminus < temp.c >temp.E 2>/dev/null;
10338         echo " " ;
10339         echo "$rp" | $sed -e "s/What is/Looking for/" -e "s/?/./";
10340         if $contains $type temp.E >/dev/null 2>&1; then
10341                 echo "$type found." >&4;
10342                 eval "$var=\$type";
10343         else
10344                 echo "$type NOT found." >&4;
10345                 dflt="$def";
10346                 . ./myread ;
10347                 eval "$var=\$ans";
10348         fi;
10349         $rm -f temp.?;;
10350 *) eval "$var=\$varval";;
10351 esac'
10352
10353 : see if this is a sys/times.h system
10354 set sys/times.h i_systimes
10355 eval $inhdr
10356
10357 : see if times exists
10358 echo " "
10359 if set times val -f d_times; eval $csym; $val; then
10360         echo 'times() found.' >&4
10361         d_times="$define"
10362         inc=''
10363         case "$i_systimes" in
10364         "$define") inc='sys/times.h';;
10365         esac
10366         rp="What is the type returned by times() on this system?"
10367         set clock_t clocktype long stdio.h sys/types.h $inc
10368         eval $typedef_ask
10369 else
10370         echo 'times() NOT found, hope that will do.' >&4
10371         d_times="$undef"
10372         clocktype='int'
10373 fi
10374
10375 : see if truncate exists
10376 set truncate d_truncate
10377 eval $inlibc
10378
10379 : see if tzname[] exists
10380 echo " "
10381 if set tzname val -a d_tzname; eval $csym; $val; then
10382         val="$define"
10383         echo 'tzname[] found.' >&4
10384 else
10385         val="$undef"
10386         echo 'tzname[] NOT found.' >&4
10387 fi
10388 set d_tzname
10389 eval $setvar
10390
10391 : see if umask exists
10392 set umask d_umask
10393 eval $inlibc
10394
10395 : backward compatibility for d_hvfork
10396 if test X$d_hvfork != X; then
10397         d_vfork="$d_hvfork"
10398         d_hvfork=''
10399 fi
10400 : see if there is a vfork
10401 val=''
10402 set vfork val
10403 eval $inlibc
10404
10405 : Ok, but do we want to use it. vfork is reportedly unreliable in 
10406 : perl on Solaris 2.x, and probably elsewhere.
10407 case "$val" in
10408 $define)
10409         echo " "
10410         case "$usevfork" in
10411         false) dflt='n';;
10412         *) dflt='y';;
10413         esac
10414         cat <<'EOM'
10415  
10416 Perl can only use a vfork() that doesn't suffer from strict
10417 restrictions on calling functions or modifying global data in
10418 the child.  For example, glibc-2.1 contains such a vfork()
10419 that is unsuitable.  If your system provides a proper fork()
10420 call, chances are that you do NOT want perl to use vfork().
10421
10422 EOM
10423         rp="Do you still want to use vfork()?"
10424         . ./myread
10425         case "$ans" in
10426         y|Y) ;;
10427         *)
10428                 echo "Ok, we won't use vfork()."
10429                 val="$undef"
10430                 ;;
10431         esac
10432         ;;
10433 esac
10434 set d_vfork
10435 eval $setvar
10436 case "$d_vfork" in
10437 $define) usevfork='true';;
10438 *) usevfork='false';;
10439 esac
10440
10441 : see if this is an sysdir system
10442 set sys/dir.h i_sysdir
10443 eval $inhdr
10444
10445 : see if this is an sysndir system
10446 set sys/ndir.h i_sysndir
10447 eval $inhdr
10448
10449 : see if closedir exists
10450 set closedir d_closedir
10451 eval $inlibc
10452
10453 case "$d_closedir" in
10454 "$define")
10455         echo " "
10456         echo "Checking whether closedir() returns a status..." >&4
10457         cat > closedir.c <<EOM
10458 #$i_dirent I_DIRENT             /**/
10459 #$i_sysdir I_SYS_DIR            /**/
10460 #$i_sysndir I_SYS_NDIR          /**/
10461 #$i_systypes I_SYS_TYPES        /**/
10462
10463 #if defined(I_SYS_TYPES)
10464 #include <sys/types.h>
10465 #endif
10466 #if defined(I_DIRENT)
10467 #include <dirent.h>
10468 #if defined(NeXT) && defined(I_SYS_DIR) /* NeXT needs dirent + sys/dir.h */
10469 #include <sys/dir.h>
10470 #endif
10471 #else
10472 #ifdef I_SYS_NDIR
10473 #include <sys/ndir.h>
10474 #else
10475 #ifdef I_SYS_DIR
10476 #ifdef hp9000s500
10477 #include <ndir.h>       /* may be wrong in the future */
10478 #else
10479 #include <sys/dir.h>
10480 #endif
10481 #endif
10482 #endif
10483 #endif 
10484 int main() { return closedir(opendir(".")); }
10485 EOM
10486         set closedir
10487         if eval $compile_ok; then
10488                 if ./closedir > /dev/null 2>&1 ; then
10489                         echo "Yes, it does."
10490                         val="$undef"
10491                 else
10492                         echo "No, it doesn't."
10493                         val="$define"
10494                 fi
10495         else
10496                 echo "(I can't seem to compile the test program--assuming it doesn't)"
10497                 val="$define"
10498         fi
10499         ;;
10500 *)
10501         val="$undef";
10502         ;;
10503 esac
10504 set d_void_closedir
10505 eval $setvar
10506 $rm -f closedir*
10507 : check for volatile keyword
10508 echo " "
10509 echo 'Checking to see if your C compiler knows about "volatile"...' >&4
10510 $cat >try.c <<'EOCP'
10511 int main()
10512 {
10513         typedef struct _goo_struct goo_struct;
10514         goo_struct * volatile goo = ((goo_struct *)0);
10515         struct _goo_struct {
10516                 long long_int;
10517                 int reg_int;
10518                 char char_var;
10519         };
10520         typedef unsigned short foo_t;
10521         char *volatile foo;
10522         volatile int bar;
10523         volatile foo_t blech;
10524         foo = foo;
10525 }
10526 EOCP
10527 if $cc -c $ccflags try.c >/dev/null 2>&1 ; then
10528         val="$define"
10529         echo "Yup, it does."
10530 else
10531         val="$undef"
10532         echo "Nope, it doesn't."
10533 fi
10534 set d_volatile
10535 eval $setvar
10536 $rm -f try.*
10537
10538 : see if there is a wait4
10539 set wait4 d_wait4
10540 eval $inlibc
10541
10542 : see if waitpid exists
10543 set waitpid d_waitpid
10544 eval $inlibc
10545
10546 : see if wcstombs exists
10547 set wcstombs d_wcstombs
10548 eval $inlibc
10549
10550 : see if wctomb exists
10551 set wctomb d_wctomb
10552 eval $inlibc
10553
10554 : see if writev exists
10555 set writev d_writev
10556 eval $inlibc
10557
10558 : preserve RCS keywords in files with variable substitution, grrr
10559 Date='$Date'
10560 Id='$Id'
10561 Log='$Log'
10562 RCSfile='$RCSfile'
10563 Revision='$Revision'
10564
10565 case "$crosscompile" in
10566 ''|[nN]*) crosscompile="$undef" ;;
10567 esac
10568
10569 case "$osname" in
10570 next|rhapsody) multiarch="$define" ;;
10571 esac
10572 case "$multiarch" in
10573 ''|[nN]*) multiarch="$undef" ;;
10574 esac
10575
10576 : check for alignment requirements
10577 echo " "
10578 case "$crosscompile$multiarch" in
10579 *$define*)
10580         $cat <<EOM
10581 You seem to be either cross-compiling or doing a multiarchitecture build,
10582 skipping the memory alignment check.
10583
10584 EOM
10585         case "$alignbytes" in
10586         '') alignbytes=8 ;;
10587         esac
10588         ;;
10589 *)
10590         case "$alignbytes" in
10591         '') echo "Checking alignment constraints..." >&4
10592                 $cat >try.c <<'EOCP'
10593 struct foobar {
10594         char foo;
10595         double bar;
10596 } try_algn;
10597 int main()
10598 {
10599         printf("%d\n", (char *)&try_algn.bar - (char *)&try_algn.foo);
10600 }
10601 EOCP
10602                 set try
10603                 if eval $compile_ok; then
10604                         dflt=`./try`
10605                 else
10606                         dflt='8'
10607                         echo "(I can't seem to compile the test program...)"
10608                 fi
10609                 ;;
10610         *) dflt="$alignbytes"
10611                 ;;
10612         esac
10613         rp="Doubles must be aligned on a how-many-byte boundary?"
10614         . ./myread
10615         alignbytes="$ans"
10616         $rm -f try.c try
10617         ;;
10618 esac
10619
10620
10621 : check for ordering of bytes in a long
10622 echo " "
10623 case "$crosscompile$multiarch" in
10624 *$define*)
10625         $cat <<EOM
10626 You seem to be either cross-compiling or doing a multiarchitecture build,
10627 skipping the byteorder check.
10628
10629 EOM
10630         byteorder=''
10631         ;;
10632 *)
10633         case "$byteorder" in
10634         '')
10635                 $cat <<'EOM'
10636 In the following, larger digits indicate more significance.  A big-endian
10637 machine like a Pyramid or a Motorola 680?0 chip will come out to 4321. A
10638 little-endian machine like a Vax or an Intel 80?86 chip would be 1234. Other
10639 machines may have weird orders like 3412.  A Cray will report 87654321. If
10640 the test program works the default is probably right.
10641 I'm now running the test program...
10642 EOM
10643                 $cat >try.c <<'EOCP'
10644 #include <stdio.h>
10645 int main()
10646 {
10647         int i;
10648         union {
10649                 unsigned long l;
10650                 char c[sizeof(long)];
10651         } u;
10652
10653         if (sizeof(long) > 4)
10654                 u.l = (0x08070605L << 32) | 0x04030201L;
10655         else
10656                 u.l = 0x04030201L;
10657         for (i = 0; i < sizeof(long); i++)
10658                 printf("%c", u.c[i]+'0');
10659         printf("\n");
10660         exit(0);
10661 }
10662 EOCP
10663                 xxx_prompt=y
10664                 set try
10665                 if eval $compile && ./try > /dev/null; then
10666                         dflt=`./try`
10667                         case "$dflt" in
10668                         [1-4][1-4][1-4][1-4]|12345678|87654321)
10669                                 echo "(The test program ran ok.)"
10670                                 echo "byteorder=$dflt"
10671                                 xxx_prompt=n
10672                         ;;
10673                         ????|????????) echo "(The test program ran ok.)" ;;
10674                         *) echo "(The test program didn't run right for some reason.)" ;;
10675                         esac
10676                 else
10677                         dflt='4321'
10678                         cat <<'EOM'
10679 (I can't seem to compile the test program.  Guessing big-endian...)
10680 EOM
10681                 fi
10682                 case "$xxx_prompt" in
10683                 y)
10684                         rp="What is the order of bytes in a long?"
10685                         . ./myread
10686                         byteorder="$ans"
10687                         ;;
10688                 *)      byteorder=$dflt
10689                         ;;
10690                 esac
10691                 ;;
10692         esac
10693         $rm -f try.c try
10694         ;;
10695 esac
10696
10697
10698 : how do we catenate cpp tokens here?
10699 echo " "
10700 echo "Checking to see how your cpp does stuff like catenate tokens..." >&4
10701 $cat >cpp_stuff.c <<'EOCP'
10702 #define RCAT(a,b)a/**/b
10703 #define ACAT(a,b)a ## b
10704 RCAT(Rei,ser)
10705 ACAT(Cir,cus)
10706 EOCP
10707 $cppstdin $cppflags $cppminus <cpp_stuff.c >cpp_stuff.out 2>&1
10708 if $contains 'Circus' cpp_stuff.out >/dev/null 2>&1; then
10709         echo "Oh!  Smells like ANSI's been here." >&4
10710         echo "We can catify or stringify, separately or together!"
10711         cpp_stuff=42
10712 elif $contains 'Reiser' cpp_stuff.out >/dev/null 2>&1; then
10713         echo "Ah, yes!  The good old days!" >&4
10714         echo "However, in the good old days we don't know how to stringify and"
10715         echo "catify at the same time."
10716         cpp_stuff=1
10717 else
10718         $cat >&4 <<EOM
10719 Hmm, I don't seem to be able to catenate tokens with your cpp.  You're going
10720 to have to edit the values of CAT[2-5] in config.h...
10721 EOM
10722         cpp_stuff="/* Help! How do we handle cpp_stuff? */*/"
10723 fi
10724 $rm -f cpp_stuff.*
10725
10726 : see if this is a db.h system
10727 set db.h i_db
10728 eval $inhdr
10729
10730 case "$i_db" in
10731 $define)
10732         : Check db version.
10733         echo " "
10734         echo "Checking Berkeley DB version ..." >&4
10735         $cat >try.c <<EOCP
10736 #$d_const HASCONST
10737 #ifndef HASCONST
10738 #define const
10739 #endif
10740 #include <sys/types.h>
10741 #include <stdio.h>
10742 #include <db.h>
10743 int main()
10744 {
10745 #ifdef DB_VERSION_MAJOR /* DB version >= 2 */
10746     int Major, Minor, Patch ;
10747     unsigned long Version ;
10748     (void)db_version(&Major, &Minor, &Patch) ;
10749     printf("You have Berkeley DB Version 2 or greater\n");
10750
10751     printf("db.h is from Berkeley DB Version %d.%d.%d\n",
10752                 DB_VERSION_MAJOR, DB_VERSION_MINOR, DB_VERSION_PATCH);
10753     printf("libdb is from Berkeley DB Version %d.%d.%d\n",
10754                 Major, Minor, Patch) ;
10755
10756     /* check that db.h & libdb are compatible */
10757     if (DB_VERSION_MAJOR != Major || DB_VERSION_MINOR != Minor || DB_VERSION_PATCH != Patch) {
10758         printf("db.h and libdb are incompatible\n") ;
10759         exit(3);        
10760     }
10761
10762     printf("db.h and libdb are compatible\n") ;
10763
10764     Version = DB_VERSION_MAJOR * 1000000 + DB_VERSION_MINOR * 1000
10765                 + DB_VERSION_PATCH ;
10766
10767     /* needs to be >= 2.3.4 */
10768     if (Version < 2003004) {
10769     /* if (DB_VERSION_MAJOR == 2 && DB_VERSION_MINOR == 0 && DB_VERSION_PATCH < 5) { */
10770         printf("but Perl needs Berkeley DB 2.3.4 or greater\n") ;
10771         exit(2);        
10772     }
10773
10774     exit(0);
10775 #else
10776 #if defined(_DB_H_) && defined(BTREEMAGIC) && defined(HASHMAGIC)
10777     printf("You have Berkeley DB Version 1\n");
10778     exit(0);    /* DB version < 2: the coast is clear. */
10779 #else
10780     exit(1);    /* <db.h> not Berkeley DB? */
10781 #endif
10782 #endif
10783 }
10784 EOCP
10785         set try
10786         if eval $compile && ./try; then
10787                 echo 'Looks OK.' >&4
10788         else
10789                 echo "I can't use Berkeley DB with your <db.h>.  I'll disable Berkeley DB." >&4
10790                 i_db=$undef
10791                 case " $libs " in
10792                 *"-ldb "*)
10793                         : Remove db from list of libraries to use
10794                         echo "Removing unusable -ldb from library list" >&4
10795                         set `echo X $libs | $sed -e 's/-ldb / /' -e 's/-ldb$//'`
10796                         shift
10797                         libs="$*"
10798                         echo "libs = $libs" >&4
10799                         ;;
10800                 esac
10801         fi
10802         $rm -f try.*
10803         ;;
10804 esac
10805
10806 case "$i_db" in
10807 define)
10808         : Check the return type needed for hash 
10809         echo " "
10810         echo "Checking return type needed for hash for Berkeley DB ..." >&4
10811         $cat >try.c <<EOCP
10812 #$d_const HASCONST
10813 #ifndef HASCONST
10814 #define const
10815 #endif
10816 #include <sys/types.h>
10817 #include <db.h>
10818
10819 #ifndef DB_VERSION_MAJOR
10820 u_int32_t hash_cb (ptr, size)
10821 const void *ptr;
10822 size_t size;
10823 {
10824 }
10825 HASHINFO info;
10826 int main()
10827 {
10828         info.hash = hash_cb;
10829 }
10830 #endif
10831 EOCP
10832         if $cc $ccflags -c try.c >try.out 2>&1 ; then
10833                 if $contains warning try.out >>/dev/null 2>&1 ; then
10834                         db_hashtype='int'
10835                 else
10836                         db_hashtype='u_int32_t'
10837                 fi
10838         else
10839                 : XXX Maybe we should just give up here.
10840                 db_hashtype=u_int32_t
10841                 $cat try.out >&4
10842                 echo "Help:  I can't seem to compile the db test program." >&4
10843                 echo "Something's wrong, but I'll assume you use $db_hashtype." >&4
10844         fi
10845         $rm -f try.*
10846         echo "Your version of Berkeley DB uses $db_hashtype for hash."
10847         ;;
10848 *)      db_hashtype=u_int32_t
10849         ;;
10850 esac
10851 case "$i_db" in
10852 define)
10853         : Check the return type needed for prefix 
10854         echo " "
10855         echo "Checking return type needed for prefix for Berkeley DB ..." >&4
10856         cat >try.c <<EOCP
10857 #$d_const HASCONST
10858 #ifndef HASCONST
10859 #define const
10860 #endif
10861 #include <sys/types.h>
10862 #include <db.h>
10863
10864 #ifndef DB_VERSION_MAJOR
10865 size_t prefix_cb (key1, key2)
10866 const DBT *key1;
10867 const DBT *key2;
10868 {
10869 }
10870 BTREEINFO info;
10871 int main()
10872 {
10873         info.prefix = prefix_cb;
10874 }
10875 #endif
10876 EOCP
10877         if $cc $ccflags -c try.c  >try.out 2>&1 ; then
10878                 if $contains warning try.out >>/dev/null 2>&1 ; then
10879                         db_prefixtype='int'
10880                 else
10881                         db_prefixtype='size_t'
10882                 fi
10883         else
10884                 db_prefixtype='size_t'
10885                 : XXX Maybe we should just give up here.
10886                 $cat try.out >&4
10887                 echo "Help:  I can't seem to compile the db test program." >&4
10888                 echo "Something's wrong, but I'll assume you use $db_prefixtype." >&4
10889         fi
10890         $rm -f try.*
10891         echo "Your version of Berkeley DB uses $db_prefixtype for prefix."
10892         ;;
10893 *)      db_prefixtype='size_t'
10894         ;;
10895 esac
10896
10897 : check for void type
10898 echo " "
10899 echo "Checking to see how well your C compiler groks the void type..." >&4
10900 case "$voidflags" in
10901 '')
10902         $cat >try.c <<'EOCP'
10903 #if TRY & 1
10904 void sub() {
10905 #else
10906 sub() {
10907 #endif
10908         extern void moo();      /* function returning void */
10909         void (*goo)();          /* ptr to func returning void */
10910 #if TRY & 8
10911         void *hue;              /* generic ptr */
10912 #endif
10913 #if TRY & 2
10914         void (*foo[10])();
10915 #endif
10916
10917 #if TRY & 4
10918         if(goo == moo) {
10919                 exit(0);
10920         }
10921 #endif
10922         exit(0);
10923 }
10924 int main() { sub(); }
10925 EOCP
10926         if $cc $ccflags -c -DTRY=$defvoidused try.c >.out 2>&1 ; then
10927                 voidflags=$defvoidused
10928         echo "Good.  It appears to support void to the level $package wants.">&4
10929                 if $contains warning .out >/dev/null 2>&1; then
10930                         echo "However, you might get some warnings that look like this:"
10931                         $cat .out
10932                 fi
10933         else
10934 echo "Hmm, your compiler has some difficulty with void. Checking further..." >&4
10935                 if $cc $ccflags -c -DTRY=1 try.c >/dev/null 2>&1; then
10936                         echo "It supports 1..."
10937                         if $cc $ccflags -c -DTRY=3 try.c >/dev/null 2>&1; then
10938                                 echo "It also supports 2..."
10939                                 if $cc $ccflags -c -DTRY=7 try.c >/dev/null 2>&1; then
10940                                         voidflags=7
10941                                         echo "And it supports 4 but not 8 definitely."
10942                                 else
10943                                         echo "It doesn't support 4..."
10944                                         if $cc $ccflags -c -DTRY=11 try.c >/dev/null 2>&1; then
10945                                                 voidflags=11
10946                                                 echo "But it supports 8."
10947                                         else
10948                                                 voidflags=3
10949                                                 echo "Neither does it support 8."
10950                                         fi
10951                                 fi
10952                         else
10953                                 echo "It does not support 2..."
10954                                 if $cc $ccflags -c -DTRY=13 try.c >/dev/null 2>&1; then
10955                                         voidflags=13
10956                                         echo "But it supports 4 and 8."
10957                                 else
10958                                         if $cc $ccflags -c -DTRY=5 try.c >/dev/null 2>&1; then
10959                                                 voidflags=5
10960                                                 echo "And it supports 4 but has not heard about 8."
10961                                         else
10962                                                 echo "However it supports 8 but not 4."
10963                                         fi
10964                                 fi
10965                         fi
10966                 else
10967                         echo "There is no support at all for void."
10968                         voidflags=0
10969                 fi
10970         fi
10971 esac
10972 case "$voidflags" in
10973 "$defvoidused") ;;
10974 *)      $cat >&4 <<'EOM'
10975   Support flag bits are:
10976     1: basic void declarations.
10977     2: arrays of pointers to functions returning void.
10978     4: operations between pointers to and addresses of void functions.
10979     8: generic void pointers.
10980 EOM
10981         dflt="$voidflags";
10982         rp="Your void support flags add up to what?"
10983         . ./myread
10984         voidflags="$ans"
10985         ;;
10986 esac
10987 $rm -f try.* .out
10988
10989
10990 : How can we generate normalized random numbers ?
10991 echo " "
10992 echo "Looking for a random number function..." >&4
10993 case "$randfunc" in
10994 '')
10995         if set drand48 val -f; eval $csym; $val; then
10996                 dflt="drand48"
10997                 echo "Good, found drand48()." >&4
10998         elif set random val -f; eval $csym; $val; then
10999                 dflt="random"
11000                 echo "OK, found random()." >&4
11001         else
11002                 dflt="rand"
11003                 echo "Yick, looks like I have to use rand()." >&4
11004         fi
11005         echo " "
11006         ;;
11007 *)
11008         dflt="$randfunc"
11009         ;;
11010 esac
11011 cont=true
11012
11013 case "$ccflags" in
11014 *-Dmy_rand=*|*-Dmy_srand=*)
11015         echo "Removing obsolete -Dmy_rand, -Dmy_srand, and -Drandbits from ccflags." >&4
11016         ccflags="`echo $ccflags | sed -e 's/-Dmy_rand=random/ /'`"
11017         ccflags="`echo $ccflags | sed -e 's/-Dmy_srand=srandom/ /'`"
11018         ccflags="`echo $ccflags | sed -e 's/-Drandbits=[0-9][0-9]*/ /'`"
11019         ;;
11020 esac
11021
11022 while $test "$cont"; do
11023         rp="Use which function to generate random numbers?"
11024         . ./myread
11025         if $test "$ans" = "$dflt"; then
11026                 : null
11027         else
11028                 randbits=''
11029         fi
11030         randfunc="$ans"
11031         if set $ans val -f; eval $csym; $val; then
11032                 cont=''
11033         else
11034                 dflt=y
11035                 rp="I cannot find function $ans. Use that name anyway?"
11036                 . ./myread
11037                 dflt=rand
11038                 case "$ans" in
11039                         [yY]*) cont='';;
11040                 esac
11041         fi
11042         case "$cont" in
11043         '')
11044                 case "$randfunc" in
11045                 drand48)
11046                         drand01="drand48()"
11047                         seedfunc="srand48"
11048                         randbits=48
11049                         randseedtype=long
11050                         ;;
11051                 rand|random)
11052                         case "$randbits" in
11053                         '')
11054 echo "Checking to see how many bits your $randfunc() function produces..." >&4
11055                                 $cat >try.c <<EOCP
11056 #$i_unistd I_UNISTD
11057 #$i_stdlib I_STDLIB
11058 #include <stdio.h>
11059 #ifdef I_UNISTD
11060 #  include <unistd.h>
11061 #endif
11062 #ifdef I_STDLIB
11063 #  include <stdlib.h>
11064 #endif
11065 int main()
11066 {
11067         register int i;
11068         register unsigned long tmp;
11069         register unsigned long max = 0L;
11070
11071         for (i = 1000; i; i--) {
11072                 tmp = (unsigned long) $randfunc();
11073                 if (tmp > max) max = tmp;
11074         }
11075         for (i = 0; max; i++)
11076                 max /= 2;
11077         printf("%d\n",i);
11078 }
11079 EOCP
11080                                 set try
11081                                 if eval $compile_ok; then
11082                                         dflt=`try`
11083                                 else
11084                                         dflt='?'
11085                                         echo "(I can't seem to compile the test program...)"
11086                                 fi
11087                                 ;;
11088                         *)
11089                                 dflt="$randbits"
11090                                 ;;
11091                         esac
11092                         rp="How many bits does your $randfunc() function produce?"
11093                         . ./myread
11094                         randbits="$ans"
11095                         $rm -f try.c try
11096                         drand01="($randfunc() / (double) ((unsigned long)1 << $randbits))"
11097                         seedfunc="s$randfunc"
11098                         randseedtype=unsigned
11099                         ;;
11100                 *)
11101                         dflt="31"
11102                         rp="How many bits does your $randfunc() function produce?"
11103                         . ./myread
11104                         randbits="$ans"
11105                         seedfunc="s$randfunc"
11106                         drand01="($randfunc() / (double) ((unsigned long)1 << $randbits))"
11107                         if set $seedfunc val -f; eval $csym; $val; then
11108                                 echo "(Using $seedfunc() to seed random generator)"
11109                         else
11110                                 echo "(Warning: no $seedfunc() to seed random generator)"
11111                                 seedfunc=rand
11112                         fi
11113                         randseedtype=unsigned
11114                         ;;
11115                 esac
11116                 ;;
11117         esac
11118 done
11119
11120 echo " "
11121 echo "Determining whether or not we are on an EBCDIC system..." >&4
11122 $cat >tebcdic.c <<'EOM'
11123 int main()
11124 {
11125   if ('M'==0xd4) return 0;
11126   return 1;
11127 }
11128 EOM
11129
11130 val=$undef
11131 set tebcdic
11132 if eval $compile_ok; then
11133         if ./tebcdic; then
11134                 echo "You have EBCDIC." >&4
11135                 val="$define"
11136         else
11137                 echo "Nope, no EBCDIC.  Assuming ASCII or some ISO Latin, or UTF." >&4
11138         fi
11139 else
11140         echo "I'm unable to compile the test program." >&4
11141         echo "I'll assume ASCII or some ISO Latin." >&4
11142 fi
11143 $rm -f tebcdic.c tebcdic
11144 set ebcdic
11145 eval $setvar
11146
11147 echo " "
11148 $cat >&4 <<EOM
11149 Checking how to flush all pending stdio output...
11150 EOM
11151 # I only know how to find the first 32 possibly open files on SunOS.
11152 # See also hints/sunos_4_1.sh and util.c  --AD
11153 case "$osname" in
11154 sunos) $echo '#define PERL_FFLUSH_ALL_FOPEN_MAX 32' > try.c ;;
11155 esac
11156 $cat >>try.c <<EOCP
11157 #include <stdio.h>
11158 #$i_unistd I_UNISTD
11159 #ifdef I_UNISTD
11160 # include <unistd.h>
11161 #endif
11162 #$d_sysconf HAS_SYSCONF
11163 #$d_stdio_stream_array HAS_STDIO_STREAM_ARRAY
11164 #ifdef HAS_STDIO_STREAM_ARRAY
11165 # define STDIO_STREAM_ARRAY $stdio_stream_array
11166 #endif
11167 int main() {
11168   FILE* p = fopen("try.out", "w");
11169 #ifdef TRY_FPUTC
11170   fputc('x', p);
11171 #else
11172 # ifdef TRY_FPRINTF
11173   fprintf(p, "x");
11174 # endif
11175 #endif
11176 #ifdef TRY_FFLUSH_NULL
11177   fflush(NULL);
11178 #endif
11179 #ifdef TRY_FFLUSH_ALL
11180   {
11181     long open_max = -1;
11182 # ifdef PERL_FFLUSH_ALL_FOPEN_MAX
11183     open_max = PERL_FFLUSH_ALL_FOPEN_MAX;
11184 # else
11185 #  if defined(HAS_SYSCONF) && defined(_SC_OPEN_MAX)
11186     open_max = sysconf(_SC_OPEN_MAX);
11187 #  else
11188 #   ifdef FOPEN_MAX
11189     open_max = FOPEN_MAX;
11190 #   else
11191 #    ifdef OPEN_MAX
11192     open_max = OPEN_MAX;
11193 #    else
11194 #     ifdef _NFILE
11195     open_max = _NFILE;
11196 #     endif
11197 #    endif
11198 #   endif
11199 #  endif
11200 # endif 
11201 # ifdef HAS_STDIO_STREAM_ARRAY
11202     if (open_max > 0) {
11203       long i;
11204       for (i = 0; i < open_max; i++)
11205             if (STDIO_STREAM_ARRAY[i]._file >= 0 &&
11206                 STDIO_STREAM_ARRAY[i]._file < open_max &&
11207                 STDIO_STREAM_ARRAY[i]._flag)
11208                 fflush(&STDIO_STREAM_ARRAY[i]);
11209     }   
11210   }
11211 # endif
11212 #endif
11213   _exit(42);
11214 }
11215 EOCP
11216 : first we have to find out how _not_ to flush
11217 if $test "X$fflushNULL" = X -o "X$fflushall" = X; then
11218     output=''
11219     set try -DTRY_FPUTC
11220     if eval $compile; then
11221             $rm -f try.out
11222             ./try$exe_ext 2>/dev/null
11223             if $test ! -s try.out -a "X$?" = X42; then
11224                 output=-DTRY_FPUTC
11225             fi
11226     fi
11227     case "$output" in
11228     '')
11229             set try -DTRY_FPRINTF
11230             $rm -f try.out
11231             if eval $compile; then
11232                     $rm -f try.out
11233                     ./try$exe_ext 2>/dev/null
11234                     if $test ! -s try.out -a "X$?" = X42; then
11235                         output=-DTRY_FPRINTF
11236                     fi
11237             fi
11238         ;;
11239     esac
11240 fi
11241 : check for fflush NULL behaviour
11242 case "$fflushNULL" in
11243 '')     set try -DTRY_FFLUSH_NULL $output
11244         if eval $compile; then
11245                 $rm -f try.out
11246                 ./try$exe_ext 2>/dev/null
11247                 code="$?"
11248                 if $test -s try.out -a "X$code" = X42; then
11249                         fflushNULL="`$cat try.out`"
11250                 else
11251                         if $test "X$code" != X42; then
11252                                 $cat >&4 <<EOM
11253 (If this test failed, don't worry, we'll try another method shortly.)
11254 EOM
11255                         fi
11256                 fi
11257         fi
11258         $rm -f core try.core core.try.*
11259         case "$fflushNULL" in
11260         x)      $cat >&4 <<EOM
11261 Your fflush(NULL) works okay.
11262 EOM
11263                 fflushNULL="$define"
11264                 ;;
11265         '')     $cat >&4 <<EOM
11266 Your fflush(NULL) isn't working (contrary to ANSI C).
11267 EOM
11268                 fflushNULL="$undef"
11269                 ;;
11270         *)      $cat >&4 <<EOM
11271 Cannot figure out whether your fflush(NULL) works or not.
11272 I'm assuming it doesn't (contrary to ANSI C).
11273 EOM
11274                 fflushNULL="$undef"
11275                 ;;
11276         esac
11277         ;;
11278 $define|true|[yY]*)
11279         fflushNULL="$define"
11280         ;;
11281 *)
11282         fflushNULL="$undef"
11283         ;;
11284 esac
11285 : check explicit looping only if NULL did not work
11286 case "$fflushNULL" in
11287 "$undef")
11288         : check for fflush all behaviour
11289         case "$fflushall" in
11290         '')     set try -DTRY_FFLUSH_ALL $output
11291                 if eval $compile; then
11292                         $cat >&4 <<EOM
11293 (Now testing the other method--but note that also this may fail.)
11294 EOM
11295                         $rm -f try.out
11296                         ./try$exe_ext 2>/dev/null
11297                         if $test -s try.out -a "X$?" = X42; then
11298                                 fflushall="`$cat try.out`"
11299                         fi
11300                 fi
11301                 $rm -f core try.core core.try.*
11302                 case "$fflushall" in
11303                 x)      $cat >&4 <<EOM
11304 Whew. Flushing explicitly all the stdio streams works.
11305 EOM
11306                         fflushall="$define"
11307                         ;;
11308                 '')     $cat >&4 <<EOM
11309 Sigh. Flushing explicitly all the stdio streams doesn't work.
11310 EOM
11311                         fflushall="$undef"
11312                         ;;
11313                 *)      $cat >&4 <<EOM
11314 Cannot figure out whether flushing stdio streams explicitly works or not.
11315 I'm assuming it doesn't.
11316 EOM
11317                         fflushall="$undef"
11318                         ;;
11319                 esac
11320                 ;;
11321         "$define"|true|[yY]*)
11322                 fflushall="$define"
11323                 ;;
11324         *)
11325                 fflushall="$undef"
11326                 ;;
11327         esac
11328         ;;
11329 *)      fflushall="$undef"      
11330         ;;
11331 esac
11332 case "$fflushNULL$fflushall" in
11333 undefundef)
11334         $cat <<EOM
11335 I cannot figure out how to flush pending stdio output.
11336 EOM
11337         ;;
11338 esac
11339 $rm -f try.* try$exe_ext
11340
11341 : see what type file positions are declared as in the library
11342 rp="What is the type for file position used by fsetpos()?"
11343 set fpos_t fpostype long stdio.h sys/types.h
11344 eval $typedef_ask
11345
11346 : Store the full pathname to the ar program for use in the C program
11347 : Respect a hint or command line value for full_ar.
11348 case "$full_ar" in
11349 '') full_ar=$ar ;;
11350 esac
11351
11352 : Store the full pathname to the sed program for use in the C program
11353 full_sed=$sed
11354
11355 : see what type gids are declared as in the kernel
11356 echo " "
11357 echo "Looking for the type for group ids returned by getgid()."
11358 set gid_t gidtype xxx stdio.h sys/types.h
11359 eval $typedef
11360 case "$gidtype" in
11361 xxx)
11362         xxx=`./findhdr sys/user.h`
11363         set `grep 'groups\[NGROUPS\];' "$xxx" 2>/dev/null` unsigned short
11364         case $1 in
11365         unsigned) dflt="$1 $2" ;;
11366         *) dflt="$1" ;;
11367         esac
11368         ;;
11369 *) dflt="$gidtype";;
11370 esac
11371 case "$gidtype" in
11372 gid_t) echo "gid_t found." ;;
11373 *)      rp="What is the type for group ids returned by getgid()?"
11374         . ./myread
11375         gidtype="$ans"
11376         ;;
11377 esac
11378
11379 : see if getgroups exists
11380 set getgroups d_getgrps
11381 eval $inlibc
11382
11383 : see if setgroups exists
11384 set setgroups d_setgrps
11385 eval $inlibc
11386
11387
11388 : Find type of 2nd arg to 'getgroups()' and 'setgroups()'
11389 echo " "
11390 case "$d_getgrps$d_setgrps" in
11391 *define*)
11392         case "$groupstype" in
11393         '') dflt="$gidtype" ;;
11394         *)  dflt="$groupstype" ;;
11395         esac
11396         $cat <<EOM
11397 What type of pointer is the second argument to getgroups() and setgroups()?
11398 Usually this is the same as group ids, $gidtype, but not always.
11399
11400 EOM
11401         rp='What type pointer is the second argument to getgroups() and setgroups()?'
11402         . ./myread
11403         groupstype="$ans"
11404         ;;
11405 *)  groupstype="$gidtype";;
11406 esac
11407
11408 : see what type lseek is declared as in the kernel
11409 rp="What is the type used for lseek's offset on this system?"
11410 set off_t lseektype long stdio.h sys/types.h
11411 eval $typedef_ask
11412
11413 echo " "
11414 $echo $n "Checking to see how big your file offsets are...$c" >&4
11415 $cat >try.c <<EOCP
11416 #include <sys/types.h>
11417 #include <stdio.h>
11418 int main()
11419 {
11420         printf("%d\n", sizeof($lseektype));
11421 }
11422 EOCP
11423 set try
11424 if eval $compile_ok; then
11425         lseeksize=`./try`
11426         $echo " $lseeksize bytes." >&4
11427 else
11428         dflt='4'
11429         echo " "
11430         echo "(I can't seem to compile the test program.  Guessing...)"
11431         rp="What is the size of your file offsets (in bytes)?"
11432         . ./myread
11433         lseeksize="$ans"
11434 fi
11435 $rm -f try.c try
11436
11437 echo " "
11438 echo "Checking if your $make program sets \$(MAKE)..." >&4
11439 case "$make_set_make" in
11440 '')
11441         $sed 's/^X //' > testmake.mak << 'EOF'
11442 Xall:
11443 X       @echo 'maketemp="$(MAKE)"'
11444 EOF
11445         case "`$make -f testmake.mak 2>/dev/null`" in
11446         *maketemp=*) make_set_make='#' ;;
11447         *)      make_set_make="MAKE=$make" ;;
11448         esac
11449         $rm -f testmake.mak
11450         ;;
11451 esac
11452 case "$make_set_make" in
11453 '#') echo "Yup, it does.";;
11454 *) echo "Nope, it doesn't.";;
11455 esac
11456
11457 : see what type is used for mode_t
11458 rp="What is the type used for file modes for system calls (e.g. fchmod())?"
11459 set mode_t modetype int stdio.h sys/types.h
11460 eval $typedef_ask
11461
11462 : define a fucntion to check prototypes
11463 $cat > protochk <<EOSH
11464 $startsh
11465 cc="$cc"
11466 optimize="$optimize"
11467 ccflags="$ccflags"
11468 prototype="$prototype"
11469 define="$define"
11470 rm=$rm
11471 EOSH
11472
11473 $cat >> protochk <<'EOSH'
11474
11475 $rm -f try.c
11476 foo="$1"
11477 shift
11478 while test $# -ge 2; do
11479         case "$1" in
11480                 $define) echo "#include <$2>" >> try.c ;;
11481                 literal) echo "$2" >> try.c ;;
11482         esac
11483     shift 2
11484 done
11485 test "$prototype" = "$define"  && echo '#define CAN_PROTOTYPE' >> try.c
11486 cat >> try.c <<'EOCP'
11487 #ifdef CAN_PROTOTYPE
11488 #define _(args) args
11489 #else
11490 #define _(args) ()
11491 #endif
11492 EOCP
11493 echo "$foo" >> try.c
11494 echo 'int no_real_function_has_this_name _((void)) { return 0; }' >> try.c
11495 $cc $optimize $ccflags -c try.c > /dev/null 2>&1
11496 status=$?
11497 $rm -f try.[co]
11498 exit $status
11499 EOSH
11500 chmod +x protochk
11501 $eunicefix protochk
11502
11503 : see what type is used for size_t
11504 rp="What is the type used for the length parameter for string functions?"
11505 set size_t sizetype 'unsigned int' stdio.h sys/types.h
11506 eval $typedef_ask
11507
11508 : check for type of arguments to gethostbyaddr. 
11509 if test "X$netdb_host_type" = X -o "X$netdb_hlen_type" = X; then
11510         case "$d_gethbyaddr" in
11511         $define)
11512                 $cat <<EOM
11513
11514 Checking to see what type of arguments are accepted by gethostbyaddr().
11515 EOM
11516                 hdrs="$define sys/types.h
11517                         $d_socket sys/socket.h 
11518                         $i_niin netinet/in.h 
11519                         $i_netdb netdb.h
11520                         $i_unistd unistd.h"
11521                 : The first arg can 'char *' or 'void *'
11522                 : The second arg is some of integral type
11523                 for xxx in in_addr_t 'const void *' 'const char *' 'void *' 'char *'; do
11524                         for yyy in size_t long int; do
11525                                 case "$netdb_host_type" in
11526                                 '')     try="extern struct hostent *gethostbyaddr($xxx, $yyy, int);"
11527                                         if ./protochk "$try" $hdrs; then
11528                                                 echo "Your system accepts $xxx for the first arg."
11529                                                 echo "...and $yyy for the second arg."
11530                                                 netdb_host_type="$xxx"
11531                                                 netdb_hlen_type="$yyy"
11532                                         fi
11533                                         ;;
11534                                 esac
11535                         done
11536                 done
11537                 : In case none of those worked, prompt the user.
11538                 case "$netdb_host_type" in
11539                 '')     rp='What is the type for the 1st argument to gethostbyaddr?'
11540                         dflt='char *'
11541                         . ./myread
11542                         netdb_host_type=$ans
11543                         rp='What is the type for the 2nd argument to gethostbyaddr?'
11544                         dflt="$sizetype"
11545                         . ./myread
11546                         netdb_hlen_type=$ans
11547                         ;;
11548                 esac
11549                 ;;
11550         *)      : no gethostbyaddr, so pick harmless defaults
11551                 netdb_host_type='char *'
11552                 netdb_hlen_type="$sizetype"
11553                 ;;
11554         esac
11555         # Remove the "const" if needed. -- but then we'll have a 
11556         # prototype clash!
11557         # netdb_host_type=`echo "$netdb_host_type" | sed 's/^const //'`
11558 fi
11559
11560 : check for type of argument to gethostbyname. 
11561 if test "X$netdb_name_type" = X ; then
11562         case "$d_gethbyname" in
11563         $define)
11564                 $cat <<EOM
11565
11566 Checking to see what type of argument is accepted by gethostbyname().
11567 EOM
11568                 hdrs="$define sys/types.h
11569                         $d_socket sys/socket.h 
11570                         $i_niin netinet/in.h 
11571                         $i_netdb netdb.h
11572                         $i_unistd unistd.h"
11573                 for xxx in "const char *" "char *"; do
11574                         case "$netdb_name_type" in
11575                         '')     try="extern struct hostent *gethostbyname($xxx);"
11576                                 if ./protochk "$try" $hdrs; then
11577                                         echo "Your system accepts $xxx."
11578                                         netdb_name_type="$xxx"
11579                                 fi
11580                                 ;;
11581                         esac
11582                 done
11583                 : In case none of those worked, prompt the user.
11584                 case "$netdb_name_type" in
11585                 '')     rp='What is the type for the 1st argument to gethostbyname?'
11586                         dflt='char *'
11587                         . ./myread
11588                         netdb_name_type=$ans
11589                         ;;
11590                 esac
11591                 ;;
11592         *)      : no gethostbyname, so pick harmless default
11593                 netdb_name_type='char *'
11594                 ;;
11595         esac
11596 fi
11597
11598 : check for type of 1st argument to getnetbyaddr. 
11599 if test "X$netdb_net_type" = X ; then
11600         case "$d_getnbyaddr" in
11601         $define)
11602                 $cat <<EOM
11603
11604 Checking to see what type of 1st argument is accepted by getnetbyaddr().
11605 EOM
11606                 hdrs="$define sys/types.h
11607                         $d_socket sys/socket.h 
11608                         $i_niin netinet/in.h 
11609                         $i_netdb netdb.h
11610                         $i_unistd unistd.h"
11611                 for xxx in in_addr_t "unsigned long" long "unsigned int" int; do
11612                         case "$netdb_net_type" in
11613                         '')     try="extern struct netent *getnetbyaddr($xxx, int);"
11614                                 if ./protochk "$try" $hdrs; then
11615                                         echo "Your system accepts $xxx."
11616                                         netdb_net_type="$xxx"
11617                                 fi
11618                                 ;;
11619                         esac
11620                 done
11621                 : In case none of those worked, prompt the user.
11622                 case "$netdb_net_type" in
11623                 '')     rp='What is the type for the 1st argument to getnetbyaddr?'
11624                         dflt='long'
11625                         . ./myread
11626                         netdb_net_type=$ans
11627                         ;;
11628                 esac
11629                 ;;
11630         *)      : no getnetbyaddr, so pick harmless default
11631                 netdb_net_type='long'
11632                 ;;
11633         esac
11634 fi
11635 : locate the preferred pager for this system
11636 case "$pager" in
11637 '')
11638         dflt=''
11639         case "$pg" in
11640         /*) dflt=$pg;;
11641         esac
11642         case "$more" in
11643         /*) dflt=$more;;
11644         esac
11645         case "$less" in
11646         /*) dflt=$less;;
11647         esac
11648         case "$dflt" in
11649         '') dflt=/usr/ucb/more;;
11650         esac
11651         ;;
11652 *) dflt="$pager";;
11653 esac
11654 echo " "
11655 fn=f/
11656 rp='What pager is used on your system?'
11657 . ./getfile
11658 pager="$ans"
11659
11660 : see what type pids are declared as in the kernel
11661 rp="What is the type of process ids on this system?"
11662 set pid_t pidtype int stdio.h sys/types.h
11663 eval $typedef_ask
11664
11665 : check for length of pointer
11666 echo " "
11667 case "$ptrsize" in
11668 '')
11669         $echo $n "Checking to see how big your pointers are...$c" >&4
11670         if test "$voidflags" -gt 7; then
11671                 echo '#define VOID_PTR char *' > try.c
11672         else
11673                 echo '#define VOID_PTR void *' > try.c
11674         fi
11675         $cat >>try.c <<'EOCP'
11676 #include <stdio.h>
11677 int main()
11678 {
11679         printf("%d\n", sizeof(VOID_PTR));
11680         exit(0);
11681 }
11682 EOCP
11683         set try
11684         if eval $compile_ok; then
11685                 ptrsize=`./try`
11686                 $echo " $ptrsize bytes." >&4
11687         else
11688                 dflt='4'
11689                 echo "(I can't seem to compile the test program.  Guessing...)" >&4
11690                 rp="What is the size of a pointer (in bytes)?"
11691                 . ./myread
11692                 ptrsize="$ans"
11693         fi
11694         ;;
11695 esac
11696 $rm -f try.c try
11697
11698 : see if ar generates random libraries by itself
11699 echo " "
11700 echo "Checking how to generate random libraries on your machine..." >&4
11701 echo 'int bar1() { return bar2(); }' > bar1.c
11702 echo 'int bar2() { return 2; }' > bar2.c
11703 $cat > foo.c <<'EOP'
11704 int main() { printf("%d\n", bar1()); exit(0); }
11705 EOP
11706 $cc $ccflags -c bar1.c >/dev/null 2>&1
11707 $cc $ccflags -c bar2.c >/dev/null 2>&1
11708 $cc $ccflags -c foo.c >/dev/null 2>&1
11709 $ar rc bar$_a bar2$_o bar1$_o >/dev/null 2>&1
11710 if $cc $ccflags $ldflags -o foobar foo$_o bar$_a $libs > /dev/null 2>&1 &&
11711         ./foobar >/dev/null 2>&1; then
11712         echo "$ar appears to generate random libraries itself."
11713         orderlib=false
11714         ranlib=":"
11715 elif $ar ts bar$_a >/dev/null 2>&1 &&
11716         $cc $ccflags $ldflags -o foobar foo$_o bar$_a $libs > /dev/null 2>&1 &&
11717         ./foobar >/dev/null 2>&1; then
11718                 echo "a table of contents needs to be added with '$ar ts'."
11719                 orderlib=false
11720                 ranlib="$ar ts"
11721 else
11722         case "$ranlib" in
11723         :) ranlib='';;
11724         '')
11725                 ranlib=`./loc ranlib X /usr/bin /bin /usr/local/bin`
11726                 $test -f $ranlib || ranlib=''
11727                 ;;
11728         esac
11729         if $test -n "$ranlib"; then
11730                 echo "your system has '$ranlib'; we'll use that."
11731                 orderlib=false
11732         else
11733                 echo "your system doesn't seem to support random libraries"
11734                 echo "so we'll use lorder and tsort to order the libraries."
11735                 orderlib=true
11736                 ranlib=":"
11737         fi
11738 fi
11739 $rm -f foo* bar* 
11740
11741 : check for type of arguments to select. 
11742 case "$selecttype" in
11743 '') case "$d_select" in
11744         $define)
11745                 $cat <<EOM
11746 Checking to see what type of arguments are accepted by select().
11747 EOM
11748                 hdrs="$define sys/types.h
11749                         $i_systime sys/time.h 
11750                         $i_sysselct sys/select.h
11751                         $d_socket sys/socket.h"
11752                 : The first arg can be int, unsigned, or size_t
11753                 : The last arg may or may not be 'const'
11754                 val=''
11755                 : void pointer has been seen but using that
11756                 : breaks the selectminbits test
11757                 for xxx in 'fd_set *' 'int *'; do
11758                         for nfd in 'int' 'size_t' 'unsigned long' 'unsigned' ; do
11759                                 for tmo in 'struct timeval *' 'const struct timeval *'; do
11760                                         case "$val" in
11761                                         '')     try="extern select _(($nfd, $xxx, $xxx, $xxx, $tmo));"
11762                                                 if ./protochk "$try" $hdrs; then
11763                                                         echo "Your system accepts $xxx."
11764                                                         val="$xxx"
11765                                                 fi
11766                                                 ;;
11767                                         esac
11768                                 done
11769                         done
11770                 done
11771                 case "$val" in
11772                 '')     rp='What is the type for the 2nd, 3rd, and 4th arguments to select?'
11773                         case "$d_fd_set" in
11774                                 $define) dflt="fd_set *" ;;
11775                                 *)              dflt="int *" ;;
11776                         esac
11777                         . ./myread
11778                         val=$ans
11779                         ;;
11780                 esac
11781                 selecttype="$val"
11782                 ;;
11783         *)      : no select, so pick a harmless default
11784                 selecttype='int *'
11785                 ;;
11786         esac
11787         ;;
11788 esac
11789
11790 : check for the select 'width'
11791 case "$selectminbits" in
11792 '') case "$d_select" in
11793         $define)
11794                 $cat <<EOM
11795
11796 Checking to see on how many bits at a time your select() operates...
11797 EOM
11798                 $cat >try.c <<EOCP
11799 #include <sys/types.h>
11800 #$i_time I_TIME
11801 #$i_systime I_SYS_TIME
11802 #$i_systimek I_SYS_TIME_KERNEL
11803 #ifdef I_TIME
11804 #   include <time.h>
11805 #endif
11806 #ifdef I_SYS_TIME
11807 #   ifdef I_SYS_TIME_KERNEL
11808 #       define KERNEL
11809 #   endif
11810 #   include <sys/time.h>
11811 #   ifdef I_SYS_TIME_KERNEL
11812 #       undef KERNEL
11813 #   endif
11814 #endif
11815 #$i_sysselct I_SYS_SELECT
11816 #ifdef I_SYS_SELECT
11817 #include <sys/select.h>
11818 #endif
11819 #$d_socket HAS_SOCKET
11820 #ifdef HAS_SOCKET
11821 #   include <sys/socket.h> /* Might include <sys/bsdtypes.h> */
11822 #endif
11823 #include <stdio.h>
11824 $selecttype b;
11825 #define S sizeof(*(b))
11826 #define MINBITS 64
11827 #define NBYTES (S * 8 > MINBITS ? S : MINBITS/8)
11828 #define NBITS  (NBYTES * 8)
11829 int main() {
11830     char s[NBYTES];
11831     struct timeval t;
11832     int i;
11833     FILE* fp;
11834     int fd;
11835
11836     fclose(stdin);
11837     fp = fopen("try.c", "r");
11838     if (fp == 0)
11839       exit(1);
11840     fd = fileno(fp);
11841     if (fd < 0)
11842       exit(2);
11843     b = ($selecttype)s;
11844     for (i = 0; i < NBITS; i++)
11845         FD_SET(i, b);
11846     t.tv_sec  = 0;
11847     t.tv_usec = 0;
11848     select(fd + 1, b, 0, 0, &t);
11849     for (i = NBITS - 1; i > fd && FD_ISSET(i, b); i--);
11850     printf("%d\n", i + 1);
11851     return 0;
11852 }
11853 EOCP
11854                 set try
11855                 if eval $compile_ok; then
11856                         selectminbits=`./try`
11857                         case "$selectminbits" in
11858                         '')     cat >&4 <<EOM
11859 Cannot figure out on how many bits at a time your select() operates.
11860 I'll play safe and guess it is 32 bits.
11861 EOM
11862                                 selectminbits=32
11863                                 bits="32 bits"
11864                                 ;;
11865                         1)      bits="1 bit" ;;
11866                         *)      bits="$selectminbits bits" ;;
11867                         esac
11868                         echo "Your select() operates on $bits at a time." >&4
11869                 else
11870                         rp='What is the minimum number of bits your select() operates on?'
11871                         case "$byteorder" in
11872                         1234|12345678)  dflt=32 ;;
11873                         *)              dflt=1  ;;
11874                         esac
11875                         . ./myread
11876                         val=$ans
11877                         selectminbits="$val"
11878                 fi
11879                 $rm -f try.* try
11880                 ;;
11881         *)      : no select, so pick a harmless default
11882                 selectminbits='32'
11883                 ;;
11884         esac
11885         ;;
11886 esac
11887
11888 : Trace out the files included by signal.h, then look for SIGxxx names.
11889 : Remove SIGARRAYSIZE used by HPUX.
11890 : Remove SIGSTKSIZE used by Linux.
11891 : Remove SIGSTKSZ used by Posix.
11892 : Remove SIGTYP void lines used by OS2.
11893 xxx=`echo '#include <signal.h>' |
11894         $cppstdin $cppminus $cppflags 2>/dev/null |
11895         $grep '^[       ]*#.*include' | 
11896         $awk "{print \\$$fieldn}" | $sed 's!"!!g' | $sort | $uniq`
11897 : Check this list of files to be sure we have parsed the cpp output ok.
11898 : This will also avoid potentially non-existent files, such 
11899 : as ../foo/bar.h
11900 xxxfiles=''
11901 for xx in $xxx /dev/null ; do
11902         $test -f "$xx" && xxxfiles="$xxxfiles $xx"
11903 done
11904 : If we have found no files, at least try signal.h
11905 case "$xxxfiles" in
11906 '')     xxxfiles=`./findhdr signal.h` ;;
11907 esac
11908 xxx=`awk '
11909 $1 ~ /^#define$/ && $2 ~ /^SIG[A-Z0-9]*$/ && $2 !~ /SIGARRAYSIZE/ && $2 !~ /SIGSTKSIZE/ && $2 !~ /SIGSTKSZ/ && $3 !~ /void/ {
11910         print substr($2, 4, 20)
11911 }
11912 $1 == "#" && $2 ~ /^define$/ && $3 ~ /^SIG[A-Z0-9]*$/ && $3 !~ /SIGARRAYSIZE/ && $4 !~ /void/ {
11913         print substr($3, 4, 20)
11914 }' $xxxfiles`
11915 : Append some common names just in case the awk scan failed.
11916 xxx="$xxx ABRT ALRM BUS CHLD CLD CONT DIL EMT FPE HUP ILL INT IO IOT KILL"
11917 xxx="$xxx LOST PHONE PIPE POLL PROF PWR QUIT SEGV STKFLT STOP SYS TERM TRAP"
11918 xxx="$xxx TSTP TTIN TTOU URG USR1 USR2 USR3 USR4 VTALRM"
11919 xxx="$xxx WINCH WIND WINDOW XCPU XFSZ"
11920 : generate a few handy files for later
11921 $cat > signal.c <<'EOCP'
11922 #include <sys/types.h>
11923 #include <signal.h>
11924 #include <stdio.h>
11925 int main() {
11926
11927 /* Strange style to avoid deeply-nested #if/#else/#endif */
11928 #ifndef NSIG
11929 #  ifdef _NSIG
11930 #    define NSIG (_NSIG)
11931 #  endif
11932 #endif
11933
11934 #ifndef NSIG
11935 #  ifdef SIGMAX
11936 #    define NSIG (SIGMAX+1)
11937 #  endif
11938 #endif
11939
11940 #ifndef NSIG
11941 #  ifdef SIG_MAX
11942 #    define NSIG (SIG_MAX+1)
11943 #  endif
11944 #endif
11945
11946 #ifndef NSIG
11947 #  ifdef MAXSIG
11948 #    define NSIG (MAXSIG+1)
11949 #  endif
11950 #endif
11951
11952 #ifndef NSIG
11953 #  ifdef MAX_SIG
11954 #    define NSIG (MAX_SIG+1)
11955 #  endif
11956 #endif
11957
11958 #ifndef NSIG
11959 #  ifdef SIGARRAYSIZE
11960 #    define NSIG (SIGARRAYSIZE+1) /* Not sure of the +1 */
11961 #  endif
11962 #endif
11963
11964 #ifndef NSIG
11965 #  ifdef _sys_nsig
11966 #    define NSIG (_sys_nsig) /* Solaris 2.5 */
11967 #  endif
11968 #endif
11969
11970 /* Default to some arbitrary number that's big enough to get most
11971    of the common signals.
11972 */
11973 #ifndef NSIG
11974 #    define NSIG 50
11975 #endif
11976
11977 printf("NSIG %d\n", NSIG);
11978
11979 #ifndef JUST_NSIG
11980
11981 EOCP
11982
11983 echo $xxx | $tr ' ' $trnl | $sort | $uniq | $awk '
11984 {
11985         printf "#ifdef SIG"; printf $1; printf "\n"
11986         printf "printf(\""; printf $1; printf " %%d\\n\",SIG";
11987         printf $1; printf ");\n"
11988         printf "#endif\n"
11989 }
11990 END {
11991         printf "#endif /* JUST_NSIG */\n";
11992         printf "}\n";
11993 }
11994 ' >>signal.c
11995 $cat >signal.awk <<'EOP'
11996 BEGIN { ndups = 0 }
11997 $1 ~ /^NSIG$/ { nsig = $2 }
11998 ($1 !~ /^NSIG$/) && (NF == 2) {
11999     if ($2 > maxsig) { maxsig = $2 }
12000     if (sig_name[$2]) {
12001         dup_name[ndups] = $1
12002         dup_num[ndups] = $2
12003         ndups++ 
12004     }
12005     else {
12006         sig_name[$2] = $1
12007         sig_num[$2] = $2
12008     }
12009 }
12010 END { 
12011     if (nsig == 0) {
12012         nsig = maxsig + 1
12013     }
12014     printf("NSIG %d\n", nsig);
12015     for (n = 1; n < nsig; n++) {
12016         if (sig_name[n]) {
12017             printf("%s %d\n", sig_name[n], sig_num[n])
12018         }
12019         else {
12020             printf("NUM%d %d\n", n, n) 
12021         }
12022     }
12023     for (n = 0; n < ndups; n++) {
12024         printf("%s %d\n", dup_name[n], dup_num[n])
12025     }
12026 }
12027 EOP
12028 $cat >signal_cmd <<EOS
12029 $startsh
12030 if $test -s signal.lst; then
12031     echo "Using your existing signal.lst file"
12032         exit 0
12033 fi
12034 xxx="$xxx"
12035 EOS
12036 $cat >>signal_cmd <<'EOS'
12037
12038 set signal
12039 if eval $compile_ok; then
12040         ./signal$_exe | $sort -n +1 | $uniq | $awk -f signal.awk >signal.lst
12041 else
12042         echo "(I can't seem be able to compile the whole test program)" >&4
12043         echo "(I'll try it in little pieces.)" >&4
12044         set signal -DJUST_NSIG
12045         if eval $compile_ok; then
12046                 ./signal$_exe > signal.nsg
12047                 $cat signal.nsg
12048         else
12049                 echo "I can't seem to figure out how many signals you have." >&4
12050                 echo "Guessing 50." >&4
12051                 echo 'NSIG 50' > signal.nsg
12052         fi
12053         : Now look at all the signal names, one at a time.
12054         for xx in `echo $xxx | $tr ' ' $trnl | $sort | $uniq`; do
12055                 $cat > signal.c <<EOCP
12056 #include <sys/types.h>
12057 #include <signal.h>
12058 #include <stdio.h>
12059 int main() {
12060 printf("$xx %d\n", SIG${xx});
12061 return 0;
12062 }
12063 EOCP
12064                 set signal
12065                 if eval $compile; then
12066                         echo "SIG${xx} found."
12067                         ./signal$_exe  >> signal.ls1
12068                 else
12069                         echo "SIG${xx} NOT found."
12070                 fi
12071         done
12072         if $test -s signal.ls1; then
12073                 $cat signal.nsg signal.ls1 |
12074                         $sort -n +1 | $uniq | $awk -f signal.awk >signal.lst
12075         fi
12076
12077 fi
12078 if $test -s signal.lst; then
12079         :
12080 else
12081         echo "(AAK! I can't compile the test programs -- Guessing)" >&4
12082         echo 'kill -l' >signal
12083         set X `csh -f <signal`
12084         $rm -f signal
12085         shift
12086         case $# in
12087         0) set HUP INT QUIT ILL TRAP ABRT EMT FPE KILL BUS SEGV SYS PIPE ALRM TERM;;
12088         esac
12089         echo $@ | $tr ' ' $trnl | \
12090             $awk '{ printf "%s %d\n", $1, ++s; }
12091                   END { printf "NSIG %d\n", ++s }' >signal.lst
12092 fi
12093 $rm -f signal.c signal$_exe signal$_o signal.nsg signal.ls1
12094 EOS
12095 chmod a+x signal_cmd
12096 $eunicefix signal_cmd
12097
12098 : generate list of signal names
12099 echo " "
12100 case "$sig_name_init" in
12101 '') doinit=yes ;;
12102 *)  case "$sig_num_init" in
12103     ''|*,*) doinit=yes ;;
12104     esac ;;
12105 esac
12106 case "$doinit" in
12107 yes)
12108         echo "Generating a list of signal names and numbers..." >&4
12109         . ./signal_cmd
12110         sig_count=`$awk '/^NSIG/ { printf "%d", $2 }' signal.lst`
12111         sig_name=`$awk 'BEGIN { printf "ZERO " }
12112                         !/^NSIG/ { printf "%s ", $1 }' signal.lst`
12113         sig_num=`$awk  'BEGIN { printf "0 " }
12114                         !/^NSIG/ { printf "%d ", $2 }' signal.lst`
12115         sig_name_init=`$awk 'BEGIN      { printf "\"ZERO\", " }
12116                              !/^NSIG/   { printf "\"%s\", ", $1 }
12117                              END        { printf "0\n" }' signal.lst`
12118         sig_num_init=`$awk  'BEGIN      { printf "0, " }
12119                              !/^NSIG/   { printf "%d, ", $2}
12120                              END        { printf "0\n"}' signal.lst`
12121         ;;
12122 esac
12123 echo "The following $sig_count signals are available:"
12124 echo " "
12125 echo $sig_name | $awk \
12126 'BEGIN { linelen = 0 }
12127 {
12128         for (i = 1; i <= NF; i++) {
12129                 name = "SIG" $i " "
12130                 linelen = linelen + length(name)
12131                 if (linelen > 70) {
12132                         printf "\n"
12133                         linelen = length(name)
12134                 }
12135                 printf "%s", name
12136         }
12137         printf "\n"
12138 }'
12139 $rm -f signal signal.c signal.awk signal.lst signal_cmd 
12140
12141 : see what type is used for signed size_t
12142 set ssize_t ssizetype int stdio.h sys/types.h
12143 eval $typedef
12144 dflt="$ssizetype"
12145 $cat > ssize.c <<EOM
12146 #include <stdio.h>
12147 #include <sys/types.h>
12148 #define Size_t $sizetype
12149 #define SSize_t $dflt
12150 int main()
12151 {
12152         if (sizeof(Size_t) == sizeof(SSize_t))
12153                 printf("$dflt\n");
12154         else if (sizeof(Size_t) == sizeof(int))
12155                 printf("int\n");
12156         else 
12157                 printf("long\n");
12158         exit(0);
12159 }
12160 EOM
12161 echo " "
12162 set ssize
12163 if eval $compile_ok && ./ssize > /dev/null; then
12164         ssizetype=`./ssize`
12165         echo "I'll be using $ssizetype for functions returning a byte count." >&4
12166 else
12167         $cat >&4 <<EOM
12168 Help! I can't compile and run the ssize_t test program: please enlighten me!
12169 (This is probably a misconfiguration in your system or libraries, and
12170 you really ought to fix it.  Still, I'll try anyway.)
12171
12172 I need a type that is the same size as $sizetype, but is guaranteed to
12173 be signed.  Common values are ssize_t, int and long.
12174
12175 EOM
12176         rp="What signed type is the same size as $sizetype?"
12177         . ./myread
12178         ssizetype="$ans"
12179 fi
12180 $rm -f ssize ssize.*
12181
12182 : see what type of char stdio uses.
12183 echo " "
12184 if $contains 'unsigned.*char.*_ptr;' `./findhdr stdio.h` >/dev/null 2>&1 ; then
12185         echo "Your stdio uses unsigned chars." >&4
12186         stdchar="unsigned char"
12187 else
12188         echo "Your stdio uses signed chars." >&4
12189         stdchar="char"
12190 fi
12191
12192 : see if time exists
12193 echo " "
12194 if test "X$d_time" = X -o X"$timetype" = X; then
12195     if set time val -f d_time; eval $csym; $val; then
12196                 echo 'time() found.' >&4
12197                 val="$define"
12198                 rp="What is the type returned by time() on this system?"
12199                 set time_t timetype long stdio.h sys/types.h
12200                 eval $typedef_ask
12201     else
12202                 echo 'time() not found, hope that will do.' >&4
12203                 val="$undef"
12204                 timetype='int';
12205     fi
12206     set d_time
12207     eval $setvar
12208 fi
12209
12210 : see what type uids are declared as in the kernel
12211 echo " "
12212 echo "Looking for the type for user ids returned by getuid()."
12213 set uid_t uidtype xxx stdio.h sys/types.h
12214 eval $typedef
12215 case "$uidtype" in
12216 xxx)
12217         xxx=`./findhdr sys/user.h`
12218         set `grep '_ruid;' "$xxx" 2>/dev/null` unsigned short
12219         case $1 in
12220         unsigned) dflt="$1 $2" ;;
12221         *) dflt="$1" ;;
12222         esac
12223         ;;
12224 *) dflt="$uidtype";;
12225 esac
12226 case "$uidtype" in
12227 uid_t)  echo "uid_t found." ;;
12228 *)      rp="What is the type for user ids returned by getuid()?"
12229         . ./myread
12230         uidtype="$ans"
12231         ;;
12232 esac
12233
12234 : see if dbm.h is available
12235 : see if dbmclose exists
12236 set dbmclose d_dbmclose
12237 eval $inlibc
12238
12239 case "$d_dbmclose" in
12240 $define)
12241         set dbm.h i_dbm
12242         eval $inhdr
12243         case "$i_dbm" in
12244         $define)
12245                 val="$undef"
12246                 set i_rpcsvcdbm
12247                 eval $setvar
12248                 ;;
12249         *)      set rpcsvc/dbm.h i_rpcsvcdbm
12250                 eval $inhdr
12251                 ;;
12252         esac
12253         ;;
12254 *)      echo "We won't be including <dbm.h>"
12255         val="$undef"
12256         set i_dbm
12257         eval $setvar
12258         val="$undef"
12259         set i_rpcsvcdbm
12260         eval $setvar
12261         ;;
12262 esac
12263
12264 : see if this is a sys/file.h system
12265 val=''
12266 set sys/file.h val
12267 eval $inhdr
12268
12269 : do we need to include sys/file.h ?
12270 case "$val" in
12271 "$define")
12272         echo " "
12273         if $h_sysfile; then
12274                 val="$define"
12275                 echo "We'll be including <sys/file.h>." >&4
12276         else
12277                 val="$undef"
12278                 echo "We won't be including <sys/file.h>." >&4
12279         fi
12280         ;;
12281 *)
12282         h_sysfile=false
12283         ;;
12284 esac
12285 set i_sysfile
12286 eval $setvar
12287
12288 : see if fcntl.h is there
12289 val=''
12290 set fcntl.h val
12291 eval $inhdr
12292
12293 : see if we can include fcntl.h
12294 case "$val" in
12295 "$define")
12296         echo " "
12297         if $h_fcntl; then
12298                 val="$define"
12299                 echo "We'll be including <fcntl.h>." >&4
12300         else
12301                 val="$undef"
12302                 if $h_sysfile; then
12303         echo "We don't need to include <fcntl.h> if we include <sys/file.h>." >&4
12304                 else
12305                         echo "We won't be including <fcntl.h>." >&4
12306                 fi
12307         fi
12308         ;;
12309 *)
12310         h_fcntl=false
12311         val="$undef"
12312         ;;
12313 esac
12314 set i_fcntl
12315 eval $setvar
12316
12317 : see if locale.h is available
12318 set locale.h i_locale
12319 eval $inhdr
12320
12321 : see if mach cthreads are available
12322 if test "X$usethreads" = "X$define"; then
12323         set mach/cthreads.h i_machcthr
12324         eval $inhdr
12325 else
12326         i_machcthr="$undef"
12327 fi
12328
12329
12330
12331 : see if this is a math.h system
12332 set math.h i_math
12333 eval $inhdr
12334
12335 : see if this is a mntent.h system
12336 set mntent.h i_mntent
12337 eval $inhdr
12338
12339 : see if ndbm.h is available
12340 set ndbm.h t_ndbm
12341 eval $inhdr
12342 case "$t_ndbm" in
12343 $define)
12344         : see if dbm_open exists
12345         set dbm_open d_dbm_open
12346         eval $inlibc
12347         case "$d_dbm_open" in
12348         $undef)
12349                 t_ndbm="$undef"
12350                 echo "We won't be including <ndbm.h>"
12351                 ;;
12352         esac
12353         ;;
12354 esac
12355 val="$t_ndbm"
12356 set i_ndbm
12357 eval $setvar
12358
12359 : see if net/errno.h is available
12360 val=''
12361 set net/errno.h val
12362 eval $inhdr
12363
12364 : Unfortunately, it causes problems on some systems.  Arrgh.
12365 case "$val" in
12366 $define)
12367         cat > try.c <<'EOM'
12368 #include <stdio.h>
12369 #include <errno.h>
12370 #include <net/errno.h>
12371 int func()
12372 {
12373         return ENOTSOCK;
12374 }
12375 EOM
12376         if $cc $ccflags -c try.c >/dev/null 2>&1; then
12377                 echo "We'll be including <net/errno.h>." >&4
12378         else
12379                 echo "We won't be including <net/errno.h>." >&4
12380                 val="$undef"
12381         fi
12382         $rm -f try.* try
12383         ;;
12384 esac
12385 set i_neterrno
12386 eval $setvar
12387
12388 : see if netinet/tcp.h is available
12389 set netinet/tcp.h i_netinettcp
12390 eval $inhdr
12391
12392 : see if this is a poll.h system
12393 set poll.h i_poll
12394 eval $inhdr
12395
12396 : get C preprocessor symbols handy
12397 echo " "
12398 $echo $n "Hmm... $c"
12399 echo $al | $tr ' ' $trnl >Cppsym.know
12400 $cat <<EOSS >Cppsym
12401 $startsh
12402 case "\$1" in
12403 -l) list=true
12404         shift
12405         ;;
12406 esac
12407 unknown=''
12408 case "\$list\$#" in
12409 1|2)
12410         for sym do
12411                 if $contains "^\$1$" Cppsym.true >/dev/null 2>&1; then
12412                         exit 0
12413                 elif $contains "^\$1$" Cppsym.know >/dev/null 2>&1; then
12414                         :
12415                 else
12416                         unknown="\$unknown \$sym"
12417                 fi
12418         done
12419         set X \$unknown
12420         shift
12421         ;;
12422 esac
12423 case \$# in
12424 0) exit 1;;
12425 esac
12426 echo \$* | $tr ' ' '$trnl' | $sed -e 's/\(.*\)/\\
12427 #ifdef \1\\
12428 exit 0; _ _ _ _\1\\      \1\\
12429 #endif\\
12430 /' >Cppsym\$\$
12431 echo "exit 1; _ _ _" >>Cppsym\$\$
12432 $cppstdin $cppminus <Cppsym\$\$ | $grep '^exit [01]; _ _'  >Cppsym2\$\$
12433 case "\$list" in
12434 true) $awk 'NF > 5 {print substr(\$6,2,100)}' <Cppsym2\$\$ ;;
12435 *)
12436         sh Cppsym2\$\$
12437         status=\$?
12438         ;;
12439 esac
12440 $rm -f Cppsym\$\$ Cppsym2\$\$
12441 exit \$status
12442 EOSS
12443 chmod +x Cppsym
12444 $eunicefix Cppsym
12445 ./Cppsym -l $al | $sort | $grep -v '^$' >Cppsym.true
12446
12447 : now check the C compiler for additional symbols
12448 postprocess_cc_v=''
12449 case "$osname" in
12450 aix) postprocess_cc_v="|$tr , ' '" ;;
12451 esac
12452 $cat >ccsym <<EOS
12453 $startsh
12454 $cat >tmp.c <<EOF
12455 extern int foo;
12456 EOF
12457 for i in \`$cc -v -c tmp.c 2>&1 $postprocess_cc_v\`
12458 do
12459         case "\$i" in
12460         -D*) echo "\$i" | $sed 's/^-D//';;
12461         -A*) $test "$gccversion" && echo "\$i" | $sed 's/^-A\(.*\)(\(.*\))/\1=\2/';;
12462         esac
12463 done
12464 $rm -f try.c
12465 EOS
12466 postprocess_cc_v=''
12467 chmod +x ccsym
12468 $eunicefix ccsym
12469 ./ccsym > ccsym1.raw
12470 if $test -s ccsym1.raw; then
12471        $sort ccsym1.raw | $uniq >ccsym.raw
12472 else
12473        mv ccsym1.raw ccsym.raw
12474 fi
12475
12476 $awk '/\=/ { print $0; next }
12477         { print $0"=1" }' ccsym.raw >ccsym.list
12478 $awk '{ print $0"=1" }' Cppsym.true >ccsym.true
12479 $comm -13 ccsym.true ccsym.list >ccsym.own
12480 $comm -12 ccsym.true ccsym.list >ccsym.com
12481 $comm -23 ccsym.true ccsym.list >ccsym.cpp
12482 also=''
12483 if $test -z ccsym.raw; then
12484         echo "Your C compiler doesn't seem to define any symbols!" >&4
12485         echo " "
12486         echo "However, your C preprocessor defines the following symbols:"
12487         $cat Cppsym.true
12488         ccsymbols=''
12489         cppsymbols=`$cat Cppsym.true`
12490         cppsymbols=`echo $cppsymbols`
12491         cppccsymbols="$cppsymbols"
12492 else
12493         if $test -s ccsym.com; then
12494                 echo "Your C compiler and pre-processor define these symbols:"
12495                 $sed -e 's/\(.*\)=.*/\1/' ccsym.com
12496                 also='also '
12497                 symbols='ones'
12498                 cppccsymbols=`$cat ccsym.com`
12499                 cppccsymbols=`echo $cppccsymbols`
12500                 $test "$silent" || sleep 1
12501         fi
12502         if $test -s ccsym.cpp; then
12503                 $test "$also" && echo " "
12504                 echo "Your C pre-processor ${also}defines the following symbols:"
12505                 $sed -e 's/\(.*\)=.*/\1/' ccsym.cpp
12506                 also='further '
12507                 cppsymbols=`$cat ccsym.cpp`
12508                 cppsymbols=`echo $cppsymbols`
12509                 $test "$silent" || sleep 1
12510         fi
12511         if $test -s ccsym.own; then
12512                 $test "$also" && echo " "
12513                 echo "Your C compiler ${also}defines the following cpp symbols:"
12514                 $sed -e 's/\(.*\)=1/\1/' ccsym.own
12515                 $sed -e 's/\(.*\)=.*/\1/' ccsym.own | $uniq >>Cppsym.true
12516                 ccsymbols=`$cat ccsym.own`
12517                 ccsymbols=`echo $ccsymbols`
12518                 $test "$silent" || sleep 1
12519         fi
12520 fi
12521 $rm -f ccsym*
12522
12523 : see if this is a termio system
12524 val="$undef"
12525 val2="$undef"
12526 val3="$undef"
12527 if $test `./findhdr termios.h`; then
12528         set tcsetattr i_termios
12529         eval $inlibc
12530         val3="$i_termios"
12531 fi
12532 echo " "
12533 case "$val3" in
12534 "$define") echo "You have POSIX termios.h... good!" >&4;;
12535 *) if ./Cppsym pyr; then
12536                 case "`/bin/universe`" in
12537                 ucb) if $test `./findhdr sgtty.h`; then
12538                                 val2="$define"
12539                                 echo "<sgtty.h> found." >&4
12540                         else
12541                                 echo "System is pyramid with BSD universe."
12542                                 echo "<sgtty.h> not found--you could have problems." >&4
12543                         fi;;
12544                 *) if $test `./findhdr termio.h`; then
12545                                 val="$define"
12546                                 echo "<termio.h> found." >&4
12547                         else
12548                                 echo "System is pyramid with USG universe."
12549                                 echo "<termio.h> not found--you could have problems." >&4
12550                         fi;;
12551                 esac
12552         elif ./usg; then
12553                 if $test `./findhdr termio.h`; then
12554                         echo "<termio.h> found." >&4
12555                         val="$define"
12556                 elif $test `./findhdr sgtty.h`; then
12557                         echo "<sgtty.h> found." >&4
12558                         val2="$define"
12559                 else
12560 echo "Neither <termio.h> nor <sgtty.h> found--you could have problems." >&4
12561                 fi
12562         else
12563                 if $test `./findhdr sgtty.h`; then
12564                         echo "<sgtty.h> found." >&4
12565                         val2="$define"
12566                 elif $test `./findhdr termio.h`; then
12567                         echo "<termio.h> found." >&4
12568                         val="$define"
12569                 else
12570 echo "Neither <sgtty.h> nor <termio.h> found--you could have problems." >&4
12571                 fi
12572         fi;;
12573 esac
12574 set i_termio; eval $setvar
12575 val=$val2; set i_sgtty; eval $setvar
12576 val=$val3; set i_termios; eval $setvar
12577
12578 : see if this is a shadow.h system
12579 set shadow.h i_shadow
12580 eval $inhdr
12581
12582 : see if this is a socks.h system
12583 set socks.h i_socks
12584 eval $inhdr
12585
12586 : see if stdarg is available
12587 echo " "
12588 if $test `./findhdr stdarg.h`; then
12589         echo "<stdarg.h> found." >&4
12590         valstd="$define"
12591 else
12592         echo "<stdarg.h> NOT found." >&4
12593         valstd="$undef"
12594 fi
12595
12596 : see if varags is available
12597 echo " "
12598 if $test `./findhdr varargs.h`; then
12599         echo "<varargs.h> found." >&4
12600 else
12601         echo "<varargs.h> NOT found, but that's ok (I hope)." >&4
12602 fi
12603
12604 : set up the varargs testing programs
12605 $cat > varargs.c <<EOP
12606 #ifdef I_STDARG
12607 #include <stdarg.h>
12608 #endif
12609 #ifdef I_VARARGS
12610 #include <varargs.h>
12611 #endif
12612
12613 #ifdef I_STDARG
12614 int f(char *p, ...)
12615 #else
12616 int f(va_alist)
12617 va_dcl
12618 #endif
12619 {
12620         va_list ap;
12621 #ifndef I_STDARG
12622         char *p;
12623 #endif
12624 #ifdef I_STDARG
12625         va_start(ap,p);
12626 #else
12627         va_start(ap);
12628         p = va_arg(ap, char *);
12629 #endif
12630         va_end(ap);
12631 }
12632 EOP
12633 $cat > varargs <<EOP
12634 $startsh
12635 if $cc -c $ccflags -D\$1 varargs.c >/dev/null 2>&1; then
12636         echo "true"
12637 else
12638         echo "false"
12639 fi
12640 $rm -f varargs$_o
12641 EOP
12642 chmod +x varargs
12643
12644 : now check which varargs header should be included
12645 echo " "
12646 i_varhdr=''
12647 case "$valstd" in
12648 "$define")
12649         if `./varargs I_STDARG`; then
12650                 val='stdarg.h'
12651         elif `./varargs I_VARARGS`; then
12652                 val='varargs.h'
12653         fi
12654         ;;
12655 *)
12656         if `./varargs I_VARARGS`; then
12657                 val='varargs.h'
12658         fi
12659         ;;
12660 esac
12661 case "$val" in
12662 '')
12663 echo "I could not find the definition for va_dcl... You have problems..." >&4
12664         val="$undef"; set i_stdarg; eval $setvar
12665         val="$undef"; set i_varargs; eval $setvar
12666         ;;
12667 *) 
12668         set i_varhdr
12669         eval $setvar
12670         case "$i_varhdr" in
12671         stdarg.h)
12672                 val="$define"; set i_stdarg; eval $setvar
12673                 val="$undef"; set i_varargs; eval $setvar
12674                 ;;
12675         varargs.h)
12676                 val="$undef"; set i_stdarg; eval $setvar
12677                 val="$define"; set i_varargs; eval $setvar
12678                 ;;
12679         esac
12680         echo "We'll include <$i_varhdr> to get va_dcl definition." >&4;;
12681 esac
12682 $rm -f varargs*
12683
12684 : see if stddef is available
12685 set stddef.h i_stddef
12686 eval $inhdr
12687
12688 : see if sys/access.h is available
12689 set sys/access.h i_sysaccess
12690 eval $inhdr
12691
12692 : see if ioctl defs are in sgtty, termio, sys/filio or sys/ioctl
12693 set sys/filio.h i_sysfilio
12694 eval $inhdr
12695 echo " "
12696 if $test `./findhdr sys/ioctl.h`; then
12697         val="$define"
12698         echo '<sys/ioctl.h> found.' >&4
12699 else
12700         val="$undef"
12701         if $test $i_sysfilio = "$define"; then
12702             echo '<sys/ioctl.h> NOT found.' >&4
12703         else
12704                 $test $i_sgtty = "$define" && xxx="sgtty.h"
12705                 $test $i_termio = "$define" && xxx="termio.h"
12706                 $test $i_termios = "$define" && xxx="termios.h"
12707 echo "No <sys/ioctl.h> found, assuming ioctl args are defined in <$xxx>." >&4
12708         fi
12709 fi
12710 set i_sysioctl
12711 eval $setvar
12712
12713 : see if sys/resource.h has to be included
12714 set sys/resource.h i_sysresrc
12715 eval $inhdr
12716
12717 : see if sys/security.h is available
12718 set sys/security.h i_syssecrt
12719 eval $inhdr
12720
12721 : see if this is a sys/statvfs.h system
12722 set sys/statvfs.h i_sysstatvfs
12723 eval $inhdr
12724
12725 : see if this is a sys/un.h system
12726 set sys/un.h i_sysun
12727 eval $inhdr
12728
12729 : see if this is a syswait system
12730 set sys/wait.h i_syswait
12731 eval $inhdr
12732
12733 : see if this is an utime system
12734 set utime.h i_utime
12735 eval $inhdr
12736
12737 : see if this is a values.h system
12738 set values.h i_values
12739 eval $inhdr
12740
12741 : see if this is a vfork system
12742 case "$d_vfork" in
12743 "$define")
12744         set vfork.h i_vfork
12745         eval $inhdr
12746         ;;
12747 *)
12748         i_vfork="$undef"
12749         ;;
12750 esac
12751
12752 : see if gdbm.h is available
12753 set gdbm.h t_gdbm
12754 eval $inhdr
12755 case "$t_gdbm" in
12756 $define)
12757         : see if gdbm_open exists
12758         set gdbm_open d_gdbm_open
12759         eval $inlibc
12760         case "$d_gdbm_open" in
12761         $undef)
12762                 t_gdbm="$undef"
12763                 echo "We won't be including <gdbm.h>"
12764                 ;;
12765         esac
12766         ;;
12767 esac
12768 val="$t_gdbm"
12769 set i_gdbm
12770 eval $setvar
12771
12772 echo " "
12773 echo "Looking for extensions..." >&4
12774 : If we are using the old config.sh, known_extensions may contain
12775 : old or inaccurate or duplicate values.
12776 known_extensions=''
12777 nonxs_extensions=''
12778 : We do not use find because it might not be available.
12779 : We do not just use MANIFEST because the user may have dropped
12780 : some additional extensions into the source tree and expect them
12781 : to be built.
12782
12783 : Function to recursively find available extensions, ignoring DynaLoader
12784 : NOTE: recursion limit of 10 to prevent runaway in case of symlink madness
12785 find_extensions='
12786     for xxx in *; do
12787        case "$xxx" in
12788            DynaLoader|dynaload) ;;
12789            *)
12790            if $test -f $xxx/$xxx.xs; then
12791                known_extensions="$known_extensions $1$xxx";
12792            elif $test -f $xxx/Makefile.PL; then
12793                nonxs_extensions="$nonxs_extensions $1$xxx";
12794            else
12795                if $test -d $xxx -a $# -lt 10; then
12796                    set $1$xxx/ $*;
12797                    cd $xxx;
12798                    eval $find_extensions;
12799                    cd ..;
12800                    shift;
12801                fi;
12802            fi
12803            ;;
12804        esac;
12805     done'
12806 tdir=`pwd`
12807 cd $rsrc/ext
12808 set X
12809 shift
12810 eval $find_extensions
12811 set X $nonxs_extensions
12812 shift
12813 nonxs_extensions="$*"
12814 set X $known_extensions
12815 shift
12816 known_extensions="$*"
12817 cd $tdir
12818
12819 : Now see which are supported on this system.
12820 avail_ext=''
12821 for xxx in $known_extensions ; do
12822         case "$xxx" in
12823         DB_File|db_file)
12824                 case "$i_db" in
12825                 $define) avail_ext="$avail_ext $xxx" ;;
12826                 esac
12827                 ;;
12828         GDBM_File|gdbm_fil)
12829                 case "$i_gdbm" in 
12830                 $define) avail_ext="$avail_ext $xxx" ;;
12831                 esac
12832                 ;;
12833         NDBM_File|ndbm_fil)
12834                 case "$i_ndbm" in
12835                 $define) avail_ext="$avail_ext $xxx" ;;
12836                 esac
12837                 ;;
12838         ODBM_File|odbm_fil) 
12839                 case "${i_dbm}${i_rpcsvcdbm}" in
12840                 *"${define}"*) avail_ext="$avail_ext $xxx" ;;
12841                 esac
12842                 ;;
12843         POSIX|posix)
12844                 case "$useposix" in
12845                 true|define|y) avail_ext="$avail_ext $xxx" ;;
12846                 esac
12847                 ;;
12848         Opcode|opcode)
12849                 case "$useopcode" in
12850                 true|define|y) avail_ext="$avail_ext $xxx" ;;
12851                 esac
12852                 ;;
12853         Socket|socket)
12854                 case "$d_socket" in 
12855                 true|$define|y) avail_ext="$avail_ext $xxx" ;;
12856                 esac
12857                 ;;
12858         Thread|thread)
12859                 case "$usethreads" in 
12860                 true|$define|y) avail_ext="$avail_ext $xxx" ;;
12861                 esac
12862                 ;;
12863         IPC/SysV|ipc/sysv)
12864                 : XXX Do we need a useipcsysv variable here
12865                 case "${d_msg}${d_sem}${d_shm}" in 
12866                 *"${define}"*) avail_ext="$avail_ext $xxx" ;;
12867                 esac
12868                 ;;
12869         *)      avail_ext="$avail_ext $xxx"
12870                 ;;
12871         esac
12872 done
12873
12874 set X $avail_ext
12875 shift
12876 avail_ext="$*"
12877
12878 : Now see which nonxs extensions are supported on this system.
12879 : For now assume all are.
12880 nonxs_ext=''
12881 for xxx in $nonxs_extensions ; do
12882         case "$xxx" in
12883         *)      nonxs_ext="$nonxs_ext $xxx"
12884                 ;;
12885         esac
12886 done
12887
12888 set X $nonxs_ext
12889 shift
12890 nonxs_ext="$*"
12891
12892 case $usedl in
12893 $define)
12894         $cat <<EOM
12895 A number of extensions are supplied with $package.  You may choose to
12896 compile these extensions for dynamic loading (the default), compile
12897 them into the $package executable (static loading), or not include
12898 them at all.  Answer "none" to include no extensions.
12899 Note that DynaLoader is always built and need not be mentioned here.
12900
12901 EOM
12902         case "$dynamic_ext" in
12903         '') dflt="$avail_ext" ;;
12904         *)      dflt="$dynamic_ext"
12905                 # Perhaps we are reusing an old out-of-date config.sh.
12906                 case "$hint" in
12907                 previous)
12908                         if test X"$dynamic_ext" != X"$avail_ext"; then
12909                                 $cat <<EOM
12910 NOTICE:  Your previous config.sh list may be incorrect. 
12911 The extensions now available to you are 
12912         ${avail_ext}
12913 but the default list from your previous config.sh is
12914         ${dynamic_ext} 
12915
12916 EOM
12917                         fi
12918                         ;;
12919                 esac
12920                 ;;
12921         esac
12922         case "$dflt" in
12923         '')     dflt=none;;
12924         esac
12925         rp="What extensions do you wish to load dynamically?"
12926         . ./myread
12927         case "$ans" in
12928         none) dynamic_ext=' ' ;;
12929         *) dynamic_ext="$ans" ;;
12930         esac
12931
12932         case "$static_ext" in
12933         '')
12934                 : Exclude those already listed in dynamic linking
12935                 dflt=''
12936                 for xxx in $avail_ext; do
12937                         case " $dynamic_ext " in
12938                         *" $xxx "*) ;;
12939                         *) dflt="$dflt $xxx" ;;
12940                         esac
12941                 done
12942                 set X $dflt
12943                 shift
12944                 dflt="$*"
12945                 ;;
12946         *)  dflt="$static_ext" 
12947                 ;;
12948         esac
12949
12950         case "$dflt" in
12951         '')     dflt=none;;
12952         esac
12953         rp="What extensions do you wish to load statically?"
12954         . ./myread
12955         case "$ans" in
12956         none) static_ext=' ' ;;
12957         *) static_ext="$ans" ;;
12958         esac
12959         ;;
12960 *)
12961         $cat <<EOM
12962 A number of extensions are supplied with $package.  Answer "none" 
12963 to include no extensions. 
12964 Note that DynaLoader is always built and need not be mentioned here.
12965
12966 EOM
12967         case "$static_ext" in
12968         '') dflt="$avail_ext" ;;
12969         *)      dflt="$static_ext"
12970                 # Perhaps we are reusing an old out-of-date config.sh.
12971                 case "$hint" in
12972                 previous)
12973                         if test X"$static_ext" != X"$avail_ext"; then
12974                                 $cat <<EOM
12975 NOTICE:  Your previous config.sh list may be incorrect. 
12976 The extensions now available to you are 
12977         ${avail_ext}
12978 but the default list from your previous config.sh is
12979         ${static_ext} 
12980
12981 EOM
12982                         fi
12983                         ;;
12984                 esac
12985                 ;;
12986         esac
12987         : Exclude those that are not xs extensions
12988         case "$dflt" in
12989         '')     dflt=none;;
12990         esac
12991         rp="What extensions do you wish to include?"
12992         . ./myread
12993         case "$ans" in
12994         none) static_ext=' ' ;;
12995         *) static_ext="$ans" ;;
12996         esac
12997         ;;
12998 esac
12999
13000 set X $dynamic_ext $static_ext $nonxs_ext
13001 shift
13002 extensions="$*"
13003
13004 : Remove build directory name from cppstdin so it can be used from
13005 : either the present location or the final installed location.
13006 echo " "
13007 : Get out of the UU directory to get correct path name.
13008 cd ..
13009 case "$cppstdin" in
13010 `pwd`/cppstdin)
13011         echo "Stripping down cppstdin path name"
13012         cppstdin=cppstdin
13013         ;;
13014 esac
13015 cd UU
13016
13017 : end of configuration questions
13018 echo " "
13019 echo "End of configuration questions."
13020 echo " "
13021
13022 : back to where it started
13023 if test -d ../UU; then
13024         cd ..
13025 fi
13026
13027 : configuration may be patched via a 'config.over' file
13028 if $test -f config.over; then
13029         echo " "
13030         dflt=y
13031         rp='I see a config.over file.  Do you wish to load it?'
13032         . UU/myread
13033         case "$ans" in
13034         n*) echo "OK, I'll ignore it.";;
13035         *)      . ./config.over
13036                 echo "Configuration override changes have been loaded."
13037                 ;;
13038         esac
13039 fi
13040
13041 : in case they want portability, strip down executable paths
13042 case "$d_portable" in
13043 "$define")
13044         echo " "
13045         echo "Stripping down executable paths..." >&4
13046         for file in $loclist $trylist; do
13047                 if test X$file != Xln -a X$file != Xar -o X$osname != Xos2; then
13048                         eval $file="\$file"
13049                 fi
13050         done
13051         ;;
13052 esac
13053
13054 : create config.sh file
13055 echo " "
13056 echo "Creating config.sh..." >&4
13057 $spitshell <<EOT >config.sh
13058 $startsh
13059 #
13060 # This file was produced by running the Configure script. It holds all the
13061 # definitions figured out by Configure. Should you modify one of these values,
13062 # do not forget to propagate your changes by running "Configure -der". You may
13063 # instead choose to run each of the .SH files by yourself, or "Configure -S".
13064 #
13065
13066 # Package name      : $package
13067 # Source directory  : $src
13068 # Configuration time: $cf_time
13069 # Configured by     : $cf_by
13070 # Target system     : $myuname
13071
13072 Author='$Author'
13073 Date='$Date'
13074 Header='$Header'
13075 Id='$Id'
13076 Locker='$Locker'
13077 Log='$Log'
13078 Mcc='$Mcc'
13079 RCSfile='$RCSfile'
13080 Revision='$Revision'
13081 Source='$Source'
13082 State='$State'
13083 _a='$_a'
13084 _exe='$_exe'
13085 _o='$_o'
13086 afs='$afs'
13087 alignbytes='$alignbytes'
13088 ansi2knr='$ansi2knr'
13089 aphostname='$aphostname'
13090 apiversion='$apiversion'
13091 ar='$ar'
13092 archlib='$archlib'
13093 archlibexp='$archlibexp'
13094 archname64='$archname64'
13095 archname='$archname'
13096 archobjs='$archobjs'
13097 awk='$awk'
13098 baserev='$baserev'
13099 bash='$bash'
13100 bin='$bin'
13101 bincompat5005='$bincompat5005'
13102 binexp='$binexp'
13103 bison='$bison'
13104 byacc='$byacc'
13105 byteorder='$byteorder'
13106 c='$c'
13107 castflags='$castflags'
13108 cat='$cat'
13109 cc='$cc'
13110 cccdlflags='$cccdlflags'
13111 ccdlflags='$ccdlflags'
13112 ccflags='$ccflags'
13113 ccsymbols='$ccsymbols'
13114 cf_by='$cf_by'
13115 cf_email='$cf_email'
13116 cf_time='$cf_time'
13117 chgrp='$chgrp'
13118 chmod='$chmod'
13119 chown='$chown'
13120 clocktype='$clocktype'
13121 comm='$comm'
13122 compress='$compress'
13123 contains='$contains'
13124 cp='$cp'
13125 cpio='$cpio'
13126 cpp='$cpp'
13127 cpp_stuff='$cpp_stuff'
13128 cppccsymbols='$cppccsymbols'
13129 cppflags='$cppflags'
13130 cpplast='$cpplast'
13131 cppminus='$cppminus'
13132 cpprun='$cpprun'
13133 cppstdin='$cppstdin'
13134 cppsymbols='$cppsymbols'
13135 crosscompile='$crosscompile'
13136 cryptlib='$cryptlib'
13137 csh='$csh'
13138 d_Gconvert='$d_Gconvert'
13139 d_access='$d_access'
13140 d_accessx='$d_accessx'
13141 d_alarm='$d_alarm'
13142 d_archlib='$d_archlib'
13143 d_attribut='$d_attribut'
13144 d_bcmp='$d_bcmp'
13145 d_bcopy='$d_bcopy'
13146 d_bincompat5005='$d_bincompat5005'
13147 d_bsd='$d_bsd'
13148 d_bsdgetpgrp='$d_bsdgetpgrp'
13149 d_bsdsetpgrp='$d_bsdsetpgrp'
13150 d_bzero='$d_bzero'
13151 d_casti32='$d_casti32'
13152 d_castneg='$d_castneg'
13153 d_charvspr='$d_charvspr'
13154 d_chown='$d_chown'
13155 d_chroot='$d_chroot'
13156 d_chsize='$d_chsize'
13157 d_closedir='$d_closedir'
13158 d_cmsghdr_s='$d_cmsghdr_s'
13159 d_const='$d_const'
13160 d_crypt='$d_crypt'
13161 d_csh='$d_csh'
13162 d_cuserid='$d_cuserid'
13163 d_dbl_dig='$d_dbl_dig'
13164 d_dbmclose64='$d_dbmclose64'
13165 d_dbminit64='$d_dbminit64'
13166 d_delete64='$d_delete64'
13167 d_difftime='$d_difftime'
13168 d_dirent64_s='$d_dirent64_s'
13169 d_dirnamlen='$d_dirnamlen'
13170 d_dlerror='$d_dlerror'
13171 d_dlopen='$d_dlopen'
13172 d_dlsymun='$d_dlsymun'
13173 d_dosuid='$d_dosuid'
13174 d_drand48proto='$d_drand48proto'
13175 d_dup2='$d_dup2'
13176 d_eaccess='$d_eaccess'
13177 d_endgrent='$d_endgrent'
13178 d_endhent='$d_endhent'
13179 d_endnent='$d_endnent'
13180 d_endpent='$d_endpent'
13181 d_endpwent='$d_endpwent'
13182 d_endsent='$d_endsent'
13183 d_endspent='$d_endspent'
13184 d_eofnblk='$d_eofnblk'
13185 d_eunice='$d_eunice'
13186 d_fchmod='$d_fchmod'
13187 d_fchown='$d_fchown'
13188 d_fcntl='$d_fcntl'
13189 d_fd_macros='$d_fd_macros'
13190 d_fd_set='$d_fd_set'
13191 d_fds_bits='$d_fds_bits'
13192 d_fetch64='$d_fetch64'
13193 d_fgetpos64='$d_fgetpos64'
13194 d_fgetpos='$d_fgetpos'
13195 d_firstkey64='$d_firstkey64'
13196 d_flexfnam='$d_flexfnam'
13197 d_flock64_s='$d_flock64_s'
13198 d_flock='$d_flock'
13199 d_fopen64='$d_fopen64'
13200 d_fork='$d_fork'
13201 d_fpathconf='$d_fpathconf'
13202 d_freopen64='$d_freopen64'
13203 d_fseek64='$d_fseek64'
13204 d_fseeko64='$d_fseeko64'
13205 d_fseeko='$d_fseeko'
13206 d_fsetpos64='$d_fsetpos64'
13207 d_fsetpos='$d_fsetpos'
13208 d_fstat64='$d_fstat64'
13209 d_fstatfs='$d_fstatfs'
13210 d_fstatvfs='$d_fstatvfs'
13211 d_ftell64='$d_ftell64'
13212 d_ftello64='$d_ftello64'
13213 d_ftello='$d_ftello'
13214 d_ftime='$d_ftime'
13215 d_ftruncate64='$d_ftruncate64'
13216 d_getgrent='$d_getgrent'
13217 d_getgrps='$d_getgrps'
13218 d_gethbyaddr='$d_gethbyaddr'
13219 d_gethbyname='$d_gethbyname'
13220 d_gethent='$d_gethent'
13221 d_gethname='$d_gethname'
13222 d_gethostprotos='$d_gethostprotos'
13223 d_getlogin='$d_getlogin'
13224 d_getmntent='$d_getmntent'
13225 d_getnbyaddr='$d_getnbyaddr'
13226 d_getnbyname='$d_getnbyname'
13227 d_getnent='$d_getnent'
13228 d_getnetprotos='$d_getnetprotos'
13229 d_getpbyname='$d_getpbyname'
13230 d_getpbynumber='$d_getpbynumber'
13231 d_getpent='$d_getpent'
13232 d_getpgid='$d_getpgid'
13233 d_getpgrp2='$d_getpgrp2'
13234 d_getpgrp='$d_getpgrp'
13235 d_getppid='$d_getppid'
13236 d_getprior='$d_getprior'
13237 d_getprotoprotos='$d_getprotoprotos'
13238 d_getpwent='$d_getpwent'
13239 d_getsbyname='$d_getsbyname'
13240 d_getsbyport='$d_getsbyport'
13241 d_getsent='$d_getsent'
13242 d_getservprotos='$d_getservprotos'
13243 d_getspent='$d_getspent'
13244 d_getspnam='$d_getspnam'
13245 d_gettimeod='$d_gettimeod'
13246 d_gnulibc='$d_gnulibc'
13247 d_grpasswd='$d_grpasswd'
13248 d_hasmntopt='$d_hasmntopt'
13249 d_htonl='$d_htonl'
13250 d_index='$d_index'
13251 d_inetaton='$d_inetaton'
13252 d_ino64_t='$d_ino64_t'
13253 d_int64t='$d_int64t'
13254 d_iovec_s='$d_iovec_s'
13255 d_isascii='$d_isascii'
13256 d_killpg='$d_killpg'
13257 d_lchown='$d_lchown'
13258 d_link='$d_link'
13259 d_llseek='$d_llseek'
13260 d_locconv='$d_locconv'
13261 d_lockf64='$d_lockf64'
13262 d_lockf='$d_lockf'
13263 d_longdbl='$d_longdbl'
13264 d_longlong='$d_longlong'
13265 d_lseek64='$d_lseek64'
13266 d_lstat64='$d_lstat64'
13267 d_lstat='$d_lstat'
13268 d_madvise='$d_madvise'
13269 d_mblen='$d_mblen'
13270 d_mbstowcs='$d_mbstowcs'
13271 d_mbtowc='$d_mbtowc'
13272 d_memchr='$d_memchr'
13273 d_memcmp='$d_memcmp'
13274 d_memcpy='$d_memcpy'
13275 d_memmove='$d_memmove'
13276 d_memset='$d_memset'
13277 d_mkdir='$d_mkdir'
13278 d_mkfifo='$d_mkfifo'
13279 d_mktime='$d_mktime'
13280 d_mmap='$d_mmap'
13281 d_mprotect='$d_mprotect'
13282 d_msg='$d_msg'
13283 d_msg_ctrunc='$d_msg_ctrunc'
13284 d_msg_dontroute='$d_msg_dontroute'
13285 d_msg_oob='$d_msg_oob'
13286 d_msg_peek='$d_msg_peek'
13287 d_msg_proxy='$d_msg_proxy'
13288 d_msgctl='$d_msgctl'
13289 d_msgget='$d_msgget'
13290 d_msghdr_s='$d_msghdr_s'
13291 d_msgrcv='$d_msgrcv'
13292 d_msgsnd='$d_msgsnd'
13293 d_msync='$d_msync'
13294 d_munmap='$d_munmap'
13295 d_mymalloc='$d_mymalloc'
13296 d_nextkey64='$d_nextkey64'
13297 d_nice='$d_nice'
13298 d_off64_t='$d_off64_t'
13299 d_offset_t='$d_offset_t'
13300 d_old_pthread_create_joinable='$d_old_pthread_create_joinable'
13301 d_oldpthreads='$d_oldpthreads'
13302 d_oldsock='$d_oldsock'
13303 d_open3='$d_open3'
13304 d_open64='$d_open64'
13305 d_opendir64='$d_opendir64'
13306 d_pathconf='$d_pathconf'
13307 d_pause='$d_pause'
13308 d_phostname='$d_phostname'
13309 d_pipe='$d_pipe'
13310 d_poll='$d_poll'
13311 d_portable='$d_portable'
13312 d_pthread_yield='$d_pthread_yield'
13313 d_pwage='$d_pwage'
13314 d_pwchange='$d_pwchange'
13315 d_pwclass='$d_pwclass'
13316 d_pwcomment='$d_pwcomment'
13317 d_pwexpire='$d_pwexpire'
13318 d_pwgecos='$d_pwgecos'
13319 d_pwpasswd='$d_pwpasswd'
13320 d_pwquota='$d_pwquota'
13321 d_readdir64='$d_readdir64'
13322 d_readdir='$d_readdir'
13323 d_readlink='$d_readlink'
13324 d_readv='$d_readv'
13325 d_recvmsg='$d_recvmsg'
13326 d_rename='$d_rename'
13327 d_rewinddir='$d_rewinddir'
13328 d_rmdir='$d_rmdir'
13329 d_safebcpy='$d_safebcpy'
13330 d_safemcpy='$d_safemcpy'
13331 d_sanemcmp='$d_sanemcmp'
13332 d_sched_yield='$d_sched_yield'
13333 d_scm_rights='$d_scm_rights'
13334 d_seekdir64='$d_seekdir64'
13335 d_seekdir='$d_seekdir'
13336 d_select='$d_select'
13337 d_sem='$d_sem'
13338 d_semctl='$d_semctl'
13339 d_semctl_semid_ds='$d_semctl_semid_ds'
13340 d_semctl_semun='$d_semctl_semun'
13341 d_semget='$d_semget'
13342 d_semop='$d_semop'
13343 d_sendmsg='$d_sendmsg'
13344 d_setegid='$d_setegid'
13345 d_seteuid='$d_seteuid'
13346 d_setgrent='$d_setgrent'
13347 d_setgrps='$d_setgrps'
13348 d_sethent='$d_sethent'
13349 d_setlinebuf='$d_setlinebuf'
13350 d_setlocale='$d_setlocale'
13351 d_setnent='$d_setnent'
13352 d_setpent='$d_setpent'
13353 d_setpgid='$d_setpgid'
13354 d_setpgrp2='$d_setpgrp2'
13355 d_setpgrp='$d_setpgrp'
13356 d_setprior='$d_setprior'
13357 d_setpwent='$d_setpwent'
13358 d_setregid='$d_setregid'
13359 d_setresgid='$d_setresgid'
13360 d_setresuid='$d_setresuid'
13361 d_setreuid='$d_setreuid'
13362 d_setrgid='$d_setrgid'
13363 d_setruid='$d_setruid'
13364 d_setsent='$d_setsent'
13365 d_setsid='$d_setsid'
13366 d_setspent='$d_setspent'
13367 d_setvbuf='$d_setvbuf'
13368 d_sfio='$d_sfio'
13369 d_shm='$d_shm'
13370 d_shmat='$d_shmat'
13371 d_shmatprototype='$d_shmatprototype'
13372 d_shmctl='$d_shmctl'
13373 d_shmdt='$d_shmdt'
13374 d_shmget='$d_shmget'
13375 d_sigaction='$d_sigaction'
13376 d_sigsetjmp='$d_sigsetjmp'
13377 d_socket='$d_socket'
13378 d_sockpair='$d_sockpair'
13379 d_stat64='$d_stat64'
13380 d_statblks='$d_statblks'
13381 d_statfs='$d_statfs'
13382 d_statfsflags='$d_statfsflags'
13383 d_statvfs='$d_statvfs'
13384 d_stdio_cnt_lval='$d_stdio_cnt_lval'
13385 d_stdio_ptr_lval='$d_stdio_ptr_lval'
13386 d_stdio_stream_array='$d_stdio_stream_array'
13387 d_stdiobase='$d_stdiobase'
13388 d_stdstdio='$d_stdstdio'
13389 d_store64='$d_store64'
13390 d_strchr='$d_strchr'
13391 d_strcoll='$d_strcoll'
13392 d_strctcpy='$d_strctcpy'
13393 d_strerrm='$d_strerrm'
13394 d_strerror='$d_strerror'
13395 d_strtod='$d_strtod'
13396 d_strtol='$d_strtol'
13397 d_strtoul='$d_strtoul'
13398 d_strxfrm='$d_strxfrm'
13399 d_suidsafe='$d_suidsafe'
13400 d_symlink='$d_symlink'
13401 d_syscall='$d_syscall'
13402 d_sysconf='$d_sysconf'
13403 d_sysernlst='$d_sysernlst'
13404 d_syserrlst='$d_syserrlst'
13405 d_system='$d_system'
13406 d_tcgetpgrp='$d_tcgetpgrp'
13407 d_tcsetpgrp='$d_tcsetpgrp'
13408 d_telldir64='$d_telldir64'
13409 d_telldir='$d_telldir'
13410 d_telldirproto='$d_telldirproto'
13411 d_time='$d_time'
13412 d_times='$d_times'
13413 d_tmpfile64='$d_tmpfile64'
13414 d_truncate64='$d_truncate64'
13415 d_truncate='$d_truncate'
13416 d_tzname='$d_tzname'
13417 d_umask='$d_umask'
13418 d_uname='$d_uname'
13419 d_union_semun='$d_union_semun'
13420 d_vendorlib='$d_vendorlib'
13421 d_vfork='$d_vfork'
13422 d_void_closedir='$d_void_closedir'
13423 d_voidsig='$d_voidsig'
13424 d_voidtty='$d_voidtty'
13425 d_volatile='$d_volatile'
13426 d_vprintf='$d_vprintf'
13427 d_wait4='$d_wait4'
13428 d_waitpid='$d_waitpid'
13429 d_wcstombs='$d_wcstombs'
13430 d_wctomb='$d_wctomb'
13431 d_writev='$d_writev'
13432 d_xenix='$d_xenix'
13433 date='$date'
13434 db_hashtype='$db_hashtype'
13435 db_prefixtype='$db_prefixtype'
13436 defvoidused='$defvoidused'
13437 direntrytype='$direntrytype'
13438 dlext='$dlext'
13439 dlsrc='$dlsrc'
13440 doublesize='$doublesize'
13441 drand01='$drand01'
13442 dynamic_ext='$dynamic_ext'
13443 eagain='$eagain'
13444 ebcdic='$ebcdic'
13445 echo='$echo'
13446 egrep='$egrep'
13447 emacs='$emacs'
13448 eunicefix='$eunicefix'
13449 exe_ext='$exe_ext'
13450 expr='$expr'
13451 extensions='$extensions'
13452 fflushNULL='$fflushNULL'
13453 fflushall='$fflushall'
13454 find='$find'
13455 firstmakefile='$firstmakefile'
13456 flex='$flex'
13457 fpostype='$fpostype'
13458 freetype='$freetype'
13459 full_ar='$full_ar'
13460 full_csh='$full_csh'
13461 full_sed='$full_sed'
13462 gccversion='$gccversion'
13463 gidtype='$gidtype'
13464 glibpth='$glibpth'
13465 grep='$grep'
13466 groupcat='$groupcat'
13467 groupstype='$groupstype'
13468 gzip='$gzip'
13469 h_fcntl='$h_fcntl'
13470 h_sysfile='$h_sysfile'
13471 hint='$hint'
13472 hostcat='$hostcat'
13473 huge='$huge'
13474 i_arpainet='$i_arpainet'
13475 i_bsdioctl='$i_bsdioctl'
13476 i_db='$i_db'
13477 i_dbm='$i_dbm'
13478 i_dirent='$i_dirent'
13479 i_dld='$i_dld'
13480 i_dlfcn='$i_dlfcn'
13481 i_fcntl='$i_fcntl'
13482 i_float='$i_float'
13483 i_gdbm='$i_gdbm'
13484 i_grp='$i_grp'
13485 i_inttypes='$i_inttypes'
13486 i_limits='$i_limits'
13487 i_locale='$i_locale'
13488 i_machcthr='$i_machcthr'
13489 i_malloc='$i_malloc'
13490 i_math='$i_math'
13491 i_memory='$i_memory'
13492 i_mntent='$i_mntent'
13493 i_ndbm='$i_ndbm'
13494 i_netdb='$i_netdb'
13495 i_neterrno='$i_neterrno'
13496 i_netinettcp='$i_netinettcp'
13497 i_niin='$i_niin'
13498 i_poll='$i_poll'
13499 i_pthread='$i_pthread'
13500 i_pwd='$i_pwd'
13501 i_rpcsvcdbm='$i_rpcsvcdbm'
13502 i_sfio='$i_sfio'
13503 i_sgtty='$i_sgtty'
13504 i_shadow='$i_shadow'
13505 i_socks='$i_socks'
13506 i_stdarg='$i_stdarg'
13507 i_stddef='$i_stddef'
13508 i_stdlib='$i_stdlib'
13509 i_string='$i_string'
13510 i_sysaccess='$i_sysaccess'
13511 i_sysdir='$i_sysdir'
13512 i_sysfile='$i_sysfile'
13513 i_sysfilio='$i_sysfilio'
13514 i_sysin='$i_sysin'
13515 i_sysioctl='$i_sysioctl'
13516 i_sysmman='$i_sysmman'
13517 i_sysmount='$i_sysmount'
13518 i_sysndir='$i_sysndir'
13519 i_sysparam='$i_sysparam'
13520 i_sysresrc='$i_sysresrc'
13521 i_syssecrt='$i_syssecrt'
13522 i_sysselct='$i_sysselct'
13523 i_syssockio='$i_syssockio'
13524 i_sysstat='$i_sysstat'
13525 i_sysstatvfs='$i_sysstatvfs'
13526 i_systime='$i_systime'
13527 i_systimek='$i_systimek'
13528 i_systimes='$i_systimes'
13529 i_systypes='$i_systypes'
13530 i_sysuio='$i_sysuio'
13531 i_sysun='$i_sysun'
13532 i_syswait='$i_syswait'
13533 i_termio='$i_termio'
13534 i_termios='$i_termios'
13535 i_time='$i_time'
13536 i_unistd='$i_unistd'
13537 i_utime='$i_utime'
13538 i_values='$i_values'
13539 i_varargs='$i_varargs'
13540 i_varhdr='$i_varhdr'
13541 i_vfork='$i_vfork'
13542 ignore_versioned_solibs='$ignore_versioned_solibs'
13543 incpath='$incpath'
13544 inews='$inews'
13545 installarchlib='$installarchlib'
13546 installbin='$installbin'
13547 installman1dir='$installman1dir'
13548 installman3dir='$installman3dir'
13549 installprefix='$installprefix'
13550 installprefixexp='$installprefixexp'
13551 installprivlib='$installprivlib'
13552 installscript='$installscript'
13553 installsitearch='$installsitearch'
13554 installsitelib='$installsitelib'
13555 installstyle='$installstyle'
13556 installusrbinperl='$installusrbinperl'
13557 installvendorlib='$installvendorlib'
13558 intsize='$intsize'
13559 known_extensions='$known_extensions'
13560 ksh='$ksh'
13561 large='$large'
13562 ld='$ld'
13563 lddlflags='$lddlflags'
13564 ldflags='$ldflags'
13565 ldlibpthname='$ldlibpthname'
13566 less='$less'
13567 lib_ext='$lib_ext'
13568 libc='$libc'
13569 libperl='$libperl'
13570 libpth='$libpth'
13571 libs='$libs'
13572 libswanted='$libswanted'
13573 line='$line'
13574 lint='$lint'
13575 lkflags='$lkflags'
13576 ln='$ln'
13577 lns='$lns'
13578 locincpth='$locincpth'
13579 loclibpth='$loclibpth'
13580 longdblsize='$longdblsize'
13581 longlongsize='$longlongsize'
13582 longsize='$longsize'
13583 lp='$lp'
13584 lpr='$lpr'
13585 ls='$ls'
13586 lseeksize='$lseeksize'
13587 lseektype='$lseektype'
13588 mail='$mail'
13589 mailx='$mailx'
13590 make='$make'
13591 make_set_make='$make_set_make'
13592 mallocobj='$mallocobj'
13593 mallocsrc='$mallocsrc'
13594 malloctype='$malloctype'
13595 man1dir='$man1dir'
13596 man1direxp='$man1direxp'
13597 man1ext='$man1ext'
13598 man3dir='$man3dir'
13599 man3direxp='$man3direxp'
13600 man3ext='$man3ext'
13601 medium='$medium'
13602 mips='$mips'
13603 mips_type='$mips_type'
13604 mkdir='$mkdir'
13605 mmaptype='$mmaptype'
13606 models='$models'
13607 modetype='$modetype'
13608 more='$more'
13609 multiarch='$multiarch'
13610 mv='$mv'
13611 myarchname='$myarchname'
13612 mydomain='$mydomain'
13613 myhostname='$myhostname'
13614 myuname='$myuname'
13615 n='$n'
13616 netdb_hlen_type='$netdb_hlen_type'
13617 netdb_host_type='$netdb_host_type'
13618 netdb_name_type='$netdb_name_type'
13619 netdb_net_type='$netdb_net_type'
13620 nm='$nm'
13621 nm_opt='$nm_opt'
13622 nm_so_opt='$nm_so_opt'
13623 nonxs_ext='$nonxs_ext'
13624 nroff='$nroff'
13625 o_nonblock='$o_nonblock'
13626 obj_ext='$obj_ext'
13627 old_pthread_create_joinable='$old_pthread_create_joinable'
13628 optimize='$optimize'
13629 orderlib='$orderlib'
13630 osname='$osname'
13631 osvers='$osvers'
13632 package='$package'
13633 pager='$pager'
13634 passcat='$passcat'
13635 patchlevel='$patchlevel'
13636 path_sep='$path_sep'
13637 perl='$perl'
13638 perladmin='$perladmin'
13639 perlpath='$perlpath'
13640 pg='$pg'
13641 phostname='$phostname'
13642 pidtype='$pidtype'
13643 plibpth='$plibpth'
13644 pmake='$pmake'
13645 pr='$pr'
13646 prefix='$prefix'
13647 prefixexp='$prefixexp'
13648 privlib='$privlib'
13649 privlibexp='$privlibexp'
13650 prototype='$prototype'
13651 ptrsize='$ptrsize'
13652 randbits='$randbits'
13653 randfunc='$randfunc'
13654 randseedtype='$randseedtype'
13655 ranlib='$ranlib'
13656 rd_nodata='$rd_nodata'
13657 rm='$rm'
13658 rmail='$rmail'
13659 runnm='$runnm'
13660 sched_yield='$sched_yield'
13661 scriptdir='$scriptdir'
13662 scriptdirexp='$scriptdirexp'
13663 sed='$sed'
13664 seedfunc='$seedfunc'
13665 selectminbits='$selectminbits'
13666 selecttype='$selecttype'
13667 sendmail='$sendmail'
13668 sh='$sh'
13669 shar='$shar'
13670 sharpbang='$sharpbang'
13671 shmattype='$shmattype'
13672 shortsize='$shortsize'
13673 shrpenv='$shrpenv'
13674 shsharp='$shsharp'
13675 sig_count='$sig_count'
13676 sig_name='$sig_name'
13677 sig_name_init='$sig_name_init'
13678 sig_num='$sig_num'
13679 sig_num_init='$sig_num_init'
13680 signal_t='$signal_t'
13681 sitearch='$sitearch'
13682 sitearchexp='$sitearchexp'
13683 sitelib='$sitelib'
13684 sitelibexp='$sitelibexp'
13685 siteprefix='$siteprefix'
13686 siteprefixexp='$siteprefixexp'
13687 sizetype='$sizetype'
13688 sleep='$sleep'
13689 smail='$smail'
13690 small='$small'
13691 so='$so'
13692 sockethdr='$sockethdr'
13693 socketlib='$socketlib'
13694 sort='$sort'
13695 spackage='$spackage'
13696 spitshell='$spitshell'
13697 split='$split'
13698 src='$src'
13699 ssizetype='$ssizetype'
13700 startperl='$startperl'
13701 startsh='$startsh'
13702 static_ext='$static_ext'
13703 stdchar='$stdchar'
13704 stdio_base='$stdio_base'
13705 stdio_bufsiz='$stdio_bufsiz'
13706 stdio_cnt='$stdio_cnt'
13707 stdio_filbuf='$stdio_filbuf'
13708 stdio_ptr='$stdio_ptr'
13709 stdio_stream_array='$stdio_stream_array'
13710 strings='$strings'
13711 submit='$submit'
13712 subversion='$subversion'
13713 sysman='$sysman'
13714 tail='$tail'
13715 tar='$tar'
13716 tbl='$tbl'
13717 tee='$tee'
13718 test='$test'
13719 timeincl='$timeincl'
13720 timetype='$timetype'
13721 touch='$touch'
13722 tr='$tr'
13723 trnl='$trnl'
13724 troff='$troff'
13725 uidtype='$uidtype'
13726 uname='$uname'
13727 uniq='$uniq'
13728 use64bits='$use64bits'
13729 usedl='$usedl'
13730 usemultiplicity='$usemultiplicity'
13731 usemymalloc='$usemymalloc'
13732 usenm='$usenm'
13733 useopcode='$useopcode'
13734 useperlio='$useperlio'
13735 useposix='$useposix'
13736 usesfio='$usesfio'
13737 useshrplib='$useshrplib'
13738 usesocks='$usesocks'
13739 usethreads='$usethreads'
13740 usevendorprefix='$usevendorprefix'
13741 usevfork='$usevfork'
13742 usrinc='$usrinc'
13743 uuname='$uuname'
13744 vendorlib='$vendorlib'
13745 vendorlibexp='$vendorlibexp'
13746 vendorprefix='$vendorprefix'
13747 vendorprefixexp='$vendorprefixexp'
13748 version='$version'
13749 vi='$vi'
13750 voidflags='$voidflags'
13751 xlibpth='$xlibpth'
13752 zcat='$zcat'
13753 zip='$zip'
13754 EOT
13755
13756 : Add in command line options if available
13757 $test -f UU/cmdline.opt && $cat UU/cmdline.opt >> config.sh
13758
13759 : add special variables
13760 $test -f $src/patchlevel.h && \
13761 awk '/^#define[         ]+PERL_/ {printf "%s=%s\n",$2,$3}' $src/patchlevel.h >>config.sh
13762 echo "CONFIGDOTSH=true" >>config.sh
13763
13764 : propagate old symbols
13765 if $test -f UU/config.sh; then
13766         <UU/config.sh sort | uniq >UU/oldconfig.sh
13767         sed -n 's/^\([a-zA-Z_0-9]*\)=.*/\1/p' config.sh config.sh UU/oldconfig.sh |\
13768         sort | uniq -u >UU/oldsyms
13769         set X `cat UU/oldsyms`
13770         shift
13771         case $# in
13772         0) ;;
13773         *)
13774                 cat <<EOM
13775 Hmm...You had some extra variables I don't know about...I'll try to keep 'em...
13776 EOM
13777                 echo "# Variables propagated from previous config.sh file." >>config.sh
13778                 for sym in `cat UU/oldsyms`; do
13779                         echo "    Propagating $hint variable "'$'"$sym..."
13780                         eval 'tmp="$'"${sym}"'"'
13781                         echo "$tmp" | \
13782                                 sed -e "s/'/'\"'\"'/g" -e "s/^/$sym='/" -e "s/$/'/" >>config.sh
13783                 done
13784                 ;;
13785         esac
13786 fi
13787
13788 : Finish up by extracting the .SH files
13789 case "$alldone" in
13790 exit)
13791         $rm -rf UU
13792         echo "Done."
13793         exit 0
13794         ;;
13795 cont)
13796         ;;
13797 '')
13798         dflt=''
13799         nostick=true
13800         $cat <<EOM
13801
13802 If you'd like to make any changes to the config.sh file before I begin
13803 to configure things, do it as a shell escape now (e.g. !vi config.sh).
13804
13805 EOM
13806         rp="Press return or use a shell escape to edit config.sh:"
13807         . UU/myread
13808         nostick=''
13809         case "$ans" in
13810         '') ;;
13811         *) : in case they cannot read
13812                 sh 1>&4 -c "$ans";;
13813         esac
13814         ;;
13815 esac
13816
13817 : if this fails, just run all the .SH files by hand
13818 . ./config.sh
13819
13820 echo " "
13821 exec 1>&4
13822 . ./UU/extract
13823
13824 if $contains '^depend:' [Mm]akefile >/dev/null 2>&1; then
13825         dflt=y
13826         case "$silent" in
13827         true) ;;
13828         *)
13829                 $cat <<EOM
13830
13831 Now you need to generate make dependencies by running "$make depend".
13832 You might prefer to run it in background: "$make depend > makedepend.out &"
13833 It can take a while, so you might not want to run it right now.
13834
13835 EOM
13836                 ;;
13837         esac
13838         rp="Run $make depend now?"
13839         . UU/myread
13840         case "$ans" in
13841         y*)
13842                 $make depend && echo "Now you must run a $make."
13843                 ;;
13844         *)
13845                 echo "You must run '$make depend' then '$make'."
13846                 ;;
13847         esac
13848 elif test -f [Mm]akefile; then
13849         echo " "
13850         echo "Now you must run a $make."
13851 else
13852         echo "Done."
13853 fi
13854
13855 if $test -f Policy.sh; then
13856     $cat <<EOM
13857
13858 If you compile $package on a different machine or from a different object
13859 directory, copy the Policy.sh file from this object directory to the
13860 new one before you run Configure -- this will help you with most of
13861 the policy defaults.
13862
13863 EOM
13864 fi
13865 if $test -f config.msg; then
13866     echo "Hmm.  I also noted the following information while running:"
13867     echo " "
13868     $cat config.msg >&4
13869     $rm -f config.msg
13870 fi
13871 $rm -f kit*isdone ark*isdone
13872 $rm -rf UU
13873
13874 : End of Configure
13875