better notes on 'make' on win32
[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 Sat Jan  9 18:00:39 EET 1999 [metaconfig 3.0 PL70]
24 # (with additional metaconfig patches by jhi@iki.fi)
25
26 cat >/tmp/c1$$ <<EOF
27 ARGGGHHHH!!!!!
28
29 SCO csh still thinks true is false.  Write to SCO today and tell them that next
30 year Configure ought to "rm /bin/csh" unless they fix their blasted shell. :-)
31
32 (Actually, Configure ought to just patch csh in place.  Hmm.  Hmmmmm.  All
33 we'd have to do is go in and swap the && and || tokens, wherever they are.)
34
35 [End of diatribe. We now return you to your regularly scheduled programming...]
36 EOF
37 cat >/tmp/c2$$ <<EOF
38
39 OOPS!  You naughty creature!  You didn't run Configure with sh!
40 I will attempt to remedy the situation by running sh for you...
41 EOF
42
43 true || cat /tmp/c1$$ /tmp/c2$$
44 true || exec sh $0 $argv:q
45
46 (exit $?0) || cat /tmp/c2$$
47 (exit $?0) || exec sh $0 $argv:q
48 rm -f /tmp/c1$$ /tmp/c2$$
49
50 : compute my invocation name
51 me=$0
52 case "$0" in
53 */*)
54         me=`echo $0 | sed -e 's!.*/\(.*\)!\1!' 2>/dev/null`
55         test "$me" || me=$0
56         ;;
57 esac
58
59 : Proper separator for the PATH environment variable
60 p_=:
61 : On OS/2 this directory should exist if this is not floppy only system :-]
62 if test -d c:/. ; then
63     if test -n "$OS2_SHELL"; then
64                 p_=\;
65                 PATH=`cmd /c "echo %PATH%" | tr '\\\\' / `
66                 OS2_SHELL=`cmd /c "echo %OS2_SHELL%" | tr '\\\\' / | tr '[A-Z]' '[a-z]'`
67         elif test -n "$DJGPP"; then
68                 p_=\;
69         fi
70 fi
71
72 : Proper PATH setting
73 paths='/bin /usr/bin /usr/local/bin /usr/ucb /usr/local /usr/lbin'
74 paths="$paths /opt/bin /opt/local/bin /opt/local /opt/lbin"
75 paths="$paths /usr/5bin /etc /usr/gnu/bin /usr/new /usr/new/bin /usr/nbin"
76 paths="$paths /opt/gnu/bin /opt/new /opt/new/bin /opt/nbin"
77 paths="$paths /sys5.3/bin /sys5.3/usr/bin /bsd4.3/bin /bsd4.3/usr/ucb"
78 paths="$paths /bsd4.3/usr/bin /usr/bsd /bsd43/bin /usr/ccs/bin"
79 paths="$paths /etc /usr/lib /usr/ucblib /lib /usr/ccs/lib"
80 paths="$paths /sbin /usr/sbin /usr/libexec"
81
82 for p in $paths
83 do
84         case "$p_$PATH$p_" in
85         *$p_$p$p_*) ;;
86         *) test -d $p && PATH=$PATH$p_$p ;;
87         esac
88 done
89
90 PATH=.$p_$PATH
91 export PATH
92
93 : shall we be using ksh?
94 inksh=''
95 needksh=''
96 avoidksh=''
97 newsh=/bin/ksh
98 changesh=''
99 if (PATH=.; alias -x) >/dev/null 2>&1; then
100                 inksh=true
101 fi
102 if test -f /hp-ux -a -f /bin/ksh; then
103         needksh='to avoid sh bug in "here document" expansion'
104 fi
105 if test -d /usr/lpp -a -f /usr/bin/bsh -a -f /usr/bin/uname; then
106         if test X`/usr/bin/uname -v` = X4; then
107                 avoidksh="to avoid AIX 4's /bin/sh"
108                 newsh=/usr/bin/bsh
109         fi
110 fi
111 case "$inksh/$needksh" in
112 /[a-z]*)
113                 ENV=''
114                 changesh=true
115                 reason="$needksh"
116         ;;
117 esac
118 case "$inksh/$avoidksh" in
119 true/[a-z]*)
120         changesh=true
121         reason="$avoidksh"
122         ;;
123 esac
124 case "$inksh/$needksh-$avoidksh-" in
125 true/--)
126                 cat <<EOM
127 (I see you are using the Korn shell.  Some ksh's blow up on $me,
128 mainly on older exotic systems.  If yours does, try the Bourne shell instead.)
129 EOM
130         ;;
131 esac
132 case "$changesh" in
133 true)
134         echo "(Feeding myself to $newsh $reason.)"
135         case "$0" in
136         Configure|*/Configure) exec $newsh $0 "$@";;
137         *) exec $newsh Configure "$@";;
138         esac
139         ;;
140 esac
141
142 : if needed set CDPATH to a harmless value that is not chatty
143 : avoid bash 2.02 problems with empty CDPATH.
144 case "$CDPATH" in
145 '')     ;;
146 *)      case "$SHELL" in
147         *bash*) CDPATH='.' ;;
148         *)              CDPATH='' ;;
149         esac
150         ;;
151 esac
152 : Configure runs within the UU subdirectory
153 test -d UU || mkdir UU
154 cd UU && rm -f ./*
155
156 dynamic_ext=''
157 extensions=''
158 known_extensions=''
159 nonxs_ext=''
160 static_ext=''
161 useopcode=''
162 useposix=''
163 d_bsd=''
164 d_eunice=''
165 d_xenix=''
166 eunicefix=''
167 Mcc=''
168 ar=''
169 awk=''
170 bash=''
171 bison=''
172 byacc=''
173 cat=''
174 chgrp=''
175 chmod=''
176 chown=''
177 comm=''
178 compress=''
179 cp=''
180 cpio=''
181 cpp=''
182 csh=''
183 date=''
184 echo=''
185 egrep=''
186 emacs=''
187 expr=''
188 find=''
189 flex=''
190 grep=''
191 gzip=''
192 inews=''
193 ksh=''
194 less=''
195 line=''
196 lint=''
197 ln=''
198 lp=''
199 lpr=''
200 ls=''
201 mail=''
202 mailx=''
203 make=''
204 mkdir=''
205 more=''
206 mv=''
207 nm=''
208 nroff=''
209 perl=''
210 pg=''
211 pmake=''
212 pr=''
213 rm=''
214 rmail=''
215 sed=''
216 sendmail=''
217 shar=''
218 sleep=''
219 smail=''
220 sort=''
221 submit=''
222 tail=''
223 tar=''
224 tbl=''
225 tee=''
226 test=''
227 touch=''
228 tr=''
229 troff=''
230 uname=''
231 uniq=''
232 uuname=''
233 vi=''
234 zcat=''
235 zip=''
236 full_sed=''
237 libswanted=''
238 hint=''
239 myuname=''
240 osname=''
241 osvers=''
242 Author=''
243 Date=''
244 Header=''
245 Id=''
246 Locker=''
247 Log=''
248 RCSfile=''
249 Revision=''
250 Source=''
251 State=''
252 _a=''
253 _exe=''
254 _o=''
255 archobjs=''
256 exe_ext=''
257 firstmakefile=''
258 lib_ext=''
259 obj_ext=''
260 path_sep=''
261 afs=''
262 alignbytes=''
263 ansi2knr=''
264 archlib=''
265 archlibexp=''
266 d_archlib=''
267 installarchlib=''
268 archname=''
269 myarchname=''
270 baserev=''
271 bin=''
272 binexp=''
273 installbin=''
274 byteorder=''
275 cc=''
276 gccversion=''
277 ccflags=''
278 cppflags=''
279 ldflags=''
280 lkflags=''
281 locincpth=''
282 optimize=''
283 cf_email=''
284 cf_by=''
285 cf_time=''
286 contains=''
287 cpp_stuff=''
288 cpplast=''
289 cppminus=''
290 cpprun=''
291 cppstdin=''
292 d_access=''
293 d_accessx=''
294 d_alarm=''
295 d_attribut=''
296 d_bcmp=''
297 d_bcopy=''
298 d_bzero=''
299 d_casti32=''
300 castflags=''
301 d_castneg=''
302 d_chown=''
303 d_chroot=''
304 d_chsize=''
305 d_closedir=''
306 d_void_closedir=''
307 d_const=''
308 cryptlib=''
309 d_crypt=''
310 d_csh=''
311 full_csh=''
312 d_cuserid=''
313 d_dbl_dig=''
314 d_difftime=''
315 d_dlerror=''
316 d_dlopen=''
317 d_dlsymun=''
318 d_dosuid=''
319 d_suidsafe=''
320 d_drand48proto=''
321 d_dup2=''
322 d_eaccess=''
323 d_endgrent=''
324 d_endhent=''
325 d_endnent=''
326 d_endpent=''
327 d_endpwent=''
328 d_endsent=''
329 d_fchmod=''
330 d_fchown=''
331 d_fcntl=''
332 d_fd_macros=''
333 d_fd_set=''
334 d_fds_bits=''
335 d_fgetpos=''
336 d_flexfnam=''
337 d_flock=''
338 d_fork=''
339 d_fseeko=''
340 d_fsetpos=''
341 d_ftello=''
342 d_ftime=''
343 d_gettimeod=''
344 d_Gconvert=''
345 d_getgrent=''
346 d_getgrps=''
347 d_gethbyaddr=''
348 d_gethbyname=''
349 d_gethent=''
350 aphostname=''
351 d_gethname=''
352 d_phostname=''
353 d_uname=''
354 d_gethostprotos=''
355 d_getlogin=''
356 d_getnbyaddr=''
357 d_getnbyname=''
358 d_getnent=''
359 d_getnetprotos=''
360 d_getpent=''
361 d_getpgid=''
362 d_getpgrp2=''
363 d_bsdgetpgrp=''
364 d_getpgrp=''
365 d_getppid=''
366 d_getprior=''
367 d_getpbyname=''
368 d_getpbynumber=''
369 d_getprotoprotos=''
370 d_getpwent=''
371 d_getsent=''
372 d_getservprotos=''
373 d_getsbyname=''
374 d_getsbyport=''
375 d_gnulibc=''
376 d_htonl=''
377 d_inetaton=''
378 d_isascii=''
379 d_killpg=''
380 d_lchown=''
381 d_link=''
382 d_locconv=''
383 d_lockf=''
384 d_longdbl=''
385 longdblsize=''
386 d_longlong=''
387 longlongsize=''
388 d_lstat=''
389 d_mblen=''
390 d_mbstowcs=''
391 d_mbtowc=''
392 d_memcmp=''
393 d_memcpy=''
394 d_memmove=''
395 d_memset=''
396 d_mkdir=''
397 d_mkfifo=''
398 d_mktime=''
399 d_msg=''
400 d_msgctl=''
401 d_msgget=''
402 d_msgrcv=''
403 d_msgsnd=''
404 d_nice=''
405 d_open3=''
406 d_fpathconf=''
407 d_pathconf=''
408 d_pause=''
409 d_pipe=''
410 d_poll=''
411 d_portable=''
412 d_old_pthread_create_joinable=''
413 old_pthread_create_joinable=''
414 d_pthread_yield=''
415 d_sched_yield=''
416 sched_yield=''
417 d_readdir=''
418 d_rewinddir=''
419 d_seekdir=''
420 d_telldir=''
421 d_readlink=''
422 d_readv=''
423 d_rename=''
424 d_rmdir=''
425 d_safebcpy=''
426 d_safemcpy=''
427 d_sanemcmp=''
428 d_select=''
429 d_sem=''
430 d_semctl=''
431 d_semget=''
432 d_semop=''
433 d_setegid=''
434 d_seteuid=''
435 d_setgrent=''
436 d_setgrps=''
437 d_sethent=''
438 d_setlinebuf=''
439 d_setlocale=''
440 d_setnent=''
441 d_setpent=''
442 d_setpgid=''
443 d_setpgrp2=''
444 d_bsdsetpgrp=''
445 d_setpgrp=''
446 d_setprior=''
447 d_setpwent=''
448 d_setregid=''
449 d_setresgid=''
450 d_setresuid=''
451 d_setreuid=''
452 d_setrgid=''
453 d_setruid=''
454 d_setsent=''
455 d_setsid=''
456 d_setvbuf=''
457 d_sfio=''
458 usesfio=''
459 d_shm=''
460 d_shmat=''
461 d_shmatprototype=''
462 shmattype=''
463 d_shmctl=''
464 d_shmdt=''
465 d_shmget=''
466 d_sigaction=''
467 d_sigsetjmp=''
468 d_cmsghdr_s=''
469 d_msg_ctrunc=''
470 d_msg_dontroute=''
471 d_msg_oob=''
472 d_msg_peek=''
473 d_msg_proxy=''
474 d_msghdr_s=''
475 d_oldsock=''
476 d_recvmsg=''
477 d_scm_rights=''
478 d_sendmsg=''
479 d_socket=''
480 d_sockpair=''
481 sockethdr=''
482 socketlib=''
483 d_statblks=''
484 d_stdio_cnt_lval=''
485 d_stdio_ptr_lval=''
486 d_stdiobase=''
487 d_stdstdio=''
488 stdio_base=''
489 stdio_bufsiz=''
490 stdio_cnt=''
491 stdio_filbuf=''
492 stdio_ptr=''
493 d_index=''
494 d_strchr=''
495 d_strcoll=''
496 d_strctcpy=''
497 d_strerrm=''
498 d_strerror=''
499 d_sysernlst=''
500 d_syserrlst=''
501 d_strtod=''
502 d_strtol=''
503 d_strtoul=''
504 d_strxfrm=''
505 d_symlink=''
506 d_syscall=''
507 d_sysconf=''
508 d_system=''
509 d_tcgetpgrp=''
510 d_tcsetpgrp=''
511 d_time=''
512 timetype=''
513 clocktype=''
514 d_times=''
515 d_truncate=''
516 d_tzname=''
517 d_umask=''
518 d_semctl_semid_ds=''
519 d_semctl_semun=''
520 d_union_semun=''
521 d_vfork=''
522 usevfork=''
523 d_voidsig=''
524 signal_t=''
525 d_volatile=''
526 d_charvspr=''
527 d_vprintf=''
528 d_wait4=''
529 d_waitpid=''
530 d_wcstombs=''
531 d_wctomb=''
532 d_writev=''
533 d_dbmclose64=''
534 d_dbminit64=''
535 d_delete64=''
536 d_fetch64=''
537 d_firstkey64=''
538 d_nextkey64=''
539 d_store64=''
540 dlext=''
541 cccdlflags=''
542 ccdlflags=''
543 dlsrc=''
544 ld=''
545 lddlflags=''
546 usedl=''
547 doublesize=''
548 ebcdic=''
549 fpostype=''
550 gidtype=''
551 groupstype=''
552 h_fcntl=''
553 h_sysfile=''
554 i_arpainet=''
555 db_hashtype=''
556 db_prefixtype=''
557 i_db=''
558 i_dbm=''
559 i_rpcsvcdbm=''
560 d_dirnamlen=''
561 direntrytype=''
562 i_dirent=''
563 i_dld=''
564 i_dlfcn=''
565 i_fcntl=''
566 i_float=''
567 i_gdbm=''
568 d_grpasswd=''
569 i_grp=''
570 d_int64t=''
571 i_inttypes=''
572 i_limits=''
573 i_locale=''
574 i_machcthr=''
575 i_malloc=''
576 i_math=''
577 i_memory=''
578 i_ndbm=''
579 i_netdb=''
580 i_neterrno=''
581 i_niin=''
582 i_sysin=''
583 i_poll=''
584 d_pwage=''
585 d_pwchange=''
586 d_pwclass=''
587 d_pwcomment=''
588 d_pwexpire=''
589 d_pwgecos=''
590 d_pwpasswd=''
591 d_pwquota=''
592 i_pwd=''
593 i_sfio=''
594 i_stddef=''
595 i_stdlib=''
596 i_string=''
597 strings=''
598 i_sysaccess=''
599 i_sysdir=''
600 i_sysfile=''
601 d_voidtty=''
602 i_bsdioctl=''
603 i_sysfilio=''
604 i_sysioctl=''
605 i_syssockio=''
606 i_sysndir=''
607 i_sysparam=''
608 i_sysresrc=''
609 i_syssecrt=''
610 i_sysselct=''
611 i_sysstat=''
612 i_systimes=''
613 i_systypes=''
614 d_iovec_s=''
615 i_sysuio=''
616 i_sysun=''
617 i_syswait=''
618 i_sgtty=''
619 i_termio=''
620 i_termios=''
621 i_systime=''
622 i_systimek=''
623 i_time=''
624 timeincl=''
625 i_unistd=''
626 i_utime=''
627 i_values=''
628 i_stdarg=''
629 i_varargs=''
630 i_varhdr=''
631 i_vfork=''
632 intsize=''
633 longsize=''
634 shortsize=''
635 d_dirent64_s=''
636 d_flock64_s=''
637 d_fstat64=''
638 d_ftruncate64=''
639 d_ino64t=''
640 d_lockf64=''
641 d_lseek64=''
642 d_lstat64=''
643 d_off64t=''
644 d_open64=''
645 d_opendir64=''
646 d_readdir64=''
647 d_seekdir64=''
648 d_stat64=''
649 d_telldir64=''
650 d_truncate64=''
651 libc=''
652 libperl=''
653 shrpenv=''
654 useshrplib=''
655 glibpth=''
656 libpth=''
657 loclibpth=''
658 plibpth=''
659 xlibpth=''
660 ignore_versioned_solibs=''
661 libs=''
662 lns=''
663 lseeksize=''
664 lseektype=''
665 make_set_make=''
666 d_mymalloc=''
667 freetype=''
668 mallocobj=''
669 mallocsrc=''
670 malloctype=''
671 usemymalloc=''
672 installman1dir=''
673 man1dir=''
674 man1direxp=''
675 man1ext=''
676 installman3dir=''
677 man3dir=''
678 man3direxp=''
679 man3ext=''
680 huge=''
681 large=''
682 medium=''
683 models=''
684 small=''
685 split=''
686 modetype=''
687 mydomain=''
688 myhostname=''
689 phostname=''
690 c=''
691 n=''
692 d_eofnblk=''
693 eagain=''
694 o_nonblock=''
695 rd_nodata=''
696 netdb_hlen_type=''
697 netdb_host_type=''
698 netdb_name_type=''
699 netdb_net_type=''
700 groupcat=''
701 hostcat=''
702 passcat=''
703 orderlib=''
704 ranlib=''
705 package=''
706 spackage=''
707 pager=''
708 apiversion=''
709 patchlevel=''
710 subversion=''
711 version=''
712 perladmin=''
713 perlpath=''
714 pidtype=''
715 prefix=''
716 prefixexp=''
717 installprivlib=''
718 privlib=''
719 privlibexp=''
720 prototype=''
721 ptrsize=''
722 drand01=''
723 randbits=''
724 randfunc=''
725 randseedtype=''
726 seedfunc=''
727 installscript=''
728 scriptdir=''
729 scriptdirexp=''
730 selectminbits=''
731 selecttype=''
732 sh=''
733 sig_name=''
734 sig_name_init=''
735 sig_num=''
736 sig_num_init=''
737 installsitearch=''
738 sitearch=''
739 sitearchexp=''
740 installsitelib=''
741 sitelib=''
742 sitelibexp=''
743 sizetype=''
744 so=''
745 sharpbang=''
746 shsharp=''
747 spitshell=''
748 src=''
749 ssizetype=''
750 startperl=''
751 startsh=''
752 stdchar=''
753 d_fgetpos64=''
754 d_fopen64=''
755 d_freopen64=''
756 d_fseek64=''
757 d_fseeko64=''
758 d_fsetpos64=''
759 d_ftell64=''
760 d_ftello64=''
761 d_tmpfile64=''
762 sysman=''
763 trnl=''
764 uidtype=''
765 archname64=''
766 use64bits=''
767 usemultiplicity=''
768 nm_opt=''
769 nm_so_opt=''
770 runnm=''
771 usenm=''
772 useperlio=''
773 d_oldpthreads=''
774 usethreads=''
775 incpath=''
776 mips=''
777 mips_type=''
778 usrinc=''
779 defvoidused=''
780 voidflags=''
781 CONFIG=''
782
783 define='define'
784 undef='undef'
785 smallmach='pdp11 i8086 z8000 i80286 iAPX286'
786 rmlist=''
787
788 : We must find out about Eunice early
789 eunicefix=':'
790 if test -f /etc/unixtovms; then
791         eunicefix=/etc/unixtovms
792 fi
793 if test -f /etc/unixtovms.exe; then
794         eunicefix=/etc/unixtovms.exe
795 fi
796
797 i_whoami=''
798 : change the next line if compiling for Xenix/286 on Xenix/386
799 xlibpth='/usr/lib/386 /lib/386'
800
801 : Possible local library directories to search.
802 loclibpth="/usr/local/lib /opt/local/lib /usr/gnu/lib"
803 loclibpth="$loclibpth /opt/gnu/lib /usr/GNU/lib /opt/GNU/lib"
804
805 : general looking path for locating libraries
806 glibpth="/shlib /usr/shlib /lib/pa1.1 /usr/lib/large"
807 glibpth="$glibpth /lib /usr/lib $xlibpth"
808 glibpth="$glibpth /lib/large /usr/lib/small /lib/small"
809 glibpth="$glibpth /usr/ccs/lib /usr/ucblib /usr/local/lib"
810
811 : Private path used by Configure to find libraries.  Its value
812 : is prepended to libpth. This variable takes care of special
813 : machines, like the mips.  Usually, it should be empty.
814 plibpth=''
815
816 : Possible local include directories to search.
817 : Set locincpth to "" in a hint file to defeat local include searches.
818 locincpth="/usr/local/include /opt/local/include /usr/gnu/include"
819 locincpth="$locincpth /opt/gnu/include /usr/GNU/include /opt/GNU/include"
820 :
821 : no include file wanted by default
822 inclwanted=''
823
824 : list of known cpp symbols, sorted alphabetically
825 al="AMIX BIT_MSF BSD BSD4_3 BSD_NET2 CMU CRAY DGUX DOLPHIN DPX2"
826 al="$al GO32 GOULD_PN HP700 I386 I80960 I960 Lynx M68000 M68K MACH"
827 al="$al MIPSEB MIPSEL MSDOS MTXINU MULTIMAX MVS"
828 al="$al M_COFF M_I186 M_I286 M_I386 M_I8086 M_I86 M_I86SM"
829 al="$al M_SYS3 M_SYS5 M_SYSIII M_SYSV M_UNIX M_XENIX"
830 al="$al NeXT OCS88 OSF1 PARISC PC532 PORTAR POSIX"
831 al="$al PWB R3000 RES RISC6000 RT Sun386i SVR3 SVR4"
832 al="$al SYSTYPE_BSD SYSTYPE_SVR4 SYSTYPE_SYSV Tek4132 Tek4300"
833 al="$al UMAXV USGr4 USGr4_2 UTEK UTS UTek UnicomPBB UnicomPBD Utek"
834 al="$al VMS Xenix286"
835 al="$al _AIX _AIX32 _AIX370 _AIX41 _AM29000 _COFF _CRAY _CX_UX _EPI"
836 al="$al _IBMESA _IBMR2 _M88K _M88KBCS_TARGET _POWER"
837 al="$al _MIPSEB _MIPSEL _M_COFF _M_I86 _M_I86SM _M_SYS3"
838 al="$al _M_SYS5 _M_SYSIII _M_SYSV _M_UNIX _M_XENIX _NLS _PGC_ _R3000"
839 al="$al _SYSTYPE_BSD _SYSTYPE_BSD43 _SYSTYPE_SVR4"
840 al="$al _SYSTYPE_SYSV _SYSV3 _U370 _UNICOS"
841 al="$al __386BSD__ __BIG_ENDIAN __BIG_ENDIAN__ __BSD_4_4__"
842 al="$al __DGUX__ __DPX2__ __H3050R __H3050RX"
843 al="$al __LITTLE_ENDIAN __LITTLE_ENDIAN__ __MACH__"
844 al="$al __MIPSEB __MIPSEB__ __MIPSEL __MIPSEL__"
845 al="$al __Next__ __OSF1__ __PARAGON__ __PGC__ __PWB __STDC__"
846 al="$al __SVR4_2__ __UMAXV__"
847 al="$al ____386BSD____ __alpha __alpha__ __amiga"
848 al="$al __bsd4_2 __bsd4_2__ __bsdi__ __convex__"
849 al="$al __host_mips__"
850 al="$al __hp9000s200 __hp9000s300 __hp9000s400 __hp9000s500"
851 al="$al __hp9000s500 __hp9000s700 __hp9000s800"
852 al="$al __hppa __hpux __hp_osf __i286 __i286__ __i386 __i386__"
853 al="$al __i486 __i486__ __i860 __i860__ __ibmesa __ksr1__ __linux__"
854 al="$al __m68k __m68k__ __m88100__ __m88k __m88k__"
855 al="$al __mc68000 __mc68000__ __mc68020 __mc68020__"
856 al="$al __mc68030 __mc68030__ __mc68040 __mc68040__"
857 al="$al __mc88100 __mc88100__ __mips __mips__"
858 al="$al __motorola__ __osf__ __pa_risc __sparc__ __stdc__"
859 al="$al __sun __sun__ __svr3__ __svr4__ __ultrix __ultrix__"
860 al="$al __unix __unix__ __uxpm__ __uxps__ __vax __vax__"
861 al="$al _host_mips _mips _unix"
862 al="$al a29k aegis aix aixpc alliant alpha am29000 amiga ansi ardent"
863 al="$al apollo ardent att386 att3b"
864 al="$al bsd bsd43 bsd4_2 bsd4_3 bsd4_4 bsdi bull"
865 al="$al cadmus clipper concurrent convex cray ctix"
866 al="$al dmert encore gcos gcx gimpel gould"
867 al="$al hbullx20 hcx host_mips hp200 hp300 hp700 hp800"
868 al="$al hp9000 hp9000s300 hp9000s400 hp9000s500"
869 al="$al hp9000s700 hp9000s800 hp9k8 hppa hpux"
870 al="$al i186 i286 i386 i486 i8086"
871 al="$al i80960 i860 iAPX286 ibm ibm032 ibmrt interdata is68k"
872 al="$al ksr1 linux luna luna88k m68k m88100 m88k"
873 al="$al mc300 mc500 mc68000 mc68010 mc68020 mc68030"
874 al="$al mc68040 mc68060 mc68k mc68k32 mc700"
875 al="$al mc88000 mc88100 merlin mert mips mvs n16"
876 al="$al ncl_el ncl_mr"
877 al="$al news1500 news1700 news1800 news1900 news3700"
878 al="$al news700 news800 news900 ns16000 ns32000"
879 al="$al ns32016 ns32332 ns32k nsc32000 os osf"
880 al="$al parisc pc532 pdp11 plexus posix pyr"
881 al="$al riscix riscos scs sequent sgi sinix sony sony_news"
882 al="$al sonyrisc sparc sparclite spectrum stardent stratos"
883 al="$al sun sun3 sun386 svr4 sysV68 sysV88"
884 al="$al titan tower tower32 tower32_200 tower32_600 tower32_700"
885 al="$al tower32_800 tower32_850 tss u370 u3b u3b2 u3b20 u3b200"
886 al="$al u3b20d u3b5 ultrix unix unixpc unos vax venix vms"
887 al="$al xenix z8000"
888
889 : Trailing extension.  Override this in a hint file, if needed.
890 _exe=''
891 : Extra object files, if any, needed on this platform.
892 archobjs=''
893 groupstype=''
894 : default library list
895 libswanted=''
896 : some systems want to use only the non-versioned libso:s
897 ignore_versioned_solibs=''
898 : full support for void wanted by default
899 defvoidused=15
900
901 : set useposix=false in your hint file to disable the POSIX extension.
902 useposix=true
903 : set useopcode=false in your hint file to disable the Opcode extension.
904 useopcode=true
905 : set usemultiplicity on the Configure command line to enable multiplicity.
906 : set usethreads on the Configure command line to enable threads.
907 : List of libraries we want.
908 : If anyone needs -lnet, put it in a hint file.
909 libswanted='sfio socket inet nsl nm ndbm gdbm dbm db malloc dl'
910 libswanted="$libswanted dld ld sun m c cposix posix ndir dir crypt"
911 libswanted="$libswanted ucb bsd BSD PW x"
912 : We probably want to search /usr/shlib before most other libraries.
913 : This is only used by the lib/ExtUtils/MakeMaker.pm routine extliblist.
914 glibpth=`echo " $glibpth " | sed -e 's! /usr/shlib ! !'`
915 glibpth="/usr/shlib $glibpth"
916 : Do not use vfork unless overridden by a hint file.
917 usevfork=false
918
919 : Find the basic shell for Bourne shell scripts
920 case "$sh" in
921 '')
922         case "$SYSTYPE" in
923         *bsd*|sys5*) xxx="/$SYSTYPE/bin/sh";;
924         *) xxx='/bin/sh';;
925         esac
926         if test -f "$xxx"; then
927                 sh="$xxx"
928         else
929                 : Build up a list and do a single loop so we can 'break' out.
930                 pth=`echo $PATH | sed -e "s/$p_/ /g"`
931                 for xxx in sh bash ksh pdksh ash; do
932                         for p in $pth; do
933                                 try="$try ${p}/${xxx}"
934                         done
935                 done
936                 for xxx in $try; do
937                         if test -f "$xxx"; then
938                                 sh="$xxx";
939                                 break
940                         elif test -f "$xxx.exe"; then
941                                 sh="$xxx";
942                                 break
943                         fi
944                 done
945         fi
946         ;;
947 esac
948
949 case "$sh" in
950 '')     cat <<EOM >&2
951 $me:  Fatal Error:  I can't find a Bourne Shell anywhere.  
952
953 Usually it's in /bin/sh.  How did you even get this far?
954 Please contact me (Jarkko Hietaniemi) at jhi@iki.fi and 
955 we'll try to straighten this all out.
956 EOM
957         exit 1
958         ;;
959 esac
960
961 : see if sh knows # comments
962 if `$sh -c '#' >/dev/null 2>&1`; then
963         shsharp=true
964         spitshell=cat
965         xcat=/bin/cat
966         test -f $xcat || xcat=/usr/bin/cat
967         echo "#!$xcat" >try
968         $eunicefix try
969         chmod +x try
970         ./try > today
971         if test -s today; then
972                 sharpbang='#!'
973         else
974                 echo "#! $xcat" > try
975                 $eunicefix try
976                 chmod +x try
977                 ./try > today
978                 if test -s today; then
979                         sharpbang='#! '
980                 else
981                         sharpbang=': use '
982                 fi
983         fi
984 else
985         echo " "
986         echo "Your $sh doesn't grok # comments--I will strip them later on."
987         shsharp=false
988         cd ..
989         echo "exec grep -v '^[  ]*#'" >spitshell
990         chmod +x spitshell
991         $eunicefix spitshell
992         spitshell=`pwd`/spitshell
993         cd UU
994         echo "I presume that if # doesn't work, #! won't work either!"
995         sharpbang=': use '
996 fi
997 rm -f try today
998
999 : figure out how to guarantee sh startup
1000 case "$startsh" in
1001 '') startsh=${sharpbang}${sh} ;;
1002 *)
1003 esac
1004 cat >try <<EOSS
1005 $startsh
1006 set abc
1007 test "$?abc" != 1
1008 EOSS
1009
1010 chmod +x try
1011 $eunicefix try
1012 if ./try; then
1013         : echo "Yup, it does."
1014 else
1015         echo "Hmm... '$startsh' does not guarantee sh startup..."
1016         echo "You may have to fix up the shell scripts to make sure $sh runs them."
1017 fi
1018 rm -f try
1019
1020
1021 : Save command line options in file UU/cmdline.opt for later use in
1022 : generating config.sh.
1023 cat > cmdline.opt <<EOSH
1024 # Configure command line arguments.
1025 config_arg0='$0'
1026 config_args='$*'
1027 config_argc=$#
1028 EOSH
1029 argn=1
1030 for arg in "$@"; do
1031         cat >>cmdline.opt <<EOSH
1032 config_arg$argn='$arg'
1033 EOSH
1034         argn=`expr $argn + 1`
1035 done
1036
1037 : produce awk script to parse command line options
1038 cat >options.awk <<'EOF'
1039 BEGIN {
1040         optstr = "dD:eEf:hKOrsSU:V";    # getopt-style specification
1041
1042         len = length(optstr);
1043         for (i = 1; i <= len; i++) {
1044                 c = substr(optstr, i, 1);
1045                 if (i < len) a = substr(optstr, i + 1, 1); else a = "";
1046                 if (a == ":") {
1047                         arg[c] = 1;
1048                         i++;
1049                 }
1050                 opt[c] = 1;
1051         }
1052 }
1053 {
1054         expect = 0;
1055         str = $0;
1056         if (substr(str, 1, 1) != "-") {
1057                 printf("'%s'\n", str);
1058                 next;
1059         }
1060         len = length($0);
1061         for (i = 2; i <= len; i++) {
1062                 c = substr(str, i, 1);
1063                 if (!opt[c]) {
1064                         printf("-%s\n", substr(str, i));
1065                         next;
1066                 }
1067                 printf("-%s\n", c);
1068                 if (arg[c]) {
1069                         if (i < len)
1070                                 printf("'%s'\n", substr(str, i + 1));
1071                         else
1072                                 expect = 1;
1073                         next;
1074                 }
1075         }
1076 }
1077 END {
1078         if (expect)
1079                 print "?";
1080 }
1081 EOF
1082
1083 : process the command line options
1084 set X `for arg in "$@"; do echo "X$arg"; done |
1085         sed -e s/X// | awk -f options.awk`
1086 eval "set $*"
1087 shift
1088 rm -f options.awk
1089
1090 : set up default values
1091 fastread=''
1092 reuseval=false
1093 config_sh=''
1094 alldone=''
1095 error=''
1096 silent=''
1097 extractsh=''
1098 override=''
1099 knowitall=''
1100 rm -f optdef.sh
1101 cat >optdef.sh <<EOS
1102 $startsh
1103 EOS
1104
1105
1106 : option parsing
1107 while test $# -gt 0; do
1108         case "$1" in
1109         -d) shift; fastread=yes;;
1110         -e) shift; alldone=cont;;
1111         -f)
1112                 shift
1113                 cd ..
1114                 if test -r "$1"; then
1115                         config_sh="$1"
1116                 else
1117                         echo "$me: cannot read config file $1." >&2
1118                         error=true
1119                 fi
1120                 cd UU
1121                 shift;;
1122         -h) shift; error=true;;
1123         -r) shift; reuseval=true;;
1124         -s) shift; silent=true; realsilent=true;;
1125         -E) shift; alldone=exit;;
1126         -K) shift; knowitall=true;;
1127         -O) shift; override=true;;
1128         -S) shift; silent=true; extractsh=true;;
1129         -D)
1130                 shift
1131                 case "$1" in
1132                 *=)
1133                         echo "$me: use '-U symbol=', not '-D symbol='." >&2
1134                         echo "$me: ignoring -D $1" >&2
1135                         ;;
1136                 *=*) echo "$1" | \
1137                                 sed -e "s/'/'\"'\"'/g" -e "s/=\(.*\)/='\1'/" >> optdef.sh;;
1138                 *) echo "$1='define'" >> optdef.sh;;
1139                 esac
1140                 shift
1141                 ;;
1142         -U)
1143                 shift
1144                 case "$1" in
1145                 *=) echo "$1" >> optdef.sh;;
1146                 *=*)
1147                         echo "$me: use '-D symbol=val', not '-U symbol=val'." >&2
1148                         echo "$me: ignoring -U $1" >&2
1149                         ;;
1150                 *) echo "$1='undef'" >> optdef.sh;;
1151                 esac
1152                 shift
1153                 ;;
1154         -V) echo "$me generated by metaconfig 3.0 PL70." >&2
1155                 exit 0;;
1156         --) break;;
1157         -*) echo "$me: unknown option $1" >&2; shift; error=true;;
1158         *) break;;
1159         esac
1160 done
1161
1162 case "$error" in
1163 true)
1164         cat >&2 <<EOM
1165 Usage: $me [-dehrsEKOSV] [-f config.sh] [-D symbol] [-D symbol=value]
1166                  [-U symbol] [-U symbol=]
1167   -d : use defaults for all answers.
1168   -e : go on without questioning past the production of config.sh.
1169   -f : specify an alternate default configuration file.
1170   -h : print this help message and exit (with an error status).
1171   -r : reuse C symbols value if possible (skips costly nm extraction).
1172   -s : silent mode, only echoes questions and essential information.
1173   -D : define symbol to have some value:
1174          -D symbol         symbol gets the value 'define'
1175          -D symbol=value   symbol gets the value 'value'
1176   -E : stop at the end of questions, after having produced config.sh.
1177   -K : do not use unless you know what you are doing.
1178   -O : let -D and -U override definitions from loaded configuration file.
1179   -S : perform variable substitutions on all .SH files (can mix with -f)
1180   -U : undefine symbol:
1181          -U symbol    symbol gets the value 'undef'
1182          -U symbol=   symbol gets completely empty
1183   -V : print version number and exit (with a zero status).
1184 EOM
1185         exit 1
1186         ;;
1187 esac
1188
1189 : Sanity checks
1190 case "$fastread$alldone" in
1191 yescont|yesexit) ;;
1192 *)
1193         if test ! -t 0; then
1194                 echo "Say 'sh Configure', not 'sh <Configure'"
1195                 exit 1
1196         fi
1197         ;;
1198 esac
1199
1200 exec 4>&1
1201 case "$silent" in
1202 true) exec 1>/dev/null;;
1203 esac
1204
1205 : run the defines and the undefines, if any, but leave the file out there...
1206 touch optdef.sh
1207 . ./optdef.sh
1208
1209 : set package name
1210 package=perl5
1211 first=`echo $package | sed -e 's/^\(.\).*/\1/'`
1212 last=`echo $package | sed -e 's/^.\(.*\)/\1/'`
1213 case "`echo AbyZ | tr '[:lower:]' '[:upper:]' 2>/dev/null`" in
1214 ABYZ) spackage=`echo $first | tr '[:lower:]' '[:upper:]'`$last;;
1215 *) spackage=`echo $first | tr '[a-z]' '[A-Z]'`$last;;
1216 esac
1217
1218 : Some greps do not return status, grrr.
1219 echo "grimblepritz" >grimble
1220 if grep blurfldyick grimble >/dev/null 2>&1 ; then
1221         contains=contains
1222 elif grep grimblepritz grimble >/dev/null 2>&1 ; then
1223         contains=grep
1224 else
1225         contains=contains
1226 fi
1227 rm -f grimble
1228 : the following should work in any shell
1229 case "$contains" in
1230 contains*)
1231         echo " "
1232         echo "AGH!  Grep doesn't return a status.  Attempting remedial action."
1233         cat >contains <<'EOSS'
1234 grep "$1" "$2" >.greptmp && cat .greptmp && test -s .greptmp
1235 EOSS
1236 chmod +x contains
1237 esac
1238
1239 : Find the path to the source tree
1240 case "$src" in
1241 '') case "$0" in
1242     */*) src=`echo $0 | sed -e 's%/[^/][^/]*$%%'`;;
1243     *)   src='.';;
1244     esac;;
1245 esac
1246 case "$src" in
1247 '')     src=/
1248         rsrc=/
1249         ;;
1250 /*) rsrc="$src";;
1251 *) rsrc="../$src";;
1252 esac
1253 if test -f $rsrc/Configure && \
1254         $contains "^package=$package$" $rsrc/Configure >/dev/null 2>&1
1255 then
1256    : found it, so we are ok.
1257 else
1258         rsrc=''
1259         for src in . .. ../.. ../../.. ../../../..; do
1260                 if test -f ../$src/Configure && \
1261                         $contains "^package=$package$" ../$src/Configure >/dev/null 2>&1
1262                 then
1263                         rsrc=../$src
1264                         break
1265                 fi
1266         done
1267 fi
1268 case "$rsrc" in
1269 '')
1270         cat <<EOM >&4
1271
1272 Sorry, I can't seem to locate the source dir for $package.  Please start
1273 Configure with an explicit path -- i.e. /some/path/Configure.
1274
1275 EOM
1276         exit 1
1277         ;;
1278 ../.)   rsrc='..';;
1279 *)
1280         echo " "
1281         echo "Sources for $package found in \"$src\"." >&4
1282         ;;
1283 esac
1284
1285 : script used to extract .SH files with variable substitutions
1286 cat >extract <<'EOS'
1287 CONFIG=true
1288 echo "Doing variable substitutions on .SH files..."
1289 if test -f $src/MANIFEST; then
1290         set x `awk '{print $1}' <$src/MANIFEST | grep '\.SH$'`
1291 else
1292         echo "(Looking for .SH files under the source directory.)"
1293         set x `(cd $src; find . -name "*.SH" -print)`
1294 fi
1295 shift
1296 case $# in
1297 0) set x `(cd $src; echo *.SH)`; shift;;
1298 esac
1299 if test ! -f $src/$1; then
1300         shift
1301 fi
1302 mkdir_p='
1303 name=$1;
1304 create="";
1305 while test $name; do
1306         if test ! -d "$name"; then
1307                 create="$name $create";
1308                 name=`echo $name | sed -e "s|^[^/]*$||"`;
1309                 name=`echo $name | sed -e "s|\(.*\)/.*|\1|"`;
1310         else
1311                 name="";
1312         fi;
1313 done;
1314 for file in $create; do
1315         mkdir $file;
1316 done
1317 '
1318 for file in $*; do
1319         case "$src" in
1320         ".")
1321                 case "$file" in
1322                 */*)
1323                         dir=`expr X$file : 'X\(.*\)/'`
1324                         file=`expr X$file : 'X.*/\(.*\)'`
1325                         (cd $dir && . ./$file)
1326                         ;;
1327                 *)
1328                         . ./$file
1329                         ;;
1330                 esac
1331                 ;;
1332         *)
1333                 case "$file" in
1334                 */*)
1335                         dir=`expr X$file : 'X\(.*\)/'`
1336                         file=`expr X$file : 'X.*/\(.*\)'`
1337                         (set x $dir; shift; eval $mkdir_p)
1338                         sh <$src/$dir/$file
1339                         ;;
1340                 *)
1341                         sh <$src/$file
1342                         ;;
1343                 esac
1344                 ;;
1345         esac
1346 done
1347 if test -f $src/config_h.SH; then
1348         if test ! -f config.h; then
1349         : oops, they left it out of MANIFEST, probably, so do it anyway.
1350         . $src/config_h.SH
1351         fi
1352 fi
1353 EOS
1354
1355 : extract files and exit if asked to do so
1356 case "$extractsh" in
1357 true)
1358         case "$realsilent" in
1359         true) ;;
1360         *) exec 1>&4;;
1361         esac
1362         case "$config_sh" in
1363         '') config_sh='config.sh';;
1364         esac
1365         echo " "
1366         echo "Fetching answers from $config_sh..."
1367         cd ..
1368         . $config_sh
1369         test "$override" && . ./optdef.sh
1370         echo " "
1371         . UU/extract
1372         rm -rf UU
1373         echo "Done."
1374         exit 0
1375         ;;
1376 esac
1377
1378 : Eunice requires " " instead of "", can you believe it
1379 echo " "
1380 : Here we go...
1381 echo "Beginning of configuration questions for $package."
1382
1383 trap 'echo " "; test -d ../UU && rm -rf X $rmlist; exit 1' 1 2 3 15
1384
1385 : first determine how to suppress newline on echo command
1386 echo " "
1387 echo "Checking echo to see how to suppress newlines..."
1388 (echo "hi there\c" ; echo " ") >.echotmp
1389 if $contains c .echotmp >/dev/null 2>&1 ; then
1390         echo "...using -n."
1391         n='-n'
1392         c=''
1393 else
1394         cat <<'EOM'
1395 ...using \c
1396 EOM
1397         n=''
1398         c='\c'
1399 fi
1400 echo $n "The star should be here-->$c"
1401 echo '*'
1402 rm -f .echotmp
1403
1404 : Now test for existence of everything in MANIFEST
1405 echo " "
1406 if test -f $rsrc/MANIFEST; then
1407         echo "First let's make sure your kit is complete.  Checking..." >&4
1408         awk '$1 !~ /PACK[A-Z]+/ {print $1}' $rsrc/MANIFEST | split -50
1409         rm -f missing
1410         tmppwd=`pwd`
1411         for filelist in x??; do
1412                 (cd $rsrc; ls `cat $tmppwd/$filelist` >/dev/null 2>>$tmppwd/missing)
1413         done
1414         if test -s missing; then
1415                 cat missing >&4
1416                 cat >&4 <<'EOM'
1417
1418 THIS PACKAGE SEEMS TO BE INCOMPLETE.
1419
1420 You have the option of continuing the configuration process, despite the
1421 distinct possibility that your kit is damaged, by typing 'y'es.  If you
1422 do, don't blame me if something goes wrong.  I advise you to type 'n'o
1423 and contact the author (jhi@iki.fi).
1424
1425 EOM
1426                 echo $n "Continue? [n] $c" >&4
1427                 read ans
1428                 case "$ans" in
1429                 y*)
1430                         echo "Continuing..." >&4
1431                         rm -f missing
1432                         ;;
1433                 *)
1434                         echo "ABORTING..." >&4
1435                         kill $$
1436                         ;;
1437                 esac
1438         else
1439                 echo "Looks good..."
1440         fi
1441 else
1442         echo "There is no MANIFEST file.  I hope your kit is complete !"
1443 fi
1444 rm -f missing x??
1445
1446 echo " "
1447 : Find the appropriate value for a newline for tr
1448 if test -n "$DJGPP"; then
1449        trnl='\012'
1450 fi
1451 if test X"$trnl" = X; then
1452         case "`echo foo|tr '\n' x 2>/dev/null`" in
1453         foox) trnl='\n' ;;
1454         esac
1455 fi
1456 if test X"$trnl" = X; then
1457         case "`echo foo|tr '\012' x 2>/dev/null`" in
1458         foox) trnl='\012' ;;
1459         esac
1460 fi
1461 if test X"$trnl" = X; then
1462         cat <<EOM >&2
1463
1464 $me: Fatal Error: cannot figure out how to translate newlines with 'tr'.
1465
1466 EOM
1467         exit 1
1468 fi
1469
1470 : compute the number of columns on the terminal for proper question formatting
1471 case "$COLUMNS" in
1472 '') COLUMNS='80';;
1473 esac
1474
1475 : set up the echo used in my read
1476 myecho="case \"\$xxxm\" in
1477 '') echo $n \"\$rp $c\" >&4;;
1478 *) case \"\$rp\" in
1479         '') echo $n \"[\$xxxm] $c\";;
1480         *)
1481                 if test \`echo \"\$rp [\$xxxm]  \" | wc -c\` -ge $COLUMNS; then
1482                         echo \"\$rp\" >&4
1483                         echo $n \"[\$xxxm] $c\" >&4
1484                 else
1485                         echo $n \"\$rp [\$xxxm] $c\" >&4
1486                 fi
1487                 ;;
1488         esac;;
1489 esac"
1490
1491 : now set up to do reads with possible shell escape and default assignment
1492 cat <<EOSC >myread
1493 $startsh
1494 xxxm=\$dflt
1495 $myecho
1496 ans='!'
1497 case "\$fastread" in
1498 yes) case "\$dflt" in
1499         '') ;;
1500         *) ans='';
1501                 case "\$silent-\$rp" in
1502                 true-) ;;
1503                 *) echo " " >&4;;
1504                 esac;;
1505         esac;;
1506 *) case "\$silent" in
1507         true) case "\$rp" in
1508                 '') ans='';;
1509                 esac;;
1510         esac;;
1511 esac
1512 while expr "X\$ans" : "X!" >/dev/null; do
1513         read answ
1514         set x \$xxxm
1515         shift
1516         aok=''; eval "ans=\\"\$answ\\"" && aok=y
1517         case  "\$answ" in
1518         "!")
1519                 sh 1>&4
1520                 echo " "
1521                 $myecho
1522                 ;;
1523         !*)
1524                 set x \`expr "X\$ans" : "X!\(.*\)\$"\`
1525                 shift
1526                 sh 1>&4 -c "\$*"
1527                 echo " "
1528                 $myecho
1529                 ;;
1530         "\$ans")
1531                 case "\$ans" in
1532                 \\&*)
1533                         set x \`expr "X\$ans" : "X&\(.*\)\$"\`
1534                         shift
1535                         case "\$1" in
1536                         -d)
1537                                 fastread=yes
1538                                 echo "(OK, I'll run with -d after this question.)" >&4
1539                                 ;;
1540                         -*)
1541                                 echo "*** Sorry, \$1 not supported yet." >&4
1542                                 ;;
1543                         esac
1544                         $myecho
1545                         ans=!
1546                         ;;
1547                 esac;;
1548         *)
1549                 case "\$aok" in
1550                 y)
1551                         echo "*** Substitution done -- please confirm."
1552                         xxxm="\$ans"
1553                         ans=\`echo $n "\$ans$c" | tr '$trnl' ' '\`
1554                         xxxm="\$ans"
1555                         ans=!
1556                         ;;
1557                 *)
1558                         echo "*** Error -- try again."
1559                         ans=!
1560                         ;;
1561                 esac
1562                 $myecho
1563                 ;;
1564         esac
1565         case "\$ans\$xxxm\$nostick" in
1566         '')
1567                 ans=!
1568                 $myecho
1569                 ;;
1570         esac
1571 done
1572 case "\$ans" in
1573 '') ans="\$xxxm";;
1574 esac
1575 EOSC
1576
1577 : create .config dir to save info across Configure sessions
1578 test -d ../.config || mkdir ../.config
1579 cat >../.config/README <<EOF
1580 This directory created by Configure to save information that should
1581 persist across sessions for $package.
1582
1583 You may safely delete it if you wish.
1584 EOF
1585
1586 : general instructions
1587 needman=true
1588 firsttime=true
1589 user=`(logname) 2>/dev/null`
1590 case "$user" in
1591 '') user=`whoami 2>&1`;;
1592 esac
1593 if $contains "^$user\$" ../.config/instruct >/dev/null 2>&1; then
1594         firsttime=false
1595         echo " "
1596         rp='Would you like to see the instructions?'
1597         dflt=n
1598         . ./myread
1599         case "$ans" in
1600         [yY]*) ;;
1601         *) needman=false;;
1602         esac
1603 fi
1604 if $needman; then
1605         cat <<EOH
1606
1607 This installation shell script will examine your system and ask you questions
1608 to determine how the perl5 package should be installed. If you get
1609 stuck on a question, you may use a ! shell escape to start a subshell or
1610 execute a command.  Many of the questions will have default answers in square
1611 brackets; typing carriage return will give you the default.
1612
1613 On some of the questions which ask for file or directory names you are allowed
1614 to use the ~name construct to specify the login directory belonging to "name",
1615 even if you don't have a shell which knows about that.  Questions where this is
1616 allowed will be marked "(~name ok)".
1617
1618 EOH
1619         rp=''
1620         dflt='Type carriage return to continue'
1621         . ./myread
1622         cat <<'EOH'
1623
1624 The prompter used in this script allows you to use shell variables and
1625 backticks in your answers.  You may use $1, $2, etc...  to refer to the words
1626 in the default answer, as if the default line was a set of arguments given to a
1627 script shell.  This means you may also use $* to repeat the whole default line,
1628 so you do not have to re-type everything to add something to the default.
1629
1630 Everytime there is a substitution, you will have to confirm.  If there is an
1631 error (e.g. an unmatched backtick), the default answer will remain unchanged
1632 and you will be prompted again.
1633
1634 If you are in a hurry, you may run 'Configure -d'.  This will bypass nearly all
1635 the questions and use the computed defaults (or the previous answers if there
1636 was already a config.sh file). Type 'Configure -h' for a list of options.
1637 You may also start interactively and then answer '& -d' at any prompt to turn
1638 on the non-interactive behaviour for the remainder of the execution.
1639
1640 EOH
1641         . ./myread
1642         cat <<EOH
1643
1644 Much effort has been expended to ensure that this shell script will run on any
1645 Unix system.  If despite that it blows up on yours, your best bet is to edit
1646 Configure and run it again.  If you can't run Configure for some reason,
1647 you'll have to generate a config.sh file by hand.  Whatever problems you
1648 have, let me (jhi@iki.fi) know how I blew it.
1649
1650 This installation script affects things in two ways:
1651
1652 1) it may do direct variable substitutions on some of the files included
1653    in this kit.
1654 2) it builds a config.h file for inclusion in C programs.  You may edit
1655    any of these files as the need arises after running this script.
1656
1657 If you make a mistake on a question, there is no easy way to back up to it
1658 currently.  The easiest thing to do is to edit config.sh and rerun all the SH
1659 files.  Configure will offer to let you do this before it runs the SH files.
1660
1661 EOH
1662         dflt='Type carriage return to continue'
1663         . ./myread
1664         case "$firsttime" in
1665         true) echo $user >>../.config/instruct;;
1666         esac
1667 fi
1668
1669 : find out where common programs are
1670 echo " "
1671 echo "Locating common programs..." >&4
1672 cat <<EOSC >loc
1673 $startsh
1674 case \$# in
1675 0) exit 1;;
1676 esac
1677 thing=\$1
1678 shift
1679 dflt=\$1
1680 shift
1681 for dir in \$*; do
1682         case "\$thing" in
1683         .)
1684         if test -d \$dir/\$thing; then
1685                 echo \$dir
1686                 exit 0
1687         fi
1688         ;;
1689         *)
1690         for thisthing in \$dir/\$thing; do
1691                 : just loop through to pick last item
1692         done
1693         if test -f \$thisthing; then
1694                 echo \$thisthing
1695                 exit 0
1696         elif test -f \$dir/\$thing.exe; then
1697                 if test -n "$DJGPP"; then
1698                         echo \$dir/\$thing.exe
1699                 else
1700                         : on Eunice apparently
1701                         echo \$dir/\$thing
1702                 fi
1703                 exit 0
1704         fi
1705         ;;
1706         esac
1707 done
1708 echo \$dflt
1709 exit 1
1710 EOSC
1711 chmod +x loc
1712 $eunicefix loc
1713 loclist="
1714 awk
1715 cat
1716 comm
1717 cp
1718 echo
1719 expr
1720 grep
1721 ls
1722 make
1723 mkdir
1724 rm
1725 sed
1726 sort
1727 touch
1728 tr
1729 uniq
1730 "
1731 trylist="
1732 Mcc
1733 ar
1734 byacc
1735 cpp
1736 csh
1737 date
1738 egrep
1739 gzip
1740 less
1741 ln
1742 more
1743 nm
1744 nroff
1745 pg
1746 tee
1747 test
1748 uname
1749 zip
1750 "
1751 pth=`echo $PATH | sed -e "s/$p_/ /g"`
1752 pth="$pth /lib /usr/lib"
1753 for file in $loclist; do
1754         eval xxx=\$$file
1755         case "$xxx" in
1756         /*|?:[\\/]*)
1757                 if test -f "$xxx"; then
1758                         : ok
1759                 else
1760                         echo "WARNING: no $xxx -- ignoring your setting for $file." >&4
1761                         xxx=`./loc $file $file $pth`
1762                 fi
1763                 ;;
1764         '') xxx=`./loc $file $file $pth`;;
1765         *) xxx=`./loc $xxx $xxx $pth`;;
1766         esac
1767         eval $file=$xxx
1768         eval _$file=$xxx
1769         case "$xxx" in
1770         /*)
1771                 echo $file is in $xxx.
1772                 ;;
1773         ?:[\\/]*)
1774                 echo $file is in $xxx.
1775                 ;;
1776         *)
1777                 echo "I don't know where '$file' is, and my life depends on it." >&4
1778                 echo "Go find a public domain implementation or fix your PATH setting!" >&4
1779                 exit 1
1780                 ;;
1781         esac
1782 done
1783 echo " "
1784 echo "Don't worry if any of the following aren't found..."
1785 say=offhand
1786 for file in $trylist; do
1787         eval xxx=\$$file
1788         case "$xxx" in
1789         /*|?:[\\/]*)
1790                 if test -f "$xxx"; then
1791                         : ok
1792                 else
1793                         echo "WARNING: no $xxx -- ignoring your setting for $file." >&4
1794                         xxx=`./loc $file $file $pth`
1795                 fi
1796                 ;;
1797         '') xxx=`./loc $file $file $pth`;;
1798         *) xxx=`./loc $xxx $xxx $pth`;;
1799         esac
1800         eval $file=$xxx
1801         eval _$file=$xxx
1802         case "$xxx" in
1803         /*)
1804                 echo $file is in $xxx.
1805                 ;;
1806         ?:[\\/]*)
1807                 echo $file is in $xxx.
1808                 ;;
1809         *)
1810                 echo "I don't see $file out there, $say."
1811                 say=either
1812                 ;;
1813         esac
1814 done
1815 case "$egrep" in
1816 egrep)
1817         echo "Substituting grep for egrep."
1818         egrep=$grep
1819         ;;
1820 esac
1821 case "$ln" in
1822 ln)
1823         echo "Substituting cp for ln."
1824         ln=$cp
1825         ;;
1826 esac
1827 case "$test" in
1828 test)
1829         echo "Hopefully test is built into your sh."
1830         ;;
1831 *)
1832         if `sh -c "PATH= test true" >/dev/null 2>&1`; then
1833                 echo "Using the test built into your sh."
1834                 test=test
1835                 _test=test
1836         fi
1837         ;;
1838 esac
1839 case "$echo" in
1840 echo)
1841         echo "Hopefully echo is built into your sh."
1842         ;;
1843 '') ;;
1844 *)
1845         echo " "
1846 echo "Checking compatibility between $echo and builtin echo (if any)..." >&4
1847         $echo $n "hi there$c" >foo1
1848         echo $n "hi there$c" >foo2
1849         if cmp foo1 foo2 >/dev/null 2>&1; then
1850                 echo "They are compatible.  In fact, they may be identical."
1851         else
1852                 case "$n" in
1853                 '-n') n='' c='\c';;
1854                 *) n='-n' c='';;
1855                 esac
1856                 cat <<FOO
1857 They are not compatible!  You are probably running ksh on a non-USG system.
1858 I'll have to use $echo instead of the builtin, since Bourne shell doesn't
1859 have echo built in and we may have to run some Bourne shell scripts.  That
1860 means I'll have to use '$n$c' to suppress newlines now.  Life is ridiculous.
1861
1862 FOO
1863                 $echo $n "The star should be here-->$c"
1864                 $echo "*"
1865         fi
1866         $rm -f foo1 foo2
1867         ;;
1868 esac
1869
1870 : determine whether symbolic links are supported
1871 echo " "
1872 $touch blurfl
1873 if $ln -s blurfl sym > /dev/null 2>&1 ; then
1874         echo "Symbolic links are supported." >&4
1875         lns="$ln -s"
1876 else
1877         echo "Symbolic links are NOT supported." >&4
1878         lns="$ln"
1879 fi
1880 $rm -f blurfl sym
1881
1882 : see whether [:lower:] and [:upper:] are supported character classes
1883 echo " "
1884 case "`echo AbyZ | $tr '[:lower:]' '[:upper:]' 2>/dev/null`" in
1885 ABYZ)
1886         echo "Good, your tr supports [:lower:] and [:upper:] to convert case." >&4
1887         up='[:upper:]'
1888         low='[:lower:]'
1889         ;;
1890 *)      # There is a discontinuity in EBCDIC between 'I' and 'J'
1891         # (0xc9 and 0xd1), therefore that is a nice testing point.
1892         if test "X$up" = X -o "X$low" = X; then
1893             case "`echo IJ | $tr '[I-J]' '[i-j]' 2>/dev/null`" in
1894             ij) up='[A-Z]'
1895                 low='[a-z]'
1896                 ;;
1897             esac
1898         fi
1899         if test "X$up" = X -o "X$low" = X; then
1900             case "`echo IJ | $tr I-J i-j 2>/dev/null`" in
1901             ij) up='A-Z'
1902                 low='a-z'
1903                 ;;
1904             esac
1905         fi
1906         if test "X$up" = X -o "X$low" = X; then
1907             case "`echo IJ | od -x 2>/dev/null`" in
1908             *C9D1*|*c9d1*)
1909                 echo "Hey, this might be EBCDIC." >&4
1910                 if test "X$up" = X -o "X$low" = X; then
1911                     case "`echo IJ | $tr '[A-IJ-RS-Z]' '[a-ij-rs-z]' 2>/dev/null`" in
1912                     ij) up='[A-IJ-RS-Z]'
1913                         low='[a-ij-rs-z]'
1914                         ;;
1915                     esac
1916                 fi
1917                 if test "X$up" = X -o "X$low" = X; then
1918                     case "`echo IJ | $tr A-IJ-RS-Z a-ij-rs-z 2>/dev/null`" in
1919                     ij) up='A-IJ-RS-Z'
1920                         low='a-ij-rs-z'
1921                         ;;
1922                     esac
1923                 fi
1924                 ;;
1925             esac
1926         fi
1927 esac
1928 case "`echo IJ | $tr \"$up\" \"$low\" 2>/dev/null`" in
1929 ij)
1930     echo "Using $up and $low to convert case." >&4
1931     ;;
1932 *)
1933     echo "I don't know how to translate letters from upper to lower case." >&4
1934     echo "Your tr is not acting any way I know of." >&4
1935     exit 1
1936     ;;
1937 esac
1938 : set up the translation script tr, must be called with ./tr of course
1939 cat >tr <<EOSC
1940 $startsh
1941 case "\$1\$2" in
1942 '[A-Z][a-z]') exec $tr '$up' '$low';;
1943 '[a-z][A-Z]') exec $tr '$low' '$up';;
1944 esac
1945 exec $tr "\$@"
1946 EOSC
1947 chmod +x tr
1948 $eunicefix tr
1949
1950 : Try to determine whether config.sh was made on this system
1951 case "$config_sh" in
1952 '')
1953 myuname=`( ($uname -a) 2>/dev/null || hostname) 2>&1`
1954 # tr '[A-Z]' '[a-z]' would not work in EBCDIC
1955 # because the A-Z/a-z are not consecutive.
1956 myuname=`echo $myuname | $sed -e 's/^[^=]*=//' -e 's/\///g' | \
1957         ./tr '[A-Z]' '[a-z]' | $tr $trnl ' '`
1958 newmyuname="$myuname"
1959 dflt=n
1960 case "$knowitall" in
1961 '')
1962         if test -f ../config.sh; then
1963                 if $contains myuname= ../config.sh >/dev/null 2>&1; then
1964                         eval "`grep myuname= ../config.sh`"
1965                 fi
1966                 if test "X$myuname" = "X$newmyuname"; then
1967                         dflt=y
1968                 fi
1969         fi
1970         ;;
1971 *) dflt=y;;
1972 esac
1973
1974 : Get old answers from old config file if Configure was run on the
1975 : same system, otherwise use the hints.
1976 hint=default
1977 cd ..
1978 if test -f config.sh; then
1979         echo " "
1980         rp="I see a config.sh file.  Shall I use it to set the defaults?"
1981         . UU/myread
1982         case "$ans" in
1983         n*|N*) echo "OK, I'll ignore it."; mv config.sh config.sh.old;;
1984         *)  echo "Fetching default answers from your old config.sh file..." >&4
1985                 tmp_n="$n"
1986                 tmp_c="$c"
1987                 tmp_sh="$sh"
1988                 . ./config.sh
1989                 cp config.sh UU
1990                 n="$tmp_n"
1991                 c="$tmp_c"
1992                 : Older versions did not always set $sh.  Catch re-use of such
1993                 : an old config.sh.
1994                 case "$sh" in
1995                 '') sh="$tmp_sh" ;;
1996                 esac
1997                 hint=previous
1998                 ;;
1999         esac
2000 fi
2001 if test ! -f config.sh; then
2002         $cat <<EOM
2003
2004 First time through, eh?  I have some defaults handy for some systems
2005 that need some extra help getting the Configure answers right:
2006
2007 EOM
2008         (cd $src/hints; ls -C *.sh) | $sed 's/\.sh/   /g' >&4
2009         dflt=''
2010         : Half the following guesses are probably wrong... If you have better
2011         : tests or hints, please send them to jhi@iki.fi
2012         : The metaconfig authors would also appreciate a copy...
2013         $test -f /irix && osname=irix
2014         $test -f /xenix && osname=sco_xenix
2015         $test -f /dynix && osname=dynix
2016         $test -f /dnix && osname=dnix
2017         $test -f /lynx.os && osname=lynxos
2018         $test -f /unicos && osname=unicos && osvers=`$uname -r`
2019         $test -f /unicosmk.ar && osname=unicosmk && osvers=`$uname -r`
2020         $test -f /bin/mips && /bin/mips && osname=mips
2021         $test -d /NextApps && set X `hostinfo | grep 'NeXT Mach.*:' | \
2022                 $sed -e 's/://' -e 's/\./_/'` && osname=next && osvers=$4
2023         $test -d /usr/apollo/bin && osname=apollo
2024         $test -f /etc/saf/_sactab && osname=svr4
2025         $test -d /usr/include/minix && osname=minix
2026         if $test -d /MachTen -o -d /MachTen_Folder; then
2027                 osname=machten
2028                 if $test -x /sbin/version; then
2029                         osvers=`/sbin/version | $awk '{print $2}' |
2030                         $sed -e 's/[A-Za-z]$//'`
2031                 elif $test -x /usr/etc/version; then
2032                         osvers=`/usr/etc/version | $awk '{print $2}' |
2033                         $sed -e 's/[A-Za-z]$//'`
2034                 else
2035                         osvers="$2.$3"
2036                 fi
2037         fi
2038        $test -f /sys/posix.dll &&
2039                $test -f /usr/bin/what &&
2040                set X `/usr/bin/what /sys/posix.dll` &&
2041                $test "$3" = UWIN &&
2042                osname=uwin &&
2043                osvers="$5"
2044         if $test -f $uname; then
2045                 set X $myuname
2046                 shift
2047
2048                 case "$5" in
2049                 fps*) osname=fps ;;
2050                 mips*)
2051                         case "$4" in
2052                         umips) osname=umips ;;
2053                         *) osname=mips ;;
2054                         esac;;
2055                 [23]100) osname=mips ;;
2056                 next*) osname=next ;;
2057                 i386*)
2058                         if $test -f /etc/kconfig; then
2059                                 osname=isc
2060                                 if test "$lns" = "ln -s"; then
2061                                         osvers=4
2062                                 elif $contains _SYSV3 /usr/include/stdio.h > /dev/null 2>&1 ; then
2063                                         osvers=3
2064                                 elif $contains _POSIX_SOURCE /usr/include/stdio.h > /dev/null 2>&1 ; then
2065                                         osvers=2
2066                                 fi
2067                         fi
2068                         ;;
2069                 pc*)
2070                         if test -n "$DJGPP"; then
2071                                 osname=dos
2072                                 osvers=djgpp
2073                         fi
2074                         ;;
2075                 esac
2076
2077                 case "$1" in
2078                 aix) osname=aix
2079                         tmp=`( (oslevel) 2>/dev/null || echo "not found") 2>&1`
2080                         case "$tmp" in
2081                         'not found') osvers="$4"."$3" ;;
2082                         '<3240'|'<>3240') osvers=3.2.0 ;;
2083                         '=3240'|'>3240'|'<3250'|'<>3250') osvers=3.2.4 ;;
2084                         '=3250'|'>3250') osvers=3.2.5 ;;
2085                         *) osvers=$tmp;;
2086                         esac
2087                         ;;
2088                 *dc.osx) osname=dcosx
2089                         osvers="$3"
2090                         ;;
2091                 dnix) osname=dnix
2092                         osvers="$3"
2093                         ;;
2094                 domainos) osname=apollo
2095                         osvers="$3"
2096                         ;;
2097                 dgux) osname=dgux 
2098                         osvers="$3"
2099                         ;;
2100                 dynixptx*) osname=dynixptx
2101                         osvers=`echo "$4"|sed 's/^v//'`
2102                         ;;
2103                 freebsd) osname=freebsd 
2104                         osvers="$3" ;;
2105                 genix) osname=genix ;;
2106                 hp*) osname=hpux 
2107                         osvers=`echo "$3" | $sed 's,.*\.\([0-9]*\.[0-9]*\),\1,'`
2108                         ;;
2109                 irix*) osname=irix
2110                         case "$3" in
2111                         4*) osvers=4 ;;
2112                         5*) osvers=5 ;;
2113                         *)      osvers="$3" ;;
2114                         esac
2115                         ;;
2116                 linux) osname=linux
2117                         case "$3" in
2118                         *)      osvers="$3" ;;
2119                         esac
2120                         ;;
2121                 MiNT) osname=mint
2122                         ;;
2123                 netbsd*) osname=netbsd
2124                         osvers="$3"
2125                         ;;
2126                 news-os) osvers="$3"
2127                         case "$3" in
2128                         4*) osname=newsos4 ;;
2129                         *) osname=newsos ;;
2130                         esac
2131                         ;;
2132                 bsd386) osname=bsd386
2133                         osvers=`$uname -r`
2134                         ;;
2135                 POSIX-BC | posix-bc ) osname=posix-bc
2136                         osvers="$3"
2137                         ;;
2138                 powerux | power_ux | powermax_os | powermaxos | \
2139                 powerunix | power_unix) osname=powerux
2140                         osvers="$3"
2141                         ;;
2142                 next*) osname=next ;;
2143                 solaris) osname=solaris
2144                         case "$3" in
2145                         5*) osvers=`echo $3 | $sed 's/^5/2/g'` ;;
2146                         *)      osvers="$3" ;;
2147                         esac
2148                         ;;
2149                 sunos) osname=sunos
2150                         case "$3" in
2151                         5*) osname=solaris
2152                                 osvers=`echo $3 | $sed 's/^5/2/g'` ;;
2153                         *)      osvers="$3" ;;
2154                         esac
2155                         ;;
2156                 titanos) osname=titanos
2157                         case "$3" in
2158                         1*) osvers=1 ;;
2159                         2*) osvers=2 ;;
2160                         3*) osvers=3 ;;
2161                         4*) osvers=4 ;;
2162                         *)      osvers="$3" ;;
2163                         esac
2164                         ;;
2165                 ultrix) osname=ultrix
2166                         osvers="$3"
2167                         ;;
2168                 osf1|mls+)      case "$5" in
2169                                 alpha)
2170                                         osname=dec_osf
2171                                         osvers=`echo "$3" | sed 's/^[xvt]//'`
2172                                         ;;
2173                         hp*)    osname=hp_osf1  ;;
2174                         mips)   osname=mips_osf1 ;;
2175                         esac
2176                         ;;
2177                 uts) osname=uts 
2178                         osvers="$3"
2179                         ;;
2180                 qnx) osname=qnx
2181                         osvers="$4"
2182                         ;;
2183                 $2) case "$osname" in
2184                         *isc*) ;;
2185                         *freebsd*) ;;
2186                         svr*)
2187                                 : svr4.x or possibly later
2188                                 case "svr$3" in 
2189                                 ${osname}*)
2190                                         osname=svr$3
2191                                         osvers=$4
2192                                         ;;
2193                                 esac
2194                                 case "$osname" in
2195                                 svr4.0)
2196                                         : Check for ESIX
2197                                         if test -f /stand/boot ; then
2198                                                 eval `grep '^INITPROG=[a-z/0-9]*$' /stand/boot`
2199                                                 if test -n "$INITPROG" -a -f "$INITPROG"; then
2200                         isesix=`strings -a $INITPROG|grep 'ESIX SYSTEM V/386 Release 4.0'`
2201                                                         if test -n "$isesix"; then
2202                                                                 osname=esix4
2203                                                         fi
2204                                                 fi
2205                                         fi
2206                                         ;;
2207                                 esac
2208                                 ;;
2209                         *)      if test -f /etc/systemid; then
2210                                         osname=sco
2211                                         set `echo $3 | $sed 's/\./ /g'` $4
2212                                         if $test -f $src/hints/sco_$1_$2_$3.sh; then
2213                                                 osvers=$1.$2.$3
2214                                         elif $test -f $src/hints/sco_$1_$2.sh; then
2215                                                 osvers=$1.$2
2216                                         elif $test -f $src/hints/sco_$1.sh; then
2217                                                 osvers=$1
2218                                         fi
2219                                 else
2220                                         case "$osname" in
2221                                         '') : Still unknown.  Probably a generic Sys V.
2222                                                 osname="sysv"
2223                                                 osvers="$3"
2224                                                 ;;
2225                                         esac
2226                                 fi
2227                                 ;;
2228                         esac
2229                         ;;
2230                 *)      case "$osname" in
2231                         '') : Still unknown.  Probably a generic BSD.
2232                                 osname="$1"
2233                                 osvers="$3"
2234                                 ;;
2235                         esac
2236                         ;;
2237                 esac
2238         else
2239                 if test -f /vmunix -a -f $src/hints/news_os.sh; then
2240                         (what /vmunix | UU/tr '[A-Z]' '[a-z]') > UU/kernel.what 2>&1
2241                         if $contains news-os UU/kernel.what >/dev/null 2>&1; then
2242                                 osname=news_os
2243                         fi
2244                         $rm -f UU/kernel.what
2245                 elif test -d c:/.; then
2246                         set X $myuname
2247                         osname=os2
2248                         osvers="$5"
2249                 fi
2250         fi
2251         
2252         : Now look for a hint file osname_osvers, unless one has been
2253         : specified already.
2254         case "$hintfile" in
2255         ''|' ')
2256                 file=`echo "${osname}_${osvers}" | $sed -e 's@\.@_@g' -e 's@_$@@'`
2257                 : Also try without trailing minor version numbers.
2258                 xfile=`echo $file | $sed -e 's@_[^_]*$@@'`
2259                 xxfile=`echo $xfile | $sed -e 's@_[^_]*$@@'`
2260                 xxxfile=`echo $xxfile | $sed -e 's@_[^_]*$@@'`
2261                 xxxxfile=`echo $xxxfile | $sed -e 's@_[^_]*$@@'`
2262                 case "$file" in
2263                 '') dflt=none ;;
2264                 *)  case "$osvers" in
2265                         '') dflt=$file
2266                                 ;;
2267                         *)  if $test -f $src/hints/$file.sh ; then
2268                                         dflt=$file
2269                                 elif $test -f $src/hints/$xfile.sh ; then
2270                                         dflt=$xfile
2271                                 elif $test -f $src/hints/$xxfile.sh ; then
2272                                         dflt=$xxfile
2273                                 elif $test -f $src/hints/$xxxfile.sh ; then
2274                                         dflt=$xxxfile
2275                                 elif $test -f $src/hints/$xxxxfile.sh ; then
2276                                         dflt=$xxxxfile
2277                                 elif $test -f "$src/hints/${osname}.sh" ; then
2278                                         dflt="${osname}"
2279                                 else
2280                                         dflt=none
2281                                 fi
2282                                 ;;
2283                         esac
2284                         ;;
2285                 esac
2286                 if $test -f Policy.sh ; then
2287                         case "$dflt" in
2288                         *Policy*) ;;
2289                         none) dflt="Policy" ;;
2290                         *) dflt="Policy $dflt" ;;
2291                         esac
2292                 fi
2293                 ;;
2294         *)
2295                 dflt=`echo $hintfile | $sed 's/\.sh$//'`
2296                 ;;
2297         esac
2298
2299         if $test -f Policy.sh ; then
2300                 $cat <<EOM
2301
2302 There's also a Policy hint file available, which should make the
2303 site-specific (policy) questions easier to answer.
2304 EOM
2305
2306         fi
2307
2308         $cat <<EOM
2309
2310 You may give one or more space-separated answers, or "none" if appropriate.
2311 A well-behaved OS will have no hints, so answering "none" or just "Policy"
2312 is a good thing.  DO NOT give a wrong version.
2313
2314 EOM
2315
2316         rp="Which of these apply, if any?"
2317         . UU/myread
2318         tans=$ans
2319         for file in $tans; do
2320                 if $test X$file = XPolicy -a -f Policy.sh; then
2321                         . Policy.sh
2322                         $cat Policy.sh >> UU/config.sh
2323                 elif $test -f $src/hints/$file.sh; then
2324                         . $src/hints/$file.sh
2325                         $cat $src/hints/$file.sh >> UU/config.sh
2326                 elif $test X$tans = X -o X$tans = Xnone ; then
2327                         : nothing
2328                 else
2329                         : Give one chance to correct a possible typo.
2330                         echo "$file.sh does not exist"
2331                         dflt=$file
2332                         rp="hint to use instead?"
2333                         . UU/myread
2334                         for file in $ans; do
2335                                 if $test -f "$src/hints/$file.sh"; then
2336                                         . $src/hints/$file.sh
2337                                         $cat $src/hints/$file.sh >> UU/config.sh
2338                                 elif $test X$ans = X -o X$ans = Xnone ; then
2339                                         : nothing
2340                                 else
2341                                         echo "$file.sh does not exist -- ignored."
2342                                 fi
2343                         done
2344                 fi
2345         done
2346
2347         hint=recommended
2348         : Remember our hint file for later.
2349         if $test -f "$src/hints/$file.sh" ; then
2350                 hintfile="$file"
2351         else
2352                 hintfile=''
2353         fi
2354 fi
2355 cd UU
2356 ;;
2357 *)
2358         echo " "
2359         echo "Fetching default answers from $config_sh..." >&4
2360         tmp_n="$n"
2361         tmp_c="$c"
2362         cd ..
2363         cp $config_sh config.sh 2>/dev/null
2364         chmod +w config.sh
2365         . ./config.sh
2366         cd UU
2367         cp ../config.sh .
2368         n="$tmp_n"
2369         c="$tmp_c"
2370         hint=previous
2371         ;;
2372 esac
2373 test "$override" && . ./optdef.sh
2374 myuname="$newmyuname"
2375
2376 : Restore computed paths
2377 for file in $loclist $trylist; do
2378         eval $file="\$_$file"
2379 done
2380
2381 cat << EOM
2382
2383 Configure uses the operating system name and version to set some defaults.
2384 The default value is probably right if the name rings a bell. Otherwise,
2385 since spelling matters for me, either accept the default or answer "none"
2386 to leave it blank.
2387
2388 EOM
2389 case "$osname" in
2390         ''|' ')
2391                 case "$hintfile" in
2392                 ''|' '|none) dflt=none ;;
2393                 *)  dflt=`echo $hintfile | $sed -e 's/\.sh$//' -e 's/_.*$//'` ;;
2394                 esac
2395                 ;;
2396         *) dflt="$osname" ;;
2397 esac
2398 rp="Operating system name?"
2399 . ./myread
2400 case "$ans" in
2401 none)  osname='' ;;
2402 *) osname=`echo "$ans" | $sed -e 's/[   ][      ]*/_/g' | ./tr '[A-Z]' '[a-z]'`;;
2403 esac
2404 echo " "
2405 case "$osvers" in
2406         ''|' ')
2407                 case "$hintfile" in
2408                 ''|' '|none) dflt=none ;;
2409                 *)      dflt=`echo $hintfile | $sed -e 's/\.sh$//' -e 's/^[^_]*//'`
2410                         dflt=`echo $dflt | $sed -e 's/^_//' -e 's/_/./g'`
2411                         case "$dflt" in
2412                         ''|' ') dflt=none ;;
2413                         esac
2414                         ;;
2415                 esac
2416                 ;;
2417         *) dflt="$osvers" ;;
2418 esac
2419 rp="Operating system version?"
2420 . ./myread
2421 case "$ans" in
2422 none)  osvers='' ;;
2423 *) osvers="$ans" ;;
2424 esac
2425
2426 : who configured the system
2427 cf_time=`LC_ALL=C; export LC_ALL; $date 2>&1`
2428 cf_by=`(logname) 2>/dev/null`
2429 case "$cf_by" in
2430 "")
2431         cf_by=`(whoami) 2>/dev/null`
2432         case "$cf_by" in
2433         "") cf_by=unknown ;;
2434         esac ;;
2435 esac
2436
2437 : set up the script used to warn in case of inconsistency
2438 cat <<EOS >whoa
2439 $startsh
2440 EOS
2441 cat <<'EOSC' >>whoa
2442 dflt=y
2443 echo " "
2444 echo "*** WHOA THERE!!! ***" >&4
2445 echo "    The $hint value for \$$var on this machine was \"$was\"!" >&4
2446 rp="    Keep the $hint value?"
2447 . ./myread
2448 case "$ans" in
2449 y) td=$was; tu=$was;;
2450 esac
2451 EOSC
2452
2453 : function used to set $1 to $val
2454 setvar='var=$1; eval "was=\$$1"; td=$define; tu=$undef;
2455 case "$val$was" in
2456 $define$undef) . ./whoa; eval "$var=\$td";;
2457 $undef$define) . ./whoa; eval "$var=\$tu";;
2458 *) eval "$var=$val";;
2459 esac'
2460
2461 cat <<EOM
2462
2463 Perl can be built to take advantage of threads, on some systems.
2464 To do so, Configure must be run with -Dusethreads.
2465 (See README.threads for details.)
2466 EOM
2467 case "$usethreads" in
2468 $define|true|[yY]*)     dflt='y';;
2469 *) dflt='n';;
2470 esac
2471 rp='Build a threading Perl?'
2472 . ./myread
2473 case "$ans" in
2474 y|Y)    val="$define" ;;     
2475 *)      val="$undef" ;;
2476 esac
2477 set usethreads
2478 eval $setvar 
2479 : Look for a hint-file generated 'call-back-unit'.  If the
2480 : user has specified that a threading perl is to be built,
2481 : we may need to set or change some other defaults.
2482 case "$usethreads" in
2483 $define|true|[yY]*)
2484         if $test -f usethreads.cbu; then
2485                 . ./usethreads.cbu
2486         fi
2487         ;;
2488 esac
2489 case "$d_oldpthreads" in
2490 '')     : Configure tests would be welcome here.  For now, assume undef.
2491         val="$undef" ;;
2492 *)      val="$d_oldpthreads" ;;
2493 esac
2494 set d_oldpthreads
2495 eval $setvar
2496
2497
2498 case "$usethreads" in
2499 "$define")
2500     case "$osname" in
2501     aix)
2502         ccflags="$ccflags -DNEED_PTHREAD_INIT"
2503         case "$cc" in
2504         xlc_r | cc_r) ;;
2505         cc) 
2506             echo >&4 "Switching cc to xlc_r because of POSIX threads."
2507             cc=xlc_r
2508             ;;
2509         '') 
2510             cc=xlc_r
2511             ;;
2512         *)
2513             cat >&4 <<EOM
2514 For pthreads you should use the AIX C compilers xlc_r or cc_r.
2515 (now your compiler was '$cc')
2516 Cannot continue, aborting.
2517 EOM
2518             exit 1
2519             ;;
2520         esac
2521
2522         # Add the POSIX threads library and the re-entrant libc.
2523
2524         lddlflags=`echo $lddlflags | sed 's/ -lc$/ -lpthreads -lc_r -lc/'`
2525
2526         # Add the c_r library to the list of wanted libraries.
2527         # Make sure the c_r library is before the c library or
2528         # make will fail.
2529         set `echo X "$libswanted "| sed -e 's/ c / c_r c /'`
2530         shift
2531         libswanted="$*"
2532         ;;
2533     dec_osf)
2534         # Threads interfaces changed with V4.0.
2535         case "`uname -r`" in
2536         *[123].*)
2537             libswanted="$libswanted pthreads mach exc c_r"
2538             ccflags="-threads $ccflags"
2539             ;;
2540         *)
2541             libswanted="$libswanted pthread exc"
2542             ccflags="-pthread $ccflags"
2543             ;;
2544         esac
2545
2546         usemymalloc='n'
2547         ;;
2548     dos_djgpp)
2549         set `echo X "$libswanted "| sed -e 's/ c / gthreads c /'`
2550         shift
2551         libswanted="$*"
2552         ;;
2553     freebsd)
2554         case "$osvers" in  
2555         [34].*) ldflags="-pthread $ldflags"
2556               ;;
2557         2.2*) if [ ! -r /usr/lib/libc_r ]; then
2558               cat <<'EOM' >&4
2559 POSIX threads are not supported by default on FreeBSD $osvers.  Follow the
2560 instructions in 'man pthread' to build and install the needed libraries.
2561 EOM
2562                  exit 1
2563               fi
2564               set `echo X "$libswanted "| sed -e 's/ c / c_r /'`
2565               shift
2566               libswanted="$*"
2567               # Configure will probably pick the wrong libc to use for nm
2568               # scan.
2569               # The safest quick-fix is just to not use nm at all.
2570               usenm=false
2571               ;;
2572          *)   cat <<'EOM' >&4
2573
2574 It is not known if FreeBSD $osvers supports POSIX threads or not.
2575 Consider upgrading to the latest STABLE release.
2576
2577 EOM
2578               exit 1
2579               ;;
2580         esac
2581         ;;
2582     hpux)
2583         if [ "$xxOsRevMajor" -lt 10 ]; then
2584             cat <<EOM >&4
2585 HP-UX $xxOsRevMajor cannot support POSIX threads.
2586 Consider upgrading to at least HP-UX 11.
2587 Cannot continue, aborting.
2588 EOM
2589             exit 1
2590         fi
2591         case "$xxOsRevMajor" in
2592         10)
2593             # Under 10.X, a threaded perl can be built, but it needs
2594             # libcma and OLD_PTHREADS_API.  Also <pthread.h> needs to
2595             # be #included before any other includes (in perl.h)
2596             if [ ! -f /usr/include/pthread.h -o ! -f /usr/lib/libcma.sl ]; then
2597                 cat <<EOM >&4
2598 In HP-UX 10.X for POSIX threads you need both of the files
2599 /usr/include/pthread.h and /usr/lib/libcma.sl.
2600 Either you must install the CMA package or you must upgrade to HP-UX 11.
2601 Cannot continue, aborting.
2602 EOM
2603                 exit 1
2604             fi
2605
2606             # HP-UX 10.X uses the old pthreads API
2607             case "$d_oldpthreads" in
2608             '') d_oldpthreads="$define" ;;
2609             esac
2610
2611             # include libcma before all the others
2612             libswanted="cma $libswanted"
2613
2614             # tell perl.h to include <pthread.h> before other include files
2615             ccflags="$ccflags -DPTHREAD_H_FIRST"
2616
2617             # CMA redefines select to cma_select, and cma_select expects int *
2618             # instead of fd_set * (just like 9.X)
2619             selecttype='int *'
2620             ;;
2621         11 | 12) # 12 may want upping the _POSIX_C_SOURCE
2622             ccflags="$ccflags -D_POSIX_C_SOURCE=199506L"
2623             libswanted="$libswanted pthread"
2624             ;;
2625         esac
2626         ;;
2627     irix)
2628         if test ! -f ${TOOLROOT}/usr/include/pthread.h -o ! -f /usr/lib/libpthread.so; then
2629             case "`uname -r`" in
2630             [1-5].*|6.[01]|6.[01])
2631                 cat >&4 <<EOM
2632 IRIX `uname -r` does not support POSIX threads.
2633 You should upgrade to at least IRIX 6.2 with pthread patches.
2634 EOM
2635                 ;;
2636             6.2)
2637                 cat >&4 <<EOM
2638 IRIX 6.2 can have the POSIX threads.
2639 However,the following IRIX patches (or their replacements) MUST be installed:
2640         1404 Irix 6.2 Posix 1003.1b man pages
2641         1645 IRIX 6.2 & 6.3 POSIX header file updates
2642         2000 Irix 6.2 Posix 1003.1b support modules
2643         2254 Pthread library fixes
2644         2401 6.2 all platform kernel rollup
2645 IMPORTANT:
2646         Without patch 2401, a kernel bug in IRIX 6.2 will
2647         cause your machine to panic and crash when running
2648         threaded perl. IRIX 6.3 and up should be OK.
2649 EOM
2650                 ;;
2651             [67].*)
2652                 cat >&4 <<EOM
2653 IRIX `uname -r` should have the POSIX threads.
2654 But, somehow, you do not seem to have them installed.
2655 EOM
2656                 ;;
2657             esac
2658             cat >&4 <<EOM
2659 Cannot continue, aborting.
2660 EOM
2661             exit 1
2662         fi
2663         set `echo X "$libswanted "| sed -e 's/ c / pthread /'`
2664         ld="${cc:-cc}"
2665         shift
2666         libswanted="$*"
2667
2668         usemymalloc='n'
2669         ;;
2670     linux)
2671         ccflags="-D_REENTRANT $ccflags"
2672
2673         set `echo X "$libswanted "| sed -e 's/ c / pthread c /'`
2674         shift
2675         libswanted="$*"
2676         ;;
2677     os2)
2678         ccflags="-Zmt $ccflags"
2679         cppflags="-Zmt $cppflags"  # Do we really need to set this?
2680         aout_ccflags="-DUSE_THREADS $aout_ccflags"
2681         aout_cppflags="-DUSE_THREADS $aout_cppflags"
2682         aout_lddlflags="-Zmt $aout_lddlflags"
2683         aout_ldflags="-Zmt $aout_ldflags"
2684         ;;
2685     solaris)
2686         ccflags="-D_REENTRANT $ccflags"
2687
2688         # sched_yield is in -lposix4
2689         set `echo X "$libswanted "| sed -e 's/ c / posix4 pthread c /'`
2690         shift
2691         libswanted="$*"
2692
2693         # On Solaris 2.6 x86 there is a bug with sigsetjmp() and siglongjmp()
2694         # when linked with the threads library, such that whatever positive
2695         # value you pass to siglongjmp(), sigsetjmp() returns 1.
2696         # Thanks to Simon Parsons <S.Parsons@ftel.co.uk> for this report.
2697         # Sun BugID is 4117946, "sigsetjmp always returns 1 when called by
2698         # siglongjmp in a MT program". As of 19980622, there is no patch
2699         # available.
2700         cat >try.c <<'EOM'
2701         /* Test for sig(set|long)jmp bug. */
2702         #include <setjmp.h>
2703          
2704         main()
2705         {
2706             sigjmp_buf env;
2707             int ret;
2708         
2709             ret = sigsetjmp(env, 1);
2710             if (ret) { return ret == 2; }
2711             siglongjmp(env, 2);
2712         }
2713 EOM
2714         if test "`arch`" = i86pc -a "$osvers" = 2.6 && \
2715            ${cc:-cc} try.c -lpthread >/dev/null 2>&1 && ./a.out; then
2716             d_sigsetjmp=$undef
2717             cat << 'EOM' >&2
2718
2719 You will see a *** WHOA THERE!!! ***  message from Configure for
2720 d_sigsetjmp.  Keep the recommended value.  See hints/solaris_2.sh
2721 for more information.
2722
2723 EOM
2724         fi
2725         ;;
2726     vmesa)
2727         ;;
2728     *)
2729         cat >&4 <<EOM
2730 $osname is not known to support threads.
2731 Please let me (jhi@iki.fi) know how to do that.
2732
2733 Cannot continue, aborting.
2734 EOM
2735         exit 1
2736         ;;
2737     esac # $osname
2738     ;;
2739 esac # $usethreads
2740 cat <<EOM
2741
2742 Perl can be built so that multiple Perl interpreters can coexist
2743 within the same Perl executable.  To do so, Configure must be run with
2744 -Dusemultiplicity.
2745
2746 Normally you do not need this and you should answer no.
2747
2748 EOM
2749 case "$usemultiplicity" in
2750 $define|true|[yY]*)     dflt='y';;
2751 *) dflt='n';;
2752 esac
2753 rp='Build Perl for multiplicity?'
2754 . ./myread
2755 case "$ans" in
2756 y|Y)    val="$define" ;;     
2757 *)      val="$undef" ;;
2758 esac
2759 set usemultiplicity
2760 eval $setvar 
2761
2762 cat <<EOM
2763
2764 Perl can be built to take advantage of explicit 64-bit interfaces,
2765 on some systems.  To do so, Configure must be run with -Duse64bits.
2766
2767 If this doesn't make any sense to you, just accept the default 'n'.
2768 EOM
2769 case "$use64bits" in
2770 $define|true|[yY]*)     dflt='y';;
2771 *) dflt='n';;
2772 esac
2773 rp='Try to use explicit 64-bit interfaces, if available?'
2774 . ./myread
2775 case "$ans" in
2776 y|Y) 
2777         val="$define"
2778         ;;     
2779 *)      
2780         val="$undef"
2781         ;;
2782 esac
2783 set use64bits
2784 eval $setvar
2785
2786 archname64=''
2787
2788 case "$use64bits" in
2789 "$define")
2790         case "$osname" in
2791         dec_osf)
2792             # Pretty much everything is 64-bit already.
2793             ;;
2794         hpux)
2795             if [ "$xxOsRevMajor" -lt 11 ]; then
2796                 cat <<EOM >&4
2797 64-bit compilation is not supported on HP-UX $xxOsRevMajor.
2798 You need at least HP-UX 11.0.
2799 Cannot continue, aborting.
2800 EOM
2801                 exit 1
2802             fi
2803             if [ ! -d /lib/pa20_64 ]; then
2804                 cat <<EOM >&4
2805 You do not seem to have the 64-bit libraries, /lib/pa20_64.
2806 Cannot continue, aborting.
2807 EOM
2808                 exit 1
2809             fi
2810             ccflags="$ccflags +DD64 -D_FILE_OFFSET_BITS=64"
2811             ldflags="$ldflags +DD64"
2812             ld=/usr/bin/ld
2813             set `echo " $libswanted " | sed -e 's@ dl @ @'`
2814             libswanted="$*"
2815             glibpth="/lib/pa20_64"
2816             ;;
2817         irix)
2818             case "`uname -r`" in
2819             [1-5]*|6.[01])
2820                 cat >&4 <<EOM
2821 IRIX `uname -r` does not support 64-bit types.
2822 You should upgrade to at least IRIX 6.2.
2823 Cannot continue, aborting.
2824 EOM
2825                 exit 1
2826                 ;;
2827             esac
2828             case "$ccflags" in
2829             *-n32*)
2830                 ccflags="$ccflags -DUSE_LONG_LONG"
2831                 archname64="-n32"
2832                 d_open64="$undef"
2833                 # In -n32 mode (ILP32LL64) we use the standard open().
2834                 # In -64 we will use the open64().
2835                 cat << 'EOM' >&2
2836
2837 You will see a *** WHOA THERE!!! ***  message from Configure for
2838 d_open64.  Keep the recommended value.  See hints/irix6.sh
2839 for more information.
2840
2841 EOM
2842                 ;;
2843             esac
2844             ccflags="$ccflags -DUSE_64_BIT_FILES"
2845             ;;
2846         solaris)
2847             case "`uname -r`" in
2848             1.*|2.[1-5])
2849                 cat >&4 <<EOM
2850 Solaris `uname -r` does not support 64-bit interfaces.
2851 You should upgrade to at least Solaris 2.6.
2852 EOM
2853                 exit 1
2854                 ;;
2855             esac
2856             ccflags="$ccflags `getconf LFS_CFLAGS` -DUSE_LONG_LONG"
2857             ldflags="$ldflags `getconf LFS_LDFLAGS`"
2858             libswanted="$libswanted `getconf LFS_LIBS`"
2859             # When a 64-bit cc becomes available $archname64
2860             # may need setting so that $archname gets it attached.
2861             ;;
2862         unicos)
2863             # Pretty much everything is 64-bit already.
2864             ;;
2865         *)
2866             cat >&4 <<EOM
2867 $osname is not known to support 64-bit interfaces.
2868 Please let me (jhi@iki.fi) know how to do that.
2869
2870 Cannot continue, aborting.
2871 EOM
2872             exit 1
2873             ;;
2874         esac
2875         ;;
2876 esac
2877 : determine the architecture name
2878 echo " "
2879 if xxx=`./loc arch blurfl $pth`; $test -f "$xxx"; then
2880         tarch=`arch`"-$osname"
2881 elif xxx=`./loc uname blurfl $pth`; $test -f "$xxx" ; then
2882         if uname -m > tmparch 2>&1 ; then
2883                 tarch=`$sed -e 's/ *$//' -e 's/ /_/g' \
2884                         -e 's/$/'"-$osname/" tmparch`
2885         else
2886                 tarch="$osname"
2887         fi
2888         $rm -f tmparch
2889 else
2890         tarch="$osname"
2891 fi
2892 case "$myarchname" in
2893 ''|"$tarch") ;;
2894 *)
2895         echo "(Your architecture name used to be $myarchname.)"
2896         archname=''
2897         ;;
2898 esac
2899 myarchname="$tarch"
2900 case "$archname" in
2901 '') dflt="$tarch";;
2902 *) dflt="$archname";;
2903 esac
2904 rp='What is your architecture name'
2905 . ./myread
2906 archname="$ans"
2907 case "$usethreads" in
2908 $define)
2909         echo "Threads selected." >&4
2910         case "$archname" in
2911         *-thread*) echo "...and architecture name already has -thread." >&4
2912                 ;;
2913         *)      archname="$archname-thread"
2914                 echo "...setting architecture name to $archname." >&4
2915                 ;;
2916         esac
2917         ;;
2918 esac
2919 case "$usemultiplicity" in
2920 $define)
2921         echo "Multiplicity selected." >&4
2922         case "$archname" in
2923         *-multi*) echo "...and architecture name already has -multi." >&4
2924                 ;;
2925         *)      archname="$archname-multi"
2926                 echo "...setting architecture name to $archname." >&4
2927                 ;;
2928         esac
2929         ;;
2930 esac
2931 case "$use64bits" in
2932 $define)
2933         echo "Explicit 64-bitness selected." >&4
2934         case "$archname64" in
2935         '')
2936                 ;;
2937         *)
2938                 case "$archname" in
2939                 *-$archname64*) echo "...and architecture name already has $archname64." >&4
2940                         ;;
2941                 *)      archname="$archname-$archname64"
2942                         echo "...setting architecture name to $archname." >&4
2943                         ;;
2944                 esac
2945                 ;;
2946         esac
2947 esac
2948
2949 : is AFS running?
2950 echo " "
2951 case "$afs" in
2952 $define|true)   afs=true ;;
2953 $undef|false)   afs=false ;;
2954 *)      if test -d /afs; then
2955                 afs=true
2956         else
2957                 afs=false
2958         fi
2959         ;;
2960 esac
2961 if $afs; then
2962         echo "AFS may be running... I'll be extra cautious then..." >&4
2963 else
2964         echo "AFS does not seem to be running..." >&4
2965 fi
2966
2967 : decide how portable to be.  Allow command line overrides.
2968 case "$d_portable" in
2969 "$undef") ;;
2970 *)      d_portable="$define" ;;
2971 esac
2972
2973 : set up shell script to do ~ expansion
2974 cat >filexp <<EOSS
2975 $startsh
2976 : expand filename
2977 case "\$1" in
2978  ~/*|~)
2979         echo \$1 | $sed "s|~|\${HOME-\$LOGDIR}|"
2980         ;;
2981  ~*)
2982         if $test -f /bin/csh; then
2983                 /bin/csh -f -c "glob \$1"
2984                 failed=\$?
2985                 echo ""
2986                 exit \$failed
2987         else
2988                 name=\`$expr x\$1 : '..\([^/]*\)'\`
2989                 dir=\`$sed -n -e "/^\${name}:/{s/^[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:\([^:]*\).*"'\$'"/\1/" -e p -e q -e '}' </etc/passwd\`
2990                 if $test ! -d "\$dir"; then
2991                         me=\`basename \$0\`
2992                         echo "\$me: can't locate home directory for: \$name" >&2
2993                         exit 1
2994                 fi
2995                 case "\$1" in
2996                 */*)
2997                         echo \$dir/\`$expr x\$1 : '..[^/]*/\(.*\)'\`
2998                         ;;
2999                 *)
3000                         echo \$dir
3001                         ;;
3002                 esac
3003         fi
3004         ;;
3005 *)
3006         echo \$1
3007         ;;
3008 esac
3009 EOSS
3010 chmod +x filexp
3011 $eunicefix filexp
3012
3013 : now set up to get a file name
3014 cat <<EOS >getfile
3015 $startsh
3016 EOS
3017 cat <<'EOSC' >>getfile
3018 tilde=''
3019 fullpath=''
3020 already=''
3021 skip=''
3022 none_ok=''
3023 exp_file=''
3024 nopath_ok=''
3025 orig_rp="$rp"
3026 orig_dflt="$dflt"
3027
3028 case "$fn" in
3029 *\(*)
3030         expr $fn : '.*(\(.*\)).*' | tr ',' $trnl >getfile.ok
3031         fn=`echo $fn | sed 's/(.*)//'`
3032         ;;
3033 esac
3034
3035 case "$fn" in
3036 *:*)
3037         loc_file=`expr $fn : '.*:\(.*\)'`
3038         fn=`expr $fn : '\(.*\):.*'`
3039         ;;
3040 esac
3041
3042 case "$fn" in
3043 *~*) tilde=true;;
3044 esac
3045 case "$fn" in
3046 */*) fullpath=true;;
3047 esac
3048 case "$fn" in
3049 *+*) skip=true;;
3050 esac
3051 case "$fn" in
3052 *n*) none_ok=true;;
3053 esac
3054 case "$fn" in
3055 *e*) exp_file=true;;
3056 esac
3057 case "$fn" in
3058 *p*) nopath_ok=true;;
3059 esac
3060
3061 case "$fn" in
3062 *f*) type='File';;
3063 *d*) type='Directory';;
3064 *l*) type='Locate';;
3065 esac
3066
3067 what="$type"
3068 case "$what" in
3069 Locate) what='File';;
3070 esac
3071
3072 case "$exp_file" in
3073 '')
3074         case "$d_portable" in
3075         "$define") ;;
3076         *) exp_file=true;;
3077         esac
3078         ;;
3079 esac
3080
3081 cd ..
3082 while test "$type"; do
3083         redo=''
3084         rp="$orig_rp"
3085         dflt="$orig_dflt"
3086         case "$tilde" in
3087         true) rp="$rp (~name ok)";;
3088         esac
3089         . UU/myread
3090         if test -f UU/getfile.ok && \
3091                 $contains "^$ans\$" UU/getfile.ok >/dev/null 2>&1
3092         then
3093                 value="$ans"
3094                 ansexp="$ans"
3095                 break
3096         fi
3097         case "$ans" in
3098         none)
3099                 value=''
3100                 ansexp=''
3101                 case "$none_ok" in
3102                 true) type='';;
3103                 esac
3104                 ;;
3105         *)
3106                 case "$tilde" in
3107                 '') value="$ans"
3108                         ansexp="$ans";;
3109                 *)
3110                         value=`UU/filexp $ans`
3111                         case $? in
3112                         0)
3113                                 if test "$ans" != "$value"; then
3114                                         echo "(That expands to $value on this system.)"
3115                                 fi
3116                                 ;;
3117                         *) value="$ans";;
3118                         esac
3119                         ansexp="$value"
3120                         case "$exp_file" in
3121                         '') value="$ans";;
3122                         esac
3123                         ;;
3124                 esac
3125                 case "$fullpath" in
3126                 true)
3127                         case "$ansexp" in
3128                         /*) value="$ansexp" ;;
3129                         *)
3130                                 redo=true
3131                                 case "$already" in
3132                                 true)
3133                                 echo "I shall only accept a full path name, as in /bin/ls." >&4
3134                                 echo "Use a ! shell escape if you wish to check pathnames." >&4
3135                                         ;;
3136                                 *)
3137                                 echo "Please give a full path name, starting with slash." >&4
3138                                         case "$tilde" in
3139                                         true)
3140                                 echo "Note that using ~name is ok provided it expands well." >&4
3141                                                 already=true
3142                                                 ;;
3143                                         esac
3144                                 esac
3145                                 ;;
3146                         esac
3147                         ;;
3148                 esac
3149                 case "$redo" in
3150                 '')
3151                         case "$type" in
3152                         File)
3153                                 if test -f "$ansexp"; then
3154                                         type=''
3155                                 elif test -r "$ansexp" || (test -h "$ansexp") >/dev/null 2>&1
3156                                 then
3157                                         echo "($value is not a plain file, but that's ok.)"
3158                                         type=''
3159                                 fi
3160                                 ;;
3161                         Directory)
3162                                 if test -d "$ansexp"; then
3163                                         type=''
3164                                 fi
3165                                 ;;
3166                         Locate)
3167                                 if test -d "$ansexp"; then
3168                                         echo "(Looking for $loc_file in directory $value.)"
3169                                         value="$value/$loc_file"
3170                                         ansexp="$ansexp/$loc_file"
3171                                 fi
3172                                 if test -f "$ansexp"; then
3173                                         type=''
3174                                 fi
3175                                 case "$nopath_ok" in
3176                                 true)   case "$value" in
3177                                         */*) ;;
3178                                         *)      echo "Assuming $value will be in people's path."
3179                                                 type=''
3180                                                 ;;
3181                                         esac
3182                                         ;;
3183                                 esac
3184                                 ;;
3185                         esac
3186
3187                         case "$skip" in
3188                         true) type='';
3189                         esac
3190
3191                         case "$type" in
3192                         '') ;;
3193                         *)
3194                                 if test "$fastread" = yes; then
3195                                         dflt=y
3196                                 else
3197                                         dflt=n
3198                                 fi
3199                                 rp="$what $value doesn't exist.  Use that name anyway?"
3200                                 . UU/myread
3201                                 dflt=''
3202                                 case "$ans" in
3203                                 y*) type='';;
3204                                 *) echo " ";;
3205                                 esac
3206                                 ;;
3207                         esac
3208                         ;;
3209                 esac
3210                 ;;
3211         esac
3212 done
3213 cd UU
3214 ans="$value"
3215 rp="$orig_rp"
3216 dflt="$orig_dflt"
3217 rm -f getfile.ok
3218 EOSC
3219
3220 : determine root of directory hierarchy where package will be installed.
3221 case "$prefix" in
3222 '')
3223         dflt=`./loc . /usr/local /usr/local /local /opt /usr`
3224         ;;
3225 *)
3226         dflt="$prefix"
3227         ;;
3228 esac
3229 $cat <<EOM
3230
3231 By default, $package will be installed in $dflt/bin, manual
3232 pages under $dflt/man, etc..., i.e. with $dflt as prefix for
3233 all installation directories. Typically set to /usr/local, but you
3234 may choose /usr if you wish to install $package among your system
3235 binaries. If you wish to have binaries under /bin but manual pages
3236 under /usr/local/man, that's ok: you will be prompted separately
3237 for each of the installation directories, the prefix being only used
3238 to set the defaults.
3239
3240 EOM
3241 fn=d~
3242 rp='Installation prefix to use?'
3243 . ./getfile
3244 oldprefix=''
3245 case "$prefix" in
3246 '') ;;
3247 *)
3248         case "$ans" in
3249         "$prefix") ;;
3250         *) oldprefix="$prefix";;
3251         esac
3252         ;;
3253 esac
3254 prefix="$ans"
3255 prefixexp="$ansexp"
3256
3257 : set the prefixit variable, to compute a suitable default value
3258 prefixit='case "$3" in
3259 ""|none)
3260         case "$oldprefix" in
3261         "") eval "$1=\"\$$2\"";;
3262         *)
3263                 case "$3" in
3264                 "") eval "$1=";;
3265                 none)
3266                         eval "tp=\"\$$2\"";
3267                         case "$tp" in
3268                         ""|" ") eval "$1=\"\$$2\"";;
3269                         *) eval "$1=";;
3270                         esac;;
3271                 esac;;
3272         esac;;
3273 *)
3274         eval "tp=\"$oldprefix-\$$2-\""; eval "tp=\"$tp\"";
3275         case "$tp" in
3276         --|/*--|\~*--) eval "$1=\"$prefix/$3\"";;
3277         /*-$oldprefix/*|\~*-$oldprefix/*)
3278                 eval "$1=\`echo \$$2 | sed \"s,^$oldprefix,$prefix,\"\`";;
3279         *) eval "$1=\"\$$2\"";;
3280         esac;;
3281 esac'
3282
3283 : set the base revision
3284 baserev=5.0
3285
3286 : get the patchlevel
3287 echo " "
3288 echo "Getting the current patchlevel..." >&4
3289 if $test -r $rsrc/patchlevel.h;then
3290         patchlevel=`awk '/define[       ]+PATCHLEVEL/ {print $3}' $rsrc/patchlevel.h`
3291         subversion=`awk '/define[       ]+SUBVERSION/ {print $3}' $rsrc/patchlevel.h`
3292 else
3293         patchlevel=0
3294         subversion=0
3295 fi
3296 $echo $n "(You have $package" $c
3297 case "$package" in
3298 "*$baserev")    ;;
3299 *)              $echo $n " $baserev" $c ;;
3300 esac
3301 $echo $n " patchlevel $patchlevel" $c
3302 test 0 -eq "$subversion" || $echo $n " subversion $subversion" $c
3303 echo ".)"
3304
3305 if test 0 -eq "$subversion"; then
3306         version=`LC_ALL=C; export LC_ALL; \
3307                  echo $baserev $patchlevel | \
3308                  $awk '{ printf "%.3f\n", $1 + $2/1000.0 }'`
3309 else
3310         version=`LC_ALL=C; export LC_ALL; \
3311                  echo $baserev $patchlevel $subversion | \
3312                  $awk '{ printf "%.5f\n", $1 + $2/1000.0 + $3/100000.0 }'`
3313 fi
3314 : Figure out perl API version.  Perhaps this should be in patchlevel.h
3315 if test "$subversion" -lt 50; then
3316         apiversion=`LC_ALL=C; export LC_ALL; \
3317                  echo $baserev $patchlevel | \
3318                  $awk '{ printf "%.3f\n", $1 + $2/1000.0 }'`
3319 else
3320         apiversion="$version"
3321 fi
3322
3323 : determine where private library files go
3324 : Usual default is /usr/local/lib/perl5/$version.
3325 : Also allow things like /opt/perl/lib/$version, since 
3326 : /opt/perl/lib/perl5... would be redundant.
3327 case "$prefix" in
3328 *perl*) set dflt privlib lib/$version ;;
3329 *)       set dflt privlib lib/$package/$version ;;
3330 esac
3331 eval $prefixit
3332 $cat <<EOM
3333
3334 There are some auxiliary files for $package that need to be put into a
3335 private library directory that is accessible by everyone.
3336
3337 EOM
3338 fn=d~+
3339 rp='Pathname where the private library files will reside?'
3340 . ./getfile
3341 if $test "X$privlibexp" != "X$ansexp"; then
3342         installprivlib=''
3343 fi
3344 privlib="$ans"
3345 privlibexp="$ansexp"
3346 if $afs; then
3347         $cat <<EOM
3348
3349 Since you are running AFS, I need to distinguish the directory in which
3350 private files reside from the directory in which they are installed (and from
3351 which they are presumably copied to the former directory by occult means).
3352
3353 EOM
3354         case "$installprivlib" in
3355         '') dflt=`echo $privlibexp | sed 's#^/afs/#/afs/.#'`;;
3356         *) dflt="$installprivlib";;
3357         esac
3358         fn=de~
3359         rp='Where will private files be installed?'
3360         . ./getfile
3361         installprivlib="$ans"
3362 else
3363         installprivlib="$privlibexp"
3364 fi
3365
3366 : set the prefixup variable, to restore leading tilda escape
3367 prefixup='case "$prefixexp" in
3368 "$prefix") ;;
3369 *) eval "$1=\`echo \$$1 | sed \"s,^$prefixexp,$prefix,\"\`";;
3370 esac'
3371
3372 : determine where public architecture dependent libraries go
3373 set archlib archlib
3374 eval $prefixit
3375 : privlib default is /usr/local/lib/$package/$version
3376 : archlib default is /usr/local/lib/$package/$version/$archname
3377 : privlib may have an optional trailing /share.
3378 tdflt=`echo $privlib | $sed 's,/share$,,'`
3379 tdflt=$tdflt/$archname
3380 case "$archlib" in
3381 '')     dflt=$tdflt
3382         ;;
3383 *)      dflt="$archlib"
3384     ;;
3385 esac
3386 cat <<EOM
3387
3388 $spackage contains architecture-dependent library files.  If you are
3389 sharing libraries in a heterogeneous environment, you might store
3390 these files in a separate location.  Otherwise, you can just include
3391 them with the rest of the public library files.
3392
3393 EOM
3394 fn=d+~
3395 rp='Where do you want to put the public architecture-dependent libraries?'
3396 . ./getfile
3397 archlib="$ans"
3398 archlibexp="$ansexp"
3399
3400 if $afs; then
3401         $cat <<EOM
3402
3403 Since you are running AFS, I need to distinguish the directory in
3404 which architecture-dependent library files reside from the directory
3405 in which they are installed (and from which they are presumably copied
3406 to the former directory by occult means).
3407
3408 EOM
3409         case "$installarchlib" in
3410         '') dflt=`echo $archlibexp | sed 's#^/afs/#/afs/.#'`;;
3411         *) dflt="$installarchlib";;
3412         esac
3413         fn=de~
3414         rp='Where will architecture-dependent library files be installed?'
3415         . ./getfile
3416         installarchlib="$ans"
3417 else
3418         installarchlib="$archlibexp"
3419 fi
3420 if $test X"$archlib" = X"$privlib"; then
3421         d_archlib="$undef"
3422 else
3423         d_archlib="$define"
3424 fi
3425
3426 : make some quick guesses about what we are up against
3427 echo " "
3428 $echo $n "Hmm...  $c"
3429 echo exit 1 >bsd
3430 echo exit 1 >usg
3431 echo exit 1 >v7
3432 echo exit 1 >osf1
3433 echo exit 1 >eunice
3434 echo exit 1 >xenix
3435 echo exit 1 >venix
3436 echo exit 1 >os2
3437 d_bsd="$undef"
3438 $cat /usr/include/signal.h /usr/include/sys/signal.h >foo 2>/dev/null
3439 if test -f /osf_boot || $contains 'OSF/1' /usr/include/ctype.h >/dev/null 2>&1
3440 then
3441         echo "Looks kind of like an OSF/1 system, but we'll see..."
3442         echo exit 0 >osf1
3443 elif test `echo abc | tr a-z A-Z` = Abc ; then
3444         xxx=`./loc addbib blurfl $pth`
3445         if $test -f $xxx; then
3446         echo "Looks kind of like a USG system with BSD features, but we'll see..."
3447                 echo exit 0 >bsd
3448                 echo exit 0 >usg
3449         else
3450                 if $contains SIGTSTP foo >/dev/null 2>&1 ; then
3451                         echo "Looks kind of like an extended USG system, but we'll see..."
3452                 else
3453                         echo "Looks kind of like a USG system, but we'll see..."
3454                 fi
3455                 echo exit 0 >usg
3456         fi
3457 elif $contains SIGTSTP foo >/dev/null 2>&1 ; then
3458         echo "Looks kind of like a BSD system, but we'll see..."
3459         d_bsd="$define"
3460         echo exit 0 >bsd
3461 else
3462         echo "Looks kind of like a Version 7 system, but we'll see..."
3463         echo exit 0 >v7
3464 fi
3465 case "$eunicefix" in
3466 *unixtovms*)
3467         $cat <<'EOI'
3468 There is, however, a strange, musty smell in the air that reminds me of
3469 something...hmm...yes...I've got it...there's a VMS nearby, or I'm a Blit.
3470 EOI
3471         echo exit 0 >eunice
3472         d_eunice="$define"
3473 : it so happens the Eunice I know will not run shell scripts in Unix format
3474         ;;
3475 *)
3476         echo " "
3477         echo "Congratulations.  You aren't running Eunice."
3478         d_eunice="$undef"
3479         ;;
3480 esac
3481 : Detect OS2.  The p_ variable is set above in the Head.U unit.
3482 case "$p_" in
3483 :) ;;
3484 *)
3485         $cat <<'EOI'
3486 I have the feeling something is not exactly right, however...don't tell me...
3487 lemme think...does HAL ring a bell?...no, of course, you're only running OS/2!
3488 EOI
3489         echo exit 0 >os2
3490         ;;
3491 esac
3492 if test -f /xenix; then
3493         echo "Actually, this looks more like a XENIX system..."
3494         echo exit 0 >xenix
3495         d_xenix="$define"
3496 else
3497         echo " "
3498         echo "It's not Xenix..."
3499         d_xenix="$undef"
3500 fi
3501 chmod +x xenix
3502 $eunicefix xenix
3503 if test -f /venix; then
3504         echo "Actually, this looks more like a VENIX system..."
3505         echo exit 0 >venix
3506 else
3507         echo " "
3508         if ./xenix; then
3509                 : null
3510         else
3511                 echo "Nor is it Venix..."
3512         fi
3513 fi
3514 chmod +x bsd usg v7 osf1 eunice xenix venix os2
3515 $eunicefix bsd usg v7 osf1 eunice xenix venix os2
3516 $rm -f foo
3517
3518 : see if setuid scripts can be secure
3519 $cat <<EOM
3520
3521 Some kernels have a bug that prevents setuid #! scripts from being
3522 secure.  Some sites have disabled setuid #! scripts because of this.
3523
3524 First let's decide if your kernel supports secure setuid #! scripts.
3525 (If setuid #! scripts would be secure but have been disabled anyway,
3526 don't say that they are secure if asked.)
3527
3528 EOM
3529
3530 val="$undef"
3531 if $test -d /dev/fd; then
3532         echo "#!$ls" >reflect
3533         chmod +x,u+s reflect
3534         ./reflect >flect 2>&1
3535         if $contains "/dev/fd" flect >/dev/null; then
3536                 echo "Congratulations, your kernel has secure setuid scripts!" >&4
3537                 val="$define"
3538         else
3539                 $cat <<EOM
3540 If you are not sure if they are secure, I can check but I'll need a
3541 username and password different from the one you are using right now.
3542 If you don't have such a username or don't want me to test, simply
3543 enter 'none'.
3544
3545 EOM
3546                 rp='Other username to test security of setuid scripts with?'
3547                 dflt='none'
3548                 . ./myread
3549                 case "$ans" in
3550                 n|none)
3551                         case "$d_suidsafe" in
3552                         '')     echo "I'll assume setuid scripts are *not* secure." >&4
3553                                 dflt=n;;
3554                         "$undef")
3555                                 echo "Well, the $hint value is *not* secure." >&4
3556                                 dflt=n;;
3557                         *)      echo "Well, the $hint value *is* secure." >&4
3558                                 dflt=y;;
3559                         esac
3560                         ;;
3561                 *)
3562                         $rm -f reflect flect
3563                         echo "#!$ls" >reflect
3564                         chmod +x,u+s reflect
3565                         echo >flect
3566                         chmod a+w flect
3567                         echo '"su" will (probably) prompt you for '"$ans's password."
3568                         su $ans -c './reflect >flect'
3569                         if $contains "/dev/fd" flect >/dev/null; then
3570                                 echo "Okay, it looks like setuid scripts are secure." >&4
3571                                 dflt=y
3572                         else
3573                                 echo "I don't think setuid scripts are secure." >&4
3574                                 dflt=n
3575                         fi
3576                         ;;
3577                 esac
3578                 rp='Does your kernel have *secure* setuid scripts?'
3579                 . ./myread
3580                 case "$ans" in
3581                 [yY]*)  val="$define";;
3582                 *)      val="$undef";;
3583                 esac
3584         fi
3585 else
3586         echo "I don't think setuid scripts are secure (no /dev/fd directory)." >&4
3587         echo "(That's for file descriptors, not floppy disks.)"
3588         val="$undef"
3589 fi
3590 set d_suidsafe
3591 eval $setvar
3592
3593 $rm -f reflect flect
3594
3595 : now see if they want to do setuid emulation
3596 echo " "
3597 val="$undef"
3598 case "$d_suidsafe" in
3599 "$define")
3600         val="$undef"
3601         echo "No need to emulate SUID scripts since they are secure here." >& 4
3602         ;;
3603 *)
3604         $cat <<EOM
3605 Some systems have disabled setuid scripts, especially systems where
3606 setuid scripts cannot be secure.  On systems where setuid scripts have
3607 been disabled, the setuid/setgid bits on scripts are currently
3608 useless.  It is possible for $package to detect those bits and emulate
3609 setuid/setgid in a secure fashion.  This emulation will only work if
3610 setuid scripts have been disabled in your kernel.
3611
3612 EOM
3613         case "$d_dosuid" in
3614         "$define") dflt=y ;;
3615         *) dflt=n ;;
3616         esac
3617         rp="Do you want to do setuid/setgid emulation?"
3618         . ./myread
3619         case "$ans" in
3620         [yY]*)  val="$define";;
3621         *)      val="$undef";;
3622         esac
3623         ;;
3624 esac
3625 set d_dosuid
3626 eval $setvar
3627
3628 : determine where manual pages are on this system
3629 echo " "
3630 case "$sysman" in
3631 '') 
3632         syspath='/usr/man/man1 /usr/man/mann /usr/man/manl /usr/man/local/man1'
3633         syspath="$syspath /usr/man/u_man/man1 /usr/share/man/man1"
3634         syspath="$syspath /usr/catman/u_man/man1 /usr/man/l_man/man1"
3635         syspath="$syspath /usr/local/man/u_man/man1 /usr/local/man/l_man/man1"
3636         syspath="$syspath /usr/man/man.L /local/man/man1 /usr/local/man/man1"
3637         sysman=`./loc . /usr/man/man1 $syspath`
3638         ;;
3639 esac
3640 if $test -d "$sysman"; then
3641         echo "System manual is in $sysman." >&4
3642 else
3643         echo "Could not find manual pages in source form." >&4
3644 fi
3645
3646 : see what memory models we can support
3647 case "$models" in
3648 '')
3649         $cat >pdp11.c <<'EOP'
3650 main() {
3651 #ifdef pdp11
3652         exit(0);
3653 #else
3654         exit(1);
3655 #endif
3656 }
3657 EOP
3658         ( cc -o pdp11 pdp11.c ) >/dev/null 2>&1
3659         if $test -f pdp11 && ./pdp11 2>/dev/null; then
3660                 dflt='unsplit split'
3661         else
3662                 tans=`./loc . X /lib/small /lib/large /usr/lib/small /usr/lib/large /lib/medium /usr/lib/medium /lib/huge`
3663                 case "$tans" in
3664                 X) dflt='none';;
3665                 *) if $test -d /lib/small || $test -d /usr/lib/small; then
3666                                 dflt='small'
3667                         else
3668                                 dflt=''
3669                         fi
3670                         if $test -d /lib/medium || $test -d /usr/lib/medium; then
3671                                 dflt="$dflt medium"
3672                         fi
3673                         if $test -d /lib/large || $test -d /usr/lib/large; then
3674                                 dflt="$dflt large"
3675                         fi
3676                         if $test -d /lib/huge || $test -d /usr/lib/huge; then
3677                                 dflt="$dflt huge"
3678                         fi
3679                 esac
3680         fi;;
3681 *) dflt="$models";;
3682 esac
3683 $cat <<EOM
3684  
3685 Some systems have different model sizes.  On most systems they are called
3686 small, medium, large, and huge.  On the PDP11 they are called unsplit and
3687 split.  If your system doesn't support different memory models, say "none".
3688 If you wish to force everything to one memory model, say "none" here and
3689 put the appropriate flags later when it asks you for other cc and ld flags.
3690 Venix systems may wish to put "none" and let the compiler figure things out.
3691 (In the following question multiple model names should be space separated.)
3692
3693 The default for most systems is "none".
3694
3695 EOM
3696 rp="Which memory models are supported?"
3697 . ./myread
3698 models="$ans"
3699
3700 case "$models" in
3701 none)
3702         small=''
3703         medium=''
3704         large=''
3705         huge=''
3706         unsplit=''
3707         split=''
3708         ;;
3709 *split)
3710         case "$split" in
3711         '') if $contains '\-i' $sysman/ld.1 >/dev/null 2>&1 || \
3712                          $contains '\-i' $sysman/cc.1 >/dev/null 2>&1; then
3713                         dflt='-i'
3714                 else
3715                         dflt='none'
3716                 fi;;
3717         *) dflt="$split";;
3718         esac
3719         rp="What flag indicates separate I and D space?"
3720         . ./myread
3721         tans="$ans"
3722         case "$tans" in
3723         none) tans='';;
3724         esac
3725         split="$tans"
3726         unsplit='';;
3727 *large*|*small*|*medium*|*huge*)
3728         case "$models" in
3729         *large*)
3730                 case "$large" in
3731                 '') dflt='-Ml';;
3732                 *) dflt="$large";;
3733                 esac
3734         rp="What flag indicates large model?"
3735         . ./myread
3736         tans="$ans"
3737         case "$tans" in
3738         none) tans='';
3739         esac
3740         large="$tans";;
3741         *) large='';;
3742         esac
3743         case "$models" in
3744         *huge*) case "$huge" in
3745                 '') dflt='-Mh';;
3746                 *) dflt="$huge";;
3747                 esac
3748                 rp="What flag indicates huge model?"
3749                 . ./myread
3750                 tans="$ans"
3751                 case "$tans" in
3752                 none) tans='';
3753                 esac
3754                 huge="$tans";;
3755         *) huge="$large";;
3756         esac
3757         case "$models" in
3758         *medium*) case "$medium" in
3759                 '') dflt='-Mm';;
3760                 *) dflt="$medium";;
3761                 esac
3762                 rp="What flag indicates medium model?"
3763                 . ./myread
3764                 tans="$ans"
3765                 case "$tans" in
3766                 none) tans='';
3767                 esac
3768                 medium="$tans";;
3769         *) medium="$large";;
3770         esac
3771         case "$models" in
3772         *small*) case "$small" in
3773                 '') dflt='none';;
3774                 *) dflt="$small";;
3775                 esac
3776                 rp="What flag indicates small model?"
3777                 . ./myread
3778                 tans="$ans"
3779                 case "$tans" in
3780                 none) tans='';
3781                 esac
3782                 small="$tans";;
3783         *) small='';;
3784         esac
3785         ;;
3786 *)
3787         echo "Unrecognized memory models--you may have to edit Makefile.SH" >&4
3788         ;;
3789 esac
3790 $rm -f pdp11.* pdp11
3791
3792 : see if we need a special compiler
3793 echo " "
3794 if ./usg; then
3795         case "$cc" in
3796         '') case "$Mcc" in
3797                 /*) dflt='Mcc';;
3798                 *) case "$large" in
3799                         -M*) dflt='cc';;
3800                         *)      if $contains '\-M' $sysman/cc.1 >/dev/null 2>&1 ; then
3801                                         if $contains '\-M' $sysman/cpp.1 >/dev/null 2>&1; then
3802                                                 dflt='cc'
3803                                         else
3804                                                 dflt='cc -M'
3805                                         fi
3806                                 else
3807                                         dflt='cc'
3808                                 fi;;
3809                         esac;;
3810                 esac;;
3811         *)  dflt="$cc";;
3812         esac
3813         case "$dflt" in
3814         *M*)    $cat <<'EOM'
3815 On some older systems the default C compiler will not resolve multiple global
3816 references that happen to have the same name.  On some such systems the "Mcc"
3817 command may be used to force these to be resolved.  On other systems a "cc -M"
3818 command is required.  (Note that the -M flag on other systems indicates a
3819 memory model to use!) If you have the Gnu C compiler, you might wish to use
3820 that instead.
3821
3822 EOM
3823         ;;
3824         esac
3825         rp="Use which C compiler?"
3826         . ./myread
3827         cc="$ans"
3828 else
3829         case "$cc" in
3830         '') dflt=cc;;
3831         *) dflt="$cc";;
3832         esac
3833         rp="Use which C compiler?"
3834         . ./myread
3835         cc="$ans"
3836 fi
3837 : Look for a hint-file generated 'call-back-unit'.  Now that the
3838 : user has specified the compiler, we may need to set or change some
3839 : other defaults.
3840 if $test -f cc.cbu; then
3841     . ./cc.cbu
3842 fi
3843 echo " "
3844 echo "Checking for GNU cc in disguise and/or its version number..." >&4
3845 $cat >gccvers.c <<EOM
3846 #include <stdio.h>
3847 int main() {
3848 #ifdef __GNUC__
3849 #ifdef __VERSION__
3850         printf("%s\n", __VERSION__);
3851 #else
3852         printf("%s\n", "1");
3853 #endif
3854 #endif
3855         exit(0);
3856 }
3857 EOM
3858 if $cc -o gccvers gccvers.c >/dev/null 2>&1; then
3859         gccversion=`./gccvers`
3860         case "$gccversion" in
3861         '') echo "You are not using GNU cc." ;;
3862         *)  echo "You are using GNU cc $gccversion." ;;
3863         esac
3864 else
3865         echo " "
3866         echo "*** WHOA THERE!!! ***" >&4
3867         echo "    Your C compiler \"$cc\" doesn't seem to be working!" >&4
3868         case "$knowitall" in
3869         '')
3870         echo "    You'd better start hunting for one and let me know about it." >&4
3871                 exit 1
3872                 ;;
3873         esac
3874 fi
3875 $rm -f gccvers*
3876 case "$gccversion" in
3877 1*) cpp=`./loc gcc-cpp $cpp $pth` ;;
3878 esac
3879
3880 : What should the include directory be ?
3881 echo " "
3882 $echo $n "Hmm...  $c"
3883 dflt='/usr/include'
3884 incpath=''
3885 mips_type=''
3886 if $test -f /bin/mips && /bin/mips; then
3887         echo "Looks like a MIPS system..."
3888         $cat >usr.c <<'EOCP'
3889 #ifdef SYSTYPE_BSD43
3890 /bsd43
3891 #endif
3892 EOCP
3893         if $cc -E usr.c > usr.out && $contains / usr.out >/dev/null 2>&1; then
3894                 dflt='/bsd43/usr/include'
3895                 incpath='/bsd43'
3896                 mips_type='BSD 4.3'
3897         else
3898                 mips_type='System V'
3899         fi
3900         $rm -f usr.c usr.out
3901         echo "and you're compiling with the $mips_type compiler and libraries."
3902         xxx_prompt=y
3903         echo "exit 0" >mips
3904 else
3905         echo "Doesn't look like a MIPS system."
3906         xxx_prompt=n
3907         echo "exit 1" >mips
3908 fi
3909 chmod +x mips
3910 $eunicefix mips
3911 case "$usrinc" in
3912 '') ;;
3913 *) dflt="$usrinc";;
3914 esac
3915 case "$xxx_prompt" in
3916 y)      fn=d/
3917         echo " "
3918         rp='Where are the include files you want to use?'
3919         . ./getfile
3920         usrinc="$ans"
3921         ;;
3922 *)      usrinc="$dflt"
3923         ;;
3924 esac
3925
3926 : see how we invoke the C preprocessor
3927 echo " "
3928 echo "Now, how can we feed standard input to your C preprocessor..." >&4
3929 cat <<'EOT' >testcpp.c
3930 #define ABC abc
3931 #define XYZ xyz
3932 ABC.XYZ
3933 EOT
3934 cd ..
3935 if test ! -f cppstdin; then
3936         echo 'cat >.$$.c; '"$cc"' -E ${1+"$@"} .$$.c; rm .$$.c' >cppstdin
3937 else
3938         echo "Keeping your $hint cppstdin wrapper."
3939 fi
3940 chmod 755 cppstdin
3941 wrapper=`pwd`/cppstdin
3942 ok='false'
3943 cd UU
3944
3945 if $test "X$cppstdin" != "X" && \
3946         $cppstdin $cppminus <testcpp.c >testcpp.out 2>&1 && \
3947         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
3948 then
3949         echo "You used to use $cppstdin $cppminus so we'll use that again."
3950         case "$cpprun" in
3951         '') echo "But let's see if we can live without a wrapper..." ;;
3952         *)
3953                 if $cpprun $cpplast <testcpp.c >testcpp.out 2>&1 && \
3954                         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
3955                 then
3956                         echo "(And we'll use $cpprun $cpplast to preprocess directly.)"
3957                         ok='true'
3958                 else
3959                         echo "(However, $cpprun $cpplast does not work, let's see...)"
3960                 fi
3961                 ;;
3962         esac
3963 else
3964         case "$cppstdin" in
3965         '') ;;
3966         *)
3967                 echo "Good old $cppstdin $cppminus does not seem to be of any help..."
3968                 ;;
3969         esac
3970 fi
3971
3972 if $ok; then
3973         : nothing
3974 elif echo 'Maybe "'"$cc"' -E" will work...'; \
3975         $cc -E <testcpp.c >testcpp.out 2>&1; \
3976         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3977         echo "Yup, it does."
3978         x_cpp="$cc -E"
3979         x_minus='';
3980 elif echo 'Nope...maybe "'"$cc"' -E -" will work...'; \
3981         $cc -E - <testcpp.c >testcpp.out 2>&1; \
3982         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3983         echo "Yup, it does."
3984         x_cpp="$cc -E"
3985         x_minus='-';
3986 elif echo 'Nope...maybe "'"$cc"' -P" will work...'; \
3987         $cc -P <testcpp.c >testcpp.out 2>&1; \
3988         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3989         echo "Yipee, that works!"
3990         x_cpp="$cc -P"
3991         x_minus='';
3992 elif echo 'Nope...maybe "'"$cc"' -P -" will work...'; \
3993         $cc -P - <testcpp.c >testcpp.out 2>&1; \
3994         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
3995         echo "At long last!"
3996         x_cpp="$cc -P"
3997         x_minus='-';
3998 elif echo 'No such luck, maybe "'$cpp'" will work...'; \
3999         $cpp <testcpp.c >testcpp.out 2>&1; \
4000         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
4001         echo "It works!"
4002         x_cpp="$cpp"
4003         x_minus='';
4004 elif echo 'Nixed again...maybe "'$cpp' -" will work...'; \
4005         $cpp - <testcpp.c >testcpp.out 2>&1; \
4006         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
4007         echo "Hooray, it works!  I was beginning to wonder."
4008         x_cpp="$cpp"
4009         x_minus='-';
4010 elif echo 'Uh-uh.  Time to get fancy.  Trying a wrapper...'; \
4011         $wrapper <testcpp.c >testcpp.out 2>&1; \
4012         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
4013         x_cpp="$wrapper"
4014         x_minus=''
4015         echo "Eureka!"
4016 else
4017         dflt=''
4018         rp="No dice.  I can't find a C preprocessor.  Name one:"
4019         . ./myread
4020         x_cpp="$ans"
4021         x_minus=''
4022         $x_cpp <testcpp.c >testcpp.out 2>&1
4023         if $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1 ; then
4024                 echo "OK, that will do." >&4
4025         else
4026 echo "Sorry, I can't get that to work.  Go find one and rerun Configure." >&4
4027                 exit 1
4028         fi
4029 fi
4030
4031 case "$ok" in
4032 false)
4033         cppstdin="$x_cpp"
4034         cppminus="$x_minus"
4035         cpprun="$x_cpp"
4036         cpplast="$x_minus"
4037         set X $x_cpp
4038         shift
4039         case "$1" in
4040         "$cpp")
4041                 echo "Perhaps can we force $cc -E using a wrapper..."
4042                 if $wrapper <testcpp.c >testcpp.out 2>&1; \
4043                         $contains 'abc.*xyz' testcpp.out >/dev/null 2>&1
4044                 then
4045                         echo "Yup, we can."
4046                         cppstdin="$wrapper"
4047                         cppminus='';
4048                 else
4049                         echo "Nope, we'll have to live without it..."
4050                 fi
4051                 ;;
4052         esac
4053         case "$cpprun" in
4054         "$wrapper")
4055                 cpprun=''
4056                 cpplast=''
4057                 ;;
4058         esac
4059         ;;
4060 esac
4061
4062 case "$cppstdin" in
4063 "$wrapper") ;;
4064 *) $rm -f $wrapper;;
4065 esac
4066 $rm -f testcpp.c testcpp.out
4067
4068 : Set private lib path
4069 case "$plibpth" in
4070 '') if ./mips; then
4071                 plibpth="$incpath/usr/lib /usr/local/lib /usr/ccs/lib"
4072         fi;;
4073 esac
4074 case "$libpth" in
4075 ' ') dlist='';;
4076 '') dlist="$loclibpth $plibpth $glibpth";;
4077 *) dlist="$libpth";;
4078 esac
4079
4080 : Now check and see which directories actually exist, avoiding duplicates
4081 libpth=''
4082 for xxx in $dlist
4083 do
4084     if $test -d $xxx; then
4085                 case " $libpth " in
4086                 *" $xxx "*) ;;
4087                 *) libpth="$libpth $xxx";;
4088                 esac
4089     fi
4090 done
4091 $cat <<'EOM'
4092
4093 Some systems have incompatible or broken versions of libraries.  Among
4094 the directories listed in the question below, please remove any you
4095 know not to be holding relevant libraries, and add any that are needed.
4096 Say "none" for none.
4097
4098 EOM
4099 case "$libpth" in
4100 '') dflt='none';;
4101 *)
4102         set X $libpth
4103         shift
4104         dflt=${1+"$@"}
4105         ;;
4106 esac
4107 rp="Directories to use for library searches?"
4108 . ./myread
4109 case "$ans" in
4110 none) libpth=' ';;
4111 *) libpth="$ans";;
4112 esac
4113
4114 : compute shared library extension
4115 case "$so" in
4116 '')
4117         if xxx=`./loc libc.sl X $libpth`; $test -f "$xxx"; then
4118                 dflt='sl'
4119         else
4120                 dflt='so'
4121         fi
4122         ;;
4123 *) dflt="$so";;
4124 esac
4125 $cat <<EOM
4126
4127 On some systems, shared libraries may be available.  Answer 'none' if
4128 you want to suppress searching of shared libraries for the remaining
4129 of this configuration.
4130
4131 EOM
4132 rp='What is the file extension used for shared libraries?'
4133 . ./myread
4134 so="$ans"
4135
4136 : Define several unixisms.
4137 : Hints files or command line option can be used to override them.
4138 : The convoluted testing is in case hints files set either the old
4139 : or the new name.
4140 case "$_exe" in
4141 '')     case "$exe_ext" in
4142     '') ;;
4143         *)      _exe="$exe_ext" ;;
4144         esac
4145         ;;
4146 esac
4147 case "$_a" in
4148 '')     case "$lib_ext" in
4149     '') _a='.a';;
4150         *)      _a="$lib_ext" ;;
4151         esac
4152         ;;
4153 esac
4154 case "$_o" in
4155 '') case "$obj_ext" in
4156         '')     _o='.o';;
4157         *)      _o="$obj_ext";;
4158         esac
4159         ;;
4160 esac
4161 case "$p_" in
4162 '') case "$path_sep" in
4163         '')     p_=':';;
4164         *)      p_="$path_sep";;
4165         esac
4166         ;;
4167 esac
4168 exe_ext=$_exe
4169 lib_ext=$_a
4170 obj_ext=$_o
4171 path_sep=$p_
4172
4173 : Which makefile gets called first.  This is used by make depend.
4174 case "$firstmakefile" in
4175 '') firstmakefile='makefile';;
4176 esac
4177
4178 : Looking for optional libraries
4179 echo " "
4180 echo "Checking for optional libraries..." >&4
4181 case "$libs" in
4182 ' '|'') dflt='';;
4183 *) dflt="$libs";;
4184 esac
4185 case "$libswanted" in
4186 '') libswanted='c_s';;
4187 esac
4188 for thislib in $libswanted; do
4189         
4190         if xxx=`./loc lib$thislib.$so.[0-9]'*' X $libpth`;
4191                 $test -f "$xxx" -a "X$ignore_versioned_solibs" = "X"; then
4192                 echo "Found -l$thislib (shared)."
4193                 case " $dflt " in
4194                 *"-l$thislib "*);;
4195                 *) dflt="$dflt -l$thislib";;
4196                 esac
4197         elif xxx=`./loc lib$thislib.$so X $libpth` ; $test -f "$xxx"; then
4198                 echo "Found -l$thislib (shared)."
4199                 case " $dflt " in
4200                 *"-l$thislib "*);;
4201                 *) dflt="$dflt -l$thislib";;
4202                 esac
4203         elif xxx=`./loc lib$thislib$_a X $libpth`; $test -f "$xxx"; then
4204                 echo "Found -l$thislib."
4205                 case " $dflt " in
4206                 *"-l$thislib "*);;
4207                 *) dflt="$dflt -l$thislib";;
4208                 esac
4209         elif xxx=`./loc $thislib$_a X $libpth`; $test -f "$xxx"; then
4210                 echo "Found -l$thislib."
4211                 case " $dflt " in
4212                 *"-l$thislib "*);;
4213                 *) dflt="$dflt -l$thislib";;
4214                 esac
4215         elif xxx=`./loc lib${thislib}_s$_a X $libpth`; $test -f "$xxx"; then
4216                 echo "Found -l${thislib}_s."
4217                 case " $dflt " in
4218                 *"-l$thislib "*);;
4219                 *) dflt="$dflt -l${thislib}_s";;
4220                 esac
4221         elif xxx=`./loc Slib$thislib$_a X $xlibpth`; $test -f "$xxx"; then
4222                 echo "Found -l$thislib."
4223                 case " $dflt " in
4224                 *"-l$thislib "*);;
4225                 *) dflt="$dflt -l$thislib";;
4226                 esac
4227         else
4228                 echo "No -l$thislib."
4229         fi
4230 done
4231 set X $dflt
4232 shift
4233 dflt="$*"
4234 case "$libs" in
4235 '') dflt="$dflt";;
4236 *) dflt="$libs";;
4237 esac
4238 case "$dflt" in
4239 ' '|'') dflt='none';;
4240 esac
4241
4242 $cat <<EOM
4243  
4244 Some versions of Unix support shared libraries, which make executables smaller
4245 but make load time slightly longer.
4246
4247 On some systems, mostly System V Release 3's, the shared library is included
4248 by putting the option "-lc_s" as the last thing on the cc command line when
4249 linking.  Other systems use shared libraries by default.  There may be other
4250 libraries needed to compile $package on your machine as well.  If your system
4251 needs the "-lc_s" option, include it here.  Include any other special libraries
4252 here as well.  Say "none" for none.
4253 EOM
4254
4255 echo " "
4256 rp="Any additional libraries?"
4257 . ./myread
4258 case "$ans" in
4259 none) libs=' ';;
4260 *) libs="$ans";;
4261 esac
4262
4263 : determine optimize, if desired, or use for debug flag also
4264 case "$optimize" in
4265 ' '|$undef) dflt='none';;
4266 '') dflt='-O';;
4267 *) dflt="$optimize";;
4268 esac
4269 $cat <<EOH
4270
4271 Some C compilers have problems with their optimizers.  By default, $package
4272 compiles with the -O flag to use the optimizer.  Alternately, you might want
4273 to use the symbolic debugger, which uses the -g flag (on traditional Unix
4274 systems).  Either flag can be specified here.  To use neither flag, specify
4275 the word "none".
4276
4277 EOH
4278 rp="What optimizer/debugger flag should be used?"
4279 . ./myread
4280 optimize="$ans"
4281 case "$optimize" in
4282 'none') optimize=" ";;
4283 esac
4284
4285 dflt=''
4286 : We will not override a previous value, but we might want to
4287 : augment a hint file
4288 case "$hint" in
4289 none|recommended)
4290         case "$gccversion" in
4291         1*) dflt='-fpcc-struct-return' ;;
4292         esac
4293         case "$optimize" in
4294         *-g*) dflt="$dflt -DDEBUGGING";;
4295         esac
4296         case "$gccversion" in
4297         2*) if test -d /etc/conf/kconfig.d &&
4298                         $contains _POSIX_VERSION $usrinc/sys/unistd.h >/dev/null 2>&1
4299                 then
4300                         dflt="$dflt -posix"
4301                 fi
4302                 ;;
4303         esac
4304         ;;
4305 esac
4306
4307 case "$mips_type" in
4308 *BSD*|'') inclwanted="$locincpth $usrinc";;
4309 *) inclwanted="$locincpth $inclwanted $usrinc/bsd";;
4310 esac
4311 for thisincl in $inclwanted; do
4312         if $test -d $thisincl; then
4313                 if $test x$thisincl != x$usrinc; then
4314                         case "$dflt" in
4315                         *$thisincl*);;
4316                         *) dflt="$dflt -I$thisincl";;
4317                         esac
4318                 fi
4319         fi
4320 done
4321
4322 inctest='if $contains $2 $usrinc/$1 >/dev/null 2>&1; then
4323         xxx=true;
4324 elif $contains $2 $usrinc/sys/$1 >/dev/null 2>&1; then
4325         xxx=true;
4326 else
4327         xxx=false;
4328 fi;
4329 if $xxx; then
4330         case "$dflt" in
4331         *$2*);;
4332         *) dflt="$dflt -D$2";;
4333         esac;
4334 fi'
4335
4336 if ./osf1; then
4337         set signal.h __LANGUAGE_C__; eval $inctest
4338 else
4339         set signal.h LANGUAGE_C; eval $inctest
4340 fi
4341
4342 case "$hint" in
4343 none|recommended) dflt="$ccflags $dflt" ;;
4344 *) dflt="$ccflags";;
4345 esac
4346
4347 case "$dflt" in
4348 ''|' ') dflt=none;;
4349 esac
4350 $cat <<EOH
4351
4352 Your C compiler may want other flags.  For this question you should include
4353 -I/whatever and -DWHATEVER flags and any other flags used by the C compiler,
4354 but you should NOT include libraries or ld flags like -lwhatever.  If you
4355 want $package to honor its debug switch, you should include -DDEBUGGING here.
4356 Your C compiler might also need additional flags, such as -D_POSIX_SOURCE.
4357
4358 To use no flags, specify the word "none".
4359
4360 EOH
4361 set X $dflt
4362 shift
4363 dflt=${1+"$@"}
4364 rp="Any additional cc flags?"
4365 . ./myread
4366 case "$ans" in
4367 none) ccflags='';;
4368 *) ccflags="$ans";;
4369 esac
4370
4371 : the following weeds options from ccflags that are of no interest to cpp
4372 cppflags="$ccflags"
4373 case "$gccversion" in
4374 1*) cppflags="$cppflags -D__GNUC__"
4375 esac
4376 case "$mips_type" in
4377 '');;
4378 *BSD*) cppflags="$cppflags -DSYSTYPE_BSD43";;
4379 esac
4380 case "$cppflags" in
4381 '');;
4382 *)
4383         echo " "
4384         echo "Let me guess what the preprocessor flags are..." >&4
4385         set X $cppflags
4386         shift
4387         cppflags=''
4388         $cat >cpp.c <<'EOM'
4389 #define BLURFL foo
4390
4391 BLURFL xx LFRULB
4392 EOM
4393         previous=''
4394         for flag in $*
4395         do
4396                 case "$flag" in
4397                 -*) ftry="$flag";;
4398                 *) ftry="$previous $flag";;
4399                 esac
4400                 if $cppstdin -DLFRULB=bar $cppflags $ftry $cppminus <cpp.c \
4401                         >cpp1.out 2>/dev/null && \
4402                         $cpprun -DLFRULB=bar $cppflags $ftry $cpplast <cpp.c \
4403                         >cpp2.out 2>/dev/null && \
4404                         $contains 'foo.*xx.*bar' cpp1.out >/dev/null 2>&1 && \
4405                         $contains 'foo.*xx.*bar' cpp2.out >/dev/null 2>&1
4406                 then
4407                         cppflags="$cppflags $ftry"
4408                         previous=''
4409                 else
4410                         previous="$flag"
4411                 fi
4412         done
4413         set X $cppflags
4414         shift
4415         cppflags=${1+"$@"}
4416         case "$cppflags" in
4417         *-*)  echo "They appear to be: $cppflags";;
4418         esac
4419         $rm -f cpp.c cpp?.out
4420         ;;
4421 esac
4422
4423 : flags used in final linking phase
4424 case "$ldflags" in
4425 '') if ./venix; then
4426                 dflt='-i -z'
4427         else
4428                 dflt=''
4429         fi
4430         case "$ccflags" in
4431         *-posix*) dflt="$dflt -posix" ;;
4432         esac
4433         ;;
4434 *) dflt="$ldflags";;
4435 esac
4436
4437 : Try to guess additional flags to pick up local libraries.
4438 for thislibdir in $libpth; do
4439         case " $loclibpth " in
4440         *" $thislibdir "*)
4441                 case "$dflt " in 
4442                 *"-L$thislibdir "*) ;;
4443                 *)  dflt="$dflt -L$thislibdir" ;;
4444                 esac
4445                 ;;
4446         esac
4447 done
4448
4449 case "$dflt" in
4450 '') dflt='none' ;;
4451 esac
4452
4453 $cat <<EOH
4454
4455 Your C linker may need flags.  For this question you should
4456 include -L/whatever and any other flags used by the C linker, but you
4457 should NOT include libraries like -lwhatever.
4458
4459 Make sure you include the appropriate -L/path flags if your C linker
4460 does not normally search all of the directories you specified above,
4461 namely
4462         $libpth
4463 To use no flags, specify the word "none".
4464
4465 EOH
4466
4467 rp="Any additional ld flags (NOT including libraries)?"
4468 . ./myread
4469 case "$ans" in
4470 none) ldflags='';;
4471 *) ldflags="$ans";;
4472 esac
4473 rmlist="$rmlist pdp11"
4474
4475 : coherency check
4476 echo " "
4477 echo "Checking your choice of C compiler and flags for coherency..." >&4
4478 $cat > try.c <<'EOF'
4479 #include <stdio.h>
4480 main() { printf("Ok\n"); exit(0); }
4481 EOF
4482 set X $cc $optimize $ccflags -o try $ldflags try.c $libs
4483 shift
4484 $cat >try.msg <<'EOM'
4485 I've tried to compile and run the following simple program:
4486
4487 EOM
4488 $cat try.c >> try.msg
4489
4490 $cat >> try.msg <<EOM
4491
4492 I used the command:
4493
4494         $*
4495         ./try
4496
4497 and I got the following output:
4498
4499 EOM
4500 dflt=y
4501 if sh -c "$cc $optimize $ccflags -o try $ldflags try.c $libs" >>try.msg 2>&1; then
4502         if sh -c './try' >>try.msg 2>&1; then
4503                 xxx=`./try`
4504                 case "$xxx" in
4505                 "Ok") dflt=n ;;
4506                 *)      echo 'The program compiled OK, but produced no output.' >> try.msg
4507                         case " $libs " in
4508                         *" -lsfio "*)
4509                                 cat >> try.msg <<'EOQS'
4510 If $libs contains -lsfio, and sfio is mis-configured, then it
4511 sometimes (apparently) runs and exits with a 0 status, but with no
4512 output!  It may have to do with sfio's use of _exit vs. exit.
4513
4514 EOQS
4515                                 rp="You have a big problem.  Shall I abort Configure"
4516                                 dflt=y
4517                                 ;;
4518                         esac
4519                         ;;
4520                 esac
4521         else
4522                 echo "The program compiled OK, but exited with status $?." >>try.msg
4523                 rp="You have a problem.  Shall I abort Configure"
4524                 dflt=y
4525         fi
4526 else
4527         echo "I can't compile the test program." >>try.msg
4528         rp="You have a BIG problem.  Shall I abort Configure"
4529         dflt=y
4530 fi
4531 case "$dflt" in
4532 y)
4533         $cat try.msg >&4
4534         case "$knowitall" in
4535         '')
4536                 echo "(The supplied flags or libraries might be incorrect.)"
4537                 ;;
4538         *) dflt=n;;
4539         esac
4540         echo " "
4541         . ./myread
4542         case "$ans" in
4543         n*|N*) ;;
4544         *)      echo "Ok.  Stopping Configure." >&4
4545                 exit 1
4546                 ;;
4547         esac
4548         ;;
4549 n) echo "OK, that should do.";;
4550 esac
4551 $rm -f try try.* core
4552
4553 : determine filename position in cpp output
4554 echo " "
4555 echo "Computing filename position in cpp output for #include directives..." >&4
4556 echo '#include <stdio.h>' > foo.c
4557 $cat >fieldn <<EOF
4558 $startsh
4559 $cppstdin $cppflags $cppminus <foo.c 2>/dev/null | \
4560 $grep '^[       ]*#.*stdio\.h' | \
4561 while read cline; do
4562         pos=1
4563         set \$cline
4564         while $test \$# -gt 0; do
4565                 if $test -r \`echo \$1 | $tr -d '"'\`; then
4566                         echo "\$pos"
4567                         exit 0
4568                 fi
4569                 shift
4570                 pos=\`expr \$pos + 1\`
4571         done
4572 done
4573 EOF
4574 chmod +x fieldn
4575 fieldn=`./fieldn`
4576 $rm -f foo.c fieldn
4577 case $fieldn in
4578 '') pos='???';;
4579 1) pos=first;;
4580 2) pos=second;;
4581 3) pos=third;;
4582 *) pos="${fieldn}th";;
4583 esac
4584 echo "Your cpp writes the filename in the $pos field of the line."
4585
4586 : locate header file
4587 $cat >findhdr <<EOF
4588 $startsh
4589 wanted=\$1
4590 name=''
4591 if test -f $usrinc/\$wanted; then
4592         echo "$usrinc/\$wanted"
4593         exit 0
4594 fi
4595 awkprg='{ print \$$fieldn }'
4596 echo "#include <\$wanted>" > foo\$\$.c
4597 $cppstdin $cppminus $cppflags < foo\$\$.c 2>/dev/null | \
4598 $grep "^[       ]*#.*\$wanted" | \
4599 while read cline; do
4600         name=\`echo \$cline | $awk "\$awkprg" | $tr -d '"'\`
4601         case "\$name" in
4602         */\$wanted) echo "\$name"; exit 0;;
4603         *) name='';;
4604         esac;
4605 done;
4606 $rm -f foo\$\$.c;
4607 case "\$name" in
4608 '') exit 1;;
4609 esac
4610 EOF
4611 chmod +x findhdr
4612
4613 : define an alternate in-header-list? function
4614 inhdr='echo " "; td=$define; tu=$undef; yyy=$@;
4615 cont=true; xxf="echo \"<\$1> found.\" >&4";
4616 case $# in 2) xxnf="echo \"<\$1> NOT found.\" >&4";;
4617 *) xxnf="echo \"<\$1> NOT found, ...\" >&4";;
4618 esac;
4619 case $# in 4) instead=instead;; *) instead="at last";; esac;
4620 while $test "$cont"; do
4621         xxx=`./findhdr $1`
4622         var=$2; eval "was=\$$2";
4623         if $test "$xxx" && $test -r "$xxx";
4624         then eval $xxf;
4625         eval "case \"\$$var\" in $undef) . ./whoa; esac"; eval "$var=\$td";
4626                 cont="";
4627         else eval $xxnf;
4628         eval "case \"\$$var\" in $define) . ./whoa; esac"; eval "$var=\$tu"; fi;
4629         set $yyy; shift; shift; yyy=$@;
4630         case $# in 0) cont="";;
4631         2) xxf="echo \"but I found <\$1> $instead.\" >&4";
4632                 xxnf="echo \"and I did not find <\$1> either.\" >&4";;
4633         *) xxf="echo \"but I found <\$1\> instead.\" >&4";
4634                 xxnf="echo \"there is no <\$1>, ...\" >&4";;
4635         esac;
4636 done;
4637 while $test "$yyy";
4638 do set $yyy; var=$2; eval "was=\$$2";
4639         eval "case \"\$$var\" in $define) . ./whoa; esac"; eval "$var=\$tu";
4640         set $yyy; shift; shift; yyy=$@;
4641 done'
4642
4643 : see if this is a malloc.h system
4644 set malloc.h i_malloc
4645 eval $inhdr
4646
4647 : see if stdlib is available
4648 set stdlib.h i_stdlib
4649 eval $inhdr
4650
4651 : determine which malloc to compile in
4652 echo " "
4653 case "$usemymalloc" in
4654 ''|[yY]*|true|$define)  dflt='y' ;;
4655 *)      dflt='n' ;;
4656 esac
4657 rp="Do you wish to attempt to use the malloc that comes with $package?"
4658 . ./myread
4659 usemymalloc="$ans"
4660 case "$ans" in
4661 y*|true)
4662         usemymalloc='y'
4663         mallocsrc='malloc.c'
4664         mallocobj="malloc$_o"
4665         d_mymalloc="$define"
4666         case "$libs" in
4667         *-lmalloc*)
4668                 : Remove malloc from list of libraries to use
4669                 echo "Removing unneeded -lmalloc from library list" >&4
4670                 set `echo X $libs | $sed -e 's/-lmalloc / /' -e 's/-lmalloc$//'`
4671                 shift
4672                 libs="$*"
4673                 echo "libs = $libs" >&4
4674                 ;;
4675         esac
4676         ;;
4677 *)
4678         usemymalloc='n'
4679         mallocsrc=''
4680         mallocobj=''
4681         d_mymalloc="$undef"
4682         ;;
4683 esac
4684
4685 : compute the return types of malloc and free
4686 echo " "
4687 $cat >malloc.c <<END
4688 #$i_malloc I_MALLOC
4689 #$i_stdlib I_STDLIB
4690 #include <stdio.h>
4691 #include <sys/types.h>
4692 #ifdef I_MALLOC
4693 #include <malloc.h>
4694 #endif
4695 #ifdef I_STDLIB
4696 #include <stdlib.h>
4697 #endif
4698 #ifdef TRY_MALLOC
4699 void *malloc();
4700 #endif
4701 #ifdef TRY_FREE
4702 void free();
4703 #endif
4704 END
4705 case "$malloctype" in
4706 '')
4707         if $cc $ccflags -c -DTRY_MALLOC malloc.c >/dev/null 2>&1; then
4708                 malloctype='void *'
4709         else
4710                 malloctype='char *'
4711         fi
4712         ;;
4713 esac
4714 echo "Your system wants malloc to return '$malloctype', it would seem." >&4
4715
4716 case "$freetype" in
4717 '')
4718         if $cc $ccflags -c -DTRY_FREE malloc.c >/dev/null 2>&1; then
4719                 freetype='void'
4720         else
4721                 freetype='int'
4722         fi
4723         ;;
4724 esac
4725 echo "Your system uses $freetype free(), it would seem." >&4
4726 $rm -f malloc.[co]
4727 : Cruising for prototypes
4728 echo " "
4729 echo "Checking out function prototypes..." >&4
4730 $cat >prototype.c <<'EOCP'
4731 int main(int argc, char *argv[]) {
4732         exit(0);}
4733 EOCP
4734 if $cc $ccflags -c prototype.c >prototype.out 2>&1 ; then
4735         echo "Your C compiler appears to support function prototypes."
4736         val="$define"
4737 else
4738         echo "Your C compiler doesn't seem to understand function prototypes."
4739         val="$undef"
4740 fi
4741 set prototype
4742 eval $setvar
4743 $rm -f prototype*
4744
4745 case "$prototype" in
4746 "$define") ;;
4747 *)      ansi2knr='ansi2knr'
4748         echo " "
4749         cat <<EOM >&4
4750
4751 $me:  FATAL ERROR:
4752 This version of $package can only be compiled by a compiler that 
4753 understands function prototypes.  Unfortunately, your C compiler 
4754         $cc $ccflags
4755 doesn't seem to understand them.  Sorry about that.
4756
4757 If GNU cc is available for your system, perhaps you could try that instead.  
4758
4759 Eventually, we hope to support building Perl with pre-ANSI compilers.
4760 If you would like to help in that effort, please contact <perlbug@perl.org>.
4761
4762 Aborting Configure now.
4763 EOM
4764         exit 2
4765         ;;
4766 esac
4767
4768 : determine where public executables go
4769 echo " "
4770 set dflt bin bin
4771 eval $prefixit
4772 fn=d~
4773 rp='Pathname where the public executables will reside?'
4774 . ./getfile
4775 if $test "X$ansexp" != "X$binexp"; then
4776         installbin=''
4777 fi
4778 bin="$ans"
4779 binexp="$ansexp"
4780 if $afs; then
4781         $cat <<EOM
4782
4783 Since you are running AFS, I need to distinguish the directory in which
4784 executables reside from the directory in which they are installed (and from
4785 which they are presumably copied to the former directory by occult means).
4786
4787 EOM
4788         case "$installbin" in
4789         '') dflt=`echo $binexp | sed 's#^/afs/#/afs/.#'`;;
4790         *) dflt="$installbin";;
4791         esac
4792         fn=de~
4793         rp='Where will public executables be installed?'
4794         . ./getfile
4795         installbin="$ans"
4796 else
4797         installbin="$binexp"
4798 fi
4799
4800 : define a shorthand compile call
4801 compile='
4802 mc_file=$1;
4803 shift;
4804 $cc $optimize $ccflags $ldflags -o ${mc_file} $* ${mc_file}.c $libs > /dev/null 2>&1;'
4805 : define a shorthand compile call for compilations that should be ok.
4806 compile_ok='
4807 mc_file=$1;
4808 shift;
4809 $cc $optimize $ccflags $ldflags -o ${mc_file} $* ${mc_file}.c $libs;'
4810
4811 echo " "
4812 echo "Checking for GNU C Library..." >&4
4813 cat >gnulibc.c <<EOM
4814 #include <stdio.h>
4815 int main()
4816 {
4817 #ifdef __GLIBC__
4818     exit(0);
4819 #else
4820     exit(1);
4821 #endif
4822 }
4823 EOM
4824 set gnulibc
4825 if eval $compile_ok && ./gnulibc; then
4826         val="$define"
4827         echo "You are using the GNU C Library"
4828 else
4829         val="$undef"
4830         echo "You are not using the GNU C Library"
4831 fi
4832 $rm -f gnulibc*
4833 set d_gnulibc
4834 eval $setvar
4835
4836 : see if nm is to be used to determine whether a symbol is defined or not
4837 case "$usenm" in
4838 '')
4839         dflt=''
4840         case "$d_gnulibc" in
4841         "$define")
4842                 echo " "
4843                 echo "nm probably won't work on the GNU C Library." >&4
4844                 dflt=n
4845                 ;;
4846         esac
4847         case "$dflt" in
4848         '') 
4849                 if $test "$osname" = aix -a ! -f /lib/syscalls.exp; then
4850                         echo " "
4851                         echo "Whoops!  This is an AIX system without /lib/syscalls.exp!" >&4
4852                         echo "'nm' won't be sufficient on this sytem." >&4
4853                         dflt=n
4854                 fi
4855                 ;;
4856         esac
4857         case "$dflt" in
4858         '') dflt=`$egrep 'inlibc|csym' $rsrc/Configure | wc -l 2>/dev/null`
4859                 if $test $dflt -gt 20; then
4860                         dflt=y
4861                 else
4862                         dflt=n
4863                 fi
4864                 ;;
4865         esac
4866         ;;
4867 *)
4868         case "$usenm" in
4869         true|$define) dflt=y;;
4870         *) dflt=n;;
4871         esac
4872         ;;
4873 esac
4874 $cat <<EOM
4875
4876 I can use $nm to extract the symbols from your C libraries. This
4877 is a time consuming task which may generate huge output on the disk (up
4878 to 3 megabytes) but that should make the symbols extraction faster. The
4879 alternative is to skip the 'nm' extraction part and to compile a small
4880 test program instead to determine whether each symbol is present. If
4881 you have a fast C compiler and/or if your 'nm' output cannot be parsed,
4882 this may be the best solution.
4883
4884 You probably shouldn't let me use 'nm' if you are using the GNU C Library.
4885
4886 EOM
4887 rp="Shall I use $nm to extract C symbols from the libraries?"
4888 . ./myread
4889 case "$ans" in
4890 [Nn]*) usenm=false;;
4891 *) usenm=true;;
4892 esac
4893
4894 runnm=$usenm
4895 case "$reuseval" in
4896 true) runnm=false;;
4897 esac
4898
4899 : nm options which may be necessary
4900 case "$nm_opt" in
4901 '') if $test -f /mach_boot; then
4902                 nm_opt=''       # Mach
4903         elif $test -d /usr/ccs/lib; then
4904                 nm_opt='-p'     # Solaris (and SunOS?)
4905         elif $test -f /dgux; then
4906                 nm_opt='-p'     # DG-UX
4907         elif $test -f /lib64/rld; then
4908                 nm_opt='-p'     # 64-bit Irix
4909         else
4910                 nm_opt=''
4911         fi;;
4912 esac
4913
4914 : nm options which may be necessary for shared libraries but illegal
4915 : for archive libraries.  Thank you, Linux.
4916 case "$nm_so_opt" in
4917 '')     case "$myuname" in
4918         *linux*)
4919                 if $nm --help | $grep 'dynamic' > /dev/null 2>&1; then
4920                         nm_so_opt='--dynamic'
4921                 fi
4922                 ;;
4923         esac
4924         ;;
4925 esac
4926
4927 case "$runnm" in
4928 true)
4929 : get list of predefined functions in a handy place
4930 echo " "
4931 case "$libc" in
4932 '') libc=unknown
4933         case "$libs" in
4934         *-lc_s*) libc=`./loc libc_s$_a $libc $libpth`
4935         esac
4936         ;;
4937 esac
4938 libnames='';
4939 case "$libs" in
4940 '') ;;
4941 *)  for thislib in $libs; do
4942         case "$thislib" in
4943         -lc|-lc_s)
4944                 : Handle C library specially below.
4945                 ;;
4946         -l*)
4947                 thislib=`echo $thislib | $sed -e 's/^-l//'`
4948                 if try=`./loc lib$thislib.$so.'*' X $libpth`; $test -f "$try"; then
4949                         :
4950                 elif try=`./loc lib$thislib.$so X $libpth`; $test -f "$try"; then
4951                         :
4952                 elif try=`./loc lib$thislib$_a X $libpth`; $test -f "$try"; then
4953                         :
4954                 elif try=`./loc $thislib$_a X $libpth`; $test -f "$try"; then
4955                         :
4956                 elif try=`./loc lib$thislib X $libpth`; $test -f "$try"; then
4957                         :
4958                 elif try=`./loc $thislib X $libpth`; $test -f "$try"; then
4959                         :
4960                 elif try=`./loc Slib$thislib$_a X $xlibpth`; $test -f "$try"; then
4961                         :
4962                 else
4963                         try=''
4964                 fi
4965                 libnames="$libnames $try"
4966                 ;;
4967         *) libnames="$libnames $thislib" ;;
4968         esac
4969         done
4970         ;;
4971 esac
4972 xxx=normal
4973 case "$libc" in
4974 unknown)
4975         set /lib/libc.$so
4976         for xxx in $libpth; do
4977                 $test -r $1 || set $xxx/libc.$so
4978                 : The messy sed command sorts on library version numbers.
4979                 $test -r $1 || \
4980                         set `echo blurfl; echo $xxx/libc.$so.[0-9]* | \
4981                         tr ' ' $trnl | egrep -v '\.[A-Za-z]*$' | $sed -e '
4982                                 h
4983                                 s/[0-9][0-9]*/0000&/g
4984                                 s/0*\([0-9][0-9][0-9][0-9][0-9]\)/\1/g
4985                                 G
4986                                 s/\n/ /' | \
4987                          sort | $sed -e 's/^.* //'`
4988                 eval set \$$#
4989         done
4990         $test -r $1 || set /usr/ccs/lib/libc.$so
4991         $test -r $1 || set /lib/libsys_s$_a
4992         ;;
4993 *)
4994         set blurfl
4995         ;;
4996 esac
4997 if $test -r "$1"; then
4998         echo "Your (shared) C library seems to be in $1."
4999         libc="$1"
5000 elif $test -r /lib/libc && $test -r /lib/clib; then
5001         echo "Your C library seems to be in both /lib/clib and /lib/libc."
5002         xxx=apollo
5003         libc='/lib/clib /lib/libc'
5004         if $test -r /lib/syslib; then
5005                 echo "(Your math library is in /lib/syslib.)"
5006                 libc="$libc /lib/syslib"
5007         fi
5008 elif $test -r "$libc" || (test -h "$libc") >/dev/null 2>&1; then
5009         echo "Your C library seems to be in $libc, as you said before."
5010 elif $test -r $incpath/usr/lib/libc$_a; then
5011         libc=$incpath/usr/lib/libc$_a;
5012         echo "Your C library seems to be in $libc.  That's fine."
5013 elif $test -r /lib/libc$_a; then
5014         libc=/lib/libc$_a;
5015         echo "Your C library seems to be in $libc.  You're normal."
5016 else
5017         if tans=`./loc libc$_a blurfl/dyick $libpth`; $test -r "$tans"; then
5018                 :
5019         elif tans=`./loc libc blurfl/dyick $libpth`; $test -r "$tans"; then
5020                 libnames="$libnames "`./loc clib blurfl/dyick $libpth`
5021         elif tans=`./loc clib blurfl/dyick $libpth`; $test -r "$tans"; then
5022                 :
5023         elif tans=`./loc Slibc$_a blurfl/dyick $xlibpth`; $test -r "$tans"; then
5024                 :
5025         elif tans=`./loc Mlibc$_a blurfl/dyick $xlibpth`; $test -r "$tans"; then
5026                 :
5027         else
5028                 tans=`./loc Llibc$_a blurfl/dyick $xlibpth`
5029         fi
5030         if $test -r "$tans"; then
5031                 echo "Your C library seems to be in $tans, of all places."
5032                 libc=$tans
5033         else
5034                 libc='blurfl'
5035         fi
5036 fi
5037 if $test $xxx = apollo -o -r "$libc" || (test -h "$libc") >/dev/null 2>&1; then
5038         dflt="$libc"
5039         cat <<EOM
5040
5041 If the guess above is wrong (which it might be if you're using a strange
5042 compiler, or your machine supports multiple models), you can override it here.
5043
5044 EOM
5045 else
5046         dflt=''
5047         echo $libpth | tr ' ' $trnl | sort | uniq > libpath
5048         cat >&4 <<EOM
5049 I can't seem to find your C library.  I've looked in the following places:
5050
5051 EOM
5052         $sed 's/^/      /' libpath
5053         cat <<EOM
5054
5055 None of these seems to contain your C library. I need to get its name...
5056
5057 EOM
5058 fi
5059 fn=f
5060 rp='Where is your C library?'
5061 . ./getfile
5062 libc="$ans"
5063
5064 echo " "
5065 echo $libc $libnames | tr ' ' $trnl | sort | uniq > libnames
5066 set X `cat libnames`
5067 shift
5068 xxx=files
5069 case $# in 1) xxx=file; esac
5070 echo "Extracting names from the following $xxx for later perusal:" >&4
5071 echo " "
5072 $sed 's/^/      /' libnames >&4
5073 echo " "
5074 $echo $n "This may take a while...$c" >&4
5075
5076 for file in $*; do
5077         case $file in
5078         *$so*) $nm $nm_so_opt $nm_opt $file 2>/dev/null;;
5079         *) $nm $nm_opt $file 2>/dev/null;;
5080         esac
5081 done >libc.tmp
5082
5083 $echo $n ".$c"
5084 $grep fprintf libc.tmp > libc.ptf
5085 xscan='eval "<libc.ptf $com >libc.list"; $echo $n ".$c" >&4'
5086 xrun='eval "<libc.tmp $com >libc.list"; echo "done" >&4'
5087 xxx='[ADTSIW]'
5088 if com="$sed -n -e 's/__IO//' -e 's/^.* $xxx  *_[_.]*//p' -e 's/^.* $xxx  *//p'";\
5089         eval $xscan;\
5090         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5091                 eval $xrun
5092 elif com="$sed -n -e 's/^__*//' -e 's/^\([a-zA-Z_0-9$]*\).*xtern.*/\1/p'";\
5093         eval $xscan;\
5094         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5095                 eval $xrun
5096 elif com="$sed -n -e '/|UNDEF/d' -e '/FUNC..GL/s/^.*|__*//p'";\
5097         eval $xscan;\
5098         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5099                 eval $xrun
5100 elif com="$sed -n -e 's/^.* D __*//p' -e 's/^.* D //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 's/^\([a-zA-Z_0-9]*\).*xtern.*text.*/\1/p'";\
5105         eval $xscan;\
5106         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5107                 eval $xrun
5108 elif com="$sed -n -e 's/^.*|FUNC |GLOB .*|//p'";\
5109         eval $xscan;\
5110         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5111                 eval $xrun
5112 elif com="$grep '|' | $sed -n -e '/|COMMON/d' -e '/|DATA/d' \
5113                                 -e '/ file/d' -e 's/^\([^       ]*\).*/\1/p'";\
5114         eval $xscan;\
5115         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5116                 eval $xrun
5117 elif com="$sed -n -e 's/^.*|FUNC |GLOB .*|//p' -e 's/^.*|FUNC |WEAK .*|//p'";\
5118         eval $xscan;\
5119         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5120                 eval $xrun
5121 elif com="$sed -n -e 's/^__//' -e '/|Undef/d' -e '/|Proc/s/ .*//p'";\
5122         eval $xscan;\
5123         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5124                 eval $xrun
5125 elif com="$sed -n -e 's/^.*|Proc .*|Text *| *//p'";\
5126         eval $xscan;\
5127         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5128                 eval $xrun
5129 elif com="$sed -n -e '/Def. Text/s/.* \([^ ]*\)\$/\1/p'";\
5130         eval $xscan;\
5131         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5132                 eval $xrun
5133 elif com="$sed -n -e 's/^[-0-9a-f ]*_\(.*\)=.*/\1/p'";\
5134         eval $xscan;\
5135         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5136                 eval $xrun
5137 elif com="$sed -n -e 's/.*\.text n\ \ \ \.//p'";\
5138         eval $xscan;\
5139         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5140                 eval $xrun
5141 elif com="sed -n -e 's/^__.*//' -e 's/[       ]*D[    ]*[0-9]*.*//p'";\
5142         eval $xscan;\
5143         $contains '^fprintf$' libc.list >/dev/null 2>&1; then
5144                 eval $xrun
5145 else
5146         $nm -p $* 2>/dev/null >libc.tmp
5147         $grep fprintf libc.tmp > libc.ptf
5148         if com="$sed -n -e 's/^.* [ADTSIW]  *_[_.]*//p' -e 's/^.* [ADTSIW] //p'";\
5149                 eval $xscan; $contains '^fprintf$' libc.list >/dev/null 2>&1
5150         then
5151                 nm_opt='-p'
5152                 eval $xrun
5153         else
5154                 echo " "
5155                 echo "$nm didn't seem to work right. Trying $ar instead..." >&4
5156                 com=''
5157                 if $ar t $libc > libc.tmp && $contains '^fprintf$' libc.tmp >/dev/null 2>&1; then
5158                         for thisname in $libnames $libc; do
5159                                 $ar t $thisname >>libc.tmp
5160                         done
5161                         $sed -e "s/\\$_o\$//" < libc.tmp > libc.list
5162                         echo "Ok." >&4
5163                 elif test "X$osname" = "Xos2" && $ar tv $libc > libc.tmp; then
5164                         # Repeat libc to extract forwarders to DLL entries too
5165                         for thisname in $libnames $libc; do
5166                                 $ar tv $thisname >>libc.tmp
5167                                 # Revision 50 of EMX has bug in $ar.
5168                                 # it will not extract forwarders to DLL entries
5169                                 # Use emximp which will extract exactly them.
5170                                 emximp -o tmp.imp $thisname \
5171                                     2>/dev/null && \
5172                                     $sed -e 's/^\([_a-zA-Z0-9]*\) .*$/\1/p' \
5173                                     < tmp.imp >>libc.tmp
5174                                 $rm tmp.imp
5175                         done
5176                         $sed -e "s/\\$_o\$//" -e 's/^ \+//' < libc.tmp > libc.list
5177                         echo "Ok." >&4
5178                 else
5179                         echo "$ar didn't seem to work right." >&4
5180                         echo "Maybe this is a Cray...trying bld instead..." >&4
5181                         if bld t $libc | $sed -e 's/.*\///' -e "s/\\$_o:.*\$//" > libc.list
5182                         then
5183                                 for thisname in $libnames; do
5184                                         bld t $libnames | \
5185                                         $sed -e 's/.*\///' -e "s/\\$_o:.*\$//" >>libc.list
5186                                         $ar t $thisname >>libc.tmp
5187                                 done
5188                                 echo "Ok." >&4
5189                         else
5190                                 echo "That didn't work either.  Giving up." >&4
5191                                 exit 1
5192                         fi
5193                 fi
5194         fi
5195 fi
5196 nm_extract="$com"
5197 if $test -f /lib/syscalls.exp; then
5198         echo " "
5199         echo "Also extracting names from /lib/syscalls.exp for good ole AIX..." >&4
5200         $sed -n 's/^\([^        ]*\)[   ]*syscall$/\1/p' /lib/syscalls.exp >>libc.list
5201 fi
5202 ;;
5203 esac
5204 $rm -f libnames libpath
5205
5206 : see if dld is available
5207 set dld.h i_dld
5208 eval $inhdr
5209
5210 : is a C symbol defined?
5211 csym='tlook=$1;
5212 case "$3" in
5213 -v) tf=libc.tmp; tc=""; tdc="";;
5214 -a) tf=libc.tmp; tc="[0]"; tdc="[]";;
5215 *) tlook="^$1\$"; tf=libc.list; tc="()"; tdc="()";;
5216 esac;
5217 tx=yes;
5218 case "$reuseval-$4" in
5219 true-) ;;
5220 true-*) tx=no; eval "tval=\$$4"; case "$tval" in "") tx=yes;; esac;;
5221 esac;
5222 case "$tx" in
5223 yes)
5224         case "$runnm" in
5225         true)
5226                 if $contains $tlook $tf >/dev/null 2>&1;
5227                 then tval=true;
5228                 else tval=false;
5229                 fi;;
5230         *)
5231                 echo "main() { extern short $1$tdc; printf(\"%hd\", $1$tc); }" > t.c;
5232                 if $cc $optimize $ccflags $ldflags -o t t.c $libs >/dev/null 2>&1;
5233                 then tval=true;
5234                 else tval=false;
5235                 fi;
5236                 $rm -f t t.c;;
5237         esac;;
5238 *)
5239         case "$tval" in
5240         $define) tval=true;;
5241         *) tval=false;;
5242         esac;;
5243 esac;
5244 eval "$2=$tval"'
5245
5246 : define an is-in-libc? function
5247 inlibc='echo " "; td=$define; tu=$undef;
5248 sym=$1; var=$2; eval "was=\$$2";
5249 tx=yes;
5250 case "$reuseval$was" in
5251 true) ;;
5252 true*) tx=no;;
5253 esac;
5254 case "$tx" in
5255 yes)
5256         set $sym tres -f;
5257         eval $csym;
5258         case "$tres" in
5259         true)
5260                 echo "$sym() found." >&4;
5261                 case "$was" in $undef) . ./whoa; esac; eval "$var=\$td";;
5262         *)
5263                 echo "$sym() NOT found." >&4;
5264                 case "$was" in $define) . ./whoa; esac; eval "$var=\$tu";;
5265         esac;;
5266 *)
5267         case "$was" in
5268         $define) echo "$sym() found." >&4;;
5269         *) echo "$sym() NOT found." >&4;;
5270         esac;;
5271 esac'
5272
5273 : see if dlopen exists
5274 xxx_runnm="$runnm"
5275 runnm=false
5276 set dlopen d_dlopen
5277 eval $inlibc
5278 runnm="$xxx_runnm"
5279
5280 : determine which dynamic loading, if any, to compile in
5281 echo " "
5282 dldir="ext/DynaLoader"
5283 case "$usedl" in
5284 $define|y|true)
5285         dflt='y'
5286         usedl="$define"
5287         ;;
5288 $undef|n|false)
5289         dflt='n'
5290         usedl="$undef"
5291         ;;
5292 *) 
5293         dflt='n'
5294         case "$d_dlopen" in
5295             $define) dflt='y' ;;
5296         esac
5297         case "$i_dld" in
5298             $define) dflt='y' ;;
5299         esac
5300         : Does a dl_xxx.xs file exist for this operating system
5301         $test -f $rsrc/$dldir/dl_${osname}.xs && dflt='y'
5302         ;;
5303 esac
5304 rp="Do you wish to use dynamic loading?"
5305 . ./myread
5306 usedl="$ans"
5307 case "$ans" in
5308 y*) usedl="$define"
5309         case "$dlsrc" in
5310         '')
5311                 if $test -f $rsrc/$dldir/dl_${osname}.xs ; then
5312                         dflt="$dldir/dl_${osname}.xs"
5313                 elif $test "$d_dlopen" = "$define" ; then
5314                         dflt="$dldir/dl_dlopen.xs"
5315                 elif $test "$i_dld" = "$define" ; then
5316                         dflt="$dldir/dl_dld.xs"
5317                 else
5318                         dflt=''
5319                 fi
5320                 ;;
5321         *)      dflt="$dldir/$dlsrc"
5322                 ;;
5323         esac
5324     echo "The following dynamic loading files are available:"
5325         : Can not go over to $dldir because getfile has path hard-coded in.
5326         tdir=`pwd`; cd $rsrc; $ls -C $dldir/dl*.xs; cd $tdir
5327         rp="Source file to use for dynamic loading"
5328         fn="fne"
5329         # XXX This getfile call will fail the existence check if you try 
5330         # building away from $src (this is not supported yet).
5331         . ./getfile
5332         usedl="$define"
5333         : emulate basename
5334         dlsrc=`echo $ans | $sed -e 's@.*/\([^/]*\)$@\1@'`
5335
5336         $cat << EOM
5337
5338 Some systems may require passing special flags to $cc -c to
5339 compile modules that will be used to create a shared library.
5340 To use no flags, say "none".
5341
5342 EOM
5343     case "$cccdlflags" in
5344     '') case "$gccversion" in
5345                 '') case "$osname" in
5346                         hpux)   dflt='+z' ;;
5347                         next)   dflt='none' ;;
5348                         irix*)  dflt='-KPIC' ;;
5349                         svr4*|esix*|solaris) dflt='-KPIC' ;;
5350                         sunos)  dflt='-pic' ;;
5351                         *)      dflt='none' ;;
5352                     esac
5353                         ;;
5354                 *)  case "$osname" in
5355                         svr4*|esix*|solaris) dflt='-fPIC' ;;
5356                         *)      dflt='-fpic' ;;
5357                     esac ;;
5358             esac ;;
5359         ' ') dflt='none' ;;
5360     *)  dflt="$cccdlflags" ;;
5361     esac
5362     rp="Any special flags to pass to $cc -c to compile shared library modules?"
5363     . ./myread
5364     case "$ans" in
5365     none) cccdlflags=' ' ;;
5366     *) cccdlflags="$ans" ;;
5367     esac
5368
5369     cat << EOM
5370
5371 Some systems use ld to create libraries that can be dynamically loaded,
5372 while other systems (such as those using ELF) use $cc.
5373
5374 EOM
5375         case "$ld" in
5376         '')     $cat >try.c <<'EOM'
5377 /* Test for whether ELF binaries are produced */
5378 #include <fcntl.h>
5379 #include <stdlib.h>
5380 int main() {
5381         char b[4];
5382         int i = open("a.out",O_RDONLY);
5383         if(i == -1) 
5384                 exit(1); /* fail */
5385         if(read(i,b,4)==4 && b[0]==127 && b[1]=='E' && b[2]=='L' && b[3]=='F')
5386                 exit(0); /* succeed (yes, it's ELF) */
5387         else
5388                 exit(1); /* fail */
5389 }
5390 EOM
5391                 if $cc $ccflags try.c >/dev/null 2>&1 && ./a.out; then
5392                         cat <<EOM
5393 You appear to have ELF support.  I'll use $cc to build dynamic libraries.
5394 EOM
5395                         dflt="$cc"
5396                 else
5397                         echo "I'll use ld to build dynamic libraries."
5398                         dflt='ld'
5399                 fi
5400                 rm -f try.c a.out
5401                 ;;
5402         *)      dflt="$ld"
5403                 ;;
5404         esac
5405
5406     rp="What command should be used to create dynamic libraries?"
5407     . ./myread
5408         ld="$ans"
5409
5410     cat << EOM
5411
5412 Some systems may require passing special flags to $ld to create a
5413 library that can be dynamically loaded.  If your ld flags include
5414 -L/other/path options to locate libraries outside your loader's normal
5415 search path, you may need to specify those -L options here as well.  To
5416 use no flags, say "none".
5417
5418 EOM
5419     case "$lddlflags" in
5420     '') case "$osname" in
5421                         hpux)  dflt='-b' ;;
5422                         linux|irix*)    dflt='-shared' ;;
5423                         next)  dflt='none' ;;
5424                         solaris) dflt='-G' ;;
5425                         sunos) dflt='-assert nodefinitions' ;;
5426                         svr4*|esix*) dflt="-G $ldflags" ;;
5427                 *)     dflt='none' ;;
5428                         esac
5429                         ;;
5430     *) dflt="$lddlflags" ;;
5431     esac
5432
5433         : Try to guess additional flags to pick up local libraries.
5434         : Be careful not to append to a plain 'none'
5435         case "$dflt" in
5436         none) dflt='' ;;
5437         esac
5438         for thisflag in $ldflags; do
5439                 case "$thisflag" in
5440                 -L*)
5441                         case " $dflt " in
5442                         *" $thisflag "*) ;;
5443                         *) dflt="$dflt $thisflag" ;;
5444                         esac
5445                         ;;
5446                 esac
5447         done
5448
5449         case "$dflt" in
5450         ''|' ') dflt='none' ;;
5451         esac
5452
5453     rp="Any special flags to pass to $ld to create a dynamically loaded library?"
5454     . ./myread
5455     case "$ans" in
5456     none) lddlflags=' ' ;;
5457     *) lddlflags="$ans" ;;
5458     esac
5459
5460         cat <<EOM
5461
5462 Some systems may require passing special flags to $cc to indicate that
5463 the resulting executable will use dynamic linking.  To use no flags,
5464 say "none".
5465
5466 EOM
5467     case "$ccdlflags" in
5468     '') case "$osname" in
5469                 hpux)   dflt='-Wl,-E' ;;
5470                 linux)  dflt='-rdynamic' ;;
5471                 next)   dflt='none' ;;
5472                 sunos)  dflt='none' ;;
5473                 *)      dflt='none' ;;
5474             esac ;;
5475     ' ')  dflt='none' ;;
5476     *)  dflt="$ccdlflags" ;;
5477     esac
5478     rp="Any special flags to pass to $cc to use dynamic loading?"
5479     . ./myread
5480     case "$ans" in
5481     none) ccdlflags=' ' ;;
5482     *) ccdlflags="$ans" ;;
5483     esac
5484     ;;
5485 *)  usedl="$undef"
5486         ld='ld'
5487     dlsrc='dl_none.xs'
5488     lddlflags=''
5489     ccdlflags=''
5490     ;;
5491 esac
5492
5493 also=''
5494 case "$usedl" in
5495 $undef)
5496         # No dynamic loading being used, so don't bother even to prompt.
5497         useshrplib='false'
5498         ;;
5499 *)      case "$useshrplib" in
5500         '')     case "$osname" in
5501                 svr4*|dgux|dynixptx|esix|powerux)
5502                         dflt=y
5503                         also='Building a shared libperl is required for dynamic loading to work on your system.'
5504                         ;;
5505                 next*)
5506                         case "$osvers" in
5507                         4*)     dflt=y
5508                                 also='Building a shared libperl is needed for MAB support.'
5509                                 ;;
5510                         *)      dflt=n
5511                                 ;;
5512                         esac
5513                         ;;
5514                 *)      dflt=n
5515                         ;;
5516                 esac
5517                 ;;
5518         $define|true|[Yy]*)
5519                 dflt=y
5520                 ;;
5521         *)      dflt=n
5522                 ;;
5523         esac
5524         $cat << EOM
5525
5526 The perl executable is normally obtained by linking perlmain.c with
5527 libperl${_a}, any static extensions (usually just DynaLoader), and
5528 any other libraries needed on this system (such as -lm, etc.).  Since
5529 your system supports dynamic loading, it is probably possible to build
5530 a shared libperl.$so.  If you will have more than one executable linked
5531 to libperl.$so, this will significantly reduce the size of each
5532 executable, but it may have a noticeable affect on performance.  The
5533 default is probably sensible for your system.
5534 $also
5535
5536 EOM
5537         rp="Build a shared libperl.$so (y/n)"
5538         . ./myread
5539         case "$ans" in
5540         true|$define|[Yy]*)
5541                 useshrplib='true'
5542                 # Why does next4 have to be so different?
5543                 case "${osname}${osvers}" in
5544                 next4*) xxx='DYLD_LIBRARY_PATH' ;;
5545                 os2*)   xxx='' ;; # Nothing special needed.
5546                 *)              xxx='LD_LIBRARY_PATH' ;;
5547                 esac
5548                 if test X"$xxx" != "X"; then
5549                         $cat <<EOM  | $tee -a ../config.msg >&4
5550
5551 To build perl, you must add the current working directory to your
5552 $xxx environment variable before running make.  You can do
5553 this with
5554    $xxx=\`pwd\`:\$$xxx; export $xxx
5555 for Bourne-style shells, or
5556    setenv $xxx \`pwd\`
5557 for Csh-style shells.  You *MUST* do this before running make.
5558
5559 EOM
5560                 fi
5561                 ;;
5562         *)      useshrplib='false' ;;
5563         esac
5564         ;;
5565 esac
5566
5567 case "$useshrplib" in
5568 true)
5569         case "$libperl" in
5570         '')
5571                 # Figure out a good name for libperl.so.  Since it gets stored in
5572                 # a version-specific architecture-dependent library, the version
5573                 # number isn't really that important, except for making cc/ld happy.
5574                 #
5575                 # A name such as libperl.so.3.1
5576                 majmin="libperl.$so.$patchlevel.$subversion"
5577                 # A name such as libperl.so.301
5578                 majonly=`echo $patchlevel $subversion |
5579                         $awk '{printf "%d%02d", $1, $2}'`
5580                 majonly=libperl.$so.$majonly
5581                 # I'd prefer to keep the os-specific stuff here to a minimum, and
5582                 # rely on figuring it out from the naming of libc.
5583                 case "${osname}${osvers}" in
5584                 next4*)
5585                         dflt=libperl.5.$so
5586                         # XXX How handle the --version stuff for MAB?
5587                         ;;
5588                 linux*)  # ld won't link with a bare -lperl otherwise.
5589                         dflt=libperl.$so
5590                         ;;
5591                 *)      # Try to guess based on whether libc has major.minor.
5592                         case "$libc" in
5593                         *libc.$so.[0-9]*.[0-9]*) dflt=$majmin ;;
5594                         *libc.$so.[0-9]*) dflt=$majonly ;;
5595                         *)      dflt=libperl.$so ;;
5596                         esac
5597                         ;;
5598                 esac
5599                 ;;
5600         *)      dflt=$libperl
5601                 ;;
5602         esac
5603         cat << EOM
5604
5605 I need to select a good name for the shared libperl.  If your system uses
5606 library names with major and minor numbers, then you might want something
5607 like $majmin.  Alternatively, if your system uses a single version
5608 number for shared libraries, then you might want to use $majonly.
5609 Or, your system might be quite happy with a simple libperl.$so.
5610
5611 Since the shared libperl will get installed into a version-specific
5612 architecture-dependent directory, the version number of the shared perl
5613 library probably isn't important, so the default should be o.k.
5614
5615 EOM
5616         rp='What name do you want to give to the shared libperl?'
5617         . ./myread
5618         libperl=$ans
5619         echo "Ok, I'll use $libperl"
5620         ;;
5621 *)
5622         libperl="libperl${_a}"
5623         ;;
5624 esac
5625
5626 # Detect old use of shrpdir via undocumented Configure -Dshrpdir
5627 case "$shrpdir" in
5628 '') ;;
5629 *)      $cat >&4 <<EOM
5630 WARNING:  Use of the shrpdir variable for the installation location of
5631 the shared $libperl is not supported.  It was never documented and
5632 will not work in this version.  Let me (jhi@iki.fi)
5633 know of any problems this may cause.
5634
5635 EOM
5636         case "$shrpdir" in
5637         "$archlibexp/CORE")
5638                 $cat >&4 <<EOM
5639 But your current setting of $shrpdir is
5640 the default anyway, so it's harmless.
5641 EOM
5642                 ;;
5643         *)
5644                 $cat >&4 <<EOM
5645 Further, your current attempted setting of $shrpdir
5646 conflicts with the value of $archlibexp/CORE
5647 that installperl will use.
5648 EOM
5649                 ;;
5650         esac
5651         ;;
5652 esac
5653
5654 # How will the perl executable find the installed shared $libperl?
5655 # Add $xxx to ccdlflags.
5656 # If we can't figure out a command-line option, use $shrpenv to
5657 # set env LD_RUN_PATH.  The main perl makefile uses this.
5658 shrpdir=$archlibexp/CORE
5659 xxx=''
5660 tmp_shrpenv=''
5661 if "$useshrplib"; then
5662     case "$osname" in 
5663         aix)
5664                 # We'll set it in Makefile.SH...
5665                 ;;
5666         solaris|netbsd)
5667                 xxx="-R $shrpdir"
5668                 ;;
5669         freebsd)
5670                 xxx="-Wl,-R$shrpdir"
5671                 ;;
5672         linux|irix*|dec_osf)
5673                 xxx="-Wl,-rpath,$shrpdir"
5674                 ;;
5675         next)
5676                 # next doesn't like the default...
5677                 ;;
5678         *)
5679                 tmp_shrpenv="env LD_RUN_PATH=$shrpdir"
5680                 ;;
5681         esac
5682         case "$xxx" in
5683         '') ;;
5684         *)      
5685                 # Only add $xxx if it isn't already in ccdlflags.
5686                 case " $ccdlflags " in
5687                 *" $xxx "*)     ;;
5688                 *)      ccdlflags="$ccdlflags $xxx"
5689                         cat <<EOM >&4
5690
5691 Adding $xxx to the flags
5692 passed to $ld so that the perl executable will find the 
5693 installed shared $libperl.
5694
5695 EOM
5696                         ;;
5697                 esac
5698                 ;;
5699         esac
5700 fi
5701 # Respect a hint or command-line value.
5702 case "$shrpenv" in
5703 '') shrpenv="$tmp_shrpenv" ;;
5704 esac
5705
5706 : determine where manual pages go
5707 set man1dir man1dir none
5708 eval $prefixit
5709 $cat <<EOM
5710
5711 $spackage has manual pages available in source form.
5712 EOM
5713 case "$nroff" in
5714 nroff)
5715         echo "However, you don't have nroff, so they're probably useless to you."
5716         case "$man1dir" in
5717         '') man1dir="none";;
5718         esac;;
5719 esac
5720 echo "If you don't want the manual sources installed, answer 'none'."
5721 case "$man1dir" in
5722 ' ') dflt=none
5723         ;;
5724 '')
5725         lookpath="$prefixexp/man/man1 $prefixexp/man/l_man/man1"
5726         lookpath="$lookpath $prefixexp/man/p_man/man1"
5727         lookpath="$lookpath $prefixexp/man/u_man/man1"
5728         lookpath="$lookpath $prefixexp/man/man.1"
5729         case "$sysman" in
5730         */?_man*)       dflt=`./loc . $prefixexp/l_man/man1 $lookpath` ;;
5731         *)      dflt=`./loc . $prefixexp/man/man1 $lookpath` ;;
5732         esac
5733         set dflt
5734         eval $prefixup
5735         ;;
5736 *)  dflt="$man1dir"
5737         ;;
5738 esac
5739 echo " "
5740 fn=dn+~
5741 rp="Where do the main $spackage manual pages (source) go?"
5742 . ./getfile
5743 if $test "X$man1direxp" != "X$ansexp"; then
5744         installman1dir=''
5745 fi
5746 man1dir="$ans"
5747 man1direxp="$ansexp"
5748 case "$man1dir" in
5749 '') man1dir=' '
5750         installman1dir='';;
5751 esac
5752 if $afs; then
5753         $cat <<EOM
5754
5755 Since you are running AFS, I need to distinguish the directory in which
5756 manual pages reside from the directory in which they are installed (and from
5757 which they are presumably copied to the former directory by occult means).
5758
5759 EOM
5760         case "$installman1dir" in
5761         '') dflt=`echo $man1direxp | sed 's#^/afs/#/afs/.#'`;;
5762         *) dflt="$installman1dir";;
5763         esac
5764         fn=de~
5765         rp='Where will man pages be installed?'
5766         . ./getfile
5767         installman1dir="$ans"
5768 else
5769         installman1dir="$man1direxp"
5770 fi
5771
5772 : What suffix to use on installed man pages
5773
5774 case "$man1dir" in
5775 ' ')
5776         man1ext='0'
5777         ;;
5778 *)
5779         rp="What suffix should be used for the main $spackage man pages?"
5780         case "$man1ext" in
5781         '')     case "$man1dir" in
5782                 *1)  dflt=1 ;;
5783                 *1p) dflt=1p ;;
5784                 *1pm) dflt=1pm ;;
5785                 *l) dflt=l;;
5786                 *n) dflt=n;;
5787                 *o) dflt=o;;
5788                 *p) dflt=p;;
5789                 *C) dflt=C;;
5790                 *L) dflt=L;;
5791                 *L1) dflt=L1;;
5792                 *) dflt=1;;
5793                 esac
5794                 ;;
5795         *)      dflt="$man1ext";;
5796         esac
5797         . ./myread
5798         man1ext="$ans"
5799         ;;
5800 esac
5801
5802 : see if we can have long filenames
5803 echo " "
5804 rmlist="$rmlist /tmp/cf$$"
5805 $test -d /tmp/cf$$ || mkdir /tmp/cf$$
5806 first=123456789abcdef
5807 second=/tmp/cf$$/$first
5808 $rm -f $first $second
5809 if (echo hi >$first) 2>/dev/null; then
5810         if $test -f 123456789abcde; then
5811                 echo 'You cannot have filenames longer than 14 characters.  Sigh.' >&4
5812                 val="$undef"
5813         else
5814                 if (echo hi >$second) 2>/dev/null; then
5815                         if $test -f /tmp/cf$$/123456789abcde; then
5816                                 $cat <<'EOM'
5817 That's peculiar... You can have filenames longer than 14 characters, but only
5818 on some of the filesystems.  Maybe you are using NFS.  Anyway, to avoid problems
5819 I shall consider your system cannot support long filenames at all.
5820 EOM
5821                                 val="$undef"
5822                         else
5823                                 echo 'You can have filenames longer than 14 characters.' >&4
5824                                 val="$define"
5825                         fi
5826                 else
5827                         $cat <<'EOM'
5828 How confusing! Some of your filesystems are sane enough to allow filenames
5829 longer than 14 characters but some others like /tmp can't even think about them.
5830 So, for now on, I shall assume your kernel does not allow them at all.
5831 EOM
5832                         val="$undef"
5833                 fi
5834         fi
5835 else
5836         $cat <<'EOM'
5837 You can't have filenames longer than 14 chars.  You can't even think about them!
5838 EOM
5839         val="$undef"
5840 fi 
5841 set d_flexfnam
5842 eval $setvar
5843 $rm -rf /tmp/cf$$ 123456789abcde*
5844
5845 : determine where library module manual pages go
5846 set man3dir man3dir none
5847 eval $prefixit
5848 $cat <<EOM
5849
5850 $spackage has manual pages for many of the library modules.
5851 EOM
5852
5853 case "$nroff" in
5854 nroff)
5855         $cat <<'EOM'
5856 However, you don't have nroff, so they're probably useless to you.
5857 EOM
5858         case "$man3dir" in
5859         '') man3dir="none";;
5860         esac;;
5861 esac
5862
5863 case "$d_flexfnam" in
5864 undef)
5865         $cat <<'EOM'
5866 However, your system can't handle the long file names like File::Basename.3. 
5867 EOM
5868         case "$man3dir" in
5869         '') man3dir="none";;
5870         esac;;
5871 esac
5872
5873 echo "If you don't want the manual sources installed, answer 'none'."
5874 prog=`echo $package | $sed 's/-*[0-9.]*$//'`
5875 case "$man3dir" in
5876 '')     case "$prefix" in 
5877         *$prog*) dflt=`echo $man1dir | 
5878                         $sed -e 's/man1/man3/g' -e 's/man\.1/man\.3/g'` ;;
5879         *)      dflt="$privlib/man/man3" ;;
5880         esac
5881         ;;
5882 ' ') dflt=none;;
5883 *)      dflt="$man3dir" ;;
5884 esac
5885 echo " "
5886
5887 fn=dn+~
5888 rp="Where do the $package library man pages (source) go?"
5889 . ./getfile
5890 if test "X$man3direxp" != "X$ansexp"; then
5891         installman3dir=''
5892 fi
5893
5894 man3dir="$ans"
5895 man3direxp="$ansexp"
5896 case "$man3dir" in
5897 '') man3dir=' '
5898         installman3dir='';;
5899 esac
5900 if $afs; then
5901         $cat <<EOM
5902
5903 Since you are running AFS, I need to distinguish the directory in which
5904 manual pages reside from the directory in which they are installed (and from
5905 which they are presumably copied to the former directory by occult means).
5906
5907 EOM
5908         case "$installman3dir" in
5909         '') dflt=`echo $man3direxp | sed 's#^/afs/#/afs/.#'`;;
5910         *) dflt="$installman3dir";;
5911         esac
5912         fn=de~
5913         rp='Where will man pages be installed?'
5914         . ./getfile
5915         installman3dir="$ans"
5916 else
5917         installman3dir="$man3direxp"
5918 fi
5919
5920 : What suffix to use on installed man pages
5921
5922 case "$man3dir" in
5923 ' ')
5924         man3ext='0'
5925         ;;
5926 *)
5927         rp="What suffix should be used for the $package library man pages?"
5928         case "$man3ext" in
5929         '')     case "$man3dir" in
5930                 *3)  dflt=3 ;;
5931                 *3p) dflt=3p ;;
5932                 *3pm) dflt=3pm ;;
5933                 *l) dflt=l;;
5934                 *n) dflt=n;;
5935                 *o) dflt=o;;
5936                 *p) dflt=p;;
5937                 *C) dflt=C;;
5938                 *L) dflt=L;;
5939                 *L3) dflt=L3;;
5940                 *) dflt=3;;
5941                 esac
5942                 ;;
5943         *)      dflt="$man3ext";;
5944         esac
5945         . ./myread
5946         man3ext="$ans"
5947         ;;
5948 esac
5949
5950 : see if we have to deal with yellow pages, now NIS.
5951 if $test -d /usr/etc/yp || $test -d /etc/yp; then
5952         if $test -f /usr/etc/nibindd; then
5953                 echo " "
5954                 echo "I'm fairly confident you're on a NeXT."
5955                 echo " "
5956                 rp='Do you get the hosts file via NetInfo?'
5957                 dflt=y
5958                 case "$hostcat" in
5959                 nidump*) ;;
5960                 '') ;;
5961                 *) dflt=n;;
5962                 esac
5963                 . ./myread
5964                 case "$ans" in
5965                 y*) hostcat='nidump hosts .';;
5966                 *)      case "$hostcat" in
5967                         nidump*) hostcat='';;
5968                         esac
5969                         ;;
5970                 esac
5971         fi
5972         case "$hostcat" in
5973         nidump*) ;;
5974         *)
5975                 case "$hostcat" in
5976                 *ypcat*) dflt=y;;
5977                 '') if $contains '^\+' /etc/passwd >/dev/null 2>&1; then
5978                                 dflt=y
5979                         else
5980                                 dflt=n
5981                         fi;;
5982                 *) dflt=n;;
5983                 esac
5984                 echo " "
5985                 rp='Are you getting the hosts file via yellow pages?'
5986                 . ./myread
5987                 case "$ans" in
5988                 y*) hostcat='ypcat hosts';;
5989                 *) hostcat='cat /etc/hosts';;
5990                 esac
5991                 ;;
5992         esac
5993 fi
5994 case "$hostcat" in
5995 '') hostcat='cat /etc/hosts';;
5996 esac
5997 case "$groupcat" in
5998 '') groupcat='cat /etc/group';;
5999 esac
6000 case "$passcat" in
6001 '') passcat='cat /etc/passwd';;
6002 esac
6003
6004 : now get the host name
6005 echo " "
6006 echo "Figuring out host name..." >&4
6007 case "$myhostname" in
6008 '') cont=true
6009         echo 'Maybe "hostname" will work...'
6010         if tans=`sh -c hostname 2>&1` ; then
6011                 myhostname=$tans
6012                 phostname=hostname
6013                 cont=''
6014         fi
6015         ;;
6016 *) cont='';;
6017 esac
6018 if $test "$cont"; then
6019         if ./xenix; then
6020                 echo 'Oh, dear.  Maybe "/etc/systemid" is the key...'
6021                 if tans=`cat /etc/systemid 2>&1` ; then
6022                         myhostname=$tans
6023                         phostname='cat /etc/systemid'
6024                         echo "Whadyaknow.  Xenix always was a bit strange..."
6025                         cont=''
6026                 fi
6027         elif $test -r /etc/systemid; then
6028                 echo "(What is a non-Xenix system doing with /etc/systemid?)"
6029         fi
6030 fi
6031 if $test "$cont"; then
6032         echo 'No, maybe "uuname -l" will work...'
6033         if tans=`sh -c 'uuname -l' 2>&1` ; then
6034                 myhostname=$tans
6035                 phostname='uuname -l'
6036         else
6037                 echo 'Strange.  Maybe "uname -n" will work...'
6038                 if tans=`sh -c 'uname -n' 2>&1` ; then
6039                         myhostname=$tans
6040                         phostname='uname -n'
6041                 else
6042                         echo 'Oh well, maybe I can mine it out of whoami.h...'
6043                         if tans=`sh -c $contains' sysname $usrinc/whoami.h' 2>&1` ; then
6044                                 myhostname=`echo "$tans" | $sed 's/^.*"\(.*\)"/\1/'`
6045                                 phostname="sed -n -e '"'/sysname/s/^.*\"\\(.*\\)\"/\1/{'"' -e p -e q -e '}' <$usrinc/whoami.h"
6046                         else
6047                                 case "$myhostname" in
6048                                 '') echo "Does this machine have an identity crisis or something?"
6049                                         phostname='';;
6050                                 *)
6051                                         echo "Well, you said $myhostname before..."
6052                                         phostname='echo $myhostname';;
6053                                 esac
6054                         fi
6055                 fi
6056         fi
6057 fi
6058 : you do not want to know about this
6059 set $myhostname
6060 myhostname=$1
6061
6062 : verify guess
6063 if $test "$myhostname" ; then
6064         dflt=y
6065         rp='Your host name appears to be "'$myhostname'".'" Right?"
6066         . ./myread
6067         case "$ans" in
6068         y*) ;;
6069         *) myhostname='';;
6070         esac
6071 fi
6072
6073 : bad guess or no guess
6074 while $test "X$myhostname" = X ; do
6075         dflt=''
6076         rp="Please type the (one word) name of your host:"
6077         . ./myread
6078         myhostname="$ans"
6079 done
6080
6081 : translate upper to lower if necessary
6082 case "$myhostname" in
6083 *[A-Z]*)
6084         echo "(Normalizing case in your host name)"
6085         myhostname=`echo $myhostname | ./tr '[A-Z]' '[a-z]'`
6086         ;;
6087 esac
6088
6089 case "$myhostname" in
6090 *.*)
6091         dflt=`expr "X$myhostname" : "X[^.]*\(\..*\)"`
6092         myhostname=`expr "X$myhostname" : "X\([^.]*\)\."`
6093         echo "(Trimming domain name from host name--host name is now $myhostname)"
6094         ;;
6095 *) case "$mydomain" in
6096         '')
6097                 {
6098                         test "X$hostcat" = "Xypcat hosts" &&
6099                         ypmatch "$myhostname" hosts 2>/dev/null |\
6100                                 $sed -e 's/[     ]*#.*//; s/$/ /' > hosts && \
6101                         $test -s hosts
6102                 } || {
6103                         $hostcat | $sed -n -e "s/[       ]*#.*//; s/\$/ /
6104                                         /[       ]$myhostname[  . ]/p" > hosts
6105                 }
6106                 tmp_re="[       . ]"
6107                 $test x`$awk "/[0-9].*[  ]$myhostname$tmp_re/ { sum++ }
6108                              END { print sum }" hosts` = x1 || tmp_re="[         ]"
6109                 dflt=.`$awk "/[0-9].*[   ]$myhostname$tmp_re/ {for(i=2; i<=NF;i++) print \\\$i}" \
6110                         hosts | $sort | $uniq | \
6111                         $sed -n -e "s/$myhostname\.\([-a-zA-Z0-9_.]\)/\1/p"`
6112                 case `$echo X$dflt` in
6113                 X*\ *)  echo "(Several hosts in /etc/hosts matched hostname)"
6114                         dflt=.
6115                         ;;
6116                 X.) echo "(You do not have fully-qualified names in /etc/hosts)"
6117                         ;;
6118                 esac
6119                 case "$dflt" in
6120                 .)
6121                         tans=`./loc resolv.conf X /etc /usr/etc`
6122                         if $test -f "$tans"; then
6123                                 echo "(Attempting domain name extraction from $tans)"
6124                                 dflt=.`$sed -n -e 's/   / /g' \
6125                                   -e 's/^search  *\([^ ]*\).*/\1/p' $tans \
6126                                   | ./tr '[A-Z]' '[a-z]' 2>/dev/null`
6127                                 case "$dflt" in
6128                                 .) dflt=.`$sed -n -e 's/        / /g' \
6129                                      -e 's/^domain  *\([^ ]*\).*/\1/p' $tans \
6130                                      | ./tr '[A-Z]' '[a-z]' 2>/dev/null`
6131                                         ;;
6132                                 esac
6133                         fi
6134                         ;;
6135                 esac
6136                 case "$dflt" in
6137                 .) echo "(No help from resolv.conf either -- attempting clever guess)"
6138                         dflt=.`sh -c domainname 2>/dev/null`
6139                         case "$dflt" in
6140                         '') dflt='.';;
6141                         .nis.*|.yp.*|.main.*) dflt=`echo $dflt | $sed -e 's/^\.[^.]*//'`;;
6142                         esac
6143                         ;;
6144                 esac
6145                 case "$dflt" in
6146                 .) echo "(Lost all hope -- silly guess then)"
6147                         dflt='.uucp'
6148                         ;;
6149                 esac
6150                 $rm -f hosts
6151                 ;;
6152         *) dflt="$mydomain";;
6153         esac;;
6154 esac
6155 echo " "
6156 rp="What is your domain name?"
6157 . ./myread
6158 tans="$ans"
6159 case "$ans" in
6160 '') ;;
6161 .*) ;;
6162 *) tans=".$tans";;
6163 esac
6164 mydomain="$tans"
6165
6166 : translate upper to lower if necessary
6167 case "$mydomain" in
6168 *[A-Z]*)
6169         echo "(Normalizing case in your domain name)"
6170         mydomain=`echo $mydomain | ./tr '[A-Z]' '[a-z]'`
6171         ;;
6172 esac
6173
6174 : a little sanity check here
6175 case "$phostname" in
6176 '') ;;
6177 *)
6178         case `$phostname | ./tr '[A-Z]' '[a-z]'` in
6179         $myhostname$mydomain|$myhostname) ;;
6180         *)
6181                 case "$phostname" in
6182                 sed*)
6183                         echo "(That doesn't agree with your whoami.h file, by the way.)"
6184                         ;;
6185                 *)
6186                         echo "(That doesn't agree with your $phostname command, by the way.)"
6187                         ;;
6188                 esac
6189         ;;
6190         esac
6191         ;;
6192 esac
6193
6194 $cat <<EOM
6195
6196 I need to get your e-mail address in Internet format if possible, i.e.
6197 something like user@host.domain. Please answer accurately since I have
6198 no easy means to double check it. The default value provided below
6199 is most probably close to the reality but may not be valid from outside
6200 your organization...
6201
6202 EOM
6203 cont=x
6204 while test "$cont"; do
6205         case "$cf_email" in
6206         '') dflt="$cf_by@$myhostname$mydomain";;
6207         *) dflt="$cf_email";;
6208         esac
6209         rp='What is your e-mail address?'
6210         . ./myread
6211         cf_email="$ans"
6212         case "$cf_email" in
6213         *@*.*) cont='' ;;
6214         *)
6215                 rp='Address does not look like an Internet one.  Use it anyway?'
6216                 case "$fastread" in
6217                 yes) dflt=y ;;
6218                 *) dflt=n ;;
6219                 esac
6220                 . ./myread
6221                 case "$ans" in
6222                 y*) cont='' ;;
6223                 *) echo " " ;;
6224                 esac
6225                 ;;
6226         esac
6227 done
6228
6229 $cat <<EOM
6230
6231 If you or somebody else will be maintaining perl at your site, please
6232 fill in the correct e-mail address here so that they may be contacted
6233 if necessary. Currently, the "perlbug" program included with perl
6234 will send mail to this address in addition to perlbug@perl.com. You may
6235 enter "none" for no administrator.
6236
6237 EOM
6238 case "$perladmin" in
6239 '') dflt="$cf_email";;
6240 *) dflt="$perladmin";;
6241 esac
6242 rp='Perl administrator e-mail address'
6243 . ./myread
6244 perladmin="$ans"
6245
6246 : figure out how to guarantee perl startup
6247 case "$startperl" in
6248 '')
6249         case "$sharpbang" in
6250         *!)
6251                 $cat <<EOH
6252
6253 I can use the #! construct to start perl on your system. This will
6254 make startup of perl scripts faster, but may cause problems if you
6255 want to share those scripts and perl is not in a standard place
6256 ($binexp/perl) on all your platforms. The alternative is to force
6257 a shell by starting the script with a single ':' character.
6258
6259 EOH
6260                 dflt="$binexp/perl"
6261                 rp='What shall I put after the #! to start up perl ("none" to not use #!)?'
6262                 . ./myread
6263                 case "$ans" in
6264                 none)   startperl=": # use perl";;
6265                 *)      startperl="#!$ans"
6266                         if $test 30 -lt `echo "$ans" | wc -c`; then
6267                                 $cat >&4 <<EOM
6268
6269 WARNING:  Some systems limit the #! command to 32 characters.
6270 If you experience difficulty running Perl scripts with #!, try
6271 installing Perl in a directory with a shorter pathname.
6272
6273 EOM
6274                         fi ;;
6275                 esac
6276                 ;;
6277         *) startperl=": # use perl"
6278                 ;;
6279         esac
6280         ;;
6281 esac
6282 echo "I'll use $startperl to start perl scripts."
6283
6284 : figure best path for perl in scripts
6285 case "$perlpath" in
6286 '')
6287         perlpath="$binexp/perl"
6288         case "$startperl" in
6289         *!*) ;;
6290         *)
6291                 $cat <<EOH
6292
6293 I will use the "eval 'exec'" idiom to start Perl on your system.
6294 I can use the full path of your Perl binary for this purpose, but
6295 doing so may cause problems if you want to share those scripts and
6296 Perl is not always in a standard place ($binexp/perl).
6297
6298 EOH
6299                 dflt="$binexp/perl"
6300                 rp="What path shall I use in \"eval 'exec'\"?"
6301                 . ./myread
6302                 perlpath="$ans"
6303                 ;;
6304         esac
6305         ;;
6306 esac
6307 case "$startperl" in
6308 *!*)    ;;
6309 *)      echo "I'll use $perlpath in \"eval 'exec'\"" ;;
6310 esac
6311
6312 : determine where public executable scripts go
6313 set scriptdir scriptdir
6314 eval $prefixit
6315 case "$scriptdir" in
6316 '')
6317         dflt="$bin"
6318         : guess some guesses
6319         $test -d /usr/share/scripts && dflt=/usr/share/scripts
6320         $test -d /usr/share/bin && dflt=/usr/share/bin
6321         $test -d /usr/local/script && dflt=/usr/local/script
6322         $test -d $prefixexp/script && dflt=$prefixexp/script
6323         set dflt
6324         eval $prefixup
6325         ;;
6326 *)  dflt="$scriptdir"
6327         ;;
6328 esac
6329 $cat <<EOM
6330  
6331 Some installations have a separate directory just for executable scripts so
6332 that they can mount it across multiple architectures but keep the scripts in
6333 one spot.  You might, for example, have a subdirectory of /usr/share for this.
6334 Or you might just lump your scripts in with all your other executables.
6335  
6336 EOM
6337 fn=d~
6338 rp='Where do you keep publicly executable scripts?'
6339 . ./getfile
6340 if $test "X$ansexp" != "X$scriptdirexp"; then
6341         installscript=''
6342 fi
6343 scriptdir="$ans"
6344 scriptdirexp="$ansexp"
6345 if $afs; then
6346         $cat <<EOM
6347
6348 Since you are running AFS, I need to distinguish the directory in which
6349 scripts reside from the directory in which they are installed (and from
6350 which they are presumably copied to the former directory by occult means).
6351
6352 EOM
6353         case "$installscript" in
6354         '') dflt=`echo $scriptdirexp | sed 's#^/afs/#/afs/.#'`;;
6355         *) dflt="$installscript";;
6356         esac
6357         fn=de~
6358         rp='Where will public scripts be installed?'
6359         . ./getfile
6360         installscript="$ans"
6361 else
6362         installscript="$scriptdirexp"
6363 fi
6364
6365 : determine where site specific libraries go.
6366 : Usual default is /usr/local/lib/perl5/site_perl/$apiversion
6367 prog=`echo $package | $sed 's/-*[0-9.]*$//'`
6368 case "$prefix" in
6369 *perl*) set dflt sitelib lib/site_$prog/$apiversion ;;
6370 *)       set dflt sitelib lib/$package/site_$prog/$apiversion ;;
6371 esac
6372 eval $prefixit
6373 $cat <<EOM
6374
6375 The installation process will also create a directory for
6376 site-specific extensions and modules.  Some users find it convenient
6377 to place all local files in this directory rather than in the main
6378 distribution directory.
6379
6380 EOM
6381 fn=d~+
6382 rp='Pathname for the site-specific library files?'
6383 . ./getfile
6384 if $test "X$sitelibexp" != "X$ansexp"; then
6385         installsitelib=''
6386 fi
6387 sitelib="$ans"
6388 sitelibexp="$ansexp"
6389 if $afs; then
6390         $cat <<EOM
6391
6392 Since you are running AFS, I need to distinguish the directory in
6393 which site-specific files reside from the directory in which they are
6394 installed (and from which they are presumably copied to the former
6395 directory by occult means).
6396
6397 EOM
6398         case "$installsitelib" in
6399         '') dflt=`echo $sitelibexp | sed 's#^/afs/#/afs/.#'`;;
6400         *) dflt="$installsitelib";;
6401         esac
6402         fn=de~
6403         rp='Where will site-specific files be installed?'
6404         . ./getfile
6405         installsitelib="$ans"
6406 else
6407         installsitelib="$sitelibexp"
6408 fi
6409
6410 : determine where site specific architecture-dependent libraries go.
6411 : sitelib  default is /usr/local/lib/perl5/site_perl/$apiversion
6412 : sitearch default is /usr/local/lib/perl5/site_perl/$apiversion/$archname
6413 : sitelib may have an optional trailing /share.
6414 tdflt=`echo $sitelib | $sed 's,/share$,,'`
6415 tdflt="$tdflt/$archname"
6416 set sitearch sitearch none
6417 eval $prefixit
6418 case "$sitearch" in
6419 '')     dflt="$tdflt" ;;
6420 *)      dflt="$sitearch" ;;
6421 esac
6422 $cat <<EOM
6423
6424 The installation process will also create a directory for
6425 architecture-dependent site-specific extensions and modules.
6426
6427 EOM
6428 fn=nd~+
6429 rp='Pathname for the site-specific architecture-dependent library files?'
6430 . ./getfile
6431 if $test "X$sitearchexp" != "X$ansexp"; then
6432         installsitearch=''
6433 fi
6434 sitearch="$ans"
6435 sitearchexp="$ansexp"
6436 if $afs; then
6437         $cat <<EOM
6438
6439 Since you are running AFS, I need to distinguish the directory in
6440 which site-specific architecture-dependent library files reside from
6441 the directory in which they are installed (and from which they are
6442 presumably copied to the former directory by occult means).
6443
6444 EOM
6445         case "$installsitearch" in
6446         '') dflt=`echo $sitearchexp | sed 's#^/afs/#/afs/.#'`;;
6447         *) dflt="$installsitearch";;
6448         esac
6449         fn=de~
6450         rp='Where will site-specific architecture-dependent files be installed?'
6451         . ./getfile
6452         installsitearch="$ans"
6453 else
6454         installsitearch="$sitearchexp"
6455 fi
6456
6457 cat <<EOM
6458
6459 Previous version of $package used the standard IO mechanisms as defined
6460 in <stdio.h>.  Versions 5.003_02 and later of perl allow alternate IO
6461 mechanisms via a "PerlIO" abstraction, but the stdio mechanism is still
6462 the default.  This abstraction layer can use AT&T's sfio (if you already
6463 have sfio installed) or regular stdio.  Using PerlIO with sfio may cause
6464 problems with some extension modules.  Using PerlIO with stdio is safe,
6465 but it is slower than plain stdio and therefore is not the default.
6466
6467 If this doesn't make any sense to you, just accept the default 'n'.
6468 EOM
6469 case "$useperlio" in
6470 $define|true|[yY]*)     dflt='y';;
6471 *) dflt='n';;
6472 esac
6473 rp='Use the experimental PerlIO abstraction layer?'
6474 . ./myread
6475 case "$ans" in
6476 y|Y) 
6477         val="$define"
6478         ;;     
6479 *)      
6480         echo "Ok, doing things the stdio way"
6481         val="$undef"
6482         ;;
6483 esac
6484 set useperlio
6485 eval $setvar 
6486
6487 : Check how to convert floats to strings.
6488 if test "X$d_Gconvert" = X; then
6489         echo " "
6490         echo "Checking for an efficient way to convert floats to strings."
6491         $cat >try.c <<'EOP'
6492 #ifdef TRY_gconvert
6493 #define Gconvert(x,n,t,b) gconvert((x),(n),(t),(b))
6494 char *myname = "gconvert";
6495 #endif
6496 #ifdef TRY_gcvt
6497 #define Gconvert(x,n,t,b) gcvt((x),(n),(b))
6498 char *myname = "gcvt";
6499 #endif
6500 #ifdef TRY_sprintf
6501 #define Gconvert(x,n,t,b) sprintf((b),"%.*g",(n),(x))
6502 char *myname = "sprintf";
6503 #endif
6504
6505 #include <stdio.h>
6506
6507 int
6508 checkit(expect, got)
6509 char *expect;
6510 char *got;
6511 {
6512     if (strcmp(expect, got)) {
6513                 printf("%s oddity:  Expected %s, got %s\n",
6514                         myname, expect, got);
6515                 exit(1);
6516         }
6517 }
6518
6519 int main()
6520
6521         char buf[64]; 
6522         buf[63] = '\0';
6523
6524         /* This must be 1st test on (which?) platform */
6525         /* Alan Burlison <AlanBurlsin@unn.unisys.com> */
6526         Gconvert(0.1, 8, 0, buf);
6527         checkit("0.1", buf);
6528
6529         Gconvert(1.0, 8, 0, buf); 
6530         checkit("1", buf);
6531
6532         Gconvert(0.0, 8, 0, buf); 
6533         checkit("0", buf);
6534
6535         Gconvert(-1.0, 8, 0, buf); 
6536         checkit("-1", buf);
6537
6538         /* Some Linux gcvt's give 1.e+5 here. */
6539         Gconvert(100000.0, 8, 0, buf); 
6540         checkit("100000", buf);
6541         
6542         /* Some Linux gcvt's give -1.e+5 here. */
6543         Gconvert(-100000.0, 8, 0, buf); 
6544         checkit("-100000", buf);
6545
6546         exit(0);
6547 }
6548 EOP
6549         case "$d_Gconvert" in
6550         gconvert*) xxx_list='gconvert gcvt sprintf' ;;
6551         gcvt*) xxx_list='gcvt gconvert sprintf' ;;
6552         sprintf*) xxx_list='sprintf gconvert gcvt' ;;
6553         *) xxx_list='gconvert gcvt sprintf' ;;
6554         esac
6555
6556         for xxx_convert in $xxx_list; do
6557                 echo "Trying $xxx_convert"
6558                 $rm -f try try$_o
6559                 set try -DTRY_$xxx_convert
6560                 if eval $compile; then
6561                         echo "$xxx_convert" found. >&4
6562                         if ./try; then
6563                                 echo "I'll use $xxx_convert to convert floats into a string." >&4
6564                                 break;
6565                         else
6566                                 echo "...But $xxx_convert didn't work as I expected."
6567                         fi
6568                 else
6569                         echo "$xxx_convert NOT found." >&4
6570                 fi
6571         done
6572                 
6573         case "$xxx_convert" in
6574         gconvert) d_Gconvert='gconvert((x),(n),(t),(b))' ;;
6575         gcvt) d_Gconvert='gcvt((x),(n),(b))' ;;
6576         *) d_Gconvert='sprintf((b),"%.*g",(n),(x))' ;;
6577         esac
6578 fi
6579
6580 : Initialize h_fcntl
6581 h_fcntl=false
6582
6583 : Initialize h_sysfile
6584 h_sysfile=false
6585
6586 : access call always available on UNIX
6587 set access d_access
6588 eval $inlibc
6589
6590 : locate the flags for 'access()'
6591 case "$d_access" in
6592 "$define")
6593         echo " "
6594         $cat >access.c <<'EOCP'
6595 #include <sys/types.h>
6596 #ifdef I_FCNTL
6597 #include <fcntl.h>
6598 #endif
6599 #ifdef I_SYS_FILE
6600 #include <sys/file.h>
6601 #endif
6602 #ifdef I_UNISTD
6603 #include <unistd.h>
6604 #endif
6605 main() {
6606         exit(R_OK);
6607 }
6608 EOCP
6609         : check sys/file.h first, no particular reason here
6610         if $test `./findhdr sys/file.h` && \
6611                 $cc $cppflags -DI_SYS_FILE -o access access.c >/dev/null 2>&1 ; then
6612                 h_sysfile=true;
6613                 echo "<sys/file.h> defines the *_OK access constants." >&4
6614         elif $test `./findhdr fcntl.h` && \
6615                 $cc $cppflags -DI_FCNTL -o access access.c >/dev/null 2>&1 ; then
6616                 h_fcntl=true;
6617                 echo "<fcntl.h> defines the *_OK access constants." >&4
6618         elif $test `./findhdr unistd.h` && \
6619                 $cc $cppflags -DI_UNISTD -o access access.c >/dev/null 2>&1 ; then
6620                 echo "<unistd.h> defines the *_OK access constants." >&4
6621         else
6622                 echo "I can't find the four *_OK access constants--I'll use mine." >&4
6623         fi
6624         ;;
6625 esac
6626 $rm -f access*
6627
6628 : see if accessx exists
6629 set accessx d_accessx
6630 eval $inlibc
6631
6632 : see if alarm exists
6633 set alarm d_alarm
6634 eval $inlibc
6635
6636 : Look for GNU-cc style attribute checking
6637 echo " "
6638 echo "Checking whether your compiler can handle __attribute__ ..." >&4
6639 $cat >attrib.c <<'EOCP'
6640 #include <stdio.h>
6641 void croak (char* pat,...) __attribute__((format(printf,1,2),noreturn));
6642 EOCP
6643 if $cc $ccflags -c attrib.c >attrib.out 2>&1 ; then
6644         if $contains 'warning' attrib.out >/dev/null 2>&1; then
6645                 echo "Your C compiler doesn't fully support __attribute__."
6646                 val="$undef"
6647         else
6648                 echo "Your C compiler supports __attribute__."
6649                 val="$define"
6650         fi
6651 else
6652         echo "Your C compiler doesn't seem to understand __attribute__ at all."
6653         val="$undef"
6654 fi
6655 set d_attribut
6656 eval $setvar
6657 $rm -f attrib*
6658
6659 : see if bcmp exists
6660 set bcmp d_bcmp
6661 eval $inlibc
6662
6663 : see if bcopy exists
6664 set bcopy d_bcopy
6665 eval $inlibc
6666
6667 : see if this is a unistd.h system
6668 set unistd.h i_unistd
6669 eval $inhdr
6670
6671 : see if getpgrp exists
6672 set getpgrp d_getpgrp
6673 eval $inlibc
6674
6675 case "$d_getpgrp" in
6676 "$define")
6677         echo " "
6678         echo "Checking to see which flavor of getpgrp is in use..."
6679         $cat >set.c <<EOP
6680 #$i_unistd I_UNISTD
6681 #include <sys/types.h>
6682 #ifdef I_UNISTD
6683 #  include <unistd.h>
6684 #endif
6685 int main()
6686 {
6687         if (getuid() == 0) {
6688                 printf("(I see you are running Configure as super-user...)\n");
6689                 setuid(1);
6690         }
6691 #ifdef TRY_BSD_PGRP
6692         if (getpgrp(1) == 0)
6693                 exit(0);
6694 #else
6695         if (getpgrp() > 0)
6696                 exit(0);
6697 #endif
6698         exit(1);
6699 }
6700 EOP
6701         if $cc -DTRY_BSD_PGRP $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1 && ./set; then
6702                 echo "You have to use getpgrp(pid) instead of getpgrp()." >&4
6703                 val="$define"
6704         elif $cc $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1 && ./set; then
6705                 echo "You have to use getpgrp() instead of getpgrp(pid)." >&4
6706                 val="$undef"
6707         else
6708                 echo "I can't seem to compile and run the test program."
6709                 if ./usg; then
6710                         xxx="a USG one, i.e. you use getpgrp()."
6711                 else
6712                         # SVR4 systems can appear rather BSD-ish.
6713                         case "$i_unistd" in
6714                         $undef)
6715                                 xxx="a BSD one, i.e. you use getpgrp(pid)."
6716                                 val="$define"
6717                                 ;;
6718                         $define)
6719                                 xxx="probably a USG one, i.e. you use getpgrp()."
6720                                 val="$undef"
6721                                 ;;
6722                         esac
6723                 fi
6724                 echo "Assuming your getpgrp is $xxx" >&4
6725         fi
6726         ;;
6727 *) val="$undef";;
6728 esac
6729 set d_bsdgetpgrp
6730 eval $setvar
6731 $rm -f set set.c
6732
6733 : see if setpgrp exists
6734 set setpgrp d_setpgrp
6735 eval $inlibc
6736
6737 case "$d_setpgrp" in
6738 "$define")
6739         echo " "
6740         echo "Checking to see which flavor of setpgrp is in use..."
6741         $cat >set.c <<EOP
6742 #$i_unistd I_UNISTD
6743 #include <sys/types.h>
6744 #ifdef I_UNISTD
6745 #  include <unistd.h>
6746 #endif
6747 int main()
6748 {
6749         if (getuid() == 0) {
6750                 printf("(I see you are running Configure as super-user...)\n");
6751                 setuid(1);
6752         }
6753 #ifdef TRY_BSD_PGRP
6754         if (-1 == setpgrp(1, 1))
6755                 exit(0);
6756 #else
6757         if (setpgrp() != -1)
6758                 exit(0);
6759 #endif
6760         exit(1);
6761 }
6762 EOP
6763         if $cc -DTRY_BSD_PGRP $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1 && ./set; then
6764                 echo 'You have to use setpgrp(pid,pgrp) instead of setpgrp().' >&4
6765                 val="$define"
6766         elif $cc $ccflags $ldflags -o set set.c $libs >/dev/null 2>&1 && ./set; then
6767                 echo 'You have to use setpgrp() instead of setpgrp(pid,pgrp).' >&4
6768                 val="$undef"
6769         else
6770                 echo "(I can't seem to compile and run the test program.)"
6771                 if ./usg; then
6772                         xxx="a USG one, i.e. you use setpgrp()."
6773                 else
6774                         # SVR4 systems can appear rather BSD-ish.
6775                         case "$i_unistd" in
6776                         $undef)
6777                                 xxx="a BSD one, i.e. you use setpgrp(pid,pgrp)."
6778                                 val="$define"
6779                                 ;;
6780                         $define)
6781                                 xxx="probably a USG one, i.e. you use setpgrp()."
6782                                 val="$undef"
6783                                 ;;
6784                         esac
6785                 fi
6786                 echo "Assuming your setpgrp is $xxx" >&4
6787         fi
6788         ;;
6789 *) val="$undef";;
6790 esac
6791 set d_bsdsetpgrp
6792 eval $setvar
6793 $rm -f set set.c
6794 : see if bzero exists
6795 set bzero d_bzero
6796 eval $inlibc
6797
6798 : check for lengths of integral types
6799 echo " "
6800 case "$intsize" in
6801 '')
6802         echo "Checking to see how big your integers are..." >&4
6803         $cat >intsize.c <<'EOCP'
6804 #include <stdio.h>
6805 main()
6806 {
6807         printf("intsize=%d;\n", sizeof(int));
6808         printf("longsize=%d;\n", sizeof(long));
6809         printf("shortsize=%d;\n", sizeof(short));
6810         exit(0);
6811 }
6812 EOCP
6813         set intsize
6814         if eval $compile_ok && ./intsize > /dev/null; then
6815                 eval `./intsize`
6816                 echo "Your integers are $intsize bytes long."
6817                 echo "Your long integers are $longsize bytes long."
6818                 echo "Your short integers are $shortsize bytes long."
6819         else
6820                 $cat >&4 <<EOM
6821 !
6822 Help! I can't compile and run the intsize test program: please enlighten me!
6823 (This is probably a misconfiguration in your system or libraries, and
6824 you really ought to fix it.  Still, I'll try anyway.)
6825 !
6826 EOM
6827                 dflt=4
6828                 rp="What is the size of an integer (in bytes)?"
6829                 . ./myread
6830                 intsize="$ans"
6831                 dflt=$intsize
6832                 rp="What is the size of a long integer (in bytes)?"
6833                 . ./myread
6834                 longsize="$ans"
6835                 dflt=2
6836                 rp="What is the size of a short integer (in bytes)?"
6837                 . ./myread
6838                 shortsize="$ans"
6839         fi
6840         ;;
6841 esac
6842 $rm -f intsize intsize.*
6843
6844 : see if signal is declared as pointer to function returning int or void
6845 echo " "
6846 xxx=`./findhdr signal.h`
6847 $test "$xxx" && $cppstdin $cppminus $cppflags < $xxx >$$.tmp 2>/dev/null
6848 if $contains 'int.*\*[  ]*signal' $$.tmp >/dev/null 2>&1 ; then
6849         echo "You have int (*signal())() instead of void." >&4
6850         val="$undef"
6851 elif $contains 'void.*\*[       ]*signal' $$.tmp >/dev/null 2>&1 ; then
6852         echo "You have void (*signal())()." >&4
6853         val="$define"
6854 elif $contains 'extern[         ]*[(\*]*signal' $$.tmp >/dev/null 2>&1 ; then
6855         echo "You have int (*signal())() instead of void." >&4
6856         val="$undef"
6857 elif $contains 'void.*\*.*sig' $$.tmp >/dev/null 2>&1 ; then
6858         echo "You have void (*signal())()." >&4
6859         val="$define"
6860 else
6861         case "$d_voidsig" in
6862         '')
6863         echo "I can't determine whether signal handler returns void or int..." >&4
6864                 dflt=void
6865                 rp="What type does your signal handler return?"
6866                 . ./myread
6867                 case "$ans" in
6868                 v*) val="$define";;
6869                 *) val="$undef";;
6870                 esac;;
6871         "$define")
6872                 echo "As you already told me, signal handler returns void." >&4
6873                 val="$define"
6874                 ;;
6875         *)      echo "As you already told me, signal handler returns int." >&4
6876                 val="$undef"
6877                 ;;
6878         esac
6879 fi
6880 set d_voidsig
6881 eval $setvar
6882 case "$d_voidsig" in
6883 "$define") signal_t="void";;
6884 *) signal_t="int";;
6885 esac
6886 $rm -f $$.tmp
6887
6888 : check for ability to cast large floats to 32-bit ints.
6889 echo " "
6890 echo 'Checking whether your C compiler can cast large floats to int32.' >&4
6891 if $test "$intsize" -ge 4; then
6892         xxx=int
6893 else
6894         xxx=long
6895 fi
6896 $cat >try.c <<EOCP
6897 #include <stdio.h>
6898 #include <sys/types.h>
6899 #include <signal.h>
6900 $signal_t blech(s) int s; { exit(3); }
6901 main()
6902 {
6903         $xxx i32;
6904         double f, g;
6905         int result = 0;
6906         char str[16];
6907         signal(SIGFPE, blech);
6908
6909         /* Don't let compiler optimize the test away.  Store the number 
6910            in a writable string for gcc to pass to sscanf under HP/UX.
6911         */
6912         sprintf(str, "2147483647");
6913         sscanf(str, "%lf", &f); /* f = (double) 0x7fffffff; */
6914         g = 10 * f;
6915         i32  = ($xxx) g;
6916
6917         /* x86 processors will probably give 0x8000 0000, which is a
6918        sign change.  We don't want that.  We want to mimic SPARC
6919            behavior here, which is to preserve the sign and give
6920            back 0x7fff ffff.
6921         */
6922         if (i32 != ($xxx) f)
6923                 result |= 1;
6924         exit(result);
6925 }
6926 EOCP
6927 set try
6928 if eval $compile_ok; then
6929         ./try
6930         yyy=$?
6931 else
6932         echo "(I can't seem to compile the test program--assuming it can't)"
6933         yyy=1
6934 fi
6935 case "$yyy" in
6936 0)      val="$define"
6937         echo "Yup, it can."
6938         ;;
6939 *)      val="$undef"
6940         echo "Nope, it can't."
6941         ;;
6942 esac
6943 set d_casti32
6944 eval $setvar
6945 $rm -f try try.*
6946
6947 : check for ability to cast negative floats to unsigned
6948 echo " "
6949 echo 'Checking whether your C compiler can cast negative float to unsigned.' >&4
6950 $cat >try.c <<EOCP
6951 #include <stdio.h>
6952 #include <sys/types.h>
6953 #include <signal.h>
6954 $signal_t blech(s) int s; { exit(7); }
6955 $signal_t blech_in_list(s) int s; { exit(4); }
6956 unsigned long dummy_long(p) unsigned long p; { return p; }
6957 unsigned int dummy_int(p) unsigned int p; { return p; }
6958 unsigned short dummy_short(p) unsigned short p; { return p; }
6959 main()
6960 {
6961         double f;
6962         unsigned long along;
6963         unsigned int aint;
6964         unsigned short ashort;
6965         int result = 0;
6966         char str[16];
6967         
6968         /* Frustrate gcc-2.7.2's optimizer which failed this test with
6969            a direct f = -123. assignment.  gcc-2.8.0 reportedly
6970            optimized the whole file away
6971         */
6972         /* Store the number in a writable string for gcc to pass to 
6973            sscanf under HP/UX.
6974         */
6975         sprintf(str, "-123");
6976         sscanf(str, "%lf", &f);  /* f = -123.; */
6977
6978         signal(SIGFPE, blech);
6979         along = (unsigned long)f;
6980         aint = (unsigned int)f;
6981         ashort = (unsigned short)f;
6982         if (along != (unsigned long)-123)
6983                 result |= 1;
6984         if (aint != (unsigned int)-123)
6985                 result |= 1;
6986         if (ashort != (unsigned short)-123)
6987                 result |= 1;
6988         sprintf(str, "1073741824.");
6989         sscanf(str, "%lf", &f); /* f = (double)0x40000000; */
6990         f = f + f;
6991         along = 0;
6992         along = (unsigned long)f;
6993         if (along != 0x80000000)
6994                 result |= 2;
6995         f -= 1.;
6996         along = 0;
6997         along = (unsigned long)f;
6998         if (along != 0x7fffffff)
6999                 result |= 1;
7000         f += 2.;
7001         along = 0;
7002         along = (unsigned long)f;
7003         if (along != 0x80000001)
7004                 result |= 2;
7005         if (result)
7006                 exit(result);
7007         signal(SIGFPE, blech_in_list);
7008         sprintf(str, "123.");
7009         sscanf(str, "%lf", &f);  /* f = 123.; */
7010         along = dummy_long((unsigned long)f);
7011         aint = dummy_int((unsigned int)f);
7012         ashort = dummy_short((unsigned short)f);
7013         if (along != (unsigned long)123)
7014                 result |= 4;
7015         if (aint != (unsigned int)123)
7016                 result |= 4;
7017         if (ashort != (unsigned short)123)
7018                 result |= 4;
7019         exit(result);
7020
7021 }
7022 EOCP
7023 set try
7024 if eval $compile_ok; then
7025         ./try
7026         castflags=$?
7027 else
7028         echo "(I can't seem to compile the test program--assuming it can't)"
7029         castflags=7
7030 fi
7031 case "$castflags" in
7032 0)      val="$define"
7033         echo "Yup, it can."
7034         ;;
7035 *)      val="$undef"
7036         echo "Nope, it can't."
7037         ;;
7038 esac
7039 set d_castneg
7040 eval $setvar
7041 $rm -f try.*
7042
7043 : see if vprintf exists
7044 echo " "
7045 if set vprintf val -f d_vprintf; eval $csym; $val; then
7046         echo 'vprintf() found.' >&4
7047         val="$define"
7048         $cat >vprintf.c <<'EOF'
7049 #include <varargs.h>
7050
7051 main() { xxx("foo"); }
7052
7053 xxx(va_alist)
7054 va_dcl
7055 {
7056         va_list args;
7057         char buf[10];
7058
7059         va_start(args);
7060         exit((unsigned long)vsprintf(buf,"%s",args) > 10L);
7061 }
7062 EOF
7063         set vprintf
7064         if eval $compile && ./vprintf; then
7065                 echo "Your vsprintf() returns (int)." >&4
7066                 val2="$undef"
7067         else
7068                 echo "Your vsprintf() returns (char*)." >&4
7069                 val2="$define"
7070         fi
7071 else
7072         echo 'vprintf() NOT found.' >&4
7073                 val="$undef"
7074                 val2="$undef"
7075 fi
7076 set d_vprintf
7077 eval $setvar
7078 val=$val2
7079 set d_charvspr
7080 eval $setvar
7081
7082 : see if chown exists
7083 set chown d_chown
7084 eval $inlibc
7085
7086 : see if chroot exists
7087 set chroot d_chroot
7088 eval $inlibc
7089
7090 : see if chsize exists
7091 set chsize d_chsize
7092 eval $inlibc
7093
7094 hasfield='varname=$1; struct=$2; field=$3; shift; shift; shift;
7095 while $test $# -ge 2; do
7096         case "$1" in
7097         $define) echo "#include <$2>";;
7098         esac ;
7099     shift 2;
7100 done > try.c;
7101 echo "int main () { struct $struct foo; foo.$field = 0; }" >> try.c;
7102 if eval $cc $optimize $ccflags -c try.c >/dev/null 2>&1; then
7103         val="$define";
7104 else
7105         val="$undef";
7106 fi;
7107 set $varname;
7108 eval $setvar;
7109 $rm -f try.c try.o'
7110
7111 : see if this is a sys/uio.h system
7112 set sys/uio.h i_sysuio
7113 eval $inhdr
7114
7115 echo "Checking to see if your system supports struct iovec..." >&4
7116 set d_iovec_s iovec iov_base $i_sysuio sys/uio.h
7117 eval $hasfield
7118 case "$d_iovec_s" in
7119 "$define")      echo "Yup, it does." >&4
7120                 ;;
7121 *)              echo "Nope, it doesn't." >&4
7122                 ;;
7123 esac
7124
7125 socketlib=''
7126 sockethdr=''
7127 : see whether socket exists
7128 echo " "
7129 $echo $n "Hmm... $c" >&4
7130 if set socket val -f d_socket; eval $csym; $val; then
7131         echo "Looks like you have Berkeley networking support." >&4
7132         d_socket="$define"
7133         if set setsockopt val -f; eval $csym; $val; then
7134                 d_oldsock="$undef"
7135         else
7136                 echo "...but it uses the old BSD 4.1c interface, rather than 4.2." >&4
7137                 d_oldsock="$define"
7138         fi
7139 else
7140         if $contains socklib libc.list >/dev/null 2>&1; then
7141                 echo "Looks like you have Berkeley networking support." >&4
7142                 d_socket="$define"
7143                 : we will have to assume that it supports the 4.2 BSD interface
7144                 d_oldsock="$undef"
7145         else
7146                 echo "You don't have Berkeley networking in libc$_a..." >&4
7147                 if test "X$d_socket" = "X$define"; then
7148                    echo "...but you seem to believe that you have sockets." >&4
7149                 else
7150                         for net in net socket
7151                         do
7152                                 if test -f /usr/lib/lib$net$_a; then
7153                                         ( ($nm $nm_opt /usr/lib/lib$net$_a | eval $nm_extract) ||  \
7154                                         $ar t /usr/lib/lib$net$_a) 2>/dev/null >> libc.list
7155                                         if $contains socket libc.list >/dev/null 2>&1; then
7156                                                 d_socket="$define"
7157                                                 socketlib="-l$net"
7158                                                 case "$net" in
7159                                                 net)
7160                                                         echo "...but the Wollongong group seems to have hacked it in." >&4
7161                                                         sockethdr="-I/usr/netinclude"
7162                                                         ;;
7163                                                 esac
7164                                                 echo "Found Berkeley sockets interface in lib$net." >& 4 
7165                                                 if $contains setsockopt libc.list >/dev/null 2>&1; then
7166                                                         d_oldsock="$undef"
7167                                                 else
7168                                                         echo "...using the old BSD 4.1c interface, rather than 4.2." >&4
7169                                                         d_oldsock="$define"
7170                                                 fi
7171                                                 break
7172                                         fi
7173                                 fi
7174                         done
7175                         if test "X$d_socket" != "X$define"; then
7176                            echo "or anywhere else I see." >&4
7177                            d_socket="$undef"
7178                            d_oldsock="$undef"
7179                         fi
7180                 fi
7181         fi
7182 fi
7183
7184 : see if socketpair exists
7185 set socketpair d_sockpair
7186 eval $inlibc
7187
7188
7189 echo " "
7190 echo "Checking the availability of certain socket constants..." >& 4
7191 for ENUM in MSG_CTRUNC MSG_DONTROUTE MSG_OOB MSG_PEEK MSG_PROXY SCM_RIGHTS; do
7192         enum=`$echo $ENUM|./tr '[A-Z]' '[a-z]'`
7193         $cat >try.c <<EOF
7194 #include <sys/types.h>
7195 #include <sys/socket.h>
7196 int main() {
7197     int i = $ENUM;
7198 }
7199 EOF
7200         val="$undef"
7201         set try; if eval $compile; then
7202                 val="$define"
7203         fi
7204         set d_${enum}; eval $setvar
7205         $rm -f try.c try
7206 done
7207
7208 set sendmsg d_sendmsg
7209 eval $inlibc
7210
7211 set recvmsg d_recvmsg
7212 eval $inlibc
7213
7214 echo " "
7215 $echo $n "Checking to see if your system supports struct msghdr...$c" >&4
7216 set d_msghdr_s msghdr msg_name define sys/types.h $d_socket sys/socket.h $i_sysuio sys/uio.h
7217 eval $hasfield
7218 case "$d_msghdr_s" in
7219 "$define")      echo "Yup, it does." >&4
7220                 ;;
7221 *)              echo "Nope, it doesn't." >&4
7222                 ;;
7223 esac
7224
7225 $echo $n "Checking to see if your system supports struct cmsghdr...$c" >&4
7226 set d_cmsghdr_s cmsghdr cmsg_len define sys/types.h $d_socket sys/socket.h $i_sysuio sys/uio.h
7227 eval $hasfield
7228 case "$d_cmsghdr_s" in
7229 "$define")      echo "Yup, it does." >&4
7230                 ;;
7231 *)              echo "Nope, it doesn't." >&4
7232                 ;;
7233 esac
7234
7235 : check for const keyword
7236 echo " "
7237 echo 'Checking to see if your C compiler knows about "const"...' >&4
7238 $cat >const.c <<'EOCP'
7239 typedef struct spug { int drokk; } spug;
7240 int main()
7241 {
7242         const char *foo;
7243         const spug y;
7244 }
7245 EOCP
7246 if $cc -c $ccflags const.c >/dev/null 2>&1 ; then
7247         val="$define"
7248         echo "Yup, it does."
7249 else
7250         val="$undef"
7251         echo "Nope, it doesn't."
7252 fi
7253 set d_const
7254 eval $setvar
7255
7256 : see if crypt exists
7257 echo " "
7258 if set crypt val -f d_crypt; eval $csym; $val; then
7259         echo 'crypt() found.' >&4
7260         val="$define"
7261         cryptlib=''
7262 else
7263         cryptlib=`./loc Slibcrypt$_a "" $xlibpth`
7264         if $test -z "$cryptlib"; then
7265                 cryptlib=`./loc Mlibcrypt$_a "" $xlibpth`
7266         else
7267                 cryptlib=-lcrypt
7268         fi
7269         if $test -z "$cryptlib"; then
7270                 cryptlib=`./loc Llibcrypt$_a "" $xlibpth`
7271         else
7272                 cryptlib=-lcrypt
7273         fi
7274         if $test -z "$cryptlib"; then
7275                 cryptlib=`./loc libcrypt$_a "" $libpth`
7276         else
7277                 cryptlib=-lcrypt
7278         fi
7279         if $test -z "$cryptlib"; then
7280                 echo 'crypt() NOT found.' >&4
7281                 val="$undef"
7282         else
7283                 val="$define"
7284         fi
7285 fi
7286 set d_crypt
7287 eval $setvar
7288
7289 : get csh whereabouts
7290 case "$csh" in
7291 'csh') val="$undef" ;;
7292 *) val="$define" ;;
7293 esac
7294 set d_csh
7295 eval $setvar
7296 : Respect a hint or command line value for full_csh.
7297 case "$full_csh" in
7298 '') full_csh=$csh ;;
7299 esac
7300
7301 : see if cuserid exists
7302 set cuserid d_cuserid
7303 eval $inlibc
7304
7305 : see if this is a limits.h system
7306 set limits.h i_limits
7307 eval $inhdr
7308
7309 : see if this is a float.h system
7310 set float.h i_float
7311 eval $inhdr
7312
7313 : See if number of significant digits in a double precision number is known
7314 echo " "
7315 $cat >dbl_dig.c <<EOM
7316 #$i_limits I_LIMITS
7317 #$i_float I_FLOAT
7318 #ifdef I_LIMITS
7319 #include <limits.h>
7320 #endif
7321 #ifdef I_FLOAT
7322 #include <float.h>
7323 #endif
7324 #ifdef DBL_DIG
7325 printf("Contains DBL_DIG");
7326 #endif
7327 EOM
7328 $cppstdin $cppflags $cppminus < dbl_dig.c >dbl_dig.E 2>/dev/null
7329 if $contains 'DBL_DIG' dbl_dig.E >/dev/null 2>&1; then
7330         echo "DBL_DIG found." >&4
7331         val="$define"
7332 else
7333         echo "DBL_DIG NOT found." >&4
7334         val="$undef"
7335 fi
7336 $rm -f dbl_dig.?
7337 set d_dbl_dig
7338 eval $setvar
7339
7340
7341 if $test X"$use64bits" = X"$define"; then
7342         : see if dbminit64 exists
7343         set dbminit64 d_dbminit64
7344         eval $inlibc
7345
7346         : see if dbmclose64 exists
7347         set dbmclose64 d_dbmclose64
7348         eval $inlibc
7349
7350         : see if fetch64 exists
7351         set fetch64 d_fetch64
7352         eval $inlibc
7353
7354         : see if store64 exists
7355         set store64 d_store64
7356         eval $inlibc
7357
7358         : see if delete64 exists
7359         set delete64 d_delete64
7360         eval $inlibc
7361
7362         : see if firstkey64 exists
7363         set firstkey64 d_firstkey64
7364         eval $inlibc
7365
7366         : see if nextkey64 exists
7367         set nextkey64 d_nextkey64
7368         eval $inlibc
7369 else
7370         val="$undef"
7371         for xxx in d_dbminit64 d_dbmclose64 d_fetch64 d_store64 d_delete64 d_firstkey64 d_nextkey64
7372         do
7373                 set $xxx
7374                 eval $setvar
7375         done
7376 fi
7377
7378 : see if difftime exists
7379 set difftime d_difftime
7380 eval $inlibc
7381
7382 : see if sys/stat.h is available
7383 set sys/stat.h i_sysstat
7384 eval $inhdr
7385
7386 : see if this is a dirent system
7387 echo " "
7388 if xinc=`./findhdr dirent.h`; $test "$xinc"; then
7389         val="$define"
7390         echo "<dirent.h> found." >&4
7391 else
7392         val="$undef"
7393         if xinc=`./findhdr sys/dir.h`; $test "$xinc"; then
7394                 echo "<sys/dir.h> found." >&4
7395                 echo " "
7396         else
7397                 xinc=`./findhdr sys/ndir.h`
7398         fi
7399         echo "<dirent.h> NOT found." >&4
7400 fi
7401 set i_dirent
7402 eval $setvar
7403
7404 : Look for type of directory structure.
7405 echo " "
7406 $cppstdin $cppflags $cppminus < "$xinc" > try.c
7407
7408 case "$direntrytype" in
7409 ''|' ')
7410         case "$i_dirent" in
7411         $define) guess1='struct dirent' ;;
7412         *) guess1='struct direct'  ;;
7413         esac
7414         ;;
7415 *)      guess1="$direntrytype"
7416         ;;
7417 esac
7418
7419 case "$guess1" in
7420 'struct dirent') guess2='struct direct' ;;
7421 *) guess2='struct dirent' ;;
7422 esac
7423                 
7424 if $contains "$guess1" try.c >/dev/null 2>&1; then
7425         direntrytype="$guess1"
7426         echo "Your directory entries are $direntrytype." >&4
7427 elif $contains "$guess2" try.c >/dev/null 2>&1; then
7428         direntrytype="$guess2"
7429         echo "Your directory entries seem to be $direntrytype." >&4
7430 else
7431         echo "I don't recognize your system's directory entries." >&4
7432         rp="What type is used for directory entries on this system?"
7433         dflt="$guess1"
7434         . ./myread
7435         direntrytype="$ans"
7436 fi
7437 $rm -f try.c
7438
7439
7440 : see if the directory entry stores field length
7441 echo " "
7442 $cppstdin $cppflags $cppminus < "$xinc" > try.c
7443 if $contains 'd_namlen' try.c >/dev/null 2>&1; then
7444         echo "Good, your directory entry keeps length information in d_namlen." >&4
7445         val="$define"
7446 else
7447         echo "Your directory entry does not know about the d_namlen field." >&4
7448         val="$undef"
7449 fi
7450 set d_dirnamlen
7451 eval $setvar
7452 $rm -f try.c
7453
7454
7455 if $test X"$use64bits" = X"$define"; then
7456         : see if fstat64 exists
7457         set fstat64 d_fstat64
7458         eval $inlibc
7459
7460         : see if ftruncate64 exists
7461         set ftruncate64 d_ftruncate64
7462         eval $inlibc
7463
7464         : see if lockf64 exists
7465         set lockf64 d_lockf64
7466         eval $inlibc
7467
7468         : see if lseek64 exists
7469         set lseek64 d_lseek64
7470         eval $inlibc
7471
7472         : see if lstat64 exists
7473         set lstat64 d_lstat64
7474         eval $inlibc
7475
7476         : see if open64 exists
7477         set open64 d_open64
7478         eval $inlibc
7479
7480         : see if opendir64 exists
7481         set opendir64 d_opendir64
7482         eval $inlibc
7483
7484         : see if readdir64 exists
7485         set readdir64 d_readdir64
7486         eval $inlibc
7487
7488         : see if seekdir64 exists
7489         set seekdir64 d_seekdir64
7490         eval $inlibc
7491
7492         : see if stat64 exists
7493         set stat64 d_stat64
7494         eval $inlibc
7495
7496         : see if telldir64 exists
7497         set telldir64 d_telldir64
7498         eval $inlibc
7499
7500         : see if truncate64 exists
7501         set truncate64 d_truncate64
7502         eval $inlibc
7503
7504         : check for off64_t
7505         echo " "
7506         echo $n "Checking to see if your system supports off64_t...$c" >&4
7507         $cat >try.c <<EOCP
7508 #include <sys/types.h>
7509 off64_t foo() { off64_t x; x = 7; return x; }'
7510 EOCP
7511         if $cc $optimize $ccflags -c try.c >/dev/null 2>&1; then
7512                 val="$define"
7513                 echo " Yup, it does." >&4
7514         else
7515                 val="$undef"
7516                 echo " Nope, it doesn't." >&4
7517         fi
7518         $rm -f try.*
7519         set d_off64t
7520         eval $setvar
7521
7522         : check for ino64_t
7523         echo " "
7524         echo $n "Checking to see if your system supports ino64_t...$c" >&4
7525         val="$undef"
7526         case "$i_sysstat" in
7527         "$define" )
7528                 $cat >try.c <<EOCP
7529 #include <sys/types.h>
7530 #include <sys/stat.h>
7531 ino64_t foo() { ino64_t x; x = 7; return x; }'
7532 EOCP
7533                 if $cc $optimize $ccflags -c try.c >/dev/null 2>&1; then
7534                         val="$define"
7535                 fi
7536                 $rm -f try.*
7537                 ;;
7538         esac
7539         if $test "X$val" = X"$define"; then
7540                 echo " Yup, it does." >&4
7541         else
7542                 echo " Nope, it doesn't." >&4
7543         fi
7544         set d_ino64t
7545         eval $setvar
7546
7547         : check for struct flock64
7548         echo " "
7549         echo "Checking to see if your system supports struct flock64..." >&4
7550         if $h_fcntl; then
7551                 set d_flock64_s flock64 l_len define fcntl.h
7552                 eval $hasfield
7553         else
7554                 val="$undef"
7555                 set d_flock64_s
7556                 eval $setvar
7557         fi
7558         case "$d_flock64_s" in
7559         "$define")      echo "Yup, it does." >&4
7560                         ;;
7561         *)              echo "Nope, it doesn't." >&4
7562                         ;;
7563         esac
7564
7565         : check for struct dirent64
7566         echo " "
7567         echo "Checking to see if your system supports struct dirent64..." >&4
7568         set d_dirent64_s dirent64 d_off $i_dirent dirent.h
7569         eval $hasfield
7570         case "$d_dirent64_s" in
7571         "$define")      echo "Yup, it does." >&4
7572                         ;;
7573         *)              echo "Nope, it doesn't." >&4
7574                         ;;
7575         esac
7576
7577 else
7578         val="$undef"
7579         for xxx in d_fstat64 d_ftruncate64 d_lockf64 d_lseek64 d_lstat64 d_open64 d_opendir64 d_readdir64 d_seekdir64 d_stat64 d_telldir64 d_truncate64 d_off64t d_ino64t d_flock64_s d_dirent64_s
7580         do
7581                 set $xxx
7582                 eval $setvar
7583         done
7584 fi
7585
7586 : see if dlerror exists
7587 xxx_runnm="$runnm"
7588 runnm=false
7589 set dlerror d_dlerror
7590 eval $inlibc
7591 runnm="$xxx_runnm"
7592
7593 : see if dlfcn is available
7594 set dlfcn.h i_dlfcn
7595 eval $inhdr
7596
7597 case "$usedl" in
7598 $define|y|true)
7599         $cat << EOM
7600
7601 On a few systems, the dynamically loaded modules that perl generates and uses
7602 will need a different extension than shared libs. The default will probably
7603 be appropriate.
7604
7605 EOM
7606         case "$dlext" in
7607         '')     dflt="$so" ;;
7608         *)      dflt="$dlext" ;;
7609         esac
7610         rp='What is the extension of dynamically loaded modules'
7611         . ./myread
7612         dlext="$ans"
7613         ;;
7614 *)
7615         dlext="none"
7616         ;;
7617 esac
7618
7619 : Check if dlsym need a leading underscore
7620 echo " "
7621 val="$undef"
7622
7623 case "$dlsrc" in
7624 dl_dlopen.xs)
7625         echo "Checking whether your dlsym() needs a leading underscore ..." >&4
7626         $cat >dyna.c <<'EOM'
7627 fred () { }
7628 EOM
7629
7630 $cat >fred.c<<EOM
7631
7632 #include <stdio.h>
7633 #$i_dlfcn I_DLFCN
7634 #ifdef I_DLFCN
7635 #include <dlfcn.h>      /* the dynamic linker include file for Sunos/Solaris */
7636 #else
7637 #include <sys/types.h>
7638 #include <nlist.h>
7639 #include <link.h>
7640 #endif
7641
7642 extern int fred() ;
7643
7644 int main()
7645 {
7646     void * handle ;
7647     void * symbol ;
7648 #ifndef RTLD_LAZY
7649     int mode = 1 ;
7650 #else
7651     int mode = RTLD_LAZY ;
7652 #endif
7653     handle = dlopen("./dyna.$dlext", mode) ;
7654     if (handle == NULL) {
7655         printf ("1\n") ;
7656         fflush (stdout) ;
7657         exit(0);
7658     }
7659     symbol = dlsym(handle, "fred") ;
7660     if (symbol == NULL) {
7661         /* try putting a leading underscore */
7662         symbol = dlsym(handle, "_fred") ;
7663         if (symbol == NULL) {
7664             printf ("2\n") ;
7665             fflush (stdout) ;
7666             exit(0);
7667         }
7668         printf ("3\n") ;
7669     }
7670     else
7671         printf ("4\n") ;
7672     fflush (stdout) ;
7673     exit(0);
7674 }
7675 EOM
7676         : Call the object file tmp-dyna.o in case dlext=o.
7677         if $cc $ccflags $cccdlflags -c dyna.c > /dev/null 2>&1 && 
7678                 mv dyna${_o} tmp-dyna${_o} > /dev/null 2>&1 && 
7679                 $ld $lddlflags -o dyna.$dlext tmp-dyna${_o} > /dev/null 2>&1 && 
7680                 $cc $ccflags -o fred $ldflags $cccdlflags $ccdlflags fred.c $libs > /dev/null 2>&1; then
7681                 xxx=`./fred`
7682                 case $xxx in
7683                 1)      echo "Test program failed using dlopen." >&4
7684                         echo "Perhaps you should not use dynamic loading." >&4;;
7685                 2)      echo "Test program failed using dlsym." >&4
7686                         echo "Perhaps you should not use dynamic loading." >&4;;
7687                 3)      echo "dlsym needs a leading underscore" >&4
7688                         val="$define" ;;
7689                 4)      echo "dlsym doesn't need a leading underscore." >&4;;
7690                 esac
7691         else
7692                 echo "I can't compile and run the test program." >&4
7693         fi
7694         ;;
7695 esac
7696                 
7697 $rm -f fred fred.? dyna.$dlext dyna.? tmp-dyna.?
7698
7699 set d_dlsymun
7700 eval $setvar
7701
7702 hasproto='varname=$1; func=$2; shift; shift;
7703 while $test $# -ge 2; do
7704         case "$1" in
7705         $define) echo "#include <$2>";;
7706         esac ;
7707     shift 2;
7708 done > try.c;
7709 $cppstdin $cppflags $cppminus < try.c > tryout.c 2>/dev/null;
7710 if $contains "$func.*(" tryout.c >/dev/null 2>&1; then
7711         echo "$func() prototype found.";
7712         val="$define";
7713 else
7714         echo "$func() prototype NOT found.";
7715         val="$undef";
7716 fi;
7717 set $varname;
7718 eval $setvar;
7719 $rm -f try.c tryout.c'
7720
7721 : see if prototype for drand48 is available
7722 echo " "
7723 set d_drand48proto drand48 $i_stdlib stdlib.h $i_unistd unistd.h
7724 eval $hasproto
7725
7726 : see if dup2 exists
7727 set dup2 d_dup2
7728 eval $inlibc
7729
7730 : see if eaccess exists
7731 set eaccess d_eaccess
7732 eval $inlibc
7733
7734 : see if endgrent exists
7735 set endgrent d_endgrent
7736 eval $inlibc
7737
7738 : see if endhostent exists
7739 set endhostent d_endhent
7740 eval $inlibc
7741
7742 : see if endnetent exists
7743 set endnetent d_endnent
7744 eval $inlibc
7745
7746 : see if endprotoent exists
7747 set endprotoent d_endpent
7748 eval $inlibc
7749
7750 : see if endpwent exists
7751 set endpwent d_endpwent
7752 eval $inlibc
7753
7754 : see if endservent exists
7755 set endservent d_endsent
7756 eval $inlibc
7757
7758 : Locate the flags for 'open()'
7759 echo " "
7760 $cat >open3.c <<'EOCP'
7761 #include <sys/types.h>
7762 #ifdef I_FCNTL
7763 #include <fcntl.h>
7764 #endif
7765 #ifdef I_SYS_FILE
7766 #include <sys/file.h>
7767 #endif
7768 main() {
7769         if(O_RDONLY);
7770 #ifdef O_TRUNC
7771         exit(0);
7772 #else
7773         exit(1);
7774 #endif
7775 }
7776 EOCP
7777 : check sys/file.h first to get FREAD on Sun
7778 if $test `./findhdr sys/file.h` && \
7779                 set open3 -DI_SYS_FILE && eval $compile; then
7780         h_sysfile=true;
7781         echo "<sys/file.h> defines the O_* constants..." >&4
7782         if ./open3; then
7783                 echo "and you have the 3 argument form of open()." >&4
7784                 val="$define"
7785         else
7786                 echo "but not the 3 argument form of open().  Oh, well." >&4
7787                 val="$undef"
7788         fi
7789 elif $test `./findhdr fcntl.h` && \
7790                 set open3 -DI_FCNTL && eval $compile; then
7791         h_fcntl=true;
7792         echo "<fcntl.h> defines the O_* constants..." >&4
7793         if ./open3; then
7794                 echo "and you have the 3 argument form of open()." >&4
7795                 val="$define"
7796         else
7797                 echo "but not the 3 argument form of open().  Oh, well." >&4
7798                 val="$undef"
7799         fi
7800 else
7801         val="$undef"
7802         echo "I can't find the O_* constant definitions!  You got problems." >&4
7803 fi
7804 set d_open3
7805 eval $setvar
7806 $rm -f open3*
7807
7808 : check for non-blocking I/O stuff
7809 case "$h_sysfile" in
7810 true) echo "#include <sys/file.h>" > head.c;;
7811 *)
7812         case "$h_fcntl" in
7813         true) echo "#include <fcntl.h>" > head.c;;
7814         *) echo "#include <sys/fcntl.h>" > head.c;;
7815         esac
7816         ;;
7817 esac
7818 echo " "
7819 echo "Figuring out the flag used by open() for non-blocking I/O..." >&4
7820 case "$o_nonblock" in
7821 '')
7822         $cat head.c > try.c
7823         $cat >>try.c <<'EOCP'
7824 main() {
7825 #ifdef O_NONBLOCK
7826         printf("O_NONBLOCK\n");
7827         exit(0);
7828 #endif
7829 #ifdef O_NDELAY
7830         printf("O_NDELAY\n");
7831         exit(0);
7832 #endif
7833 #ifdef FNDELAY
7834         printf("FNDELAY\n");
7835         exit(0);
7836 #endif
7837         exit(0);
7838 }
7839 EOCP
7840         set try
7841         if eval $compile_ok; then
7842                 o_nonblock=`./try`
7843                 case "$o_nonblock" in
7844                 '') echo "I can't figure it out, assuming O_NONBLOCK will do.";;
7845                 *) echo "Seems like we can use $o_nonblock.";;
7846                 esac
7847         else
7848                 echo "(I can't compile the test program; pray O_NONBLOCK is right!)"
7849         fi
7850         ;;
7851 *) echo "Using $hint value $o_nonblock.";;
7852 esac
7853 $rm -f try try.* .out core
7854
7855 echo " "
7856 echo "Let's see what value errno gets from read() on a $o_nonblock file..." >&4
7857 case "$eagain" in
7858 '')
7859         $cat head.c > try.c
7860         $cat >>try.c <<EOCP
7861 #include <errno.h>
7862 #include <sys/types.h>
7863 #include <signal.h>
7864 #define MY_O_NONBLOCK $o_nonblock
7865 #ifndef errno  /* XXX need better Configure test */
7866 extern int errno;
7867 #endif
7868 $signal_t blech(x) int x; { exit(3); }
7869 EOCP
7870         $cat >> try.c <<'EOCP'
7871 main()
7872 {
7873         int pd[2];
7874         int pu[2];
7875         char buf[1];
7876         char string[100];
7877
7878         pipe(pd);       /* Down: child -> parent */
7879         pipe(pu);       /* Up: parent -> child */
7880         if (0 != fork()) {
7881                 int ret;
7882                 close(pd[1]);   /* Parent reads from pd[0] */
7883                 close(pu[0]);   /* Parent writes (blocking) to pu[1] */
7884                 if (-1 == fcntl(pd[0], F_SETFL, MY_O_NONBLOCK))
7885                         exit(1);
7886                 signal(SIGALRM, blech);
7887                 alarm(5);
7888                 if ((ret = read(pd[0], buf, 1)) > 0)    /* Nothing to read! */
7889                         exit(2);
7890                 sprintf(string, "%d\n", ret);
7891                 write(2, string, strlen(string));
7892                 alarm(0);
7893 #ifdef EAGAIN
7894                 if (errno == EAGAIN) {
7895                         printf("EAGAIN\n");
7896                         goto ok;
7897                 }
7898 #endif
7899 #ifdef EWOULDBLOCK
7900                 if (errno == EWOULDBLOCK)
7901                         printf("EWOULDBLOCK\n");
7902 #endif
7903         ok:
7904                 write(pu[1], buf, 1);   /* Unblocks child, tell it to close our pipe */
7905                 sleep(2);                               /* Give it time to close our pipe */
7906                 alarm(5);
7907                 ret = read(pd[0], buf, 1);      /* Should read EOF */
7908                 alarm(0);
7909                 sprintf(string, "%d\n", ret);
7910                 write(3, string, strlen(string));
7911                 exit(0);
7912         }
7913
7914         close(pd[0]);                   /* We write to pd[1] */
7915         close(pu[1]);                   /* We read from pu[0] */
7916         read(pu[0], buf, 1);    /* Wait for parent to signal us we may continue */
7917         close(pd[1]);                   /* Pipe pd is now fully closed! */
7918         exit(0);                                /* Bye bye, thank you for playing! */
7919 }
7920 EOCP
7921         set try
7922         if eval $compile_ok; then
7923                 echo "$startsh" >mtry
7924                 echo "./try >try.out 2>try.ret 3>try.err || exit 4" >>mtry
7925                 chmod +x mtry
7926                 ./mtry >/dev/null 2>&1
7927                 case $? in
7928                 0) eagain=`$cat try.out`;;
7929                 1) echo "Could not perform non-blocking setting!";;
7930                 2) echo "I did a successful read() for something that was not there!";;
7931                 3) echo "Hmm... non-blocking I/O does not seem to be working!";;
7932                 *) echo "Something terribly wrong happened during testing.";;
7933                 esac
7934                 rd_nodata=`$cat try.ret`
7935                 echo "A read() system call with no data present returns $rd_nodata."
7936                 case "$rd_nodata" in
7937                 0|-1) ;;
7938                 *)
7939                         echo "(That's peculiar, fixing that to be -1.)"
7940                         rd_nodata=-1
7941                         ;;
7942                 esac
7943                 case "$eagain" in
7944                 '')
7945                         echo "Forcing errno EAGAIN on read() with no data available."
7946                         eagain=EAGAIN
7947                         ;;
7948                 *)
7949                         echo "Your read() sets errno to $eagain when no data is available."
7950                         ;;
7951                 esac
7952                 status=`$cat try.err`
7953                 case "$status" in
7954                 0) echo "And it correctly returns 0 to signal EOF.";;
7955                 -1) echo "But it also returns -1 to signal EOF, so be careful!";;
7956                 *) echo "However, your read() returns '$status' on EOF??";;
7957                 esac
7958                 val="$define"
7959                 if test "$status" = "$rd_nodata"; then
7960                         echo "WARNING: you can't distinguish between EOF and no data!"
7961                         val="$undef"
7962                 fi
7963         else
7964                 echo "I can't compile the test program--assuming errno EAGAIN will do."
7965                 eagain=EAGAIN
7966         fi
7967         set d_eofnblk
7968         eval $setvar
7969         ;;
7970 *)
7971         echo "Using $hint value $eagain."
7972         echo "Your read() returns $rd_nodata when no data is present."
7973         case "$d_eofnblk" in
7974         "$define") echo "And you can see EOF because read() returns 0.";;
7975         "$undef") echo "But you can't see EOF status from read() returned value.";;
7976         *)
7977                 echo "(Assuming you can't see EOF status from read anyway.)"
7978                 d_eofnblk=$undef
7979                 ;;
7980         esac
7981         ;;
7982 esac
7983 $rm -f try try.* .out core head.c mtry
7984
7985 : see if fchmod exists
7986 set fchmod d_fchmod
7987 eval $inlibc
7988
7989 : see if fchown exists
7990 set fchown d_fchown
7991 eval $inlibc
7992
7993 : see if this is an fcntl system
7994 set fcntl d_fcntl
7995 eval $inlibc
7996
7997 : see if sys/select.h has to be included
7998 set sys/select.h i_sysselct
7999 eval $inhdr
8000
8001 : see if we should include time.h, sys/time.h, or both
8002 echo " "
8003 if test "X$timeincl" = X; then
8004         echo "Testing to see if we should include <time.h>, <sys/time.h> or both." >&4
8005         $echo $n "I'm now running the test program...$c"
8006         $cat >try.c <<'EOCP'
8007 #include <sys/types.h>
8008 #ifdef I_TIME
8009 #include <time.h>
8010 #endif
8011 #ifdef I_SYSTIME
8012 #ifdef SYSTIMEKERNEL
8013 #define KERNEL
8014 #endif
8015 #include <sys/time.h>
8016 #endif
8017 #ifdef I_SYSSELECT
8018 #include <sys/select.h>
8019 #endif
8020 main()
8021 {
8022         struct tm foo;
8023 #ifdef S_TIMEVAL
8024         struct timeval bar;
8025 #endif
8026 #ifdef S_TIMEZONE
8027         struct timezone tzp;
8028 #endif
8029         if (foo.tm_sec == foo.tm_sec)
8030                 exit(0);
8031 #ifdef S_TIMEVAL
8032         if (bar.tv_sec == bar.tv_sec)
8033                 exit(0);
8034 #endif
8035         exit(1);
8036 }
8037 EOCP
8038         flags=''
8039         for s_timezone in '-DS_TIMEZONE' ''; do
8040         sysselect=''
8041         for s_timeval in '-DS_TIMEVAL' ''; do
8042         for i_systimek in '' '-DSYSTIMEKERNEL'; do
8043         for i_time in '' '-DI_TIME'; do
8044         for i_systime in '-DI_SYSTIME' ''; do
8045                 case "$flags" in
8046                 '') $echo $n ".$c"
8047                         set try $i_time $i_systime $i_systimek $sysselect $s_timeval $s_timezone
8048                         if eval $compile; then
8049                                 set X $i_time $i_systime $i_systimek $sysselect $s_timeval
8050                                 shift
8051                                 flags="$*"
8052                                 echo " "
8053                                 $echo $n "Succeeded with $flags$c"
8054                         fi
8055                         ;;
8056                 esac
8057         done
8058         done
8059         done
8060         done
8061         done
8062         timeincl=''
8063         echo " "
8064         case "$flags" in
8065         *SYSTIMEKERNEL*) i_systimek="$define"
8066                 timeincl=`./findhdr sys/time.h`
8067                 echo "We'll include <sys/time.h> with KERNEL defined." >&4;;
8068         *) i_systimek="$undef";;
8069         esac
8070         case "$flags" in
8071         *I_TIME*) i_time="$define"
8072                 timeincl=`./findhdr time.h`" $timeincl"
8073                 echo "We'll include <time.h>." >&4;;
8074         *) i_time="$undef";;
8075         esac
8076         case "$flags" in
8077         *I_SYSTIME*) i_systime="$define"
8078                 timeincl=`./findhdr sys/time.h`" $timeincl"
8079                 echo "We'll include <sys/time.h>." >&4;;
8080         *) i_systime="$undef";;
8081         esac
8082         $rm -f try.c try
8083 fi
8084
8085 : check for fd_set items
8086 $cat <<EOM
8087
8088 Checking to see how well your C compiler handles fd_set and friends ...
8089 EOM
8090 $cat >fd_set.c <<EOCP
8091 #$i_systime I_SYS_TIME
8092 #$i_sysselct I_SYS_SELECT
8093 #$d_socket HAS_SOCKET
8094 #include <sys/types.h>
8095 #ifdef HAS_SOCKET
8096 #include <sys/socket.h> /* Might include <sys/bsdtypes.h> */
8097 #endif
8098 #ifdef I_SYS_TIME
8099 #include <sys/time.h>
8100 #endif
8101 #ifdef I_SYS_SELECT
8102 #include <sys/select.h>
8103 #endif
8104 main() {
8105         fd_set fds;
8106
8107 #ifdef TRYBITS
8108         if(fds.fds_bits);
8109 #endif
8110
8111 #if defined(FD_SET) && defined(FD_CLR) && defined(FD_ISSET) && defined(FD_ZERO)
8112         exit(0);
8113 #else
8114         exit(1);
8115 #endif
8116 }
8117 EOCP
8118 set fd_set -DTRYBITS
8119 if eval $compile; then
8120         d_fds_bits="$define"
8121         d_fd_set="$define"
8122         echo "Well, your system knows about the normal fd_set typedef..." >&4
8123         if ./fd_set; then
8124                 echo "and you have the normal fd_set macros (just as I'd expect)." >&4
8125                 d_fd_macros="$define"
8126         else
8127                 $cat >&4 <<'EOM'
8128 but not the normal fd_set macros!  Gaaack!  I'll have to cover for you.
8129 EOM
8130                 d_fd_macros="$undef"
8131         fi
8132 else
8133         $cat <<'EOM'
8134 Hmm, your compiler has some difficulty with fd_set.  Checking further...
8135 EOM
8136         set fd_set
8137         if eval $compile; then
8138                 d_fds_bits="$undef"
8139                 d_fd_set="$define"
8140                 echo "Well, your system has some sort of fd_set available..." >&4
8141                 if ./fd_set; then
8142                         echo "and you have the normal fd_set macros." >&4
8143                         d_fd_macros="$define"
8144                 else
8145                         $cat <<'EOM'
8146 but not the normal fd_set macros!  Gross!  More work for me...
8147 EOM
8148                         d_fd_macros="$undef"
8149                 fi
8150         else
8151         echo "Well, you got zip.  That's OK, I can roll my own fd_set stuff." >&4
8152                 d_fd_set="$undef"
8153                 d_fds_bits="$undef"
8154                 d_fd_macros="$undef"
8155         fi
8156 fi
8157 $rm -f fd_set*
8158
8159 : see if fgetpos exists
8160 set fgetpos d_fgetpos
8161 eval $inlibc
8162
8163
8164 if $test X"$use64bits" = X"$define"; then
8165         : see if fgetpos64 exists
8166         set fgetpos64 d_fgetpos64
8167         eval $inlibc
8168
8169         : see if fopen64 exists
8170         set freopen64 d_fopen64
8171         eval $inlibc
8172
8173         : see if freopen64 exists
8174         set freopen64 d_freopen64
8175         eval $inlibc
8176
8177         : see if fseek64 exists
8178         set fseek64 d_fseek64
8179         eval $inlibc
8180
8181         : see if fseeko64 exists
8182         set fseeko64 d_fseeko64
8183         eval $inlibc
8184
8185         : see if fsetpos64 exists
8186         set fsetpos64 d_fsetpos64
8187         eval $inlibc
8188
8189         : see if ftell64 exists
8190         set ftell64 d_ftell64
8191         eval $inlibc
8192
8193         : see if ftello64 exists
8194         set ftello64 d_ftello64
8195         eval $inlibc
8196
8197         : see if tmpfile64 exists
8198         set tmpfile64 d_tmpfile64
8199         eval $inlibc
8200 else
8201         val="$undef"
8202         for xxx in d_fgetpos64 d_fopen64 d_freopen64 d_fseek64 d_fseeko64 d_fsetpos64 d_ftell64 d_ftello64 d_tmpfile64
8203         do
8204                 set $xxx
8205                 eval $setvar
8206         done
8207 fi
8208
8209 : see if flock exists
8210 set flock d_flock
8211 eval $inlibc
8212
8213 : see if fork exists
8214 set fork d_fork
8215 eval $inlibc
8216
8217 : see if pathconf exists
8218 set pathconf d_pathconf
8219 eval $inlibc
8220
8221 : see if fpathconf exists
8222 set fpathconf d_fpathconf
8223 eval $inlibc
8224
8225 : see if fseeko exists
8226 set fseeko d_fseeko
8227 eval $inlibc
8228
8229 : see if fsetpos exists
8230 set fsetpos d_fsetpos
8231 eval $inlibc
8232
8233 : see if ftello exists
8234 set ftello d_ftello
8235 eval $inlibc
8236
8237 : see if getgrent exists
8238 set getgrent d_getgrent
8239 eval $inlibc
8240
8241 : see if gethostbyaddr exists
8242 set gethostbyaddr d_gethbyaddr
8243 eval $inlibc
8244
8245 : see if gethostbyname exists
8246 set gethostbyname d_gethbyname
8247 eval $inlibc
8248
8249 : see if gethostent exists
8250 set gethostent d_gethent
8251 eval $inlibc
8252
8253 : see how we will look up host name
8254 echo " "
8255 if false; then
8256         : dummy stub to allow use of elif
8257 elif set gethostname val -f d_gethname; eval $csym; $val; then
8258         echo 'gethostname() found.' >&4
8259         d_gethname="$define"
8260         call=gethostname
8261 elif set uname val -f d_uname; eval $csym; $val; then
8262         if ./xenix; then
8263                 $cat <<'EOM'
8264 uname() was found, but you're running xenix, and older versions of xenix
8265 have a broken uname(). If you don't really know whether your xenix is old
8266 enough to have a broken system call, use the default answer.
8267
8268 EOM
8269                 dflt=y
8270                 case "$d_uname" in
8271                 "$define") dflt=n;;
8272                 esac
8273                 rp='Is your uname() broken?'
8274                 . ./myread
8275                 case "$ans" in
8276                 n*) d_uname="$define"; call=uname;;
8277                 esac
8278         else
8279                 echo 'uname() found.' >&4
8280                 d_uname="$define"
8281                 call=uname
8282         fi
8283 fi
8284 case "$d_gethname" in
8285 '') d_gethname="$undef";;
8286 esac
8287 case "$d_uname" in
8288 '') d_uname="$undef";;
8289 esac
8290 case "$d_uname$d_gethname" in
8291 *define*)
8292         dflt=n
8293         cat <<EOM
8294  
8295 Every now and then someone has a $call() that lies about the hostname
8296 but can't be fixed for political or economic reasons.  If you wish, I can
8297 pretend $call() isn't there and maybe compute hostname at run-time
8298 thanks to the '$phostname' command.
8299
8300 EOM
8301         rp="Shall I ignore $call() from now on?"
8302         . ./myread
8303         case "$ans" in
8304         y*) d_uname="$undef" d_gethname="$undef"; $echo $n "Okay...$c";;
8305         esac;;
8306 esac
8307 case "$phostname" in
8308 '') aphostname='';;
8309 *) case "$aphostname" in
8310         /*) ;;
8311         *) set X $phostname
8312                 shift
8313                 file=$1
8314                 shift
8315                 file=`./loc $file $file $pth`
8316                 aphostname=`echo $file $*`
8317                 ;;
8318         esac
8319         ;;
8320 esac
8321 case "$d_uname$d_gethname" in
8322 *define*) ;;
8323 *)
8324         case "$phostname" in
8325         '')
8326                 echo "There will be no way for $package to get your hostname." >&4;;
8327         *)
8328         echo "I'll use 'popen("'"'$aphostname'", "r")'"' to get your hostname." >&4
8329                 ;;
8330         esac;;
8331 esac
8332 case "$d_phostname" in
8333 '') d_phostname="$undef";;
8334 esac
8335
8336 : see if this is a netdb.h system
8337 set netdb.h i_netdb
8338 eval $inhdr
8339
8340 : see if prototypes for various gethostxxx netdb.h functions are available
8341 echo " "
8342 set d_gethostprotos gethostent $i_netdb netdb.h
8343 eval $hasproto
8344
8345 : see if getlogin exists
8346 set getlogin d_getlogin
8347 eval $inlibc
8348
8349 : see if getnetbyaddr exists
8350 set getnetbyaddr d_getnbyaddr
8351 eval $inlibc
8352
8353 : see if getnetbyname exists
8354 set getnetbyname d_getnbyname
8355 eval $inlibc
8356
8357 : see if getnetent exists
8358 set getnetent d_getnent
8359 eval $inlibc
8360
8361 : see if prototypes for various getnetxxx netdb.h functions are available
8362 echo " "
8363 set d_getnetprotos getnetent $i_netdb netdb.h
8364 eval $hasproto
8365
8366
8367 : see if getprotobyname exists
8368 set getprotobyname d_getpbyname
8369 eval $inlibc
8370
8371 : see if getprotobynumber exists
8372 set getprotobynumber d_getpbynumber
8373 eval $inlibc
8374
8375 : see if getprotoent exists
8376 set getprotoent d_getpent
8377 eval $inlibc
8378
8379 : see if getpgid exists
8380 set getpgid d_getpgid
8381 eval $inlibc
8382
8383 : see if getpgrp2 exists
8384 set getpgrp2 d_getpgrp2
8385 eval $inlibc
8386
8387 : see if getppid exists
8388 set getppid d_getppid
8389 eval $inlibc
8390
8391 : see if getpriority exists
8392 set getpriority d_getprior
8393 eval $inlibc
8394
8395 : see if prototypes for various getprotoxxx netdb.h functions are available
8396 echo " "
8397 set d_getprotoprotos getprotoent $i_netdb netdb.h
8398 eval $hasproto
8399
8400 : see if getpwent exists
8401 set getpwent d_getpwent
8402 eval $inlibc
8403
8404
8405 : see if getservbyname exists
8406 set getservbyname d_getsbyname
8407 eval $inlibc
8408
8409 : see if getservbyport exists
8410 set getservbyport d_getsbyport
8411 eval $inlibc
8412
8413 : see if getservent exists
8414 set getservent d_getsent
8415 eval $inlibc
8416
8417 : see if prototypes for various getservxxx netdb.h functions are available
8418 echo " "
8419 set d_getservprotos getservent $i_netdb netdb.h
8420 eval $hasproto
8421
8422 : see if gettimeofday or ftime exists
8423 set gettimeofday d_gettimeod
8424 eval $inlibc
8425 case "$d_gettimeod" in
8426 "$undef")
8427         set ftime d_ftime 
8428         eval $inlibc
8429         ;;
8430 *)
8431         val="$undef"; set d_ftime; eval $setvar
8432         ;;
8433 esac
8434 case "$d_gettimeod$d_ftime" in
8435 "$undef$undef")
8436         echo " "
8437         echo 'No ftime() nor gettimeofday() -- timing may be less accurate.' >&4
8438         ;;
8439 esac
8440
8441 : see if this is an grp system
8442 set grp.h i_grp
8443 eval $inhdr
8444
8445 case "$i_grp" in
8446 $define)
8447         xxx=`./findhdr grp.h`
8448         $cppstdin $cppflags $cppminus < $xxx >$$.h
8449
8450         if $contains 'gr_passwd' $$.h >/dev/null 2>&1; then
8451                 val="$define"
8452         else
8453                 val="$undef"
8454         fi
8455         set d_grpasswd
8456         eval $setvar
8457
8458         $rm -f $$.h
8459         ;;
8460 *)
8461         val="$undef";
8462         set d_grpasswd; eval $setvar
8463         ;;
8464 esac
8465
8466 : see if this is a netinet/in.h or sys/in.h system
8467 set netinet/in.h i_niin sys/in.h i_sysin
8468 eval $inhdr
8469
8470 : see if arpa/inet.h has to be included
8471 set arpa/inet.h i_arpainet
8472 eval $inhdr
8473
8474 : see if htonl --and friends-- exists
8475 val=''
8476 set htonl val
8477 eval $inlibc
8478
8479 : Maybe they are macros.
8480 case "$val" in
8481 $undef)
8482         $cat >htonl.c <<EOM
8483 #include <stdio.h>
8484 #include <sys/types.h>
8485 #$i_niin I_NETINET_IN
8486 #$i_sysin I_SYS_IN
8487 #$i_arpainet I_ARPA_INET
8488 #ifdef I_NETINET_IN
8489 #include <netinet/in.h>
8490 #endif
8491 #ifdef I_SYS_IN
8492 #include <sys/in.h>
8493 #endif
8494 #ifdef I_ARPA_INET
8495 #include <arpa/inet.h>
8496 #endif
8497 #ifdef htonl
8498 printf("Defined as a macro.");
8499 #endif
8500 EOM
8501         $cppstdin $cppflags $cppminus < htonl.c >htonl.E 2>/dev/null
8502         if $contains 'Defined as a macro' htonl.E >/dev/null 2>&1; then
8503                 val="$define"
8504                 echo "But it seems to be defined as a macro." >&4
8505         fi
8506         $rm -f htonl.?
8507         ;;
8508 esac
8509 set d_htonl
8510 eval $setvar
8511
8512 : see which of string.h or strings.h is needed
8513 echo " "
8514 strings=`./findhdr string.h`
8515 if $test "$strings" && $test -r "$strings"; then
8516         echo "Using <string.h> instead of <strings.h>." >&4
8517         val="$define"
8518 else
8519         val="$undef"
8520         strings=`./findhdr strings.h`
8521         if $test "$strings" && $test -r "$strings"; then
8522                 echo "Using <strings.h> instead of <string.h>." >&4
8523         else
8524                 echo "No string header found -- You'll surely have problems." >&4
8525         fi
8526 fi
8527 set i_string
8528 eval $setvar
8529 case "$i_string" in
8530 "$undef") strings=`./findhdr strings.h`;;
8531 *)        strings=`./findhdr string.h`;;
8532 esac
8533
8534 : index or strchr
8535 echo " "
8536 if set index val -f; eval $csym; $val; then
8537         if set strchr val -f d_strchr; eval $csym; $val; then
8538                 if $contains strchr "$strings" >/dev/null 2>&1 ; then
8539                         val="$define"
8540                         vali="$undef"
8541                         echo "strchr() found." >&4
8542                 else
8543                         val="$undef"
8544                         vali="$define"
8545                         echo "index() found." >&4
8546                 fi
8547         else
8548                 val="$undef"
8549                 vali="$define"
8550                 echo "index() found." >&4
8551         fi
8552 else
8553         if set strchr val -f d_strchr; eval $csym; $val; then
8554                 val="$define"
8555                 vali="$undef"
8556                 echo "strchr() found." >&4
8557         else
8558                 echo "No index() or strchr() found!" >&4
8559                 val="$undef"
8560                 vali="$undef"
8561         fi
8562 fi
8563 set d_strchr; eval $setvar
8564 val="$vali"
8565 set d_index; eval $setvar
8566
8567 : check whether inet_aton exists
8568 set inet_aton d_inetaton
8569 eval $inlibc
8570
8571 : see if inttypes.h is available
8572 : we want a real compile instead of Inhdr because some systems
8573 : have an inttypes.h which includes non-existent headers
8574 echo " "
8575 $cat >try.c <<EOCP
8576 #include <inttypes.h>
8577 int main() {
8578         static int32_t foo32 = 0x12345678;
8579 }
8580 EOCP
8581 set try
8582 if eval $compile; then
8583         echo "<inttypes.h> found." >&4
8584         val="$define"
8585 else
8586         echo "<inttypes.h> NOT found." >&4
8587         val="$undef"
8588 fi
8589 $rm -f try.c try
8590 set i_inttypes
8591 eval $setvar
8592
8593 : check for int64_t
8594 case "$use64bits" in
8595 "$define" )
8596         echo " "
8597         echo $n "Checking to see if your system supports int64_t...$c" >&4
8598         $cat >try.c <<EOCP
8599 #include <sys/types.h>
8600 #$i_inttypes I_INTTYPES
8601 #ifdef I_INTTYPES
8602 #include <inttypes.h>
8603 #endif
8604 int64_t foo() { int64_t x; x = 7; return x; }
8605 EOCP
8606         if $cc $optimize $ccflags -c try.c >/dev/null 2>&1; then
8607                 val="$define"
8608                 echo " Yup, it does." >&4
8609         else
8610                 val="$undef"
8611                 echo " Nope, it doesn't." >&4
8612         fi
8613         $rm -f try.*
8614         ;;
8615 *)      val="$undef"
8616         ;;
8617 esac
8618 set d_int64t
8619 eval $setvar
8620
8621
8622 : Look for isascii
8623 echo " "
8624 $cat >isascii.c <<'EOCP'
8625 #include <stdio.h>
8626 #include <ctype.h>
8627 main() {
8628         int c = 'A';
8629         if (isascii(c))
8630                 exit(0);
8631         else
8632                 exit(1);
8633 }
8634 EOCP
8635 set isascii
8636 if eval $compile; then
8637         echo "isascii() found." >&4
8638         val="$define"
8639 else
8640         echo "isascii() NOT found." >&4
8641         val="$undef"
8642 fi
8643 set d_isascii
8644 eval $setvar
8645 $rm -f isascii*
8646
8647 : see if killpg exists
8648 set killpg d_killpg
8649 eval $inlibc
8650
8651 : see if lchown exists
8652 echo " "
8653 $cat > try.c <<'EOCP'
8654 /* System header to define __stub macros and hopefully few prototypes,
8655     which can conflict with char lchown(); below.  */
8656 #include <assert.h>
8657 /* Override any gcc2 internal prototype to avoid an error.  */
8658 /* We use char because int might match the return type of a gcc2
8659    builtin and then its argument prototype would still apply.  */
8660 char lchown();
8661 int main() {
8662     /*  The GNU C library defines this for functions which it implements
8663         to always fail with ENOSYS.  Some functions are actually named
8664         something starting with __ and the normal name is an alias.  */
8665 #if defined (__stub_lchown) || defined (__stub___lchown)
8666 choke me
8667 #else
8668 lchown();
8669 #endif
8670 ; return 0; }
8671 EOCP
8672 set try
8673 if eval $compile; then
8674     $echo "lchown() found." >&4
8675     val="$define"
8676 else
8677     $echo "lchown() NOT found." >&4
8678     val="$undef"
8679 fi
8680 set d_lchown
8681 eval $setvar
8682
8683 : see if link exists
8684 set link d_link
8685 eval $inlibc
8686
8687 : see if localeconv exists
8688 set localeconv d_locconv
8689 eval $inlibc
8690
8691 : see if lockf exists
8692 set lockf d_lockf
8693 eval $inlibc
8694
8695 : check for length of double
8696 echo " "
8697 case "$doublesize" in
8698 '')
8699         $echo $n "Checking to see how big your double precision numbers are...$c" >&4
8700         $cat >try.c <<'EOCP'
8701 #include <stdio.h>
8702 main()
8703 {
8704         printf("%d\n", sizeof(double));
8705 }
8706 EOCP
8707         set try
8708         if eval $compile_ok; then
8709                 doublesize=`./try`
8710                 $echo " $doublesize bytes." >&4
8711         else
8712                 dflt='8'
8713                 echo "(I can't seem to compile the test program.  Guessing...)"
8714                 rp="What is the size of a double precision number (in bytes)?"
8715                 . ./myread
8716                 doublesize="$ans"
8717         fi
8718         ;;
8719 esac
8720 $rm -f try.c try
8721
8722 : check for long doubles
8723 echo " "
8724 echo $n "Checking to see if your system supports long doubles...$c" >&4
8725 echo 'long double foo() { long double x; x = 7.0; return x; }' > try.c
8726 if $cc $optimize $ccflags -c try.c >/dev/null 2>&1; then
8727         val="$define"
8728         echo " Yup, it does." >&4
8729 else
8730         val="$undef"
8731         echo " Nope, it doesn't." >&4
8732 fi
8733 $rm try.*
8734 set d_longdbl
8735 eval $setvar
8736
8737 : check for length of long double
8738 case "${d_longdbl}${longdblsize}" in
8739 $define)
8740         echo " "
8741         $echo $n "Checking to see how big your long doubles are...$c" >&4
8742         $cat >try.c <<'EOCP'
8743 #include <stdio.h>
8744 int main()
8745 {
8746         printf("%d\n", sizeof(long double));
8747 }
8748 EOCP
8749         set try
8750         if eval $compile; then
8751                 longdblsize=`./try`
8752                 $echo " $longdblsize bytes." >&4
8753         else
8754                 dflt='8'
8755                 echo " "
8756                 echo "(I can't seem to compile the test program.  Guessing...)" >&4
8757                 rp="What is the size of a long double (in bytes)?"
8758                 . ./myread
8759                 longdblsize="$ans"
8760         fi
8761         if $test "X$doublesize" = "X$longdblsize"; then
8762                 echo "(That isn't any different from an ordinary double.)"
8763         fi      
8764         ;;
8765 esac
8766 $rm -f try.c try
8767
8768 : check for long long
8769 echo " "
8770 echo $n "Checking to see if your system supports long long...$c" >&4
8771 echo 'long long foo() { long long x; x = 7; return x; }' > try.c
8772 if $cc $optimize $ccflags -c try.c >/dev/null 2>&1; then
8773         val="$define"
8774         echo " Yup, it does." >&4
8775 else
8776         val="$undef"
8777         echo " Nope, it doesn't." >&4
8778 fi
8779 $rm try.*
8780 set d_longlong
8781 eval $setvar
8782
8783 : check for length of long long
8784 case "${d_longlong}${longlongsize}" in
8785 $define)
8786         echo " "
8787         $echo $n "Checking to see how big your long longs are...$c" >&4
8788         $cat >try.c <<'EOCP'
8789 #include <stdio.h>
8790 int main()
8791 {
8792         printf("%d\n", sizeof(long long));
8793 }
8794 EOCP
8795         set try
8796         if eval $compile_ok; then
8797                 longlongsize=`./try`
8798                 $echo " $longlongsize bytes." >&4
8799         else
8800                 dflt='8'
8801                 echo " "
8802                 echo "(I can't seem to compile the test program.  Guessing...)"
8803                 rp="What is the size of a long long (in bytes)?"
8804                 . ./myread
8805                 longlongsize="$ans"
8806         fi
8807         if $test "X$longsize" = "X$longlongsize"; then
8808                 echo "(That isn't any different from an ordinary long.)"
8809         fi      
8810         ;;
8811 esac
8812 $rm -f try.c try
8813
8814 : see if lstat exists
8815 set lstat d_lstat
8816 eval $inlibc
8817
8818 : see if mblen exists
8819 set mblen d_mblen
8820 eval $inlibc
8821
8822 : see if mbstowcs exists
8823 set mbstowcs d_mbstowcs
8824 eval $inlibc
8825
8826 : see if mbtowc exists
8827 set mbtowc d_mbtowc
8828 eval $inlibc
8829
8830 : see if memcmp exists
8831 set memcmp d_memcmp
8832 eval $inlibc
8833
8834 : see if memcpy exists
8835 set memcpy d_memcpy
8836 eval $inlibc
8837
8838 : see if memmove exists
8839 set memmove d_memmove
8840 eval $inlibc
8841
8842 : see if memset exists
8843 set memset d_memset
8844 eval $inlibc
8845
8846 : see if mkdir exists
8847 set mkdir d_mkdir
8848 eval $inlibc
8849
8850 : see if mkfifo exists
8851 set mkfifo d_mkfifo
8852 eval $inlibc
8853
8854 : see if mktime exists
8855 set mktime d_mktime
8856 eval $inlibc
8857
8858 : see if msgctl exists
8859 set msgctl d_msgctl
8860 eval $inlibc
8861
8862 : see if msgget exists
8863 set msgget d_msgget
8864 eval $inlibc
8865
8866 : see if msgsnd exists
8867 set msgsnd d_msgsnd
8868 eval $inlibc
8869
8870 : see if msgrcv exists
8871 set msgrcv d_msgrcv
8872 eval $inlibc
8873
8874 : see how much of the 'msg*(2)' library is present.
8875 h_msg=true
8876 echo " "
8877 case "$d_msgctl$d_msgget$d_msgsnd$d_msgrcv" in
8878 *"$undef"*) h_msg=false;;
8879 esac
8880 case "$osname" in
8881 freebsd)
8882     case "`ipcs 2>&1`" in
8883     "SVID messages"*"not configured"*)
8884         echo "Your $osname does not have the msg*(2) configured." >&4
8885         h_msg=false
8886         val="$undef"
8887         set msgctl d_msgctl
8888         eval $setvar
8889         set msgget d_msgget
8890         eval $setvar
8891         set msgsnd d_msgsnd
8892         eval $setvar
8893         set msgrcv d_msgrcv
8894         eval $setvar
8895         ;;
8896     esac
8897     ;;
8898 esac
8899 : we could also check for sys/ipc.h ...
8900 if $h_msg && $test `./findhdr sys/msg.h`; then
8901         echo "You have the full msg*(2) library." >&4
8902         val="$define"
8903 else
8904         echo "You don't have the full msg*(2) library." >&4
8905         val="$undef"
8906 fi
8907 set d_msg
8908 eval $setvar
8909
8910 : see if nice exists
8911 set nice d_nice
8912 eval $inlibc
8913
8914 : how to create joinable pthreads
8915 if test "X$usethreads" = "X$define"; then
8916         echo " "
8917         echo "Checking what constant to use for creating joinable pthreads..." >&4 
8918         $cat >try.c <<'EOCP'
8919 #include <pthread.h>
8920 int main() {
8921     int detachstate = JOINABLE;
8922 }
8923 EOCP
8924         set try -DJOINABLE=PTHREAD_CREATE_JOINABLE
8925         if eval $compile; then
8926                 echo "You seem to use PTHREAD_CREATE_JOINABLE." >&2
8927                 val="$undef" # Yes, undef.
8928                 set d_old_pthread_create_joinable
8929                 eval $setvar
8930                 val=""
8931                 set old_pthread_create_joinable
8932                 eval $setvar
8933         else
8934                 set try -DJOINABLE=PTHREAD_CREATE_UNDETACHED
8935                 if eval $compile; then
8936                         echo "You seem to use PTHREAD_CREATE_UNDETACHED." >&2
8937                         val="$define"
8938                         set d_old_pthread_create_joinable
8939                         eval $setvar
8940                         val=PTHREAD_CREATE_UNDETACHED
8941                         set old_pthread_create_joinable
8942                         eval $setvar
8943                 else            
8944                         set try -DJOINABLE=__UNDETACHED
8945                         if eval $compile; then
8946                                 echo "You seem to use __UNDETACHED." >&2
8947                                 val="$define"
8948                                 set d_old_pthread_create_joinable
8949                                 eval $setvar
8950                                 val=__UNDETACHED
8951                                 set old_pthread_create_joinable
8952                                 eval $setvar
8953                         else
8954                                 echo "Egads, nothing obvious found.  Guessing that you use 0." >&2
8955                                 val="$define"
8956                                 set d_old_pthread_create_joinable
8957                                 eval $setvar
8958                                 val=0
8959                                 set old_pthread_create_joinable
8960                                 eval $setvar
8961                         fi
8962                 fi
8963         fi
8964         $rm -f try try.*
8965 else
8966     d_old_pthread_create_joinable="$undef"
8967     old_pthread_create_joinable=""
8968 fi
8969
8970 : see if pause exists
8971 set pause d_pause
8972 eval $inlibc
8973
8974 : see if pipe exists
8975 set pipe d_pipe
8976 eval $inlibc
8977
8978 : see if poll exists
8979 set poll d_poll
8980 eval $inlibc
8981
8982
8983 : see whether the various POSIXish _yields exist
8984 $cat >try.c <<EOP
8985 #include <pthread.h>
8986 #include <stdio.h>
8987 int main() {
8988 #ifdef SCHED_YIELD
8989         sched_yield();
8990 #else
8991 #ifdef PTHREAD_YIELD
8992         pthread_yield();
8993 #else
8994 #ifdef PTHREAD_YIELD_NULL
8995         pthread_yield(NULL);
8996 #endif
8997 #endif
8998 #endif
8999 }
9000 EOP
9001 : see if sched_yield exists
9002 set try -DSCHED_YIELD
9003 if eval $compile; then
9004     val="$define"
9005     sched_yield='sched_yield()'
9006 else
9007     val="$undef"
9008 fi
9009 case "$usethreads" in
9010 $define)
9011         case "$val" in
9012         $define) echo 'sched_yield() found.' >&4        ;;
9013         *)       echo 'sched_yield() NOT found.' >&4    ;;
9014         esac
9015 esac
9016 set d_sched_yield
9017 eval $setvar
9018
9019 : see if pthread_yield exists
9020 set try -DPTHREAD_YIELD
9021 if eval $compile; then
9022     val="$define"
9023     case "$sched_yield" in
9024     '') sched_yield='pthread_yield()' ;;
9025     esac
9026 else
9027     set try -DPTHREAD_YIELD_NULL
9028     if eval $compile; then
9029         val="$define"
9030         case "$sched_yield" in
9031         '') sched_yield='pthread_yield(NULL)' ;;
9032         esac
9033     else
9034         val="$undef"
9035     fi
9036 fi
9037 case "$usethreads" in
9038 $define)
9039         case "$val" in
9040         $define) echo 'pthread_yield() found.' >&4      ;;
9041         *)       echo 'pthread_yield() NOT found.' >&4  ;;
9042         esac
9043         ;;
9044 esac
9045 set d_pthread_yield
9046 eval $setvar
9047
9048 case "$sched_yield" in
9049 '') sched_yield=undef ;;
9050 esac
9051
9052 $rm -f try try.*
9053
9054 : see if this is a pwd.h system
9055 set pwd.h i_pwd
9056 eval $inhdr
9057
9058 case "$i_pwd" in
9059 $define)
9060         xxx=`./findhdr pwd.h`
9061         $cppstdin $cppflags $cppminus < $xxx >$$.h
9062
9063         if $contains 'pw_quota' $$.h >/dev/null 2>&1; then
9064                 val="$define"
9065         else
9066                 val="$undef"
9067         fi
9068         set d_pwquota
9069         eval $setvar
9070
9071         if $contains 'pw_age' $$.h >/dev/null 2>&1; then
9072                 val="$define"
9073         else
9074                 val="$undef"
9075         fi
9076         set d_pwage
9077         eval $setvar
9078
9079         if $contains 'pw_change' $$.h >/dev/null 2>&1; then
9080                 val="$define"
9081         else
9082                 val="$undef"
9083         fi
9084         set d_pwchange
9085         eval $setvar
9086
9087         if $contains 'pw_class' $$.h >/dev/null 2>&1; then
9088                 val="$define"
9089         else
9090                 val="$undef"
9091         fi
9092         set d_pwclass
9093         eval $setvar
9094
9095         if $contains 'pw_expire' $$.h >/dev/null 2>&1; then
9096                 val="$define"
9097         else
9098                 val="$undef"
9099         fi
9100         set d_pwexpire
9101         eval $setvar
9102
9103         if $contains 'pw_comment' $$.h >/dev/null 2>&1; then
9104                 val="$define"
9105         else
9106                 val="$undef"
9107         fi
9108         set d_pwcomment
9109         eval $setvar
9110
9111         if $contains 'pw_gecos' $$.h >/dev/null 2>&1; then
9112                 val="$define"
9113         else
9114                 val="$undef"
9115         fi
9116         set d_pwgecos
9117         eval $setvar
9118
9119         if $contains 'pw_passwd' $$.h >/dev/null 2>&1; then
9120                 val="$define"
9121         else
9122                 val="$undef"
9123         fi
9124         set d_pwpasswd
9125         eval $setvar
9126
9127         $rm -f $$.h
9128         ;;
9129 *)
9130         val="$undef"; 
9131         set d_pwquota; eval $setvar
9132         set d_pwage; eval $setvar
9133         set d_pwchange; eval $setvar
9134         set d_pwclass; eval $setvar
9135         set d_pwexpire; eval $setvar
9136         set d_pwcomment; eval $setvar
9137         set d_pwgecos; eval $setvar
9138         set d_pwpasswd; eval $setvar
9139         ;;
9140 esac
9141
9142 : see if readdir and friends exist
9143 set readdir d_readdir
9144 eval $inlibc
9145 set seekdir d_seekdir
9146 eval $inlibc
9147 set telldir d_telldir
9148 eval $inlibc
9149 set rewinddir d_rewinddir
9150 eval $inlibc
9151
9152 : see if readlink exists
9153 set readlink d_readlink
9154 eval $inlibc
9155
9156 : see if readv exists
9157 set readv d_readv
9158 eval $inlibc
9159
9160 : see if rename exists
9161 set rename d_rename
9162 eval $inlibc
9163
9164 : see if rmdir exists
9165 set rmdir d_rmdir
9166 eval $inlibc
9167
9168 : see if memory.h is available.
9169 val=''
9170 set memory.h val
9171 eval $inhdr
9172
9173 : See if it conflicts with string.h
9174 case "$val" in
9175 $define)
9176         case "$strings" in
9177         '') ;;
9178         *)
9179                 $cppstdin $cppflags $cppminus < $strings > mem.h
9180                 if $contains 'memcpy' mem.h >/dev/null 2>&1; then
9181                         echo " "
9182                         echo "We won't be including <memory.h>."
9183                         val="$undef"
9184                 fi
9185                 $rm -f mem.h
9186                 ;;
9187         esac
9188 esac
9189 set i_memory
9190 eval $setvar
9191
9192 : can bcopy handle overlapping blocks?
9193 val="$undef"
9194 case "$d_bcopy" in
9195 "$define")
9196         echo " "
9197         echo "Checking to see if your bcopy() can do overlapping copies..." >&4
9198         $cat >try.c <<EOCP
9199 #$i_memory I_MEMORY
9200 #$i_stdlib I_STDLIB
9201 #$i_string I_STRING
9202 #$i_unistd I_UNISTD
9203 EOCP
9204         $cat >>try.c <<'EOCP'
9205 #include <stdio.h>
9206 #ifdef I_MEMORY
9207 #  include <memory.h>
9208 #endif
9209 #ifdef I_STDLIB
9210 #  include <stdlib.h>
9211 #endif
9212 #ifdef I_STRING
9213 #  include <string.h>
9214 #else
9215 #  include <strings.h>
9216 #endif
9217 #ifdef I_UNISTD
9218 #  include <unistd.h>  /* Needed for NetBSD */
9219 #endif
9220 main()
9221 {
9222 char buf[128], abc[128];
9223 char *b;
9224 int len;
9225 int off;
9226 int align;
9227
9228 bcopy("abcdefghijklmnopqrstuvwxyz0123456789", abc, 36);
9229
9230 for (align = 7; align >= 0; align--) {
9231         for (len = 36; len; len--) {
9232                 b = buf+align;
9233                 bcopy(abc, b, len);
9234                 for (off = 1; off <= len; off++) {
9235                         bcopy(b, b+off, len);
9236                         bcopy(b+off, b, len);
9237                         if (bcmp(b, abc, len))
9238                                 exit(1);
9239                 }
9240         }
9241 }
9242 exit(0);
9243 }
9244 EOCP
9245         set try
9246         if eval $compile_ok; then
9247                 if ./try 2>/dev/null; then
9248                         echo "Yes, it can."
9249                         val="$define"
9250                 else
9251                         echo "It can't, sorry."
9252                         case "$d_memmove" in
9253                         "$define") echo "But that's Ok since you have memmove()." ;;
9254                         esac
9255                 fi
9256         else
9257                 echo "(I can't compile the test program, so we'll assume not...)"
9258                 case "$d_memmove" in
9259                 "$define") echo "But that's Ok since you have memmove()." ;;
9260                 esac
9261         fi
9262         ;;
9263 esac
9264 $rm -f try.* try core
9265 set d_safebcpy
9266 eval $setvar
9267
9268 : can memcpy handle overlapping blocks?
9269 val="$undef"
9270 case "$d_memcpy" in
9271 "$define")
9272         echo " "
9273         echo "Checking to see if your memcpy() can do overlapping copies..." >&4
9274         $cat >try.c <<EOCP
9275 #$i_memory I_MEMORY
9276 #$i_stdlib I_STDLIB
9277 #$i_string I_STRING
9278 #$i_unistd I_UNISTD
9279 EOCP
9280         $cat >>try.c <<'EOCP'
9281 #include <stdio.h>
9282 #ifdef I_MEMORY
9283 #  include <memory.h>
9284 #endif
9285 #ifdef I_STDLIB
9286 #  include <stdlib.h>
9287 #endif
9288 #ifdef I_STRING
9289 #  include <string.h>
9290 #else
9291 #  include <strings.h>
9292 #endif
9293 #ifdef I_UNISTD
9294 #  include <unistd.h>  /* Needed for NetBSD */
9295 #endif
9296 main()
9297 {
9298 char buf[128], abc[128];
9299 char *b;
9300 int len;
9301 int off;
9302 int align;
9303
9304 /* Copy "abcde..." string to char abc[] so that gcc doesn't
9305    try to store the string in read-only memory. */
9306 memcpy(abc, "abcdefghijklmnopqrstuvwxyz0123456789", 36);
9307
9308 for (align = 7; align >= 0; align--) {
9309         for (len = 36; len; len--) {
9310                 b = buf+align;
9311                 memcpy(b, abc, len);
9312                 for (off = 1; off <= len; off++) {
9313                         memcpy(b+off, b, len);
9314                         memcpy(b, b+off, len);
9315                         if (memcmp(b, abc, len))
9316                                 exit(1);
9317                 }
9318         }
9319 }
9320 exit(0);
9321 }
9322 EOCP
9323         set try
9324         if eval $compile_ok; then
9325                 if ./try 2>/dev/null; then
9326                         echo "Yes, it can."
9327                         val="$define"
9328                 else
9329                         echo "It can't, sorry."
9330                         case "$d_memmove" in
9331                         "$define") echo "But that's Ok since you have memmove()." ;;
9332                         esac
9333                 fi
9334         else
9335                 echo "(I can't compile the test program, so we'll assume not...)"
9336                 case "$d_memmove" in
9337                 "$define") echo "But that's Ok since you have memmove()." ;;
9338                 esac
9339         fi
9340         ;;
9341 esac
9342 $rm -f try.* try core
9343 set d_safemcpy
9344 eval $setvar
9345
9346 : can memcmp be trusted to compare relative magnitude?
9347 val="$undef"
9348 case "$d_memcmp" in
9349 "$define")
9350         echo " "
9351         echo "Checking if your memcmp() can compare relative magnitude..." >&4
9352         $cat >try.c <<EOCP
9353 #$i_memory I_MEMORY
9354 #$i_stdlib I_STDLIB
9355 #$i_string I_STRING
9356 #$i_unistd I_UNISTD
9357 EOCP
9358         $cat >>try.c <<'EOCP'
9359 #include <stdio.h>
9360 #ifdef I_MEMORY
9361 #  include <memory.h>
9362 #endif
9363 #ifdef I_STDLIB
9364 #  include <stdlib.h>
9365 #endif
9366 #ifdef I_STRING
9367 #  include <string.h>
9368 #else
9369 #  include <strings.h>
9370 #endif
9371 #ifdef I_UNISTD
9372 #  include <unistd.h>  /* Needed for NetBSD */
9373 #endif
9374 main()
9375 {
9376 char a = -1;
9377 char b = 0;
9378 if ((a < b) && memcmp(&a, &b, 1) < 0)
9379         exit(1);
9380 exit(0);
9381 }
9382 EOCP
9383         set try
9384         if eval $compile_ok; then
9385                 if ./try 2>/dev/null; then
9386                         echo "Yes, it can."
9387                         val="$define"
9388                 else
9389                         echo "No, it can't (it uses signed chars)."
9390                 fi
9391         else
9392                 echo "(I can't compile the test program, so we'll assume not...)"
9393         fi
9394         ;;
9395 esac
9396 $rm -f try.* try core
9397 set d_sanemcmp
9398 eval $setvar
9399
9400 : see if select exists
9401 set select d_select
9402 eval $inlibc
9403
9404 : see if semctl exists
9405 set semctl d_semctl
9406 eval $inlibc
9407
9408 : see if semget exists
9409 set semget d_semget
9410 eval $inlibc
9411
9412 : see if semop exists
9413 set semop d_semop
9414 eval $inlibc
9415
9416 : see how much of the 'sem*(2)' library is present.
9417 h_sem=true
9418 echo " "
9419 case "$d_semctl$d_semget$d_semop" in
9420 *"$undef"*) h_sem=false;;
9421 esac
9422 case "$osname" in
9423 freebsd)
9424     case "`ipcs 2>&1`" in
9425     "SVID messages"*"not configured"*)
9426         echo "Your $osname does not have the sem*(2) configured." >&4
9427         h_sem=false
9428         val="$undef"
9429         set semctl d_semctl
9430         eval $setvar
9431         set semget d_semget
9432         eval $setvar
9433         set semop d_semop
9434         eval $setvar
9435         ;;
9436     esac
9437     ;;
9438 esac
9439 : we could also check for sys/ipc.h ...
9440 if $h_sem && $test `./findhdr sys/sem.h`; then
9441         echo "You have the full sem*(2) library." >&4
9442         val="$define"
9443 else
9444         echo "You don't have the full sem*(2) library." >&4
9445         val="$undef"
9446 fi
9447 set d_sem
9448 eval $setvar
9449
9450 : see whether sys/sem.h defines union semun
9451 echo " "
9452 $cat > try.c <<'END'
9453 #include <sys/types.h>
9454 #include <sys/ipc.h>
9455 #include <sys/sem.h>
9456 int main () { union semun semun; semun.buf = 0; }
9457 END
9458 set try
9459 if eval $compile; then
9460     echo "You have union semun in <sys/sem.h>." >&4
9461     val="$define"
9462 else
9463     echo "You do not have union semun in <sys/sem.h>." >&4
9464     val="$undef"
9465 fi
9466 $rm -f try try.c try.h
9467 set d_union_semun
9468 eval $setvar
9469
9470 : see how to do semctl IPC_STAT
9471 case "$d_sem" in
9472 $define)
9473     : see whether semctl IPC_STAT can use union semun
9474     echo " "
9475     $cat > try.h <<END
9476 #ifndef S_IRUSR
9477 #   ifdef S_IREAD
9478 #       define S_IRUSR S_IREAD
9479 #       define S_IWUSR S_IWRITE
9480 #       define S_IXUSR S_IEXEC
9481 #   else
9482 #       define S_IRUSR 0400
9483 #       define S_IWUSR 0200
9484 #       define S_IXUSR 0100
9485 #   endif
9486 #   define S_IRGRP (S_IRUSR>>3)
9487 #   define S_IWGRP (S_IWUSR>>3)
9488 #   define S_IXGRP (S_IXUSR>>3)
9489 #   define S_IROTH (S_IRUSR>>6)
9490 #   define S_IWOTH (S_IWUSR>>6)
9491 #   define S_IXOTH (S_IXUSR>>6)
9492 #endif
9493 #ifndef S_IRWXU
9494 #   define S_IRWXU (S_IRUSR|S_IWUSR|S_IXUSR)
9495 #   define S_IRWXG (S_IRGRP|S_IWGRP|S_IXGRP)
9496 #   define S_IRWXO (S_IROTH|S_IWOTH|S_IXOTH)
9497 #endif
9498 END
9499
9500     $cat > try.c <<END
9501 #include <sys/types.h>
9502 #include <sys/ipc.h>
9503 #include <sys/sem.h>
9504 #include <sys/stat.h>
9505 #include <stdio.h>
9506 #include <errno.h>
9507 #include "try.h"
9508 #ifndef errno
9509 extern int errno;
9510 #endif
9511 #$d_union_semun HAS_UNION_SEMUN
9512 int main() {
9513     union semun
9514 #ifndef HAS_UNION_SEMUN
9515     {
9516         int val;
9517         struct semid_ds *buf;
9518         unsigned short *array;
9519     }
9520 #endif
9521     arg;
9522     int sem, st;
9523
9524 #if defined(IPC_PRIVATE) && defined(S_IRWXU) && defined(S_IRWXG) && defined(S_IRWXO) && defined(IPC_CREAT)
9525     sem = semget(IPC_PRIVATE, 1, S_IRWXU|S_IRWXG|S_IRWXO|IPC_CREAT);
9526     if (sem > -1) {
9527         struct semid_ds argbuf;
9528         arg.buf = &argbuf;
9529 #       ifdef IPC_STAT
9530         st = semctl(sem, 0, IPC_STAT, arg);
9531         if (st == 0)
9532             printf("semun\n");
9533         else
9534 #       endif /* IPC_STAT */
9535             printf("semctl IPC_STAT failed: errno = %d\n", errno);
9536 #       ifdef IPC_RMID
9537         if (semctl(sem, 0, IPC_RMID, arg) != 0)
9538 #       endif /* IPC_RMID */
9539             printf("semctl IPC_RMID failed: errno = %d\n", errno);
9540     } else
9541 #endif /* IPC_PRIVATE && ... */
9542         printf("semget failed: errno = %d\n", errno);
9543   return 0;
9544 }
9545 END
9546     val="$undef"
9547     set try
9548     if eval $compile; then
9549         xxx=`./try`
9550         case "$xxx" in
9551         semun) val="$define" ;;
9552         esac
9553     fi
9554     $rm -f try try.c
9555     set d_semctl_semun
9556     eval $setvar
9557     case "$d_semctl_semun" in
9558     $define)
9559         echo "You can use union semun for semctl IPC_STAT." >&4
9560         also='also'
9561         ;;
9562     *)  echo "You cannot use union semun for semctl IPC_STAT." >&4
9563         also=''
9564         ;;
9565     esac
9566
9567     : see whether semctl IPC_STAT can use struct semid_ds pointer
9568     $cat > try.c <<'END'
9569 #include <sys/types.h>
9570 #include <sys/ipc.h>
9571 #include <sys/sem.h>
9572 #include <sys/stat.h>
9573 #include "try.h"
9574 #include <stdio.h>
9575 #include <errno.h>
9576 #ifndef errno
9577 extern int errno;
9578 #endif
9579 int main() {
9580     struct semid_ds arg;
9581     int sem, st;
9582
9583 #if defined(IPC_PRIVATE) && defined(S_IRWXU) && defined(S_IRWXG) &&  defined(S_IRWXO) && defined(IPC_CREAT)
9584     sem = semget(IPC_PRIVATE, 1, S_IRWXU|S_IRWXG|S_IRWXO|IPC_CREAT);
9585     if (sem > -1) {
9586 #       ifdef IPC_STAT
9587         st = semctl(sem, 0, IPC_STAT, &arg);
9588         if (st == 0)
9589             printf("semid_ds\n");
9590         else
9591 #       endif /* IPC_STAT */
9592             printf("semctl IPC_STAT failed: errno = %d\n", errno);
9593 #       ifdef IPC_RMID
9594         if (semctl(sem, 0, IPC_RMID, &arg) != 0)
9595 #       endif /* IPC_RMID */
9596             printf("semctl IPC_RMID failed: errno = %d\n", errno);
9597     } else
9598 #endif /* IPC_PRIVATE && ... */
9599         printf("semget failed: errno = %d\n", errno);
9600
9601     return 0;
9602 }
9603 END
9604     val="$undef"
9605     set try
9606     if eval $compile; then
9607         xxx=`./try`
9608         case "$xxx" in
9609         semid_ds) val="$define" ;;
9610         esac
9611     fi
9612     $rm -f try try.c
9613     set d_semctl_semid_ds
9614     eval $setvar
9615     case "$d_semctl_semid_ds" in
9616     $define)
9617         echo "You can $also use struct semid_ds* for semctl IPC_STAT." >&4
9618         ;;
9619     *)  echo "You cannot use struct semid_ds* for semctl IPC_STAT." >&4
9620         ;;
9621     esac
9622     $rm -f try.h
9623     ;;
9624 *)  val="$undef"
9625
9626     # We do not have the full sem*(2) library, so assume we can not
9627     # use either.
9628
9629     set d_semctl_semun
9630     eval $setvar
9631
9632     set d_semctl_semid_ds
9633     eval $setvar
9634     ;;
9635 esac
9636
9637 : see if setegid exists
9638 set setegid d_setegid
9639 eval $inlibc
9640
9641 : see if seteuid exists
9642 set seteuid d_seteuid
9643 eval $inlibc
9644
9645 : see if setgrent exists
9646 set setgrent d_setgrent
9647 eval $inlibc
9648
9649 : see if sethostent exists
9650 set sethostent d_sethent
9651 eval $inlibc
9652
9653 : see if setlinebuf exists
9654 set setlinebuf d_setlinebuf
9655 eval $inlibc
9656
9657 : see if setlocale exists
9658 set setlocale d_setlocale
9659 eval $inlibc
9660
9661 : see if setnetent exists
9662 set setnetent d_setnent
9663 eval $inlibc
9664
9665 : see if setprotoent exists
9666 set setprotoent d_setpent
9667 eval $inlibc
9668
9669 : see if setpgid exists
9670 set setpgid d_setpgid
9671 eval $inlibc
9672
9673 : see if setpgrp2 exists
9674 set setpgrp2 d_setpgrp2
9675 eval $inlibc
9676
9677 : see if setpriority exists
9678 set setpriority d_setprior
9679 eval $inlibc
9680
9681 : see if setpwent exists
9682 set setpwent d_setpwent
9683 eval $inlibc
9684
9685 : see if setregid exists
9686 set setregid d_setregid
9687 eval $inlibc
9688 set setresgid d_setresgid
9689 eval $inlibc
9690
9691 : see if setreuid exists
9692 set setreuid d_setreuid
9693 eval $inlibc
9694 set setresuid d_setresuid
9695 eval $inlibc
9696
9697 : see if setrgid exists
9698 set setrgid d_setrgid
9699 eval $inlibc
9700
9701 : see if setruid exists
9702 set setruid d_setruid
9703 eval $inlibc
9704
9705 : see if setservent exists
9706 set setservent d_setsent
9707 eval $inlibc
9708
9709 : see if setsid exists
9710 set setsid d_setsid
9711 eval $inlibc
9712
9713 : see if setvbuf exists
9714 set setvbuf d_setvbuf
9715 eval $inlibc
9716
9717 : see if sfio.h is available
9718 set sfio.h i_sfio
9719 eval $inhdr
9720
9721
9722 : see if sfio library is available
9723 case "$i_sfio" in
9724 $define)
9725         val=''
9726         set sfreserve val
9727         eval $inlibc
9728         ;;
9729 *)
9730         val="$undef"
9731         ;;
9732 esac
9733 : Ok, but do we want to use it.
9734 case "$val" in
9735 $define)
9736         case "$usesfio" in
9737         true|$define|[yY]*) dflt='y';;
9738         *) dflt='n';;
9739         esac
9740         echo "$package can use the sfio library, but it is experimental."
9741         rp="You seem to have sfio available, do you want to try using it?"
9742         . ./myread
9743         case "$ans" in
9744         y|Y) ;;
9745         *)      echo "Ok, avoiding sfio this time.  I'll use stdio instead."
9746                 val="$undef"
9747                 : Remove sfio from list of libraries to use
9748                 set `echo X $libs | $sed -e 's/-lsfio / /' -e 's/-lsfio$//'`
9749                 shift
9750                 libs="$*"
9751                 echo "libs = $libs" >&4
9752                 ;;
9753         esac
9754         ;;
9755 *)      case "$usesfio" in
9756         true|$define|[yY]*)
9757                 echo "Sorry, cannot find sfio on this machine" >&4
9758                 echo "Ignoring your setting of usesfio=$usesfio" >&4
9759                 ;;
9760         esac
9761         ;;
9762 esac
9763 set d_sfio
9764 eval $setvar
9765 case "$d_sfio" in
9766 $define) usesfio='true';;
9767 *) usesfio='false';;
9768 esac
9769
9770 : see if shmctl exists
9771 set shmctl d_shmctl
9772 eval $inlibc
9773
9774 : see if shmget exists
9775 set shmget d_shmget
9776 eval $inlibc
9777
9778 : see if shmat exists
9779 set shmat d_shmat
9780 eval $inlibc
9781 : see what shmat returns
9782 case "$d_shmat" in
9783 "$define")
9784         $cat >shmat.c <<'END'
9785 #include <sys/shm.h>
9786 void *shmat();
9787 END
9788         if $cc $ccflags -c shmat.c >/dev/null 2>&1; then
9789                 shmattype='void *'
9790         else
9791                 shmattype='char *'
9792         fi
9793         echo "and it returns ($shmattype)." >&4
9794         : see if a prototype for shmat is available
9795         xxx=`./findhdr sys/shm.h`
9796         $cppstdin $cppflags $cppminus < $xxx > shmat.c 2>/dev/null
9797         if $contains 'shmat.*(' shmat.c >/dev/null 2>&1; then
9798                 val="$define"
9799         else
9800                 val="$undef"
9801         fi
9802         $rm -f shmat.[co]
9803         ;;
9804 *)
9805         val="$undef"
9806         ;;
9807 esac
9808 set d_shmatprototype
9809 eval $setvar
9810
9811 : see if shmdt exists
9812 set shmdt d_shmdt
9813 eval $inlibc
9814
9815 : see how much of the 'shm*(2)' library is present.
9816 h_shm=true
9817 echo " "
9818 case "$d_shmctl$d_shmget$d_shmat$d_shmdt" in
9819 *"$undef"*) h_shm=false;;
9820 esac
9821 case "$osname" in
9822 freebsd)
9823     case "`ipcs 2>&1`" in
9824     "SVID shared memory"*"not configured"*)
9825         echo "Your $osname does not have the shm*(2) configured." >&4
9826         h_shm=false
9827         val="$undef"
9828         set shmctl d_shmctl
9829         evat $setvar
9830         set shmget d_shmget
9831         evat $setvar
9832         set shmat d_shmat
9833         evat $setvar
9834         set shmdt d_shmdt
9835         evat $setvar
9836         ;;
9837     esac
9838     ;;
9839 esac
9840 : we could also check for sys/ipc.h ...
9841 if $h_shm && $test `./findhdr sys/shm.h`; then
9842         echo "You have the full shm*(2) library." >&4
9843         val="$define"
9844 else
9845         echo "You don't have the full shm*(2) library." >&4
9846         val="$undef"
9847 fi
9848 set d_shm
9849 eval $setvar
9850
9851 echo " "
9852 : see if we have sigaction
9853 if set sigaction val -f d_sigaction; eval $csym; $val; then
9854         echo 'sigaction() found.' >&4
9855         $cat > try.c <<'EOP'
9856 #include <stdio.h>
9857 #include <sys/types.h>
9858 #include <signal.h>
9859 main()
9860 {
9861     struct sigaction act, oact;
9862 }
9863 EOP
9864         set try
9865         if eval $compile_ok; then
9866                 val="$define"
9867         else
9868                 echo "But you don't seem to have a useable struct sigaction." >&4
9869                 val="$undef"
9870         fi
9871 else
9872         echo 'sigaction NOT found.' >&4
9873         val="$undef"
9874 fi
9875 set d_sigaction; eval $setvar
9876 $rm -f try try$_o try.c
9877
9878 : see if sigsetjmp exists
9879 echo " "
9880 case "$d_sigsetjmp" in
9881 '')
9882         $cat >try.c <<'EOP'
9883 #include <setjmp.h>
9884 sigjmp_buf env;
9885 int set = 1;
9886 main()
9887 {
9888         if (sigsetjmp(env,1))
9889                 exit(set);
9890         set = 0;
9891         siglongjmp(env, 1);
9892         exit(1);
9893 }
9894 EOP
9895         set try
9896         if eval $compile; then
9897                 if ./try >/dev/null 2>&1; then
9898                         echo "POSIX sigsetjmp found." >&4
9899                         val="$define"
9900                 else
9901                         $cat >&4 <<EOM
9902 Uh-Oh! You have POSIX sigsetjmp and siglongjmp, but they do not work properly!!
9903 I'll ignore them.
9904 EOM
9905                         val="$undef"
9906                 fi
9907         else
9908                 echo "sigsetjmp not found." >&4
9909                 val="$undef"
9910         fi
9911         ;;
9912 *) val="$d_sigsetjmp"
9913         case "$d_sigsetjmp" in
9914         $define) echo "POSIX sigsetjmp found." >&4;;
9915         $undef) echo "sigsetjmp not found." >&4;;
9916         esac
9917         ;;
9918 esac
9919 set d_sigsetjmp
9920 eval $setvar
9921 $rm -f try.c try
9922
9923 : see if stat knows about block sizes
9924 echo " "
9925 set d_statblks stat st_blocks $i_sysstat sys/stat.h
9926 eval $hasfield
9927
9928 : see if _ptr and _cnt from stdio act std
9929 echo " "
9930 if $contains '_IO_fpos_t' `./findhdr stdio.h` >/dev/null 2>&1 ; then
9931         echo "(Looks like you have stdio.h from Linux.)"
9932         case "$stdio_ptr" in
9933         '') stdio_ptr='((fp)->_IO_read_ptr)'
9934                 ptr_lval=$define
9935                 ;;
9936         *)      ptr_lval=$d_stdio_ptr_lval;;
9937         esac
9938         case "$stdio_cnt" in
9939         '') stdio_cnt='((fp)->_IO_read_end - (fp)->_IO_read_ptr)'
9940                 cnt_lval=$undef
9941                 ;;
9942         *)      cnt_lval=$d_stdio_cnt_lval;;
9943         esac
9944         case "$stdio_base" in
9945         '') stdio_base='((fp)->_IO_read_base)';;
9946         esac
9947         case "$stdio_bufsiz" in
9948         '') stdio_bufsiz='((fp)->_IO_read_end - (fp)->_IO_read_base)';;
9949         esac
9950 else
9951         case "$stdio_ptr" in
9952         '') stdio_ptr='((fp)->_ptr)'
9953                 ptr_lval=$define
9954                 ;;
9955         *)      ptr_lval=$d_stdio_ptr_lval;;
9956         esac
9957         case "$stdio_cnt" in
9958         '') stdio_cnt='((fp)->_cnt)'
9959                 cnt_lval=$define
9960                 ;;
9961         *)      cnt_lval=$d_stdio_cnt_lval;;
9962         esac
9963         case "$stdio_base" in
9964         '') stdio_base='((fp)->_base)';;
9965         esac
9966         case "$stdio_bufsiz" in
9967         '') stdio_bufsiz='((fp)->_cnt + (fp)->_ptr - (fp)->_base)';;
9968         esac
9969 fi
9970 : test whether _ptr and _cnt really work
9971 echo "Checking how std your stdio is..." >&4
9972 $cat >try.c <<EOP
9973 #include <stdio.h>
9974 #define FILE_ptr(fp)    $stdio_ptr
9975 #define FILE_cnt(fp)    $stdio_cnt
9976 main() {
9977         FILE *fp = fopen("try.c", "r");
9978         char c = getc(fp);
9979         if (
9980                 18 <= FILE_cnt(fp) &&
9981                 strncmp(FILE_ptr(fp), "include <stdio.h>\n", 18) == 0
9982         )
9983                 exit(0);
9984         exit(1);
9985 }
9986 EOP
9987 val="$undef"
9988 set try
9989 if eval $compile; then
9990         if ./try; then
9991                 echo "Your stdio acts pretty std."
9992                 val="$define"
9993         else
9994                 echo "Your stdio isn't very std."
9995         fi
9996 else
9997         echo "Your stdio doesn't appear very std."
9998 fi
9999 $rm -f try.c try
10000 set d_stdstdio
10001 eval $setvar
10002
10003 : Can _ptr be used as an lvalue?
10004 case "$d_stdstdio$ptr_lval" in
10005 $define$define) val=$define ;;
10006 *) val=$undef ;;
10007 esac
10008 set d_stdio_ptr_lval
10009 eval $setvar
10010
10011 : Can _cnt be used as an lvalue?
10012 case "$d_stdstdio$cnt_lval" in
10013 $define$define) val=$define ;;
10014 *) val=$undef ;;
10015 esac
10016 set d_stdio_cnt_lval
10017 eval $setvar
10018
10019 : see if _base is also standard
10020 val="$undef"
10021 case "$d_stdstdio" in
10022 $define)
10023         $cat >try.c <<EOP
10024 #include <stdio.h>
10025 #define FILE_base(fp)   $stdio_base
10026 #define FILE_bufsiz(fp) $stdio_bufsiz
10027 main() {
10028         FILE *fp = fopen("try.c", "r");
10029         char c = getc(fp);
10030         if (
10031                 19 <= FILE_bufsiz(fp) &&
10032                 strncmp(FILE_base(fp), "#include <stdio.h>\n", 19) == 0
10033         )
10034                 exit(0);
10035         exit(1);
10036 }
10037 EOP
10038         set try
10039         if eval $compile; then
10040                 if ./try; then
10041                         echo "And its _base field acts std."
10042                         val="$define"
10043                 else
10044                         echo "But its _base field isn't std."
10045                 fi
10046         else
10047                 echo "However, it seems to be lacking the _base field."
10048         fi
10049         $rm -f try.c try
10050         ;;
10051 esac
10052 set d_stdiobase
10053 eval $setvar
10054
10055 : see if strcoll exists
10056 set strcoll d_strcoll
10057 eval $inlibc
10058
10059 : check for structure copying
10060 echo " "
10061 echo "Checking to see if your C compiler can copy structs..." >&4
10062 $cat >try.c <<'EOCP'
10063 int main()
10064 {
10065         struct blurfl {
10066                 int dyick;
10067         } foo, bar;
10068
10069         foo = bar;
10070 }
10071 EOCP
10072 if $cc -c try.c >/dev/null 2>&1 ; then
10073         val="$define"
10074         echo "Yup, it can."
10075 else
10076         val="$undef"
10077         echo "Nope, it can't."
10078 fi
10079 set d_strctcpy
10080 eval $setvar
10081 $rm -f try.*
10082
10083 : see if strerror and/or sys_errlist[] exist
10084 echo " "
10085 if test "X$d_strerror" = X -o "X$d_syserrlst" = X; then
10086     if set strerror val -f d_strerror; eval $csym; $val; then
10087                 echo 'strerror() found.' >&4
10088                 d_strerror="$define"
10089                 d_strerrm='strerror(e)'
10090                 if set sys_errlist val -a d_syserrlst; eval $csym; $val; then   
10091                         echo "(You also have sys_errlist[], so we could roll our own strerror.)" 
10092                         d_syserrlst="$define"
10093                 else
10094                         echo "(Since you don't have sys_errlist[], sterror() is welcome.)"
10095                         d_syserrlst="$undef"
10096                 fi
10097     elif xxx=`./findhdr string.h`; test "$xxx" || xxx=`./findhdr strings.h`; \
10098                         $contains '#[   ]*define.*strerror' "$xxx" >/dev/null 2>&1; then
10099                 echo 'strerror() found in string header.' >&4
10100                 d_strerror="$define"
10101                 d_strerrm='strerror(e)'
10102                 if set sys_errlist val -a d_syserrlst; eval $csym; $val; then   
10103                         echo "(Most probably, strerror() uses sys_errlist[] for descriptions.)"
10104                                 d_syserrlst="$define"
10105                 else
10106                         echo "(You don't appear to have any sys_errlist[], how can this be?)"
10107                         d_syserrlst="$undef"
10108                 fi
10109     elif set sys_errlist val -a d_syserrlst; eval $csym; $val; then
10110                 echo "strerror() not found, but you have sys_errlist[] so we'll use that." >&4
10111                 d_strerror="$undef"
10112                 d_syserrlst="$define"
10113                 d_strerrm='((e)<0||(e)>=sys_nerr?"unknown":sys_errlist[e])'
10114     else
10115                 echo 'strerror() and sys_errlist[] NOT found.' >&4
10116                 d_strerror="$undef"
10117                 d_syserrlst="$undef"
10118                 d_strerrm='"unknown"'
10119     fi
10120 fi
10121
10122 : see if strtod exists
10123 set strtod d_strtod
10124 eval $inlibc
10125
10126 : see if strtol exists
10127 set strtol d_strtol
10128 eval $inlibc
10129
10130 : see if strtoul exists
10131 set strtoul d_strtoul
10132 eval $inlibc
10133
10134 : see if strxfrm exists
10135 set strxfrm d_strxfrm
10136 eval $inlibc
10137
10138 : see if symlink exists
10139 set symlink d_symlink
10140 eval $inlibc
10141
10142 : see if syscall exists
10143 set syscall d_syscall
10144 eval $inlibc
10145
10146 : see if sysconf exists
10147 set sysconf d_sysconf
10148 eval $inlibc
10149
10150 : see if system exists
10151 set system d_system
10152 eval $inlibc
10153
10154 : see if tcgetpgrp exists
10155 set tcgetpgrp d_tcgetpgrp
10156 eval $inlibc
10157
10158 : see if tcsetpgrp exists
10159 set tcsetpgrp d_tcsetpgrp
10160 eval $inlibc
10161
10162 : define an is-a-typedef? function
10163 typedef='type=$1; var=$2; def=$3; shift; shift; shift; inclist=$@;
10164 case "$inclist" in
10165 "") inclist="sys/types.h";;
10166 esac;
10167 eval "varval=\$$var";
10168 case "$varval" in
10169 "")
10170         $rm -f temp.c;
10171         for inc in $inclist; do
10172                 echo "#include <$inc>" >>temp.c;
10173         done;
10174         echo "#ifdef $type" >> temp.c;
10175         echo "printf(\"We have $type\");" >> temp.c;
10176         echo "#endif" >> temp.c;
10177         $cppstdin $cppflags $cppminus < temp.c >temp.E 2>/dev/null;
10178         if $contains $type temp.E >/dev/null 2>&1; then
10179                 eval "$var=\$type";
10180         else
10181                 eval "$var=\$def";
10182         fi;
10183         $rm -f temp.?;;
10184 *) eval "$var=\$varval";;
10185 esac'
10186
10187 : define an is-a-typedef? function that prompts if the type is not available.
10188 typedef_ask='type=$1; var=$2; def=$3; shift; shift; shift; inclist=$@;
10189 case "$inclist" in
10190 "") inclist="sys/types.h";;
10191 esac;
10192 eval "varval=\$$var";
10193 case "$varval" in
10194 "")
10195         $rm -f temp.c;
10196         for inc in $inclist; do
10197                 echo "#include <$inc>" >>temp.c;
10198         done;
10199         echo "#ifdef $type" >> temp.c;
10200         echo "printf(\"We have $type\");" >> temp.c;
10201         echo "#endif" >> temp.c;
10202         $cppstdin $cppflags $cppminus < temp.c >temp.E 2>/dev/null;
10203         echo " " ;
10204         echo "$rp" | $sed -e "s/What is/Looking for/" -e "s/?/./";
10205         if $contains $type temp.E >/dev/null 2>&1; then
10206                 echo "$type found." >&4;
10207                 eval "$var=\$type";
10208         else
10209                 echo "$type NOT found." >&4;
10210                 dflt="$def";
10211                 . ./myread ;
10212                 eval "$var=\$ans";
10213         fi;
10214         $rm -f temp.?;;
10215 *) eval "$var=\$varval";;
10216 esac'
10217
10218 : see if this is a sys/times.h system
10219 set sys/times.h i_systimes
10220 eval $inhdr
10221
10222 : see if times exists
10223 echo " "
10224 if set times val -f d_times; eval $csym; $val; then
10225         echo 'times() found.' >&4
10226         d_times="$define"
10227         inc=''
10228         case "$i_systimes" in
10229         "$define") inc='sys/times.h';;
10230         esac
10231         rp="What is the type returned by times() on this system?"
10232         set clock_t clocktype long stdio.h sys/types.h $inc
10233         eval $typedef_ask
10234 else
10235         echo 'times() NOT found, hope that will do.' >&4
10236         d_times="$undef"
10237         clocktype='int'
10238 fi
10239
10240 : see if truncate exists
10241 set truncate d_truncate
10242 eval $inlibc
10243
10244 : see if tzname[] exists
10245 echo " "
10246 if set tzname val -a d_tzname; eval $csym; $val; then
10247         val="$define"
10248         echo 'tzname[] found.' >&4
10249 else
10250         val="$undef"
10251         echo 'tzname[] NOT found.' >&4
10252 fi
10253 set d_tzname
10254 eval $setvar
10255
10256 : see if umask exists
10257 set umask d_umask
10258 eval $inlibc
10259
10260 : backward compatibility for d_hvfork
10261 if test X$d_hvfork != X; then
10262         d_vfork="$d_hvfork"
10263         d_hvfork=''
10264 fi
10265 : see if there is a vfork
10266 val=''
10267 set vfork val
10268 eval $inlibc
10269
10270 : Ok, but do we want to use it. vfork is reportedly unreliable in 
10271 : perl on Solaris 2.x, and probably elsewhere.
10272 case "$val" in
10273 $define)
10274         echo " "
10275         case "$usevfork" in
10276         false) dflt='n';;
10277         *) dflt='y';;
10278         esac
10279         rp="Some systems have problems with vfork().  Do you want to use it?"
10280         . ./myread
10281         case "$ans" in
10282         y|Y) ;;
10283         *)
10284                 echo "Ok, we won't use vfork()."
10285                 val="$undef"
10286                 ;;
10287         esac
10288         ;;
10289 esac
10290 set d_vfork
10291 eval $setvar
10292 case "$d_vfork" in
10293 $define) usevfork='true';;
10294 *) usevfork='false';;
10295 esac
10296
10297 : see if this is an sysdir system
10298 set sys/dir.h i_sysdir
10299 eval $inhdr
10300
10301 : see if this is an sysndir system
10302 set sys/ndir.h i_sysndir
10303 eval $inhdr
10304
10305 : see if sys/types.h has to be included
10306 set sys/types.h i_systypes
10307 eval $inhdr
10308
10309 : see if closedir exists
10310 set closedir d_closedir
10311 eval $inlibc
10312
10313 case "$d_closedir" in
10314 "$define")
10315         echo " "
10316         echo "Checking whether closedir() returns a status..." >&4
10317         cat > closedir.c <<EOM
10318 #$i_dirent I_DIRENT             /**/
10319 #$i_sysdir I_SYS_DIR            /**/
10320 #$i_sysndir I_SYS_NDIR          /**/
10321 #$i_systypes I_SYS_TYPES        /**/
10322
10323 #if defined(I_SYS_TYPES)
10324 #include <sys/types.h>
10325 #endif
10326 #if defined(I_DIRENT)
10327 #include <dirent.h>
10328 #if defined(NeXT) && defined(I_SYS_DIR) /* NeXT needs dirent + sys/dir.h */
10329 #include <sys/dir.h>
10330 #endif
10331 #else
10332 #ifdef I_SYS_NDIR
10333 #include <sys/ndir.h>
10334 #else
10335 #ifdef I_SYS_DIR
10336 #ifdef hp9000s500
10337 #include <ndir.h>       /* may be wrong in the future */
10338 #else
10339 #include <sys/dir.h>
10340 #endif
10341 #endif
10342 #endif
10343 #endif 
10344 int main() { return closedir(opendir(".")); }
10345 EOM
10346         set closedir
10347         if eval $compile_ok; then
10348                 if ./closedir > /dev/null 2>&1 ; then
10349                         echo "Yes, it does."
10350                         val="$undef"
10351                 else
10352                         echo "No, it doesn't."
10353                         val="$define"
10354                 fi
10355         else
10356                 echo "(I can't seem to compile the test program--assuming it doesn't)"
10357                 val="$define"
10358         fi
10359         ;;
10360 *)
10361         val="$undef";
10362         ;;
10363 esac
10364 set d_void_closedir
10365 eval $setvar
10366 $rm -f closedir*
10367 : check for volatile keyword
10368 echo " "
10369 echo 'Checking to see if your C compiler knows about "volatile"...' >&4
10370 $cat >try.c <<'EOCP'
10371 int main()
10372 {
10373         typedef struct _goo_struct goo_struct;
10374         goo_struct * volatile goo = ((goo_struct *)0);
10375         struct _goo_struct {
10376                 long long_int;
10377                 int reg_int;
10378                 char char_var;
10379         };
10380         typedef unsigned short foo_t;
10381         char *volatile foo;
10382         volatile int bar;
10383         volatile foo_t blech;
10384         foo = foo;
10385 }
10386 EOCP
10387 if $cc -c $ccflags try.c >/dev/null 2>&1 ; then
10388         val="$define"
10389         echo "Yup, it does."
10390 else
10391         val="$undef"
10392         echo "Nope, it doesn't."
10393 fi
10394 set d_volatile
10395 eval $setvar
10396 $rm -f try.*
10397
10398 : see if there is a wait4
10399 set wait4 d_wait4
10400 eval $inlibc
10401
10402 : see if waitpid exists
10403 set waitpid d_waitpid
10404 eval $inlibc
10405
10406 : see if wcstombs exists
10407 set wcstombs d_wcstombs
10408 eval $inlibc
10409
10410 : see if wctomb exists
10411 set wctomb d_wctomb
10412 eval $inlibc
10413
10414 : see if writev exists
10415 set writev d_writev
10416 eval $inlibc
10417
10418 : preserve RCS keywords in files with variable substitution, grrr
10419 Date='$Date'
10420 Id='$Id'
10421 Log='$Log'
10422 RCSfile='$RCSfile'
10423 Revision='$Revision'
10424
10425 : check for alignment requirements
10426 echo " "
10427 case "$alignbytes" in
10428 '') echo "Checking alignment constraints..." >&4
10429         $cat >try.c <<'EOCP'
10430 struct foobar {
10431         char foo;
10432         double bar;
10433 } try;
10434 main()
10435 {
10436         printf("%d\n", (char *)&try.bar - (char *)&try.foo);
10437 }
10438 EOCP
10439         set try
10440         if eval $compile_ok; then
10441                 dflt=`./try`
10442         else
10443                 dflt='8'
10444                 echo "(I can't seem to compile the test program...)"
10445         fi
10446         ;;
10447 *) dflt="$alignbytes"
10448         ;;
10449 esac
10450 rp="Doubles must be aligned on a how-many-byte boundary?"
10451 . ./myread
10452 alignbytes="$ans"
10453 $rm -f try.c try
10454
10455 : check for ordering of bytes in a long
10456 case "$byteorder" in
10457 '')
10458         $cat <<'EOM'
10459   
10460 In the following, larger digits indicate more significance.  A big-endian
10461 machine like a Pyramid or a Motorola 680?0 chip will come out to 4321. A
10462 little-endian machine like a Vax or an Intel 80?86 chip would be 1234. Other
10463 machines may have weird orders like 3412.  A Cray will report 87654321. If
10464 the test program works the default is probably right.
10465 I'm now running the test program...
10466 EOM
10467         $cat >try.c <<'EOCP'
10468 #include <stdio.h>
10469 main()
10470 {
10471         int i;
10472         union {
10473                 unsigned long l;
10474                 char c[sizeof(long)];
10475         } u;
10476
10477         if (sizeof(long) > 4)
10478                 u.l = (0x08070605L << 32) | 0x04030201L;
10479         else
10480                 u.l = 0x04030201L;
10481         for (i = 0; i < sizeof(long); i++)
10482                 printf("%c", u.c[i]+'0');
10483         printf("\n");
10484         exit(0);
10485 }
10486 EOCP
10487         xxx_prompt=y
10488         set try
10489         if eval $compile && ./try > /dev/null; then
10490                 dflt=`./try`
10491                 case "$dflt" in
10492                 [1-4][1-4][1-4][1-4]|12345678|87654321)
10493                         echo "(The test program ran ok.)"
10494                         echo "byteorder=$dflt"
10495                         xxx_prompt=n
10496                         ;;
10497                 ????|????????) echo "(The test program ran ok.)" ;;
10498                 *) echo "(The test program didn't run right for some reason.)" ;;
10499                 esac
10500         else
10501                 dflt='4321'
10502                 cat <<'EOM'
10503 (I can't seem to compile the test program.  Guessing big-endian...)
10504 EOM
10505         fi
10506         case "$xxx_prompt" in
10507         y)
10508                 rp="What is the order of bytes in a long?"
10509                 . ./myread
10510                 byteorder="$ans"
10511                 ;;
10512         *)      byteorder=$dflt
10513                 ;;
10514         esac
10515         ;;
10516 esac
10517 $rm -f try.c try
10518
10519 : how do we catenate cpp tokens here?
10520 echo " "
10521 echo "Checking to see how your cpp does stuff like catenate tokens..." >&4
10522 $cat >cpp_stuff.c <<'EOCP'
10523 #define RCAT(a,b)a/**/b
10524 #define ACAT(a,b)a ## b
10525 RCAT(Rei,ser)
10526 ACAT(Cir,cus)
10527 EOCP
10528 $cppstdin $cppflags $cppminus <cpp_stuff.c >cpp_stuff.out 2>&1
10529 if $contains 'Circus' cpp_stuff.out >/dev/null 2>&1; then
10530         echo "Oh!  Smells like ANSI's been here." >&4
10531         echo "We can catify or stringify, separately or together!"
10532         cpp_stuff=42
10533 elif $contains 'Reiser' cpp_stuff.out >/dev/null 2>&1; then
10534         echo "Ah, yes!  The good old days!" >&4
10535         echo "However, in the good old days we don't know how to stringify and"
10536         echo "catify at the same time."
10537         cpp_stuff=1
10538 else
10539         $cat >&4 <<EOM
10540 Hmm, I don't seem to be able to catenate tokens with your cpp.  You're going
10541 to have to edit the values of CAT[2-5] in config.h...
10542 EOM
10543         cpp_stuff="/* Help! How do we handle cpp_stuff? */*/"
10544 fi
10545 $rm -f cpp_stuff.*
10546
10547 : see if this is a db.h system
10548 set db.h i_db
10549 eval $inhdr
10550
10551 case "$i_db" in
10552 $define)
10553         : Check db version.
10554         echo " "
10555         echo "Checking Berkeley DB version ..." >&4
10556         $cat >try.c <<EOCP
10557 #$d_const HASCONST
10558 #ifndef HASCONST
10559 #define const
10560 #endif
10561 #include <sys/types.h>
10562 #include <stdio.h>
10563 #include <db.h>
10564 main()
10565 {
10566 #ifdef DB_VERSION_MAJOR /* DB version >= 2 */
10567     int Major, Minor, Patch ;
10568     unsigned long Version ;
10569     (void)db_version(&Major, &Minor, &Patch) ;
10570     printf("You have Berkeley DB Version 2 or greater\n");
10571
10572     printf("db.h is from Berkeley DB Version %d.%d.%d\n",
10573                 DB_VERSION_MAJOR, DB_VERSION_MINOR, DB_VERSION_PATCH);
10574     printf("libdb is from Berkeley DB Version %d.%d.%d\n",
10575                 Major, Minor, Patch) ;
10576
10577     /* check that db.h & libdb are compatible */
10578     if (DB_VERSION_MAJOR != Major || DB_VERSION_MINOR != Minor || DB_VERSION_PATCH != Patch) {
10579         printf("db.h and libdb are incompatible\n") ;
10580         exit(3);        
10581     }
10582
10583     printf("db.h and libdb are compatible\n") ;
10584
10585     Version = DB_VERSION_MAJOR * 1000000 + DB_VERSION_MINOR * 1000
10586                 + DB_VERSION_PATCH ;
10587
10588     /* needs to be >= 2.3.4 */
10589     if (Version < 2003004) {
10590     /* if (DB_VERSION_MAJOR == 2 && DB_VERSION_MINOR == 0 && DB_VERSION_PATCH < 5) { */
10591         printf("but Perl needs Berkeley DB 2.3.4 or greater\n") ;
10592         exit(2);        
10593     }
10594
10595     exit(0);
10596 #else
10597 #if defined(_DB_H_) && defined(BTREEMAGIC) && defined(HASHMAGIC)
10598     printf("You have Berkeley DB Version 1\n");
10599     exit(0);    /* DB version < 2: the coast is clear. */
10600 #else
10601     exit(1);    /* <db.h> not Berkeley DB? */
10602 #endif
10603 #endif
10604 }
10605 EOCP
10606         set try
10607         if eval $compile && ./try; then
10608                 echo 'Looks OK.' >&4
10609         else
10610                 echo "I can't use Berkeley DB with your <db.h>.  I'll disable Berkeley DB." >&4
10611                 i_db=$undef
10612                 case " $libs " in
10613                 *"-ldb "*)
10614                         : Remove db from list of libraries to use
10615                         echo "Removing unusable -ldb from library list" >&4
10616                         set `echo X $libs | $sed -e 's/-ldb / /' -e 's/-ldb$//'`
10617                         shift
10618                         libs="$*"
10619                         echo "libs = $libs" >&4
10620                         ;;
10621                 esac
10622         fi
10623         $rm -f try.*
10624         ;;
10625 esac
10626
10627 case "$i_db" in
10628 define)
10629         : Check the return type needed for hash 
10630         echo " "
10631         echo "Checking return type needed for hash for Berkeley DB ..." >&4
10632         $cat >try.c <<EOCP
10633 #$d_const HASCONST
10634 #ifndef HASCONST
10635 #define const
10636 #endif
10637 #include <sys/types.h>
10638 #include <db.h>
10639
10640 #ifndef DB_VERSION_MAJOR
10641 u_int32_t hash_cb (ptr, size)
10642 const void *ptr;
10643 size_t size;
10644 {
10645 }
10646 HASHINFO info;
10647 main()
10648 {
10649         info.hash = hash_cb;
10650 }
10651 #endif
10652 EOCP
10653         if $cc $ccflags -c try.c >try.out 2>&1 ; then
10654                 if $contains warning try.out >>/dev/null 2>&1 ; then
10655                         db_hashtype='int'
10656                 else
10657                         db_hashtype='u_int32_t'
10658                 fi
10659         else
10660                 : XXX Maybe we should just give up here.
10661                 db_hashtype=u_int32_t
10662                 $cat try.out >&4
10663                 echo "Help:  I can't seem to compile the db test program." >&4
10664                 echo "Something's wrong, but I'll assume you use $db_hashtype." >&4
10665         fi
10666         $rm -f try.*
10667         echo "Your version of Berkeley DB uses $db_hashtype for hash."
10668         ;;
10669 *)      db_hashtype=u_int32_t
10670         ;;
10671 esac
10672 case "$i_db" in
10673 define)
10674         : Check the return type needed for prefix 
10675         echo " "
10676         echo "Checking return type needed for prefix for Berkeley DB ..." >&4
10677         cat >try.c <<EOCP
10678 #$d_const HASCONST
10679 #ifndef HASCONST
10680 #define const
10681 #endif
10682 #include <sys/types.h>
10683 #include <db.h>
10684
10685 #ifndef DB_VERSION_MAJOR
10686 size_t prefix_cb (key1, key2)
10687 const DBT *key1;
10688 const DBT *key2;
10689 {
10690 }
10691 BTREEINFO info;
10692 main()
10693 {
10694         info.prefix = prefix_cb;
10695 }
10696 #endif
10697 EOCP
10698         if $cc $ccflags -c try.c  >try.out 2>&1 ; then
10699                 if $contains warning try.out >>/dev/null 2>&1 ; then
10700                         db_prefixtype='int'
10701                 else
10702                         db_prefixtype='size_t'
10703                 fi
10704         else
10705                 db_prefixtype='size_t'
10706                 : XXX Maybe we should just give up here.
10707                 $cat try.out >&4
10708                 echo "Help:  I can't seem to compile the db test program." >&4
10709                 echo "Something's wrong, but I'll assume you use $db_prefixtype." >&4
10710         fi
10711         $rm -f try.*
10712         echo "Your version of Berkeley DB uses $db_prefixtype for prefix."
10713         ;;
10714 *)      db_prefixtype='size_t'
10715         ;;
10716 esac
10717
10718 : check for void type
10719 echo " "
10720 echo "Checking to see how well your C compiler groks the void type..." >&4
10721 case "$voidflags" in
10722 '')
10723         $cat >try.c <<'EOCP'
10724 #if TRY & 1
10725 void sub() {
10726 #else
10727 sub() {
10728 #endif
10729         extern void moo();      /* function returning void */
10730         void (*goo)();          /* ptr to func returning void */
10731 #if TRY & 8
10732         void *hue;              /* generic ptr */
10733 #endif
10734 #if TRY & 2
10735         void (*foo[10])();
10736 #endif
10737
10738 #if TRY & 4
10739         if(goo == moo) {
10740                 exit(0);
10741         }
10742 #endif
10743         exit(0);
10744 }
10745 main() { sub(); }
10746 EOCP
10747         if $cc $ccflags -c -DTRY=$defvoidused try.c >.out 2>&1 ; then
10748                 voidflags=$defvoidused
10749         echo "Good.  It appears to support void to the level $package wants.">&4
10750                 if $contains warning .out >/dev/null 2>&1; then
10751                         echo "However, you might get some warnings that look like this:"
10752                         $cat .out
10753                 fi
10754         else
10755 echo "Hmm, your compiler has some difficulty with void. Checking further..." >&4
10756                 if $cc $ccflags -c -DTRY=1 try.c >/dev/null 2>&1; then
10757                         echo "It supports 1..."
10758                         if $cc $ccflags -c -DTRY=3 try.c >/dev/null 2>&1; then
10759                                 echo "It also supports 2..."
10760                                 if $cc $ccflags -c -DTRY=7 try.c >/dev/null 2>&1; then
10761                                         voidflags=7
10762                                         echo "And it supports 4 but not 8 definitely."
10763                                 else
10764                                         echo "It doesn't support 4..."
10765                                         if $cc $ccflags -c -DTRY=11 try.c >/dev/null 2>&1; then
10766                                                 voidflags=11
10767                                                 echo "But it supports 8."
10768                                         else
10769                                                 voidflags=3
10770                                                 echo "Neither does it support 8."
10771                                         fi
10772                                 fi
10773                         else
10774                                 echo "It does not support 2..."
10775                                 if $cc $ccflags -c -DTRY=13 try.c >/dev/null 2>&1; then
10776                                         voidflags=13
10777                                         echo "But it supports 4 and 8."
10778                                 else
10779                                         if $cc $ccflags -c -DTRY=5 try.c >/dev/null 2>&1; then
10780                                                 voidflags=5
10781                                                 echo "And it supports 4 but has not heard about 8."
10782                                         else
10783                                                 echo "However it supports 8 but not 4."
10784                                         fi
10785                                 fi
10786                         fi
10787                 else
10788                         echo "There is no support at all for void."
10789                         voidflags=0
10790                 fi
10791         fi
10792 esac
10793 case "$voidflags" in
10794 "$defvoidused") ;;
10795 *)      $cat >&4 <<'EOM'
10796   Support flag bits are:
10797     1: basic void declarations.
10798     2: arrays of pointers to functions returning void.
10799     4: operations between pointers to and addresses of void functions.
10800     8: generic void pointers.
10801 EOM
10802         dflt="$voidflags";
10803         rp="Your void support flags add up to what?"
10804         . ./myread
10805         voidflags="$ans"
10806         ;;
10807 esac
10808 $rm -f try.* .out
10809
10810
10811 : How can we generate normalized random numbers ?
10812 echo " "
10813 echo "Looking for a random number function..." >&4
10814 case "$randfunc" in
10815 '')
10816         if set drand48 val -f; eval $csym; $val; then
10817                 dflt="drand48"
10818                 echo "Good, found drand48()." >&4
10819         elif set random val -f; eval $csym; $val; then
10820                 dflt="random"
10821                 echo "OK, found random()." >&4
10822         else
10823                 dflt="rand"
10824                 echo "Yick, looks like I have to use rand()." >&4
10825         fi
10826         echo " "
10827         ;;
10828 *)
10829         dflt="$randfunc"
10830         ;;
10831 esac
10832 cont=true
10833
10834 case "$ccflags" in
10835 *-Dmy_rand=*|*-Dmy_srand=*)
10836         echo "Removing obsolete -Dmy_rand, -Dmy_srand, and -Drandbits from ccflags." >&4
10837         ccflags="`echo $ccflags | sed -e 's/-Dmy_rand=random/ /'`"
10838         ccflags="`echo $ccflags | sed -e 's/-Dmy_srand=srandom/ /'`"
10839         ccflags="`echo $ccflags | sed -e 's/-Drandbits=[0-9][0-9]*/ /'`"
10840         ;;
10841 esac
10842
10843 while $test "$cont"; do
10844         rp="Use which function to generate random numbers?"
10845         . ./myread
10846         if $test "$ans" = "$dflt"; then
10847                 : null
10848         else
10849                 randbits=''
10850         fi
10851         randfunc="$ans"
10852         if set $ans val -f; eval $csym; $val; then
10853                 cont=''
10854         else
10855                 dflt=y
10856                 rp="I cannot find function $ans. Use that name anyway?"
10857                 . ./myread
10858                 dflt=rand
10859                 case "$ans" in
10860                         [yY]*) cont='';;
10861                 esac
10862         fi
10863         case "$cont" in
10864         '')
10865                 case "$randfunc" in
10866                 drand48)
10867                         drand01="drand48()"
10868                         seedfunc="srand48"
10869                         randbits=48
10870                         randseedtype=long
10871                         ;;
10872                 rand|random)
10873                         case "$randbits" in
10874                         '')
10875 echo "Checking to see how many bits your $randfunc() function produces..." >&4
10876                                 $cat >try.c <<EOCP
10877 #$i_unistd I_UNISTD
10878 #$i_stdlib I_STDLIB
10879 #include <stdio.h>
10880 #ifdef I_UNISTD
10881 #  include <unistd.h>
10882 #endif
10883 #ifdef I_STDLIB
10884 #  include <stdlib.h>
10885 #endif
10886 main()
10887 {
10888         register int i;
10889         register unsigned long tmp;
10890         register unsigned long max = 0L;
10891
10892         for (i = 1000; i; i--) {
10893                 tmp = (unsigned long) $randfunc();
10894                 if (tmp > max) max = tmp;
10895         }
10896         for (i = 0; max; i++)
10897                 max /= 2;
10898         printf("%d\n",i);
10899 }
10900 EOCP
10901                                 set try
10902                                 if eval $compile_ok; then
10903                                         dflt=`try`
10904                                 else
10905                                         dflt='?'
10906                                         echo "(I can't seem to compile the test program...)"
10907                                 fi
10908                                 ;;
10909                         *)
10910                                 dflt="$randbits"
10911                                 ;;
10912                         esac
10913                         rp="How many bits does your $randfunc() function produce?"
10914                         . ./myread
10915                         randbits="$ans"
10916                         $rm -f try.c try
10917                         drand01="($randfunc() / (double) ((unsigned long)1 << $randbits))"
10918                         seedfunc="s$randfunc"
10919                         randseedtype=unsigned
10920                         ;;
10921                 *)
10922                         dflt="31"
10923                         rp="How many bits does your $randfunc() function produce?"
10924                         . ./myread
10925                         randbits="$ans"
10926                         seedfunc="s$randfunc"
10927                         drand01="($randfunc() / (double) ((unsigned long)1 << $randbits))"
10928                         if set $seedfunc val -f; eval $csym; $val; then
10929                                 echo "(Using $seedfunc() to seed random generator)"
10930                         else
10931                                 echo "(Warning: no $seedfunc() to seed random generator)"
10932                                 seedfunc=rand
10933                         fi
10934                         randseedtype=unsigned
10935                         ;;
10936                 esac
10937                 ;;
10938         esac
10939 done
10940
10941 echo " "
10942 echo "Determining whether or not we are on an EBCDIC system..." >&4
10943 $cat >tebcdic.c <<'EOM'
10944 int main()
10945 {
10946   if ('M'==0xd4) return 0;
10947   return 1;
10948 }
10949 EOM
10950
10951 val=$undef
10952 set tebcdic
10953 if eval $compile_ok; then
10954         if ./tebcdic; then
10955                 echo "You have EBCDIC." >&4
10956                 val="$define"
10957         else
10958                 echo "Nope, no EBCDIC.  Assuming ASCII or some ISO Latin." >&4
10959         fi
10960 else
10961         echo "I'm unable to compile the test program." >&4
10962         echo "I'll assume ASCII or some ISO Latin." >&4
10963 fi
10964 $rm -f tebcdic.c tebcdic
10965 set ebcdic
10966 eval $setvar
10967
10968 : see what type file positions are declared as in the library
10969 rp="What is the type for file position used by fsetpos()?"
10970 set fpos_t fpostype long stdio.h sys/types.h
10971 eval $typedef_ask
10972
10973 : Store the full pathname to the sed program for use in the C program
10974 full_sed=$sed
10975
10976 : see what type gids are declared as in the kernel
10977 echo " "
10978 echo "Looking for the type for group ids returned by getgid()."
10979 set gid_t gidtype xxx stdio.h sys/types.h
10980 eval $typedef
10981 case "$gidtype" in
10982 xxx)
10983         xxx=`./findhdr sys/user.h`
10984         set `grep 'groups\[NGROUPS\];' "$xxx" 2>/dev/null` unsigned short
10985         case $1 in
10986         unsigned) dflt="$1 $2" ;;
10987         *) dflt="$1" ;;
10988         esac
10989         ;;
10990 *) dflt="$gidtype";;
10991 esac
10992 case "$gidtype" in
10993 gid_t) echo "gid_t found." ;;
10994 *)      rp="What is the type for group ids returned by getgid()?"
10995         . ./myread
10996         gidtype="$ans"
10997         ;;
10998 esac
10999
11000 : see if getgroups exists
11001 set getgroups d_getgrps
11002 eval $inlibc
11003
11004 : see if setgroups exists
11005 set setgroups d_setgrps
11006 eval $inlibc
11007
11008
11009 : Find type of 2nd arg to 'getgroups()' and 'setgroups()'
11010 echo " "
11011 case "$d_getgrps$d_setgrps" in
11012 *define*)
11013         case "$groupstype" in
11014         '') dflt="$gidtype" ;;
11015         *)  dflt="$groupstype" ;;
11016         esac
11017         $cat <<EOM
11018 What type of pointer is the second argument to getgroups() and setgroups()?
11019 Usually this is the same as group ids, $gidtype, but not always.
11020
11021 EOM
11022         rp='What type pointer is the second argument to getgroups() and setgroups()?'
11023         . ./myread
11024         groupstype="$ans"
11025         ;;
11026 *)  groupstype="$gidtype";;
11027 esac
11028
11029 : see what type lseek is declared as in the kernel
11030 rp="What is the type used for lseek's offset on this system?"
11031 set off_t lseektype long stdio.h sys/types.h
11032 eval $typedef_ask
11033
11034 echo " "
11035 $echo $n "Checking to see how big your file offsets are...$c" >&4
11036 $cat >try.c <<EOCP
11037 #include <sys/types.h>
11038 #include <stdio.h>
11039 int main()
11040 {
11041         printf("%d\n", sizeof($lseektype));
11042 }
11043 EOCP
11044 set try
11045 if eval $compile_ok; then
11046         lseeksize=`./try`
11047         $echo " $lseeksize bytes." >&4
11048 else
11049         dflt='4'
11050         echo " "
11051         echo "(I can't seem to compile the test program.  Guessing...)"
11052         rp="What is the size of your file offsets (in bytes)?"
11053         . ./myread
11054         lseeksize="$ans"
11055 fi
11056 $rm -f try.c try
11057
11058 echo " "
11059 echo "Checking if your $make program sets \$(MAKE)..." >&4
11060 case "$make_set_make" in
11061 '')
11062         $sed 's/^X //' > testmake.mak << 'EOF'
11063 Xall:
11064 X       @echo 'maketemp="$(MAKE)"'
11065 EOF
11066         case "`$make -f testmake.mak 2>/dev/null`" in
11067         *maketemp=*) make_set_make='#' ;;
11068         *)      make_set_make="MAKE=$make" ;;
11069         esac
11070         $rm -f testmake.mak
11071         ;;
11072 esac
11073 case "$make_set_make" in
11074 '#') echo "Yup, it does.";;
11075 *) echo "Nope, it doesn't.";;
11076 esac
11077
11078 : see what type is used for mode_t
11079 rp="What is the type used for file modes for system calls (e.g. fchmod())?"
11080 set mode_t modetype int stdio.h sys/types.h
11081 eval $typedef_ask
11082
11083 : define a fucntion to check prototypes
11084 $cat > protochk <<EOSH
11085 $startsh
11086 cc="$cc"
11087 optimize="$optimize"
11088 ccflags="$ccflags"
11089 prototype="$prototype"
11090 define="$define"
11091 rm=$rm
11092 EOSH
11093
11094 $cat >> protochk <<'EOSH'
11095
11096 $rm -f try.c
11097 foo="$1"
11098 shift
11099 while test $# -ge 2; do
11100         case "$1" in
11101                 $define) echo "#include <$2>" >> try.c ;;
11102                 literal) echo "$2" >> try.c ;;
11103         esac
11104     shift 2
11105 done
11106 test "$prototype" = "$define"  && echo '#define CAN_PROTOTYPE' >> try.c
11107 cat >> try.c <<'EOCP'
11108 #ifdef CAN_PROTOTYPE
11109 #define _(args) args
11110 #else
11111 #define _(args) ()
11112 #endif
11113 EOCP
11114 echo "$foo" >> try.c
11115 echo 'int no_real_function_has_this_name _((void)) { return 0; }' >> try.c
11116 $cc $optimize $ccflags -c try.c > /dev/null 2>&1
11117 status=$?
11118 $rm -f try.[co]
11119 exit $status
11120 EOSH
11121 chmod +x protochk
11122 $eunicefix protochk
11123
11124 : see what type is used for size_t
11125 rp="What is the type used for the length parameter for string functions?"
11126 set size_t sizetype 'unsigned int' stdio.h sys/types.h
11127 eval $typedef_ask
11128
11129 : check for type of arguments to gethostbyaddr. 
11130 if test "X$netdb_host_type" = X -o "X$netdb_hlen_type" = X; then
11131         case "$d_gethbyaddr" in
11132         $define)
11133                 $cat <<EOM
11134
11135 Checking to see what type of arguments are accepted by gethostbyaddr().
11136 EOM
11137                 hdrs="$define sys/types.h
11138                         $d_socket sys/socket.h 
11139                         $i_niin netinet/in.h 
11140                         $i_netdb netdb.h
11141                         $i_unistd unistd.h"
11142                 : The first arg can 'char *' or 'void *'
11143                 : The second arg is some of integral type
11144                 for xxx in in_addr_t 'const void *' 'const char *' 'void *' 'char *'; do
11145                         for yyy in size_t long int; do
11146                                 case "$netdb_host_type" in
11147                                 '')     try="extern struct hostent *gethostbyaddr($xxx, $yyy, int);"
11148                                         if ./protochk "$try" $hdrs; then
11149                                                 echo "Your system accepts $xxx for the first arg."
11150                                                 echo "...and $yyy for the second arg."
11151                                                 netdb_host_type="$xxx"
11152                                                 netdb_hlen_type="$yyy"
11153                                         fi
11154                                         ;;
11155                                 esac
11156                         done
11157                 done
11158                 : In case none of those worked, prompt the user.
11159                 case "$netdb_host_type" in
11160                 '')     rp='What is the type for the 1st argument to gethostbyaddr?'
11161                         dflt='char *'
11162                         . ./myread
11163                         netdb_host_type=$ans
11164                         rp='What is the type for the 2nd argument to gethostbyaddr?'
11165                         dflt="$sizetype"
11166                         . ./myread
11167                         netdb_hlen_type=$ans
11168                         ;;
11169                 esac
11170                 ;;
11171         *)      : no gethostbyaddr, so pick harmless defaults
11172                 netdb_host_type='char *'
11173                 netdb_hlen_type="$sizetype"
11174                 ;;
11175         esac
11176         # Remove the "const" if needed. -- but then we'll have a 
11177         # prototype clash!
11178         # netdb_host_type=`echo "$netdb_host_type" | sed 's/^const //'`
11179 fi
11180
11181 : check for type of argument to gethostbyname. 
11182 if test "X$netdb_name_type" = X ; then
11183         case "$d_gethbyname" in
11184         $define)
11185                 $cat <<EOM
11186
11187 Checking to see what type of argument is accepted by gethostbyname().
11188 EOM
11189                 hdrs="$define sys/types.h
11190                         $d_socket sys/socket.h 
11191                         $i_niin netinet/in.h 
11192                         $i_netdb netdb.h
11193                         $i_unistd unistd.h"
11194                 for xxx in "const char *" "char *"; do
11195                         case "$netdb_name_type" in
11196                         '')     try="extern struct hostent *gethostbyname($xxx);"
11197                                 if ./protochk "$try" $hdrs; then
11198                                         echo "Your system accepts $xxx."
11199                                         netdb_name_type="$xxx"
11200                                 fi
11201                                 ;;
11202                         esac
11203                 done
11204                 : In case none of those worked, prompt the user.
11205                 case "$netdb_name_type" in
11206                 '')     rp='What is the type for the 1st argument to gethostbyname?'
11207                         dflt='char *'
11208                         . ./myread
11209                         netdb_name_type=$ans
11210                         ;;
11211                 esac
11212                 ;;
11213         *)      : no gethostbyname, so pick harmless default
11214                 netdb_name_type='char *'
11215                 ;;
11216         esac
11217 fi
11218
11219 : check for type of 1st argument to getnetbyaddr. 
11220 if test "X$netdb_net_type" = X ; then
11221         case "$d_getnbyaddr" in
11222         $define)
11223                 $cat <<EOM
11224
11225 Checking to see what type of 1st argument is accepted by getnetbyaddr().
11226 EOM
11227                 hdrs="$define sys/types.h
11228                         $d_socket sys/socket.h 
11229                         $i_niin netinet/in.h 
11230                         $i_netdb netdb.h
11231                         $i_unistd unistd.h"
11232                 for xxx in in_addr_t "unsigned long" long "unsigned int" int; do
11233                         case "$netdb_net_type" in
11234                         '')     try="extern struct netent *getnetbyaddr($xxx, int);"
11235                                 if ./protochk "$try" $hdrs; then
11236                                         echo "Your system accepts $xxx."
11237                                         netdb_net_type="$xxx"
11238                                 fi
11239                                 ;;
11240                         esac
11241                 done
11242                 : In case none of those worked, prompt the user.
11243                 case "$netdb_net_type" in
11244                 '')     rp='What is the type for the 1st argument to getnetbyaddr?'
11245                         dflt='long'
11246                         . ./myread
11247                         netdb_net_type=$ans
11248                         ;;
11249                 esac
11250                 ;;
11251         *)      : no getnetbyaddr, so pick harmless default
11252                 netdb_net_type='long'
11253                 ;;
11254         esac
11255 fi
11256 : locate the preferred pager for this system
11257 case "$pager" in
11258 '')
11259         dflt=''
11260         case "$pg" in
11261         /*) dflt=$pg;;
11262         esac
11263         case "$more" in
11264         /*) dflt=$more;;
11265         esac
11266         case "$less" in
11267         /*) dflt=$less;;
11268         esac
11269         case "$dflt" in
11270         '') dflt=/usr/ucb/more;;
11271         esac
11272         ;;
11273 *) dflt="$pager";;
11274 esac
11275 echo " "
11276 fn=f/
11277 rp='What pager is used on your system?'
11278 . ./getfile
11279 pager="$ans"
11280
11281 : see what type pids are declared as in the kernel
11282 rp="What is the type of process ids on this system?"
11283 set pid_t pidtype int stdio.h sys/types.h
11284 eval $typedef_ask
11285
11286 : check for length of pointer
11287 echo " "
11288 case "$ptrsize" in
11289 '')
11290         $echo $n "Checking to see how big your pointers are...$c" >&4
11291         if test "$voidflags" -gt 7; then
11292                 echo '#define VOID_PTR char *' > try.c
11293         else
11294                 echo '#define VOID_PTR void *' > try.c
11295         fi
11296         $cat >>try.c <<'EOCP'
11297 #include <stdio.h>
11298 main()
11299 {
11300         printf("%d\n", sizeof(VOID_PTR));
11301         exit(0);
11302 }
11303 EOCP
11304         set try
11305         if eval $compile_ok; then
11306                 ptrsize=`./try`
11307                 $echo " $ptrsize bytes." >&4
11308         else
11309                 dflt='4'
11310                 echo "(I can't seem to compile the test program.  Guessing...)" >&4
11311                 rp="What is the size of a pointer (in bytes)?"
11312                 . ./myread
11313                 ptrsize="$ans"
11314         fi
11315         ;;
11316 esac
11317 $rm -f try.c try
11318
11319 : see if ar generates random libraries by itself
11320 echo " "
11321 echo "Checking how to generate random libraries on your machine..." >&4
11322 echo 'int bar1() { return bar2(); }' > bar1.c
11323 echo 'int bar2() { return 2; }' > bar2.c
11324 $cat > foo.c <<'EOP'
11325 main() { printf("%d\n", bar1()); exit(0); }
11326 EOP
11327 $cc $ccflags -c bar1.c >/dev/null 2>&1
11328 $cc $ccflags -c bar2.c >/dev/null 2>&1
11329 $cc $ccflags -c foo.c >/dev/null 2>&1
11330 $ar rc bar$_a bar2$_o bar1$_o >/dev/null 2>&1
11331 if $cc $ccflags $ldflags -o foobar foo$_o bar$_a $libs > /dev/null 2>&1 &&
11332         ./foobar >/dev/null 2>&1; then
11333         echo "$ar appears to generate random libraries itself."
11334         orderlib=false
11335         ranlib=":"
11336 elif $ar ts bar$_a >/dev/null 2>&1 &&
11337         $cc $ccflags $ldflags -o foobar foo$_o bar$_a $libs > /dev/null 2>&1 &&
11338         ./foobar >/dev/null 2>&1; then
11339                 echo "a table of contents needs to be added with '$ar ts'."
11340                 orderlib=false
11341                 ranlib="$ar ts"
11342 else
11343         case "$ranlib" in
11344         :) ranlib='';;
11345         '')
11346                 ranlib=`./loc ranlib X /usr/bin /bin /usr/local/bin`
11347                 $test -f $ranlib || ranlib=''
11348                 ;;
11349         esac
11350         if $test -n "$ranlib"; then
11351                 echo "your system has '$ranlib'; we'll use that."
11352                 orderlib=false
11353         else
11354                 echo "your system doesn't seem to support random libraries"
11355                 echo "so we'll use lorder and tsort to order the libraries."
11356                 orderlib=true
11357                 ranlib=":"
11358         fi
11359 fi
11360 $rm -f foo* bar* 
11361
11362 : check for type of arguments to select. 
11363 case "$selecttype" in
11364 '') case "$d_select" in
11365         $define)
11366                 $cat <<EOM
11367 Checking to see what type of arguments are accepted by select().
11368 EOM
11369                 hdrs="$define sys/types.h
11370                         $i_systime sys/time.h 
11371                         $i_sysselct sys/select.h
11372                         $d_socket sys/socket.h"
11373                 : The first arg can be int, unsigned, or size_t
11374                 : The last arg may or may not be 'const'
11375                 val=''
11376                 : void pointer has been seen but using that
11377                 : breaks the selectminbits test
11378                 for xxx in 'fd_set *' 'int *'; do
11379                         for nfd in 'int' 'size_t' 'unsigned long' 'unsigned' ; do
11380                                 for tmo in 'struct timeval *' 'const struct timeval *'; do
11381                                         case "$val" in
11382                                         '')     try="extern select _(($nfd, $xxx, $xxx, $xxx, $tmo));"
11383                                                 if ./protochk "$try" $hdrs; then
11384                                                         echo "Your system accepts $xxx."
11385                                                         val="$xxx"
11386                                                 fi
11387                                                 ;;
11388                                         esac
11389                                 done
11390                         done
11391                 done
11392                 case "$val" in
11393                 '')     rp='What is the type for the 2nd, 3rd, and 4th arguments to select?'
11394                         case "$d_fd_set" in
11395                                 $define) dflt="fd_set *" ;;
11396                                 *)              dflt="int *" ;;
11397                         esac
11398                         . ./myread
11399                         val=$ans
11400                         ;;
11401                 esac
11402                 selecttype="$val"
11403                 ;;
11404         *)      : no select, so pick a harmless default
11405                 selecttype='int *'
11406                 ;;
11407         esac
11408         ;;
11409 esac
11410
11411 : check for the select 'width'
11412 case "$selectminbits" in
11413 '') case "$d_select" in
11414         $define)
11415                 $cat <<EOM
11416
11417 Checking to see on how many bits at a time your select() operates...
11418 EOM
11419                 $cat >try.c <<EOCP
11420 #include <sys/types.h>
11421 #$i_time I_TIME
11422 #$i_systime I_SYS_TIME
11423 #$i_systimek I_SYS_TIME_KERNEL
11424 #ifdef I_TIME
11425 #   include <time.h>
11426 #endif
11427 #ifdef I_SYS_TIME
11428 #   ifdef I_SYS_TIME_KERNEL
11429 #       define KERNEL
11430 #   endif
11431 #   include <sys/time.h>
11432 #   ifdef I_SYS_TIME_KERNEL
11433 #       undef KERNEL
11434 #   endif
11435 #endif
11436 #$i_sysselct I_SYS_SELECT
11437 #ifdef I_SYS_SELECT
11438 #include <sys/select.h>
11439 #endif
11440 #include <stdio.h>
11441 $selecttype b;
11442 #define S sizeof(*(b))
11443 #define MINBITS 64
11444 #define NBYTES (S * 8 > MINBITS ? S : MINBITS/8)
11445 #define NBITS  (NBYTES * 8)
11446 int main() {
11447     char s[NBYTES];
11448     struct timeval t;
11449     int i;
11450     FILE* fp;
11451     int fd;
11452
11453     fclose(stdin);
11454     fp = fopen("try.c", "r");
11455     if (fp == 0)
11456       exit(1);
11457     fd = fileno(fp);
11458     if (fd < 0)
11459       exit(2);
11460     b = ($selecttype)s;
11461     for (i = 0; i < NBITS; i++)
11462         FD_SET(i, b);
11463     t.tv_sec  = 0;
11464     t.tv_usec = 0;
11465     select(fd + 1, b, 0, 0, &t);
11466     for (i = NBITS - 1; i > fd && FD_ISSET(i, b); i--);
11467     printf("%d\n", i + 1);
11468     return 0;
11469 }
11470 EOCP
11471                 set try
11472                 if eval $compile_ok; then
11473                         selectminbits=`./try`
11474                         case "$selectminbits" in
11475                         '')     cat >&4 <<EOM
11476 Cannot figure out on how many bits at a time your select() operates.
11477 I'll play safe and guess it is 32 bits.
11478 EOM
11479                                 selectminbits=32
11480                                 bits="32 bits"
11481                                 ;;
11482                         1)      bits="1 bit" ;;
11483                         *)      bits="$selectminbits bits" ;;
11484                         esac
11485                         echo "Your select() operates on $bits at a time." >&4
11486                 else
11487                         rp='What is the minimum number of bits your select() operates on?'
11488                         case "$byteorder" in
11489                         1234|12345678)  dflt=32 ;;
11490                         *)              dflt=1  ;;
11491                         esac
11492                         . ./myread
11493                         val=$ans
11494                         selectminbits="$val"
11495                 fi
11496                 $rm -f try.* try
11497                 ;;
11498         *)      : no select, so pick a harmless default
11499                 selectminbits='32'
11500                 ;;
11501         esac
11502         ;;
11503 esac
11504
11505 : Trace out the files included by signal.h, then look for SIGxxx names.
11506 : Remove SIGARRAYSIZE used by HPUX.
11507 : Remove SIGTYP void lines used by OS2.
11508 xxx=`echo '#include <signal.h>' |
11509         $cppstdin $cppminus $cppflags 2>/dev/null |
11510         $grep '^[       ]*#.*include' | 
11511         $awk "{print \\$$fieldn}" | $sed 's!"!!g' | $sort | $uniq`
11512 : Check this list of files to be sure we have parsed the cpp output ok.
11513 : This will also avoid potentially non-existent files, such 
11514 : as ../foo/bar.h
11515 xxxfiles=''
11516 for xx in $xxx /dev/null ; do
11517         $test -f "$xx" && xxxfiles="$xxxfiles $xx"
11518 done
11519 : If we have found no files, at least try signal.h
11520 case "$xxxfiles" in
11521 '')     xxxfiles=`./findhdr signal.h` ;;
11522 esac
11523 xxx=`awk '
11524 $1 ~ /^#define$/ && $2 ~ /^SIG[A-Z0-9]*$/ && $2 !~ /SIGARRAYSIZE/ && $3 !~ /void/ {
11525         print substr($2, 4, 20)
11526 }
11527 $1 == "#" && $2 ~ /^define$/ && $3 ~ /^SIG[A-Z0-9]*$/ && $3 !~ /SIGARRAYSIZE/ && $4 !~ /void/ {
11528         print substr($3, 4, 20)
11529 }' $xxxfiles`
11530 : Append some common names just in case the awk scan failed.
11531 xxx="$xxx ABRT ALRM BUS CHLD CLD CONT DIL EMT FPE HUP ILL INT IO IOT KILL"
11532 xxx="$xxx LOST PHONE PIPE POLL PROF PWR QUIT SEGV STKFLT STOP SYS TERM TRAP"
11533 xxx="$xxx TSTP TTIN TTOU URG USR1 USR2 USR3 USR4 VTALRM"
11534 xxx="$xxx WINCH WIND WINDOW XCPU XFSZ"
11535 : generate a few handy files for later
11536 $cat > signal.c <<'EOCP'
11537 #include <sys/types.h>
11538 #include <signal.h>
11539 #include <stdio.h>
11540 int main() {
11541
11542 /* Strange style to avoid deeply-nested #if/#else/#endif */
11543 #ifndef NSIG
11544 #  ifdef _NSIG
11545 #    define NSIG (_NSIG)
11546 #  endif
11547 #endif
11548
11549 #ifndef NSIG
11550 #  ifdef SIGMAX
11551 #    define NSIG (SIGMAX+1)
11552 #  endif
11553 #endif
11554
11555 #ifndef NSIG
11556 #  ifdef SIG_MAX
11557 #    define NSIG (SIG_MAX+1)
11558 #  endif
11559 #endif
11560
11561 #ifndef NSIG
11562 #  ifdef MAXSIG
11563 #    define NSIG (MAXSIG+1)
11564 #  endif
11565 #endif
11566
11567 #ifndef NSIG
11568 #  ifdef MAX_SIG
11569 #    define NSIG (MAX_SIG+1)
11570 #  endif
11571 #endif
11572
11573 #ifndef NSIG
11574 #  ifdef SIGARRAYSIZE
11575 #    define NSIG (SIGARRAYSIZE+1) /* Not sure of the +1 */
11576 #  endif
11577 #endif
11578
11579 #ifndef NSIG
11580 #  ifdef _sys_nsig
11581 #    define NSIG (_sys_nsig) /* Solaris 2.5 */
11582 #  endif
11583 #endif
11584
11585 /* Default to some arbitrary number that's big enough to get most
11586    of the common signals.
11587 */
11588 #ifndef NSIG
11589 #    define NSIG 50
11590 #endif
11591
11592 printf("NSIG %d\n", NSIG);
11593
11594 #ifndef JUST_NSIG
11595
11596 EOCP
11597
11598 echo $xxx | $tr ' ' $trnl | $sort | $uniq | $awk '
11599 {
11600         printf "#ifdef SIG"; printf $1; printf "\n"
11601         printf "printf(\""; printf $1; printf " %%d\\n\",SIG";
11602         printf $1; printf ");\n"
11603         printf "#endif\n"
11604 }
11605 END {
11606         printf "#endif /* JUST_NSIG */\n";
11607         printf "}\n";
11608 }
11609 ' >>signal.c
11610 $cat >signal.awk <<'EOP'
11611 BEGIN { ndups = 0 }
11612 $1 ~ /^NSIG$/ { nsig = $2 }
11613 ($1 !~ /^NSIG$/) && (NF == 2) {
11614     if ($2 > maxsig) { maxsig = $2 }
11615     if (sig_name[$2]) {
11616         dup_name[ndups] = $1
11617         dup_num[ndups] = $2
11618         ndups++ 
11619     }
11620     else {
11621         sig_name[$2] = $1
11622         sig_num[$2] = $2
11623     }
11624
11625 }
11626 END { 
11627     if (nsig == 0) { nsig = maxsig + 1 }
11628         for (n = 1; n < nsig; n++) {
11629                 if (sig_name[n]) {
11630                         printf("%s %d\n", sig_name[n], sig_num[n])
11631                 }
11632                 else {
11633                         printf("NUM%d %d\n", n, n) 
11634                 }
11635         }
11636     for (n = 0; n < ndups; n++) {
11637                 printf("%s %d\n", dup_name[n], dup_num[n])
11638     }
11639 }
11640 EOP
11641 $cat >signal_cmd <<EOS
11642 $startsh
11643 if $test -s signal.lst; then
11644     echo "Using your existing signal.lst file"
11645         exit 0
11646 fi
11647 xxx="$xxx"
11648 EOS
11649 $cat >>signal_cmd <<'EOS'
11650
11651 set signal
11652 if eval $compile_ok; then
11653         ./signal$_exe | $sort -n +1 | $uniq | $awk -f signal.awk >signal.lst
11654 else
11655         echo "(I can't seem be able to compile the whole test program)" >&4
11656         echo "(I'll try it in little pieces.)" >&4
11657         set signal -DJUST_NSIG
11658         if eval $compile_ok; then
11659                 ./signal$_exe > signal.nsg
11660                 $cat signal.nsg
11661         else
11662                 echo "I can't seem to figure out how many signals you have." >&4
11663                 echo "Guessing 50." >&4
11664                 echo 'NSIG 50' > signal.nsg
11665         fi
11666         : Now look at all the signal names, one at a time.
11667         for xx in `echo $xxx | $tr ' ' $trnl | $sort | $uniq`; do
11668                 $cat > signal.c <<EOCP
11669 #include <sys/types.h>
11670 #include <signal.h>
11671 #include <stdio.h>
11672 int main() {
11673 printf("$xx %d\n", SIG${xx});
11674 return 0;
11675 }
11676 EOCP
11677                 set signal
11678                 if eval $compile; then
11679                         echo "SIG${xx} found."
11680                         ./signal$_exe  >> signal.ls1
11681                 else
11682                         echo "SIG${xx} NOT found."
11683                 fi
11684         done
11685         if $test -s signal.ls1; then
11686                 $cat signal.nsg signal.ls1 |
11687                         $sort -n +1 | $uniq | $awk -f signal.awk >signal.lst
11688         fi
11689
11690 fi
11691 if $test -s signal.lst; then
11692         :
11693 else
11694         echo "(AAK! I can't compile the test programs -- Guessing)" >&4
11695         echo 'kill -l' >signal
11696         set X `csh -f <signal`
11697         $rm -f signal
11698         shift
11699         case $# in
11700         0) set HUP INT QUIT ILL TRAP ABRT EMT FPE KILL BUS SEGV SYS PIPE ALRM TERM;;
11701         esac
11702         echo $@ | $tr ' ' $trnl | \
11703                 $awk '{ printf $1; printf " %d\n", ++s; }' >signal.lst
11704 fi
11705 $rm -f signal.c signal$_exe signal$_o signal.nsg signal.ls1
11706 EOS
11707 chmod a+x signal_cmd
11708 $eunicefix signal_cmd
11709
11710 : generate list of signal names
11711 echo " "
11712 case "$sig_name_init" in
11713 '') doinit=yes ;;
11714 *)  case "$sig_num_init" in
11715     ''|*,*) doinit=yes ;;
11716     esac ;;
11717 esac
11718 case "$doinit" in
11719 yes)
11720         echo "Generating a list of signal names and numbers..." >&4
11721         . ./signal_cmd
11722         sig_name=`$awk '{printf "%s ", $1}' signal.lst`
11723         sig_name="ZERO $sig_name"
11724         sig_name_init=`$awk 'BEGIN { printf "\"ZERO\", " }
11725                                                 { printf "\"%s\", ", $1 }
11726                                                 END { printf "0\n" }' signal.lst`
11727         sig_num=`$awk '{printf "%d ", $2}' signal.lst`
11728         sig_num="0 $sig_num"
11729         sig_num_init=`$awk 'BEGIN { printf "0, " }
11730                                         { printf "%d, ", $2}
11731                                         END { printf "0\n"}' signal.lst`
11732         ;;
11733 esac
11734 echo "The following signals are available:"
11735 echo " "
11736 echo $sig_name | $awk \
11737 'BEGIN { linelen = 0 }
11738 {
11739         for (i = 1; i <= NF; i++) {
11740                 name = "SIG" $i " "
11741                 linelen = linelen + length(name)
11742                 if (linelen > 70) {
11743                         printf "\n"
11744                         linelen = length(name)
11745                 }
11746                 printf "%s", name
11747         }
11748         printf "\n"
11749 }'
11750 $rm -f signal signal.c signal.awk signal.lst signal_cmd 
11751
11752 : see what type is used for signed size_t
11753 set ssize_t ssizetype int stdio.h sys/types.h
11754 eval $typedef
11755 dflt="$ssizetype"
11756 $cat > ssize.c <<EOM
11757 #include <stdio.h>
11758 #include <sys/types.h>
11759 #define Size_t $sizetype
11760 #define SSize_t $dflt
11761 main()
11762 {
11763         if (sizeof(Size_t) == sizeof(SSize_t))
11764                 printf("$dflt\n");
11765         else if (sizeof(Size_t) == sizeof(int))
11766                 printf("int\n");
11767         else 
11768                 printf("long\n");
11769         exit(0);
11770 }
11771 EOM
11772 echo " "
11773 set ssize
11774 if eval $compile_ok && ./ssize > /dev/null; then
11775         ssizetype=`./ssize`
11776         echo "I'll be using $ssizetype for functions returning a byte count." >&4
11777 else
11778         $cat >&4 <<EOM
11779 Help! I can't compile and run the ssize_t test program: please enlighten me!
11780 (This is probably a misconfiguration in your system or libraries, and
11781 you really ought to fix it.  Still, I'll try anyway.)
11782
11783 I need a type that is the same size as $sizetype, but is guaranteed to
11784 be signed.  Common values are ssize_t, int and long.
11785
11786 EOM
11787         rp="What signed type is the same size as $sizetype?"
11788         . ./myread
11789         ssizetype="$ans"
11790 fi
11791 $rm -f ssize ssize.*
11792
11793 : see what type of char stdio uses.
11794 echo " "
11795 if $contains 'unsigned.*char.*_ptr;' `./findhdr stdio.h` >/dev/null 2>&1 ; then
11796         echo "Your stdio uses unsigned chars." >&4
11797         stdchar="unsigned char"
11798 else
11799         echo "Your stdio uses signed chars." >&4
11800         stdchar="char"
11801 fi
11802
11803 : see if time exists
11804 echo " "
11805 if test "X$d_time" = X -o X"$timetype" = X; then
11806     if set time val -f d_time; eval $csym; $val; then
11807                 echo 'time() found.' >&4
11808                 val="$define"
11809                 rp="What is the type returned by time() on this system?"
11810                 set time_t timetype long stdio.h sys/types.h
11811                 eval $typedef_ask
11812     else
11813                 echo 'time() not found, hope that will do.' >&4
11814                 val="$undef"
11815                 timetype='int';
11816     fi
11817     set d_time
11818     eval $setvar
11819 fi
11820
11821 : see what type uids are declared as in the kernel
11822 echo " "
11823 echo "Looking for the type for user ids returned by getuid()."
11824 set uid_t uidtype xxx stdio.h sys/types.h
11825 eval $typedef
11826 case "$uidtype" in
11827 xxx)
11828         xxx=`./findhdr sys/user.h`
11829         set `grep '_ruid;' "$xxx" 2>/dev/null` unsigned short
11830         case $1 in
11831         unsigned) dflt="$1 $2" ;;
11832         *) dflt="$1" ;;
11833         esac
11834         ;;
11835 *) dflt="$uidtype";;
11836 esac
11837 case "$uidtype" in
11838 uid_t)  echo "uid_t found." ;;
11839 *)      rp="What is the type for user ids returned by getuid()?"
11840         . ./myread
11841         uidtype="$ans"
11842         ;;
11843 esac
11844
11845 : see if dbm.h is available
11846 : see if dbmclose exists
11847 set dbmclose d_dbmclose
11848 eval $inlibc
11849
11850 case "$d_dbmclose" in
11851 $define)
11852         set dbm.h i_dbm
11853         eval $inhdr
11854         case "$i_dbm" in
11855         $define)
11856                 val="$undef"
11857                 set i_rpcsvcdbm
11858                 eval $setvar
11859                 ;;
11860         *)      set rpcsvc/dbm.h i_rpcsvcdbm
11861                 eval $inhdr
11862                 ;;
11863         esac
11864         ;;
11865 *)      echo "We won't be including <dbm.h>"
11866         val="$undef"
11867         set i_dbm
11868         eval $setvar
11869         val="$undef"
11870         set i_rpcsvcdbm
11871         eval $setvar
11872         ;;
11873 esac
11874
11875 : see if this is a sys/file.h system
11876 val=''
11877 set sys/file.h val
11878 eval $inhdr
11879
11880 : do we need to include sys/file.h ?
11881 case "$val" in
11882 "$define")
11883         echo " "
11884         if $h_sysfile; then
11885                 val="$define"
11886                 echo "We'll be including <sys/file.h>." >&4
11887         else
11888                 val="$undef"
11889                 echo "We won't be including <sys/file.h>." >&4
11890         fi
11891         ;;
11892 *)
11893         h_sysfile=false
11894         ;;
11895 esac
11896 set i_sysfile
11897 eval $setvar
11898
11899 : see if fcntl.h is there
11900 val=''
11901 set fcntl.h val
11902 eval $inhdr
11903
11904 : see if we can include fcntl.h
11905 case "$val" in
11906 "$define")
11907         echo " "
11908         if $h_fcntl; then
11909                 val="$define"
11910                 echo "We'll be including <fcntl.h>." >&4
11911         else
11912                 val="$undef"
11913                 if $h_sysfile; then
11914         echo "We don't need to include <fcntl.h> if we include <sys/file.h>." >&4
11915                 else
11916                         echo "We won't be including <fcntl.h>." >&4
11917                 fi
11918         fi
11919         ;;
11920 *)
11921         h_fcntl=false
11922         val="$undef"
11923         ;;
11924 esac
11925 set i_fcntl
11926 eval $setvar
11927
11928 : see if locale.h is available
11929 set locale.h i_locale
11930 eval $inhdr
11931
11932 : see if mach cthreads are available
11933 if test "X$usethreads" = "X$define"; then
11934         set mach/cthreads.h i_machcthr
11935         eval $inhdr
11936 else
11937         i_machcthr="$undef"
11938 fi
11939
11940
11941
11942 : see if this is a math.h system
11943 set math.h i_math
11944 eval $inhdr
11945
11946 : see if ndbm.h is available
11947 set ndbm.h t_ndbm
11948 eval $inhdr
11949 case "$t_ndbm" in
11950 $define)
11951         : see if dbm_open exists
11952         set dbm_open d_dbm_open
11953         eval $inlibc
11954         case "$d_dbm_open" in
11955         $undef)
11956                 t_ndbm="$undef"
11957                 echo "We won't be including <ndbm.h>"
11958                 ;;
11959         esac
11960         ;;
11961 esac
11962 val="$t_ndbm"
11963 set i_ndbm
11964 eval $setvar
11965
11966 : see if net/errno.h is available
11967 val=''
11968 set net/errno.h val
11969 eval $inhdr
11970
11971 : Unfortunately, it causes problems on some systems.  Arrgh.
11972 case "$val" in
11973 $define)
11974         cat > try.c <<'EOM'
11975 #include <stdio.h>
11976 #include <errno.h>
11977 #include <net/errno.h>
11978 int func()
11979 {
11980         return ENOTSOCK;
11981 }
11982 EOM
11983         if $cc $ccflags -c try.c >/dev/null 2>&1; then
11984                 echo "We'll be including <net/errno.h>." >&4
11985         else
11986                 echo "We won't be including <net/errno.h>." >&4
11987                 val="$undef"
11988         fi
11989         $rm -f try.* try
11990         ;;
11991 esac
11992 set i_neterrno
11993 eval $setvar
11994
11995 : see if this is a poll.h system
11996 set poll.h i_poll
11997 eval $inhdr
11998
11999 : get C preprocessor symbols handy
12000 echo " "
12001 $echo $n "Hmm... $c"
12002 echo $al | $tr ' ' $trnl >Cppsym.know
12003 $cat <<EOSS >Cppsym
12004 $startsh
12005 case "\$1" in
12006 -l) list=true
12007         shift
12008         ;;
12009 esac
12010 unknown=''
12011 case "\$list\$#" in
12012 1|2)
12013         for sym do
12014                 if $contains "^\$1$" Cppsym.true >/dev/null 2>&1; then
12015                         exit 0
12016                 elif $contains "^\$1$" Cppsym.know >/dev/null 2>&1; then
12017                         :
12018                 else
12019                         unknown="\$unknown \$sym"
12020                 fi
12021         done
12022         set X \$unknown
12023         shift
12024         ;;
12025 esac
12026 case \$# in
12027 0) exit 1;;
12028 esac
12029 echo \$* | $tr ' ' '$trnl' | $sed -e 's/\(.*\)/\\
12030 #ifdef \1\\
12031 exit 0; _ _ _ _\1\\      \1\\
12032 #endif\\
12033 /' >Cppsym\$\$
12034 echo "exit 1; _ _ _" >>Cppsym\$\$
12035 $cppstdin $cppminus <Cppsym\$\$ | $grep '^exit [01]; _ _'  >Cppsym2\$\$
12036 case "\$list" in
12037 true) $awk 'NF > 5 {print substr(\$6,2,100)}' <Cppsym2\$\$ ;;
12038 *)
12039         sh Cppsym2\$\$
12040         status=\$?
12041         ;;
12042 esac
12043 $rm -f Cppsym\$\$ Cppsym2\$\$
12044 exit \$status
12045 EOSS
12046 chmod +x Cppsym
12047 $eunicefix Cppsym
12048 ./Cppsym -l $al | $sort | $grep -v '^$' >Cppsym.true
12049
12050 : now check the C compiler for additional symbols
12051 $cat >ccsym <<EOS
12052 $startsh
12053 $cat >tmp.c <<EOF
12054 extern int foo;
12055 EOF
12056 for i in \`$cc -v -c tmp.c 2>&1\`
12057 do
12058         case "\$i" in
12059         -D*) echo "\$i" | $sed 's/^-D//';;
12060         -A*) $test "$gccversion" && echo "\$i" | $sed 's/^-A\(.*\)(\(.*\))/\1=\2/';;
12061         esac
12062 done
12063 $rm -f try.c
12064 EOS
12065 chmod +x ccsym
12066 $eunicefix ccsym
12067 ./ccsym > ccsym1.raw
12068 if $test -s ccsym1.raw; then
12069        $sort ccsym1.raw | $uniq >ccsym.raw
12070 else
12071        mv ccsym1.raw ccsym.raw
12072 fi
12073
12074 $awk '/\=/ { print $0; next }
12075         { print $0"=1" }' ccsym.raw >ccsym.list
12076 $awk '{ print $0"=1" }' Cppsym.true >ccsym.true
12077 $comm -13 ccsym.true ccsym.list >ccsym.own
12078 $comm -12 ccsym.true ccsym.list >ccsym.com
12079 $comm -23 ccsym.true ccsym.list >ccsym.cpp
12080 also=''
12081 symbols='symbols'
12082 if $test -z ccsym.raw; then
12083         echo "Your C compiler doesn't seem to define any symbol!" >&4
12084         echo " "
12085         echo "However, your C preprocessor defines the following ones:"
12086         $cat Cppsym.true
12087 else
12088         if $test -s ccsym.com; then
12089                 echo "Your C compiler and pre-processor define these symbols:"
12090                 $sed -e 's/\(.*\)=.*/\1/' ccsym.com
12091                 also='also '
12092                 symbols='ones'
12093                 $test "$silent" || sleep 1
12094         fi
12095         if $test -s ccsym.cpp; then
12096                 $test "$also" && echo " "
12097                 echo "Your C pre-processor ${also}defines the following $symbols:"
12098                 $sed -e 's/\(.*\)=.*/\1/' ccsym.cpp
12099                 also='further '
12100                 $test "$silent" || sleep 1
12101         fi
12102         if $test -s ccsym.own; then
12103                 $test "$also" && echo " "
12104                 echo "Your C compiler ${also}defines the following cpp variables:"
12105                 $sed -e 's/\(.*\)=1/\1/' ccsym.own
12106                 $sed -e 's/\(.*\)=.*/\1/' ccsym.own | $uniq >>Cppsym.true
12107                 $test "$silent" || sleep 1
12108         fi
12109 fi
12110 $rm -f ccsym*
12111
12112 : see if this is a termio system
12113 val="$undef"
12114 val2="$undef"
12115 val3="$undef"
12116 if $test `./findhdr termios.h`; then
12117         set tcsetattr i_termios
12118         eval $inlibc
12119         val3="$i_termios"
12120 fi
12121 echo " "
12122 case "$val3" in
12123 "$define") echo "You have POSIX termios.h... good!" >&4;;
12124 *) if ./Cppsym pyr; then
12125                 case "`/bin/universe`" in
12126                 ucb) if $test `./findhdr sgtty.h`; then
12127                                 val2="$define"
12128                                 echo "<sgtty.h> found." >&4
12129                         else
12130                                 echo "System is pyramid with BSD universe."
12131                                 echo "<sgtty.h> not found--you could have problems." >&4
12132                         fi;;
12133                 *) if $test `./findhdr termio.h`; then
12134                                 val="$define"
12135                                 echo "<termio.h> found." >&4
12136                         else
12137                                 echo "System is pyramid with USG universe."
12138                                 echo "<termio.h> not found--you could have problems." >&4
12139                         fi;;
12140                 esac
12141         elif ./usg; then
12142                 if $test `./findhdr termio.h`; then
12143                         echo "<termio.h> found." >&4
12144                         val="$define"
12145                 elif $test `./findhdr sgtty.h`; then
12146                         echo "<sgtty.h> found." >&4
12147                         val2="$define"
12148                 else
12149 echo "Neither <termio.h> nor <sgtty.h> found--you could have problems." >&4
12150                 fi
12151         else
12152                 if $test `./findhdr sgtty.h`; then
12153                         echo "<sgtty.h> found." >&4
12154                         val2="$define"
12155                 elif $test `./findhdr termio.h`; then
12156                         echo "<termio.h> found." >&4
12157                         val="$define"
12158                 else
12159 echo "Neither <sgtty.h> nor <termio.h> found--you could have problems." >&4
12160                 fi
12161         fi;;
12162 esac
12163 set i_termio; eval $setvar
12164 val=$val2; set i_sgtty; eval $setvar
12165 val=$val3; set i_termios; eval $setvar
12166
12167 : see if stdarg is available
12168 echo " "
12169 if $test `./findhdr stdarg.h`; then
12170         echo "<stdarg.h> found." >&4
12171         valstd="$define"
12172 else
12173         echo "<stdarg.h> NOT found." >&4
12174         valstd="$undef"
12175 fi
12176
12177 : see if varags is available
12178 echo " "
12179 if $test `./findhdr varargs.h`; then
12180         echo "<varargs.h> found." >&4
12181 else
12182         echo "<varargs.h> NOT found, but that's ok (I hope)." >&4
12183 fi
12184
12185 : set up the varargs testing programs
12186 $cat > varargs.c <<EOP
12187 #ifdef I_STDARG
12188 #include <stdarg.h>
12189 #endif
12190 #ifdef I_VARARGS
12191 #include <varargs.h>
12192 #endif
12193
12194 #ifdef I_STDARG
12195 int f(char *p, ...)
12196 #else
12197 int f(va_alist)
12198 va_dcl
12199 #endif
12200 {
12201         va_list ap;
12202 #ifndef I_STDARG
12203         char *p;
12204 #endif
12205 #ifdef I_STDARG
12206         va_start(ap,p);
12207 #else
12208         va_start(ap);
12209         p = va_arg(ap, char *);
12210 #endif
12211         va_end(ap);
12212 }
12213 EOP
12214 $cat > varargs <<EOP
12215 $startsh
12216 if $cc -c $ccflags -D\$1 varargs.c >/dev/null 2>&1; then
12217         echo "true"
12218 else
12219         echo "false"
12220 fi
12221 $rm -f varargs$_o
12222 EOP
12223 chmod +x varargs
12224
12225 : now check which varargs header should be included
12226 echo " "
12227 i_varhdr=''
12228 case "$valstd" in
12229 "$define")
12230         if `./varargs I_STDARG`; then
12231                 val='stdarg.h'
12232         elif `./varargs I_VARARGS`; then
12233                 val='varargs.h'
12234         fi
12235         ;;
12236 *)
12237         if `./varargs I_VARARGS`; then
12238                 val='varargs.h'
12239         fi
12240         ;;
12241 esac
12242 case "$val" in
12243 '')
12244 echo "I could not find the definition for va_dcl... You have problems..." >&4
12245         val="$undef"; set i_stdarg; eval $setvar
12246         val="$undef"; set i_varargs; eval $setvar
12247         ;;
12248 *) 
12249         set i_varhdr
12250         eval $setvar
12251         case "$i_varhdr" in
12252         stdarg.h)
12253                 val="$define"; set i_stdarg; eval $setvar
12254                 val="$undef"; set i_varargs; eval $setvar
12255                 ;;
12256         varargs.h)
12257                 val="$undef"; set i_stdarg; eval $setvar
12258                 val="$define"; set i_varargs; eval $setvar
12259                 ;;
12260         esac
12261         echo "We'll include <$i_varhdr> to get va_dcl definition." >&4;;
12262 esac
12263 $rm -f varargs*
12264
12265 : see if stddef is available
12266 set stddef.h i_stddef
12267 eval $inhdr
12268
12269 : see if sys/access.h is available
12270 set sys/access.h i_sysaccess
12271 eval $inhdr
12272
12273 : see if ioctl defs are in sgtty, termio, sys/filio or sys/ioctl
12274 set sys/filio.h i_sysfilio
12275 eval $inhdr
12276 echo " "
12277 if $test `./findhdr sys/ioctl.h`; then
12278         val="$define"
12279         echo '<sys/ioctl.h> found.' >&4
12280 else
12281         val="$undef"
12282         if $test $i_sysfilio = "$define"; then
12283             echo '<sys/ioctl.h> NOT found.' >&4
12284         else
12285                 $test $i_sgtty = "$define" && xxx="sgtty.h"
12286                 $test $i_termio = "$define" && xxx="termio.h"
12287                 $test $i_termios = "$define" && xxx="termios.h"
12288 echo "No <sys/ioctl.h> found, assuming ioctl args are defined in <$xxx>." >&4
12289         fi
12290 fi
12291 set i_sysioctl
12292 eval $setvar
12293
12294 : see if this is a sys/param system
12295 set sys/param.h i_sysparam
12296 eval $inhdr
12297
12298 : see if sys/resource.h has to be included
12299 set sys/resource.h i_sysresrc
12300 eval $inhdr
12301
12302 : see if sys/security.h is available
12303 set sys/security.h i_syssecrt
12304 eval $inhdr
12305
12306 : see if this is a sys/un.h system
12307 set sys/un.h i_sysun
12308 eval $inhdr
12309
12310 : see if this is a syswait system
12311 set sys/wait.h i_syswait
12312 eval $inhdr
12313
12314 : see if this is an utime system
12315 set utime.h i_utime
12316 eval $inhdr
12317
12318 : see if this is a values.h system
12319 set values.h i_values
12320 eval $inhdr
12321
12322 : see if this is a vfork system
12323 case "$d_vfork" in
12324 "$define")
12325         set vfork.h i_vfork
12326         eval $inhdr
12327         ;;
12328 *)
12329         i_vfork="$undef"
12330         ;;
12331 esac
12332
12333 : see if gdbm.h is available
12334 set gdbm.h t_gdbm
12335 eval $inhdr
12336 case "$t_gdbm" in
12337 $define)
12338         : see if gdbm_open exists
12339         set gdbm_open d_gdbm_open
12340         eval $inlibc
12341         case "$d_gdbm_open" in
12342         $undef)
12343                 t_gdbm="$undef"
12344                 echo "We won't be including <gdbm.h>"
12345                 ;;
12346         esac
12347         ;;
12348 esac
12349 val="$t_gdbm"
12350 set i_gdbm
12351 eval $setvar
12352
12353 echo " "
12354 echo "Looking for extensions..." >&4
12355 tdir=`pwd`
12356 cd $rsrc/ext
12357 : If we are using the old config.sh, known_extensions may contain
12358 : old or inaccurate or duplicate values.
12359 known_extensions=''
12360 nonxs_extensions=''
12361 : We do not use find because it might not be available.
12362 : We do not just use MANIFEST because the user may have dropped
12363 : some additional extensions into the source tree and expect them
12364 : to be built.
12365 for xxx in * ; do
12366         case "$xxx" in
12367         DynaLoader|dynaload) ;;
12368         *)      if $test -f $xxx/$xxx.xs; then
12369                         known_extensions="$known_extensions $xxx"
12370                 elif $test -f $xxx/Makefile.PL; then
12371                         nonxs_extensions="$nonxs_extensions $xxx"
12372                 else
12373                         if $test -d $xxx; then
12374                                 # Look for nested extensions, eg. Devel/Dprof.
12375                                 cd $xxx
12376                                 for yyy in * ; do
12377                                 if $test -f $yyy/$yyy.xs; then
12378                                         known_extensions="$known_extensions $xxx/$yyy"
12379                                 elif $test -f $yyy/Makefile.PL; then
12380                                         nonxs_extensions="$nonxs_extensions $xxx/$yyy"
12381                                 fi
12382                                 done
12383                                 cd ..
12384                         fi
12385                 fi 
12386                 ;;
12387         esac
12388 done
12389 set X $nonxs_extensions
12390 shift
12391 nonxs_extensions="$*"
12392 set X $known_extensions
12393 shift
12394 known_extensions="$*"
12395 cd $tdir
12396
12397 : Now see which are supported on this system.
12398 avail_ext=''
12399 for xxx in $known_extensions ; do
12400         case "$xxx" in
12401         DB_File|db_file)
12402                 case "$i_db" in
12403                 $define) avail_ext="$avail_ext $xxx" ;;
12404                 esac
12405                 ;;
12406         GDBM_File|gdbm_fil)
12407                 case "$i_gdbm" in 
12408                 $define) avail_ext="$avail_ext $xxx" ;;
12409                 esac
12410                 ;;
12411         NDBM_File|ndbm_fil)
12412                 case "$i_ndbm" in
12413                 $define) avail_ext="$avail_ext $xxx" ;;
12414                 esac
12415                 ;;
12416         ODBM_File|odbm_fil) 
12417                 case "${i_dbm}${i_rpcsvcdbm}" in
12418                 *"${define}"*) avail_ext="$avail_ext $xxx" ;;
12419                 esac
12420                 ;;
12421         POSIX|posix)
12422                 case "$useposix" in
12423                 true|define|y) avail_ext="$avail_ext $xxx" ;;
12424                 esac
12425                 ;;
12426         Opcode|opcode)
12427                 case "$useopcode" in
12428                 true|define|y) avail_ext="$avail_ext $xxx" ;;
12429                 esac
12430                 ;;
12431         Socket|socket)
12432                 case "$d_socket" in 
12433                 true|$define|y) avail_ext="$avail_ext $xxx" ;;
12434                 esac
12435                 ;;
12436         Thread|thread)
12437                 case "$usethreads" in 
12438                 true|$define|y) avail_ext="$avail_ext $xxx" ;;
12439                 esac
12440                 ;;
12441         IPC/SysV|ipc/sysv)
12442                 : XXX Do we need a useipcsysv variable here
12443                 case "${d_msg}${d_sem}${d_shm}" in 
12444                 *"${define}"*) avail_ext="$avail_ext $xxx" ;;
12445                 esac
12446                 ;;
12447         *)      avail_ext="$avail_ext $xxx"
12448                 ;;
12449         esac
12450 done
12451
12452 set X $avail_ext
12453 shift
12454 avail_ext="$*"
12455
12456 : Now see which nonxs extensions are supported on this system.
12457 : For now assume all are.
12458 nonxs_ext=''
12459 for xxx in $nonxs_extensions ; do
12460         case "$xxx" in
12461         *)      nonxs_ext="$nonxs_ext $xxx"
12462                 ;;
12463         esac
12464 done
12465
12466 set X $nonxs_ext
12467 shift
12468 nonxs_ext="$*"
12469
12470 case $usedl in
12471 $define)
12472         $cat <<EOM
12473 A number of extensions are supplied with $package.  You may choose to
12474 compile these extensions for dynamic loading (the default), compile
12475 them into the $package executable (static loading), or not include
12476 them at all.  Answer "none" to include no extensions.
12477 Note that DynaLoader is always built and need not be mentioned here.
12478
12479 EOM
12480         case "$dynamic_ext" in
12481         '') dflt="$avail_ext" ;;
12482         *)      dflt="$dynamic_ext"
12483                 # Perhaps we are reusing an old out-of-date config.sh.
12484                 case "$hint" in
12485                 previous)
12486                         if test X"$dynamic_ext" != X"$avail_ext"; then
12487                                 $cat <<EOM
12488 NOTICE:  Your previous config.sh list may be incorrect. 
12489 The extensions now available to you are 
12490         ${avail_ext}
12491 but the default list from your previous config.sh is
12492         ${dynamic_ext} 
12493
12494 EOM
12495                         fi
12496                         ;;
12497                 esac
12498                 ;;
12499         esac
12500         case "$dflt" in
12501         '')     dflt=none;;
12502         esac
12503         rp="What extensions do you wish to load dynamically?"
12504         . ./myread
12505         case "$ans" in
12506         none) dynamic_ext=' ' ;;
12507         *) dynamic_ext="$ans" ;;
12508         esac
12509
12510         case "$static_ext" in
12511         '')
12512                 : Exclude those already listed in dynamic linking
12513                 dflt=''
12514                 for xxx in $avail_ext; do
12515                         case " $dynamic_ext " in
12516                         *" $xxx "*) ;;
12517                         *) dflt="$dflt $xxx" ;;
12518                         esac
12519                 done
12520                 set X $dflt
12521                 shift
12522                 dflt="$*"
12523                 ;;
12524         *)  dflt="$static_ext" 
12525                 ;;
12526         esac
12527
12528         case "$dflt" in
12529         '')     dflt=none;;
12530         esac
12531         rp="What extensions do you wish to load statically?"
12532         . ./myread
12533         case "$ans" in
12534         none) static_ext=' ' ;;
12535         *) static_ext="$ans" ;;
12536         esac
12537         ;;
12538 *)
12539         $cat <<EOM
12540 A number of extensions are supplied with $package.  Answer "none" 
12541 to include no extensions. 
12542 Note that DynaLoader is always built and need not be mentioned here.
12543
12544 EOM
12545         case "$static_ext" in
12546         '') dflt="$avail_ext" ;;
12547         *)      dflt="$static_ext"
12548                 # Perhaps we are reusing an old out-of-date config.sh.
12549                 case "$hint" in
12550                 previous)
12551                         if test X"$static_ext" != X"$avail_ext"; then
12552                                 $cat <<EOM
12553 NOTICE:  Your previous config.sh list may be incorrect. 
12554 The extensions now available to you are 
12555         ${avail_ext}
12556 but the default list from your previous config.sh is
12557         ${static_ext} 
12558
12559 EOM
12560                         fi
12561                         ;;
12562                 esac
12563                 ;;
12564         esac
12565         : Exclude those that are not xs extensions
12566         case "$dflt" in
12567         '')     dflt=none;;
12568         esac
12569         rp="What extensions do you wish to include?"
12570         . ./myread
12571         case "$ans" in
12572         none) static_ext=' ' ;;
12573         *) static_ext="$ans" ;;
12574         esac
12575         ;;
12576 esac
12577
12578 set X $dynamic_ext $static_ext $nonxs_ext
12579 shift
12580 extensions="$*"
12581
12582 : Remove build directory name from cppstdin so it can be used from
12583 : either the present location or the final installed location.
12584 echo " "
12585 : Get out of the UU directory to get correct path name.
12586 cd ..
12587 case "$cppstdin" in
12588 `pwd`/cppstdin)
12589         echo "Stripping down cppstdin path name"
12590         cppstdin=cppstdin
12591         ;;
12592 esac
12593 cd UU
12594
12595 : end of configuration questions
12596 echo " "
12597 echo "End of configuration questions."
12598 echo " "
12599
12600 : back to where it started
12601 if test -d ../UU; then
12602         cd ..
12603 fi
12604
12605 : configuration may be patched via a 'config.over' file
12606 if $test -f config.over; then
12607         echo " "
12608         dflt=y
12609         rp='I see a config.over file.  Do you wish to load it?'
12610         . UU/myread
12611         case "$ans" in
12612         n*) echo "OK, I'll ignore it.";;
12613         *)      . ./config.over
12614                 echo "Configuration override changes have been loaded."
12615                 ;;
12616         esac
12617 fi
12618
12619 : in case they want portability, strip down executable paths
12620 case "$d_portable" in
12621 "$define")
12622         echo " "
12623         echo "Stripping down executable paths..." >&4
12624         for file in $loclist $trylist; do
12625                 if test X$file != Xln -a X$file != Xar -o X$osname != Xos2; then
12626                         eval $file="\$file"
12627                 fi
12628         done
12629         ;;
12630 esac
12631
12632 : create config.sh file
12633 echo " "
12634 echo "Creating config.sh..." >&4
12635 $spitshell <<EOT >config.sh
12636 $startsh
12637 #
12638 # This file was produced by running the Configure script. It holds all the
12639 # definitions figured out by Configure. Should you modify one of these values,
12640 # do not forget to propagate your changes by running "Configure -der". You may
12641 # instead choose to run each of the .SH files by yourself, or "Configure -S".
12642 #
12643
12644 # Package name      : $package
12645 # Source directory  : $src
12646 # Configuration time: $cf_time
12647 # Configured by     : $cf_by
12648 # Target system     : $myuname
12649
12650 Author='$Author'
12651 Date='$Date'
12652 Header='$Header'
12653 Id='$Id'
12654 Locker='$Locker'
12655 Log='$Log'
12656 Mcc='$Mcc'
12657 RCSfile='$RCSfile'
12658 Revision='$Revision'
12659 Source='$Source'
12660 State='$State'
12661 _a='$_a'
12662 _exe='$_exe'
12663 _o='$_o'
12664 afs='$afs'
12665 alignbytes='$alignbytes'
12666 ansi2knr='$ansi2knr'
12667 aphostname='$aphostname'
12668 apiversion='$apiversion'
12669 ar='$ar'
12670 archlib='$archlib'
12671 archlibexp='$archlibexp'
12672 archname64='$archname64'
12673 archname='$archname'
12674 archobjs='$archobjs'
12675 awk='$awk'
12676 baserev='$baserev'
12677 bash='$bash'
12678 bin='$bin'
12679 binexp='$binexp'
12680 bison='$bison'
12681 byacc='$byacc'
12682 byteorder='$byteorder'
12683 c='$c'
12684 castflags='$castflags'
12685 cat='$cat'
12686 cc='$cc'
12687 cccdlflags='$cccdlflags'
12688 ccdlflags='$ccdlflags'
12689 ccflags='$ccflags'
12690 cf_by='$cf_by'
12691 cf_email='$cf_email'
12692 cf_time='$cf_time'
12693 chgrp='$chgrp'
12694 chmod='$chmod'
12695 chown='$chown'
12696 clocktype='$clocktype'
12697 comm='$comm'
12698 compress='$compress'
12699 contains='$contains'
12700 cp='$cp'
12701 cpio='$cpio'
12702 cpp='$cpp'
12703 cpp_stuff='$cpp_stuff'
12704 cppflags='$cppflags'
12705 cpplast='$cpplast'
12706 cppminus='$cppminus'
12707 cpprun='$cpprun'
12708 cppstdin='$cppstdin'
12709 cryptlib='$cryptlib'
12710 csh='$csh'
12711 d_Gconvert='$d_Gconvert'
12712 d_access='$d_access'
12713 d_accessx='$d_accessx'
12714 d_alarm='$d_alarm'
12715 d_archlib='$d_archlib'
12716 d_attribut='$d_attribut'
12717 d_bcmp='$d_bcmp'
12718 d_bcopy='$d_bcopy'
12719 d_bsd='$d_bsd'
12720 d_bsdgetpgrp='$d_bsdgetpgrp'
12721 d_bsdsetpgrp='$d_bsdsetpgrp'
12722 d_bzero='$d_bzero'
12723 d_casti32='$d_casti32'
12724 d_castneg='$d_castneg'
12725 d_charvspr='$d_charvspr'
12726 d_chown='$d_chown'
12727 d_chroot='$d_chroot'
12728 d_chsize='$d_chsize'
12729 d_closedir='$d_closedir'
12730 d_cmsghdr_s='$d_cmsghdr_s'
12731 d_const='$d_const'
12732 d_crypt='$d_crypt'
12733 d_csh='$d_csh'
12734 d_cuserid='$d_cuserid'
12735 d_dbl_dig='$d_dbl_dig'
12736 d_dbmclose64='$d_dbmclose64'
12737 d_dbminit64='$d_dbminit64'
12738 d_delete64='$d_delete64'
12739 d_difftime='$d_difftime'
12740 d_dirent64_s='$d_dirent64_s'
12741 d_dirnamlen='$d_dirnamlen'
12742 d_dlerror='$d_dlerror'
12743 d_dlopen='$d_dlopen'
12744 d_dlsymun='$d_dlsymun'
12745 d_dosuid='$d_dosuid'
12746 d_drand48proto='$d_drand48proto'
12747 d_dup2='$d_dup2'
12748 d_eaccess='$d_eaccess'
12749 d_endgrent='$d_endgrent'
12750 d_endhent='$d_endhent'
12751 d_endnent='$d_endnent'
12752 d_endpent='$d_endpent'
12753 d_endpwent='$d_endpwent'
12754 d_endsent='$d_endsent'
12755 d_eofnblk='$d_eofnblk'
12756 d_eunice='$d_eunice'
12757 d_fchmod='$d_fchmod'
12758 d_fchown='$d_fchown'
12759 d_fcntl='$d_fcntl'
12760 d_fd_macros='$d_fd_macros'
12761 d_fd_set='$d_fd_set'
12762 d_fds_bits='$d_fds_bits'
12763 d_fetch64='$d_fetch64'
12764 d_fgetpos64='$d_fgetpos64'
12765 d_fgetpos='$d_fgetpos'
12766 d_firstkey64='$d_firstkey64'
12767 d_flexfnam='$d_flexfnam'
12768 d_flock64_s='$d_flock64_s'
12769 d_flock='$d_flock'
12770 d_fopen64='$d_fopen64'
12771 d_fork='$d_fork'
12772 d_fpathconf='$d_fpathconf'
12773 d_freopen64='$d_freopen64'
12774 d_fseek64='$d_fseek64'
12775 d_fseeko64='$d_fseeko64'
12776 d_fseeko='$d_fseeko'
12777 d_fsetpos64='$d_fsetpos64'
12778 d_fsetpos='$d_fsetpos'
12779 d_fstat64='$d_fstat64'
12780 d_ftell64='$d_ftell64'
12781 d_ftello64='$d_ftello64'
12782 d_ftello='$d_ftello'
12783 d_ftime='$d_ftime'
12784 d_ftruncate64='$d_ftruncate64'
12785 d_getgrent='$d_getgrent'
12786 d_getgrps='$d_getgrps'
12787 d_gethbyaddr='$d_gethbyaddr'
12788 d_gethbyname='$d_gethbyname'
12789 d_gethent='$d_gethent'
12790 d_gethname='$d_gethname'
12791 d_gethostprotos='$d_gethostprotos'
12792 d_getlogin='$d_getlogin'
12793 d_getnbyaddr='$d_getnbyaddr'
12794 d_getnbyname='$d_getnbyname'
12795 d_getnent='$d_getnent'
12796 d_getnetprotos='$d_getnetprotos'
12797 d_getpbyname='$d_getpbyname'
12798 d_getpbynumber='$d_getpbynumber'
12799 d_getpent='$d_getpent'
12800 d_getpgid='$d_getpgid'
12801 d_getpgrp2='$d_getpgrp2'
12802 d_getpgrp='$d_getpgrp'
12803 d_getppid='$d_getppid'
12804 d_getprior='$d_getprior'
12805 d_getprotoprotos='$d_getprotoprotos'
12806 d_getpwent='$d_getpwent'
12807 d_getsbyname='$d_getsbyname'
12808 d_getsbyport='$d_getsbyport'
12809 d_getsent='$d_getsent'
12810 d_getservprotos='$d_getservprotos'
12811 d_gettimeod='$d_gettimeod'
12812 d_gnulibc='$d_gnulibc'
12813 d_grpasswd='$d_grpasswd'
12814 d_htonl='$d_htonl'
12815 d_index='$d_index'
12816 d_inetaton='$d_inetaton'
12817 d_ino64t='$d_ino64t'
12818 d_int64t='$d_int64t'
12819 d_iovec_s='$d_iovec_s'
12820 d_isascii='$d_isascii'
12821 d_killpg='$d_killpg'
12822 d_lchown='$d_lchown'
12823 d_link='$d_link'
12824 d_locconv='$d_locconv'
12825 d_lockf64='$d_lockf64'
12826 d_lockf='$d_lockf'
12827 d_longdbl='$d_longdbl'
12828 d_longlong='$d_longlong'
12829 d_lseek64='$d_lseek64'
12830 d_lstat64='$d_lstat64'
12831 d_lstat='$d_lstat'
12832 d_mblen='$d_mblen'
12833 d_mbstowcs='$d_mbstowcs'
12834 d_mbtowc='$d_mbtowc'
12835 d_memcmp='$d_memcmp'
12836 d_memcpy='$d_memcpy'
12837 d_memmove='$d_memmove'
12838 d_memset='$d_memset'
12839 d_mkdir='$d_mkdir'
12840 d_mkfifo='$d_mkfifo'
12841 d_mktime='$d_mktime'
12842 d_msg='$d_msg'
12843 d_msg_ctrunc='$d_msg_ctrunc'
12844 d_msg_dontroute='$d_msg_dontroute'
12845 d_msg_oob='$d_msg_oob'
12846 d_msg_peek='$d_msg_peek'
12847 d_msg_proxy='$d_msg_proxy'
12848 d_msgctl='$d_msgctl'
12849 d_msgget='$d_msgget'
12850 d_msghdr_s='$d_msghdr_s'
12851 d_msgrcv='$d_msgrcv'
12852 d_msgsnd='$d_msgsnd'
12853 d_mymalloc='$d_mymalloc'
12854 d_nextkey64='$d_nextkey64'
12855 d_nice='$d_nice'
12856 d_off64t='$d_off64t'
12857 d_old_pthread_create_joinable='$d_old_pthread_create_joinable'
12858 d_oldpthreads='$d_oldpthreads'
12859 d_oldsock='$d_oldsock'
12860 d_open3='$d_open3'
12861 d_open64='$d_open64'
12862 d_opendir64='$d_opendir64'
12863 d_pathconf='$d_pathconf'
12864 d_pause='$d_pause'
12865 d_phostname='$d_phostname'
12866 d_pipe='$d_pipe'
12867 d_poll='$d_poll'
12868 d_portable='$d_portable'
12869 d_pthread_yield='$d_pthread_yield'
12870 d_pwage='$d_pwage'
12871 d_pwchange='$d_pwchange'
12872 d_pwclass='$d_pwclass'
12873 d_pwcomment='$d_pwcomment'
12874 d_pwexpire='$d_pwexpire'
12875 d_pwgecos='$d_pwgecos'
12876 d_pwpasswd='$d_pwpasswd'
12877 d_pwquota='$d_pwquota'
12878 d_readdir64='$d_readdir64'
12879 d_readdir='$d_readdir'
12880 d_readlink='$d_readlink'
12881 d_readv='$d_readv'
12882 d_recvmsg='$d_recvmsg'
12883 d_rename='$d_rename'
12884 d_rewinddir='$d_rewinddir'
12885 d_rmdir='$d_rmdir'
12886 d_safebcpy='$d_safebcpy'
12887 d_safemcpy='$d_safemcpy'
12888 d_sanemcmp='$d_sanemcmp'
12889 d_sched_yield='$d_sched_yield'
12890 d_scm_rights='$d_scm_rights'
12891 d_seekdir64='$d_seekdir64'
12892 d_seekdir='$d_seekdir'
12893 d_select='$d_select'
12894 d_sem='$d_sem'
12895 d_semctl='$d_semctl'
12896 d_semctl_semid_ds='$d_semctl_semid_ds'
12897 d_semctl_semun='$d_semctl_semun'
12898 d_semget='$d_semget'
12899 d_semop='$d_semop'
12900 d_sendmsg='$d_sendmsg'
12901 d_setegid='$d_setegid'
12902 d_seteuid='$d_seteuid'
12903 d_setgrent='$d_setgrent'
12904 d_setgrps='$d_setgrps'
12905 d_sethent='$d_sethent'
12906 d_setlinebuf='$d_setlinebuf'
12907 d_setlocale='$d_setlocale'
12908 d_setnent='$d_setnent'
12909 d_setpent='$d_setpent'
12910 d_setpgid='$d_setpgid'
12911 d_setpgrp2='$d_setpgrp2'
12912 d_setpgrp='$d_setpgrp'
12913 d_setprior='$d_setprior'
12914 d_setpwent='$d_setpwent'
12915 d_setregid='$d_setregid'
12916 d_setresgid='$d_setresgid'
12917 d_setresuid='$d_setresuid'
12918 d_setreuid='$d_setreuid'
12919 d_setrgid='$d_setrgid'
12920 d_setruid='$d_setruid'
12921 d_setsent='$d_setsent'
12922 d_setsid='$d_setsid'
12923 d_setvbuf='$d_setvbuf'
12924 d_sfio='$d_sfio'
12925 d_shm='$d_shm'
12926 d_shmat='$d_shmat'
12927 d_shmatprototype='$d_shmatprototype'
12928 d_shmctl='$d_shmctl'
12929 d_shmdt='$d_shmdt'
12930 d_shmget='$d_shmget'
12931 d_sigaction='$d_sigaction'
12932 d_sigsetjmp='$d_sigsetjmp'
12933 d_socket='$d_socket'
12934 d_sockpair='$d_sockpair'
12935 d_stat64='$d_stat64'
12936 d_statblks='$d_statblks'
12937 d_stdio_cnt_lval='$d_stdio_cnt_lval'
12938 d_stdio_ptr_lval='$d_stdio_ptr_lval'
12939 d_stdiobase='$d_stdiobase'
12940 d_stdstdio='$d_stdstdio'
12941 d_store64='$d_store64'
12942 d_strchr='$d_strchr'
12943 d_strcoll='$d_strcoll'
12944 d_strctcpy='$d_strctcpy'
12945 d_strerrm='$d_strerrm'
12946 d_strerror='$d_strerror'
12947 d_strtod='$d_strtod'
12948 d_strtol='$d_strtol'
12949 d_strtoul='$d_strtoul'
12950 d_strxfrm='$d_strxfrm'
12951 d_suidsafe='$d_suidsafe'
12952 d_symlink='$d_symlink'
12953 d_syscall='$d_syscall'
12954 d_sysconf='$d_sysconf'
12955 d_sysernlst='$d_sysernlst'
12956 d_syserrlst='$d_syserrlst'
12957 d_system='$d_system'
12958 d_tcgetpgrp='$d_tcgetpgrp'
12959 d_tcsetpgrp='$d_tcsetpgrp'
12960 d_telldir64='$d_telldir64'
12961 d_telldir='$d_telldir'
12962 d_time='$d_time'
12963 d_times='$d_times'
12964 d_tmpfile64='$d_tmpfile64'
12965 d_truncate64='$d_truncate64'
12966 d_truncate='$d_truncate'
12967 d_tzname='$d_tzname'
12968 d_umask='$d_umask'
12969 d_uname='$d_uname'
12970 d_union_semun='$d_union_semun'
12971 d_vfork='$d_vfork'
12972 d_void_closedir='$d_void_closedir'
12973 d_voidsig='$d_voidsig'
12974 d_voidtty='$d_voidtty'
12975 d_volatile='$d_volatile'
12976 d_vprintf='$d_vprintf'
12977 d_wait4='$d_wait4'
12978 d_waitpid='$d_waitpid'
12979 d_wcstombs='$d_wcstombs'
12980 d_wctomb='$d_wctomb'
12981 d_writev='$d_writev'
12982 d_xenix='$d_xenix'
12983 date='$date'
12984 db_hashtype='$db_hashtype'
12985 db_prefixtype='$db_prefixtype'
12986 defvoidused='$defvoidused'
12987 direntrytype='$direntrytype'
12988 dlext='$dlext'
12989 dlsrc='$dlsrc'
12990 doublesize='$doublesize'
12991 drand01='$drand01'
12992 dynamic_ext='$dynamic_ext'
12993 eagain='$eagain'
12994 ebcdic='$ebcdic'
12995 echo='$echo'
12996 egrep='$egrep'
12997 emacs='$emacs'
12998 eunicefix='$eunicefix'
12999 exe_ext='$exe_ext'
13000 expr='$expr'
13001 extensions='$extensions'
13002 find='$find'
13003 firstmakefile='$firstmakefile'
13004 flex='$flex'
13005 fpostype='$fpostype'
13006 freetype='$freetype'
13007 full_csh='$full_csh'
13008 full_sed='$full_sed'
13009 gccversion='$gccversion'
13010 gidtype='$gidtype'
13011 glibpth='$glibpth'
13012 grep='$grep'
13013 groupcat='$groupcat'
13014 groupstype='$groupstype'
13015 gzip='$gzip'
13016 h_fcntl='$h_fcntl'
13017 h_sysfile='$h_sysfile'
13018 hint='$hint'
13019 hostcat='$hostcat'
13020 huge='$huge'
13021 i_arpainet='$i_arpainet'
13022 i_bsdioctl='$i_bsdioctl'
13023 i_db='$i_db'
13024 i_dbm='$i_dbm'
13025 i_dirent='$i_dirent'
13026 i_dld='$i_dld'
13027 i_dlfcn='$i_dlfcn'
13028 i_fcntl='$i_fcntl'
13029 i_float='$i_float'
13030 i_gdbm='$i_gdbm'
13031 i_grp='$i_grp'
13032 i_inttypes='$i_inttypes'
13033 i_limits='$i_limits'
13034 i_locale='$i_locale'
13035 i_machcthr='$i_machcthr'
13036 i_malloc='$i_malloc'
13037 i_math='$i_math'
13038 i_memory='$i_memory'
13039 i_ndbm='$i_ndbm'
13040 i_netdb='$i_netdb'
13041 i_neterrno='$i_neterrno'
13042 i_niin='$i_niin'
13043 i_poll='$i_poll'
13044 i_pwd='$i_pwd'
13045 i_rpcsvcdbm='$i_rpcsvcdbm'
13046 i_sfio='$i_sfio'
13047 i_sgtty='$i_sgtty'
13048 i_stdarg='$i_stdarg'
13049 i_stddef='$i_stddef'
13050 i_stdlib='$i_stdlib'
13051 i_string='$i_string'
13052 i_sysaccess='$i_sysaccess'
13053 i_sysdir='$i_sysdir'
13054 i_sysfile='$i_sysfile'
13055 i_sysfilio='$i_sysfilio'
13056 i_sysin='$i_sysin'
13057 i_sysioctl='$i_sysioctl'
13058 i_sysndir='$i_sysndir'
13059 i_sysparam='$i_sysparam'
13060 i_sysresrc='$i_sysresrc'
13061 i_syssecrt='$i_syssecrt'
13062 i_sysselct='$i_sysselct'
13063 i_syssockio='$i_syssockio'
13064 i_sysstat='$i_sysstat'
13065 i_systime='$i_systime'
13066 i_systimek='$i_systimek'
13067 i_systimes='$i_systimes'
13068 i_systypes='$i_systypes'
13069 i_sysuio='$i_sysuio'
13070 i_sysun='$i_sysun'
13071 i_syswait='$i_syswait'
13072 i_termio='$i_termio'
13073 i_termios='$i_termios'
13074 i_time='$i_time'
13075 i_unistd='$i_unistd'
13076 i_utime='$i_utime'
13077 i_values='$i_values'
13078 i_varargs='$i_varargs'
13079 i_varhdr='$i_varhdr'
13080 i_vfork='$i_vfork'
13081 ignore_versioned_solibs='$ignore_versioned_solibs'
13082 incpath='$incpath'
13083 inews='$inews'
13084 installarchlib='$installarchlib'
13085 installbin='$installbin'
13086 installman1dir='$installman1dir'
13087 installman3dir='$installman3dir'
13088 installprivlib='$installprivlib'
13089 installscript='$installscript'
13090 installsitearch='$installsitearch'
13091 installsitelib='$installsitelib'
13092 intsize='$intsize'
13093 known_extensions='$known_extensions'
13094 ksh='$ksh'
13095 large='$large'
13096 ld='$ld'
13097 lddlflags='$lddlflags'
13098 ldflags='$ldflags'
13099 less='$less'
13100 lib_ext='$lib_ext'
13101 libc='$libc'
13102 libperl='$libperl'
13103 libpth='$libpth'
13104 libs='$libs'
13105 libswanted='$libswanted'
13106 line='$line'
13107 lint='$lint'
13108 lkflags='$lkflags'
13109 ln='$ln'
13110 lns='$lns'
13111 locincpth='$locincpth'
13112 loclibpth='$loclibpth'
13113 longdblsize='$longdblsize'
13114 longlongsize='$longlongsize'
13115 longsize='$longsize'
13116 lp='$lp'
13117 lpr='$lpr'
13118 ls='$ls'
13119 lseeksize='$lseeksize'
13120 lseektype='$lseektype'
13121 mail='$mail'
13122 mailx='$mailx'
13123 make='$make'
13124 make_set_make='$make_set_make'
13125 mallocobj='$mallocobj'
13126 mallocsrc='$mallocsrc'
13127 malloctype='$malloctype'
13128 man1dir='$man1dir'
13129 man1direxp='$man1direxp'
13130 man1ext='$man1ext'
13131 man3dir='$man3dir'
13132 man3direxp='$man3direxp'
13133 man3ext='$man3ext'
13134 medium='$medium'
13135 mips='$mips'
13136 mips_type='$mips_type'
13137 mkdir='$mkdir'
13138 models='$models'
13139 modetype='$modetype'
13140 more='$more'
13141 mv='$mv'
13142 myarchname='$myarchname'
13143 mydomain='$mydomain'
13144 myhostname='$myhostname'
13145 myuname='$myuname'
13146 n='$n'
13147 netdb_hlen_type='$netdb_hlen_type'
13148 netdb_host_type='$netdb_host_type'
13149 netdb_name_type='$netdb_name_type'
13150 netdb_net_type='$netdb_net_type'
13151 nm='$nm'
13152 nm_opt='$nm_opt'
13153 nm_so_opt='$nm_so_opt'
13154 nonxs_ext='$nonxs_ext'
13155 nroff='$nroff'
13156 o_nonblock='$o_nonblock'
13157 obj_ext='$obj_ext'
13158 old_pthread_create_joinable='$old_pthread_create_joinable'
13159 optimize='$optimize'
13160 orderlib='$orderlib'
13161 osname='$osname'
13162 osvers='$osvers'
13163 package='$package'
13164 pager='$pager'
13165 passcat='$passcat'
13166 patchlevel='$patchlevel'
13167 path_sep='$path_sep'
13168 perl='$perl'
13169 perladmin='$perladmin'
13170 perlpath='$perlpath'
13171 pg='$pg'
13172 phostname='$phostname'
13173 pidtype='$pidtype'
13174 plibpth='$plibpth'
13175 pmake='$pmake'
13176 pr='$pr'
13177 prefix='$prefix'
13178 prefixexp='$prefixexp'
13179 privlib='$privlib'
13180 privlibexp='$privlibexp'
13181 prototype='$prototype'
13182 ptrsize='$ptrsize'
13183 randbits='$randbits'
13184 randfunc='$randfunc'
13185 randseedtype='$randseedtype'
13186 ranlib='$ranlib'
13187 rd_nodata='$rd_nodata'
13188 rm='$rm'
13189 rmail='$rmail'
13190 runnm='$runnm'
13191 sched_yield='$sched_yield'
13192 scriptdir='$scriptdir'
13193 scriptdirexp='$scriptdirexp'
13194 sed='$sed'
13195 seedfunc='$seedfunc'
13196 selectminbits='$selectminbits'
13197 selecttype='$selecttype'
13198 sendmail='$sendmail'
13199 sh='$sh'
13200 shar='$shar'
13201 sharpbang='$sharpbang'
13202 shmattype='$shmattype'
13203 shortsize='$shortsize'
13204 shrpenv='$shrpenv'
13205 shsharp='$shsharp'
13206 sig_name='$sig_name'
13207 sig_name_init='$sig_name_init'
13208 sig_num='$sig_num'
13209 sig_num_init='$sig_num_init'
13210 signal_t='$signal_t'
13211 sitearch='$sitearch'
13212 sitearchexp='$sitearchexp'
13213 sitelib='$sitelib'
13214 sitelibexp='$sitelibexp'
13215 sizetype='$sizetype'
13216 sleep='$sleep'
13217 smail='$smail'
13218 small='$small'
13219 so='$so'
13220 sockethdr='$sockethdr'
13221 socketlib='$socketlib'
13222 sort='$sort'
13223 spackage='$spackage'
13224 spitshell='$spitshell'
13225 split='$split'
13226 src='$src'
13227 ssizetype='$ssizetype'
13228 startperl='$startperl'
13229 startsh='$startsh'
13230 static_ext='$static_ext'
13231 stdchar='$stdchar'
13232 stdio_base='$stdio_base'
13233 stdio_bufsiz='$stdio_bufsiz'
13234 stdio_cnt='$stdio_cnt'
13235 stdio_filbuf='$stdio_filbuf'
13236 stdio_ptr='$stdio_ptr'
13237 strings='$strings'
13238 submit='$submit'
13239 subversion='$subversion'
13240 sysman='$sysman'
13241 tail='$tail'
13242 tar='$tar'
13243 tbl='$tbl'
13244 tee='$tee'
13245 test='$test'
13246 timeincl='$timeincl'
13247 timetype='$timetype'
13248 touch='$touch'
13249 tr='$tr'
13250 trnl='$trnl'
13251 troff='$troff'
13252 uidtype='$uidtype'
13253 uname='$uname'
13254 uniq='$uniq'
13255 use64bits='$use64bits'
13256 usedl='$usedl'
13257 usemultiplicity='$usemultiplicity'
13258 usemymalloc='$usemymalloc'
13259 usenm='$usenm'
13260 useopcode='$useopcode'
13261 useperlio='$useperlio'
13262 useposix='$useposix'
13263 usesfio='$usesfio'
13264 useshrplib='$useshrplib'
13265 usethreads='$usethreads'
13266 usevfork='$usevfork'
13267 usrinc='$usrinc'
13268 uuname='$uuname'
13269 version='$version'
13270 vi='$vi'
13271 voidflags='$voidflags'
13272 xlibpth='$xlibpth'
13273 zcat='$zcat'
13274 zip='$zip'
13275 EOT
13276
13277 : Add in command line options if available
13278 $test -f UU/cmdline.opt && $cat UU/cmdline.opt >> config.sh
13279
13280 : add special variables
13281 $test -f $src/patchlevel.h && \
13282 awk '/^#define/ {printf "%s=%s\n",$2,$3}' $src/patchlevel.h >>config.sh
13283 echo "CONFIG=true" >>config.sh
13284
13285 : propagate old symbols
13286 if $test -f UU/config.sh; then
13287         <UU/config.sh sort | uniq >UU/oldconfig.sh
13288         sed -n 's/^\([a-zA-Z_0-9]*\)=.*/\1/p' config.sh config.sh UU/oldconfig.sh |\
13289         sort | uniq -u >UU/oldsyms
13290         set X `cat UU/oldsyms`
13291         shift
13292         case $# in
13293         0) ;;
13294         *)
13295                 cat <<EOM
13296 Hmm...You had some extra variables I don't know about...I'll try to keep 'em...
13297 EOM
13298                 echo "# Variables propagated from previous config.sh file." >>config.sh
13299                 for sym in `cat UU/oldsyms`; do
13300                         echo "    Propagating $hint variable "'$'"$sym..."
13301                         eval 'tmp="$'"${sym}"'"'
13302                         echo "$tmp" | \
13303                                 sed -e "s/'/'\"'\"'/g" -e "s/^/$sym='/" -e "s/$/'/" >>config.sh
13304                 done
13305                 ;;
13306         esac
13307 fi
13308
13309 : Finish up by extracting the .SH files
13310 case "$alldone" in
13311 exit)
13312         $rm -rf UU
13313         echo "Done."
13314         exit 0
13315         ;;
13316 cont)
13317         ;;
13318 '')
13319         dflt=''
13320         nostick=true
13321         $cat <<EOM
13322
13323 If you'd like to make any changes to the config.sh file before I begin
13324 to configure things, do it as a shell escape now (e.g. !vi config.sh).
13325
13326 EOM
13327         rp="Press return or use a shell escape to edit config.sh:"
13328         . UU/myread
13329         nostick=''
13330         case "$ans" in
13331         '') ;;
13332         *) : in case they cannot read
13333                 sh 1>&4 -c "$ans";;
13334         esac
13335         ;;
13336 esac
13337
13338 : if this fails, just run all the .SH files by hand
13339 . ./config.sh
13340
13341 echo " "
13342 exec 1>&4
13343 . ./UU/extract
13344
13345 if $contains '^depend:' [Mm]akefile >/dev/null 2>&1; then
13346         dflt=y
13347         case "$silent" in
13348         true) ;;
13349         *)
13350                 $cat <<EOM
13351
13352 Now you need to generate make dependencies by running "$make depend".
13353 You might prefer to run it in background: "$make depend > makedepend.out &"
13354 It can take a while, so you might not want to run it right now.
13355
13356 EOM
13357                 ;;
13358         esac
13359         rp="Run $make depend now?"
13360         . UU/myread
13361         case "$ans" in
13362         y*)
13363                 $make depend && echo "Now you must run a $make."
13364                 ;;
13365         *)
13366                 echo "You must run '$make depend' then '$make'."
13367                 ;;
13368         esac
13369 elif test -f [Mm]akefile; then
13370         echo " "
13371         echo "Now you must run a $make."
13372 else
13373         echo "Done."
13374 fi
13375
13376 if $test -f Policy.sh; then
13377     $cat <<EOM
13378
13379 If you compile $package on a different machine or from a different object
13380 directory, copy the Policy.sh file from this object directory to the
13381 new one before you run Configure -- this will help you with most of
13382 the policy defaults.
13383
13384 EOM
13385 fi
13386 if $test -f config.msg; then
13387     echo "Hmm.  I also noted the following information while running:"
13388     echo " "
13389     $cat config.msg >&4
13390     $rm -f config.msg
13391 fi
13392 $rm -f kit*isdone ark*isdone
13393 $rm -rf UU
13394
13395 : End of Configure
13396